From 40a7e1db5ed687e78730e6fea8f640e7a4672e03 Mon Sep 17 00:00:00 2001 From: sh Date: Tue, 28 Jul 2026 13:38:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A1=8C=E4=B8=9A=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/CompanyController.java | 4 + .../cms/service/impl/IndustryServiceImpl.java | 10 +++ .../cms/util/dict/IndustryCacheUtil.java | 85 +++++++++++++++++++ .../common/core/domain/entity/Company.java | 4 + 4 files changed, 103 insertions(+) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/dict/IndustryCacheUtil.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java index 84e2bfb..157b64d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import com.ruoyi.cms.util.dict.IndustryCacheUtil; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; @@ -62,6 +63,9 @@ public class CompanyController extends BaseController } startPage(); List list = companyService.selectCompanyList(company); +// list.forEach(item -> { +// item.setIndustryName(IndustryCacheUtil.getIndustryMatchName(item.getIndustryCode())); +// }); return getDataTable(list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/IndustryServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/IndustryServiceImpl.java index de60b98..2fe7beb 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/IndustryServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/IndustryServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.cms.constant.CommonConstant; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.util.IndustryUtils; +import com.ruoyi.cms.util.dict.IndustryCacheUtil; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.Industry; import com.ruoyi.common.core.domain.entity.Industry; @@ -22,6 +23,8 @@ import org.springframework.stereotype.Service; import com.ruoyi.cms.mapper.IndustryMapper; import com.ruoyi.cms.service.IIndustryService; +import javax.annotation.PostConstruct; + /** * 行业Service业务层处理 * @@ -34,6 +37,13 @@ public class IndustryServiceImpl extends ServiceImpl im @Autowired private IndustryMapper industryMapper; +// @PostConstruct +// public void initIndustryCache() { +// List list = industryMapper.selectIndustryList(new Industry()); +// // 推送数据到缓存工具类 +// IndustryCacheUtil.refreshCache(list); +// } + /** * 查询行业 * diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/dict/IndustryCacheUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/dict/IndustryCacheUtil.java new file mode 100644 index 0000000..46b532b --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/dict/IndustryCacheUtil.java @@ -0,0 +1,85 @@ +package com.ruoyi.cms.util.dict; + +import cn.hutool.core.util.StrUtil; +import com.ruoyi.common.core.domain.entity.Industry; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 行业转换 + */ +public class IndustryCacheUtil { + + private static final Map INDUSTRY_ID_MAP = new ConcurrentHashMap<>(); + private static final Map INDUSTRY_REMARK_CODE_MAP = new ConcurrentHashMap<>(); + // 国标行业最小有效编码长度 + private static final int MIN_CODE_LENGTH = 2; + + /** + * 对外统一获取行业名称入口 + * @param rawInput 企业传来的industryId(可能Long数字 / "H6100"字符串) + */ + public static String getIndustryMatchName(Object rawInput) { + if (rawInput == null) { + return ""; + } + String rawCode = StrUtil.trim(rawInput.toString()).toUpperCase(); + if (StrUtil.isBlank(rawCode)) { + return ""; + } + + // ========== 规则1:优先尝试【industryId 数字精确匹配】 ========== + Industry industry = INDUSTRY_ID_MAP.get(rawCode); + if (industry != null) { + return industry.getIndustryName(); + } + + // ========== 规则2:数字匹配失败,走remark字母编码逻辑 ========== + // 先精确匹配remark编码 + industry = INDUSTRY_REMARK_CODE_MAP.get(rawCode); + if (industry != null) { + return industry.getIndustryName(); + } + + // 判断是否包含字母:只有带字母才向上截断匹配父编码 + boolean hasLetter = rawCode.chars().anyMatch(Character::isLetter); + if (!hasLetter) { + // 纯数字,数字库和字母库都找不到,直接返回 + return ""; + } + + // 循环截断后缀向上查找 + String tempCode = rawCode; + while (tempCode.length() > MIN_CODE_LENGTH) { + tempCode = tempCode.substring(0, tempCode.length() - 1); + industry = INDUSTRY_REMARK_CODE_MAP.get(tempCode); + if (industry != null) { + return industry.getIndustryName(); + } + } + return ""; + } + + public static void refreshCache(List list) { + INDUSTRY_ID_MAP.clear(); + INDUSTRY_REMARK_CODE_MAP.clear(); + + for (Industry item : list) { + if (item.getIndustryId() != null) { + String idKey = item.getIndustryId().toString(); + INDUSTRY_ID_MAP.putIfAbsent(idKey, item); + } + if (StrUtil.isNotBlank(item.getRemark())) { + String remarkKey = item.getRemark().toUpperCase(); + INDUSTRY_REMARK_CODE_MAP.putIfAbsent(remarkKey, item); + } + } + } + + public static void clearCache() { + INDUSTRY_ID_MAP.clear(); + INDUSTRY_REMARK_CODE_MAP.clear(); + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java index b805f24..6de835e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java @@ -133,6 +133,10 @@ public class Company extends BaseEntity @ApiModelProperty("行业code") private String industryCode; + @TableField(exist = false) + @ApiModelProperty("行业code") + private String industryName; + /** * 岗位列表 */