cf-framework:dict移到starter-excel、升级easyexcel版本

This commit is contained in:
gaoqr
2025-07-17 17:02:51 +08:00
parent 9aaf40dc3b
commit 25e573d2c9
14 changed files with 35 additions and 140 deletions
@@ -20,11 +20,24 @@
<artifactId>cf-common</artifactId>
</dependency>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- RPC 远程调用相关 -->
<dependency>
<groupId>com.cf.imes</groupId>
<artifactId>cf-spring-boot-starter-rpc</artifactId>
<optional>true</optional>
</dependency>
<!-- 业务组件 -->
<dependency>
<groupId>com.cf.imes</groupId>
<artifactId>cf-spring-boot-starter-biz-dict</artifactId>
<optional>true</optional> <!-- 如果希望使用 @DictFormat 注解,需要引入该依赖 -->
<artifactId>cf-module-system-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- Web 相关 -->
@@ -45,6 +58,16 @@
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId> <!-- 解决 https://github.com/alibaba/easyexcel/issues/3954 问题 -->
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,18 @@
package com.cf.imes.framework.dict.config;
import com.cf.imes.framework.dict.core.util.DictFrameworkUtils;
import com.cf.imes.module.system.api.dict.DictDataApi;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
@AutoConfiguration
public class ChenfengDictAutoConfiguration {
@Bean
@SuppressWarnings("InstantiationOfUtilityClass")
public DictFrameworkUtils dictUtils(DictDataApi dictDataApi) {
DictFrameworkUtils.init(dictDataApi);
return new DictFrameworkUtils();
}
}
@@ -0,0 +1,15 @@
package com.cf.imes.framework.dict.config;
import com.cf.imes.module.system.api.dict.DictDataApi;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 字典用到 Feign 的配置项
*
* @author 晨丰科技
*/
@AutoConfiguration
@EnableFeignClients(clients = DictDataApi.class) // 主要是引入相关的 API 服务
public class ChenfengDictRpcAutoConfiguration {
}
@@ -0,0 +1,4 @@
/**
* 占位
*/
package com.cf.imes.framework.dict.core;
@@ -0,0 +1,77 @@
package com.cf.imes.framework.dict.core.util;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.util.cache.CacheUtils;
import com.cf.imes.module.system.api.dict.DictDataApi;
import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
/**
* 字典工具类
*
* @author 晨丰科技
*/
@Slf4j
public class DictFrameworkUtils {
private static DictDataApi dictDataApi;
private static final DictDataRespDTO DICT_DATA_NULL = new DictDataRespDTO();
/**
* 针对 {@link #getDictDataLabel(String, String)} 的缓存
*/
private static final LoadingCache<Pair<String, String>, DictDataRespDTO> GET_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache(
Duration.ofMinutes(10L), // 过期时间 1 分钟
new CacheLoader<>() {
@Override
public DictDataRespDTO load(Pair<String, String> key) {
return ObjectUtil.defaultIfNull(dictDataApi.getDictData(key.getKey(), key.getValue()).getCheckedData(),
DICT_DATA_NULL);
}
});
/**
* 针对 {@link #parseDictDataValue(String, String)} 的缓存
*/
private static final LoadingCache<Pair<String, String>, DictDataRespDTO> PARSE_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache(
Duration.ofMinutes(10L), // 过期时间 1 分钟
new CacheLoader<>() {
@Override
public DictDataRespDTO load(Pair<String, String> key) {
return ObjectUtil.defaultIfNull(dictDataApi.parseDictData(key.getKey(), key.getValue()).getCheckedData(),
DICT_DATA_NULL);
}
});
public static void init(DictDataApi dictDataApi) {
DictFrameworkUtils.dictDataApi = dictDataApi;
log.info("[init][初始化 DictFrameworkUtils 成功]");
}
@SneakyThrows
public static String getDictDataLabel(String dictType, Integer value) {
return GET_DICT_DATA_CACHE.get(new Pair<>(dictType, String.valueOf(value))).getLabel();
}
@SneakyThrows
public static String getDictDataLabel(String dictType, String value) {
return GET_DICT_DATA_CACHE.get(new Pair<>(dictType, value)).getLabel();
}
@SneakyThrows
public static String parseDictDataValue(String dictType, String label) {
return PARSE_DICT_DATA_CACHE.get(new Pair<>(dictType, label)).getValue();
}
}
@@ -0,0 +1,6 @@
/**
* 字典数据模块,提供 {@link com.cf.imes.framework.dict.core.util.DictFrameworkUtils} 工具类
*
* 通过将字典缓存在内存中,保证性能
*/
package com.cf.imes.framework.dict;
@@ -0,0 +1,2 @@
com.cf.imes.framework.dict.config.ChenfengDictRpcAutoConfiguration
com.cf.imes.framework.dict.config.ChenfengDictAutoConfiguration