From 92537d8adac16c3726cbfc2142aeeb9e78943ad1 Mon Sep 17 00:00:00 2001
From: gulongcheng <474084054@qq.com>
Date: Tue, 3 Feb 2026 19:08:31 +0800
Subject: [PATCH] =?UTF-8?q?fix:=E6=96=87=E4=BB=B6=E6=89=93=E6=A0=87?=
=?UTF-8?q?=E7=AD=BE=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 80 ++++++++
.../common/annotation/AutoFillDictTags.java | 55 +++++
.../common/aspect/DictTagsAutoFillAspect.java | 163 +++++++++++++++
.../sdm/common/entity/bo/DataDictionary.java | 2 +-
.../req/data/GetSimulationTaskFileReq.java | 31 +++
.../entity/req/data/UploadFilesReq.java | 30 ++-
.../export/FileAnalysisExportExcelParam.java | 31 +++
.../common/entity/req/system/DictTagReq.java | 7 +
.../impl/system/SysConfigFeignClientImpl.java | 7 +-
.../inter/system/ISysConfigFeignClient.java | 5 +-
.../com/sdm/common/utils/DictTagHelper.java | 192 ++++++++++++++++++
data/pom.xml | 12 +-
.../controller/DataAnalysisController.java | 3 +
.../data/controller/DataFileController.java | 4 +
.../controller/DataOverviewController.java | 2 +
.../DataStorageAnalysisController.java | 2 +
.../com/sdm/data/model/req/FileSearchReq.java | 31 +++
.../sdm/data/model/req/QueryBigFileReq.java | 45 +++-
.../service/impl/DataAnalysisServiceImpl.java | 1 -
.../service/impl/DataStorageAnalysisImpl.java | 60 ++++++
.../impl/MinioFileIDataFileServiceImpl.java | 103 +++++-----
.../resources/mapper/FileStorageMapper.xml | 10 +-
.../controller/SimulationRunController.java | 6 +
.../project/controller/YAModelController.java | 1 +
.../sdm/project/model/req/KeyResultReq.java | 33 +++
.../SimulationSystemConfigController.java | 6 +-
.../system/dao/SimulationSystemMapper.java | 6 +-
.../ISimulationSystemConfigService.java | 2 +-
.../SimulationSystemConfigServiceImpl.java | 37 +++-
29 files changed, 881 insertions(+), 86 deletions(-)
create mode 100644 .gitignore
create mode 100644 common/src/main/java/com/sdm/common/annotation/AutoFillDictTags.java
create mode 100644 common/src/main/java/com/sdm/common/aspect/DictTagsAutoFillAspect.java
create mode 100644 common/src/main/java/com/sdm/common/utils/DictTagHelper.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..bc7e164d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,80 @@
+/outbridge/target/classes/com/sdm/outbridge/config/CommonConfig$YamlPropertySourceFactory.class
+/outbridge/target/classes/com/sdm/outbridge/config/CommonConfig.class
+/outbridge/target/classes/com/sdm/outbridge/config/DataSourcePreWarmer.class
+/outbridge/target/classes/com/sdm/outbridge/config/SecondMybatisPlusConfig.class
+/outbridge/target/classes/com/sdm/outbridge/config/ThirdMybatisPlusConfig.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVMainPlanDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVPdtToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProductionLineToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectBatchToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectResourcePlanDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectStationExcepTionToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectStationPlanToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectStationToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVProjectToDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVTodoEmulationInfoDM.class
+/outbridge/target/classes/com/sdm/outbridge/entity/LyricVUserToDm.class
+/outbridge/target/classes/com/sdm/outbridge/mode/FreelinkAndDingdingInformReq.class
+/outbridge/target/classes/com/sdm/outbridge/mode/FreeLinkMsg.class
+/outbridge/target/classes/com/sdm/outbridge/mode/FreeLinkParamDto.class
+/outbridge/target/classes/com/sdm/outbridge/mode/FreeLinkResp.class
+/outbridge/target/classes/com/sdm/outbridge/mode/GetProcessDataCondition.class
+/outbridge/target/classes/com/sdm/outbridge/mode/GetProcessDataReq.class
+/outbridge/target/classes/com/sdm/outbridge/mode/GetUserListReq.class
+/outbridge/target/classes/com/sdm/outbridge/mode/HkCloudSignObject.class
+/outbridge/target/classes/com/sdm/outbridge/mode/HkUploadFileReq.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricAttachmentInfo.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricExceptionModel.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricMainPlanInfo.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricProjectBaseInfo.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricProjectBatchInfo.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricProjectPdt.class
+/outbridge/target/classes/com/sdm/outbridge/mode/LyricTodoEntity.class
+/outbridge/target/classes/com/sdm/outbridge/mode/SimulationTaskSyncExBo.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/DynamicSqlExecutorMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVMainPlanDMMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVPdtDmMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProductionLineToDmMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProjectBatchToDMMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProjectResourcePlanDMMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProjectStationPlanToDmMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProjectStationToDmMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVProjectToDmMapper.class
+/outbridge/target/classes/com/sdm/outbridge/secondDao/LyricVTodoInfoMapper.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/FreeLinkServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVMainPlanDMServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVPdtDmServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProductionLineToDmServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectBatchToDMServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectResourcePlanDMServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectStationExcepTionToDMServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectStationPlanToDmServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectStationToDmServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVProjectToDmServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/impl/lyric/LyricVTodoInfoServiceImpl.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/IFreeLinkService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricIntegrateService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVMainPlanDMService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVPdtDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProductionLineToDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectBatchToDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectResourcePlanDMService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectStationExcepTionToDMService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectStationPlanToDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectStationToDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVProjectToDmService.class
+/outbridge/target/classes/com/sdm/outbridge/service/lyric/LyricVTodoInfoService.class
+/outbridge/target/classes/com/sdm/outbridge/thirdDao/DynamicSqlThirdExecutorMapper.class
+/outbridge/target/classes/com/sdm/outbridge/thirdDao/LyricVProjectStationExcepTionToDMMapper.class
+/outbridge/target/classes/META-INF/spring-configuration-metadata.json
+/outbridge/target/classes/thirdDaoMapper/LyricVProjectStationExcepTionToDMMapper.xml
+/outbridge/target/classes/common-dev-65.yml
+/outbridge/target/classes/common-dev-190.yml
+/outbridge/target/classes/common-local.yml
+/outbridge/target/classes/common-lyric.yml
+/outbridge/target/classes/common-test.yml
+/outbridge/target/classes/common-yian.yml
+/outbridge/target/maven-archiver/pom.properties
+/outbridge/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/outbridge/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/outbridge/target/outbridge-0.0.1-SNAPSHOT.jar
diff --git a/common/src/main/java/com/sdm/common/annotation/AutoFillDictTags.java b/common/src/main/java/com/sdm/common/annotation/AutoFillDictTags.java
new file mode 100644
index 00000000..f3258340
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/annotation/AutoFillDictTags.java
@@ -0,0 +1,55 @@
+package com.sdm.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 自动填充字典标签注解
+ * 可标注在 Controller 方法、Service 方法或 Service 类上,会自动查询并填充请求参数中的字典标签ID
+ *
+ * 使用场景:
+ * 1. Controller 层:标注在接口方法上,处理前端请求参数
+ * 2. Service 层:标注在服务方法上,处理内部调用的参数
+ * 3. Service 类:标注在类上,该类所有 public 方法都会自动处理
+ *
+ * 使用示例:
+ *
+ * // 示例1:Controller 方法
+ * @AutoFillDictTags
+ * @PostMapping("/upload")
+ * public SdmResponse upload(@RequestBody UploadFilesReq req) {
+ * // req.getDictTagIdsCache() 已经被自动填充
+ * return service.upload(req);
+ * }
+ *
+ * // 示例2:Service 方法
+ * @AutoFillDictTags
+ * public SdmResponse processData(UploadFilesReq req) {
+ * // req.getDictTagIdsCache() 已经被自动填充
+ * Map> tagIds = req.getDictTagIdsCache();
+ * }
+ *
+ * // 示例3:Service 类(推荐用于内部调用较多的场景)
+ * @Service
+ * @AutoFillDictTags
+ * public class DataProcessService {
+ * // 该类所有方法的 dictTags 参数都会自动处理
+ * }
+ *
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface AutoFillDictTags {
+
+ /**
+ * 指定要处理的参数名称,默认处理所有参数
+ * @return 参数名称数组
+ */
+ String[] paramNames() default {};
+
+ /**
+ * 是否忽略空的dictTags,默认true
+ * @return true表示dictTags为空时不处理,false表示仍然尝试处理
+ */
+ boolean ignoreEmpty() default true;
+}
diff --git a/common/src/main/java/com/sdm/common/aspect/DictTagsAutoFillAspect.java b/common/src/main/java/com/sdm/common/aspect/DictTagsAutoFillAspect.java
new file mode 100644
index 00000000..c0080ab4
--- /dev/null
+++ b/common/src/main/java/com/sdm/common/aspect/DictTagsAutoFillAspect.java
@@ -0,0 +1,163 @@
+package com.sdm.common.aspect;
+
+import com.sdm.common.annotation.AutoFillDictTags;
+import com.sdm.common.utils.DictTagHelper;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 字典标签自动填充切面
+ * 拦截标注了 @AutoFillDictTags 注解的方法或类,自动查询并填充字典标签ID
+ *
+ * 支持的拦截方式:
+ * 1. 方法级别:@AutoFillDictTags 标注在具体方法上
+ * 2. 类级别:@AutoFillDictTags 标注在类上,拦截该类所有 public 方法
+ */
+@Slf4j
+@Aspect
+@Component
+@Order(1) // 设置较高优先级,确保在业务逻辑执行前处理
+public class DictTagsAutoFillAspect {
+
+ @Resource
+ private DictTagHelper dictTagHelper;
+
+ /**
+ * 前置通知:在方法执行前自动填充字典标签
+ * 支持两种拦截方式:
+ * 1. 方法级别:@annotation(autoFillDictTags) - 拦截标注了 @AutoFillDictTags 的方法
+ * 2. 类级别:@within(com.sdm.common.annotation.AutoFillDictTags) - 拦截标注了 @AutoFillDictTags 的类中的所有 public 方法
+ */
+ @Before("@annotation(autoFillDictTags) || @within(com.sdm.common.annotation.AutoFillDictTags)")
+ public void autoFillDictTags(JoinPoint joinPoint, AutoFillDictTags autoFillDictTags) {
+ try {
+ // 如果是类级别注解,autoFillDictTags 为 null,需要从类上获取
+ if (autoFillDictTags == null) {
+ Class> targetClass = joinPoint.getTarget().getClass();
+ autoFillDictTags = targetClass.getAnnotation(AutoFillDictTags.class);
+ }
+
+ // 如果仍然为 null,说明注解在接口上,使用默认配置
+ final boolean ignoreEmpty = autoFillDictTags != null ? autoFillDictTags.ignoreEmpty() : true;
+ final Set targetParamNames = new HashSet<>();
+ if (autoFillDictTags != null && autoFillDictTags.paramNames().length > 0) {
+ targetParamNames.addAll(Arrays.asList(autoFillDictTags.paramNames()));
+ }
+
+ Object[] args = joinPoint.getArgs();
+ if (args == null || args.length == 0) {
+ return;
+ }
+
+ MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+ Method method = signature.getMethod();
+ String[] parameterNames = signature.getParameterNames();
+
+ // 遍历所有参数
+ for (int i = 0; i < args.length; i++) {
+ Object arg = args[i];
+ if (arg == null) {
+ continue;
+ }
+
+ String paramName = i < parameterNames.length ? parameterNames[i] : "arg" + i;
+
+ // 如果指定了参数名称,检查是否匹配
+ if (!targetParamNames.isEmpty() && !targetParamNames.contains(paramName)) {
+ continue;
+ }
+
+ // 检查参数是否包含dictTags字段
+ if (!hasDictTagsField(arg)) {
+ continue;
+ }
+
+ // 如果设置了ignoreEmpty,检查dictTags是否为空
+ if (ignoreEmpty && isDictTagsEmpty(arg)) {
+ continue;
+ }
+
+ // 执行自动填充
+ try {
+ dictTagHelper.queryAndCacheDictTagIds(arg);
+ log.debug("Auto-filled dict tags for parameter '{}' in method {}.{}",
+ paramName,
+ method.getDeclaringClass().getSimpleName(),
+ method.getName());
+ } catch (Exception e) {
+ log.warn("Failed to auto-fill dict tags for parameter '{}': {}",
+ paramName, e.getMessage());
+ // 继续执行,不影响主流程
+ }
+ }
+ } catch (Exception e) {
+ log.error("Error in DictTagsAutoFillAspect: {}", e.getMessage(), e);
+ // 即使切面出错,也不影响主流程
+ }
+ }
+
+ /**
+ * 检查对象是否包含dictTags字段
+ */
+ private boolean hasDictTagsField(Object obj) {
+ try {
+ Field field = findField(obj.getClass(), "dictTags");
+ return field != null;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * 检查dictTags是否为空
+ */
+ private boolean isDictTagsEmpty(Object obj) {
+ try {
+ Field field = findField(obj.getClass(), "dictTags");
+ if (field == null) {
+ return true;
+ }
+ field.setAccessible(true);
+ Object value = field.get(obj);
+
+ if (value == null) {
+ return true;
+ }
+
+ if (value instanceof List) {
+ return ((List>) value).isEmpty();
+ }
+
+ return false;
+ } catch (Exception e) {
+ return true;
+ }
+ }
+
+ /**
+ * 在类及其父类中查找字段
+ */
+ private Field findField(Class> clazz, String fieldName) {
+ while (clazz != null && clazz != Object.class) {
+ try {
+ return clazz.getDeclaredField(fieldName);
+ } catch (NoSuchFieldException e) {
+ clazz = clazz.getSuperclass();
+ }
+ }
+ return null;
+ }
+}
diff --git a/common/src/main/java/com/sdm/common/entity/bo/DataDictionary.java b/common/src/main/java/com/sdm/common/entity/bo/DataDictionary.java
index 5b2a951e..c5d0b8af 100644
--- a/common/src/main/java/com/sdm/common/entity/bo/DataDictionary.java
+++ b/common/src/main/java/com/sdm/common/entity/bo/DataDictionary.java
@@ -8,7 +8,7 @@ public class DataDictionary extends BaseBean {
{
init();
}
- public int id;
+ public Integer id;
public String uuid;
public String dictName;
public String dictValue;
diff --git a/common/src/main/java/com/sdm/common/entity/req/data/GetSimulationTaskFileReq.java b/common/src/main/java/com/sdm/common/entity/req/data/GetSimulationTaskFileReq.java
index 4d6b725f..c7f2dca9 100644
--- a/common/src/main/java/com/sdm/common/entity/req/data/GetSimulationTaskFileReq.java
+++ b/common/src/main/java/com/sdm/common/entity/req/data/GetSimulationTaskFileReq.java
@@ -1,12 +1,15 @@
package com.sdm.common.entity.req.data;
+import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sdm.common.entity.enums.FileBizTypeEnum;
+import com.sdm.common.entity.req.system.DictTagReq;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
+import java.util.Map;
@Data
public class GetSimulationTaskFileReq extends BaseReq {
@@ -16,6 +19,34 @@ public class GetSimulationTaskFileReq extends BaseReq {
@Schema(description = "文件类型", implementation = FileBizTypeEnum.class)
Integer fileBizType;
+ // ----------------------------------------------------------------
+ // 很重要,用于设置标签,通过autoFillDictTags切面 ,设置dictTagIdsCache
+ /**
+ * 字典标签查询结果缓存
+ * key: dictClass(字典类)
+ * value: Map(字典值 -> 字典ID)
+ * 此字段由服务层填充,前端不需传入
+ */
+ @Schema(description = "字典标签查询结果缓存", hidden = true)
+ @JSONField(serialize = false)
+ private Map> dictTagIdsCache;
+
+ @Schema(description = "字典标签查询列表,格式:['fileTypeDictClass','fileTypeDictValue','disciplineTypeDictClass','disciplineDictValue']")
+ private List dictTags;
+
+ @Schema(description = "文件类型字典类")
+ private String fileTypeDictClass;
+ @Schema(description = "文件类型字典值")
+ private String fileTypeDictValue;
+
+ @Schema(description = "学科类型字典类")
+ private String disciplineTypeDictClass;
+
+ @Schema(description = "学科类型字典值")
+ private String disciplineDictValue;
+
+ // ----------------------------------------------------------------
+
@Schema(description = "文件名")
private String fileName;
diff --git a/common/src/main/java/com/sdm/common/entity/req/data/UploadFilesReq.java b/common/src/main/java/com/sdm/common/entity/req/data/UploadFilesReq.java
index eee1f07e..1078c42f 100644
--- a/common/src/main/java/com/sdm/common/entity/req/data/UploadFilesReq.java
+++ b/common/src/main/java/com/sdm/common/entity/req/data/UploadFilesReq.java
@@ -8,6 +8,7 @@ import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
+import java.util.Map;
@Data
@Schema(description = "文件上传请求参数")
@@ -71,8 +72,33 @@ public class UploadFilesReq {
@Schema(description = "文件类型 1:模型文件 2:仿真报告 3:计算文件 4:曲线文件 5:云图文件", implementation = FileBizTypeEnum.class)
private Integer fileType;
- @Schema(description = "字典标签列表")
- private List tags;
+ // ----------------------------------------------------------------
+ // 很重要,用于设置标签,通过autoFillDictTags切面 ,设置dictTagIdsCache
+ /**
+ * 字典标签查询结果缓存
+ * key: dictClass(字典类)
+ * value: Map(字典值 -> 字典ID)
+ * 此字段由服务层填充,前端不需传入
+ */
+ @Schema(description = "字典标签查询结果缓存", hidden = true)
+ @JSONField(serialize = false)
+ private Map> dictTagIdsCache;
+
+ @Schema(description = "字典标签查询列表,格式:['fileTypeDictClass','fileTypeDictValue','disciplineTypeDictClass','disciplineDictValue']")
+ private List dictTags;
+
+ @Schema(description = "文件类型字典类")
+ private String fileTypeDictClass;
+ @Schema(description = "文件类型字典值")
+ private String fileTypeDictValue;
+
+ @Schema(description = "学科类型字典类")
+ private String disciplineTypeDictClass;
+
+ @Schema(description = "学科类型字典值")
+ private String disciplineDictValue;
+
+ // ----------------------------------------------------------------
/**
diff --git a/common/src/main/java/com/sdm/common/entity/req/export/FileAnalysisExportExcelParam.java b/common/src/main/java/com/sdm/common/entity/req/export/FileAnalysisExportExcelParam.java
index e3bdf6e3..ad1f8702 100644
--- a/common/src/main/java/com/sdm/common/entity/req/export/FileAnalysisExportExcelParam.java
+++ b/common/src/main/java/com/sdm/common/entity/req/export/FileAnalysisExportExcelParam.java
@@ -1,13 +1,16 @@
package com.sdm.common.entity.req.export;
+import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sdm.common.entity.enums.FileBizTypeEnum;
import com.sdm.common.entity.req.data.BaseReq;
+import com.sdm.common.entity.req.system.DictTagReq;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
+import java.util.Map;
@Data
public class FileAnalysisExportExcelParam extends BaseReq {
@@ -18,6 +21,34 @@ public class FileAnalysisExportExcelParam extends BaseReq {
@Schema(description = "文件类型", implementation = FileBizTypeEnum.class)
Integer fileBizType;
+ // ----------------------------------------------------------------
+ // 很重要,用于设置标签,通过autoFillDictTags切面 ,设置dictTagIdsCache
+ /**
+ * 字典标签查询结果缓存
+ * key: dictClass(字典类)
+ * value: Map(字典值 -> 字典ID)
+ * 此字段由服务层填充,前端不需传入
+ */
+ @Schema(description = "字典标签查询结果缓存", hidden = true)
+ @JSONField(serialize = false)
+ private Map> dictTagIdsCache;
+
+ @Schema(description = "字典标签查询列表,格式:['fileTypeDictClass','fileTypeDictValue','disciplineTypeDictClass','disciplineDictValue']")
+ private List dictTags;
+
+ @Schema(description = "文件类型字典类")
+ private String fileTypeDictClass;
+ @Schema(description = "文件类型字典值")
+ private String fileTypeDictValue;
+
+ @Schema(description = "学科类型字典类")
+ private String disciplineTypeDictClass;
+
+ @Schema(description = "学科类型字典值")
+ private String disciplineDictValue;
+
+ // ----------------------------------------------------------------
+
@Schema(description = "文件名")
private String fileName;
diff --git a/common/src/main/java/com/sdm/common/entity/req/system/DictTagReq.java b/common/src/main/java/com/sdm/common/entity/req/system/DictTagReq.java
index 60667cb2..1138439b 100644
--- a/common/src/main/java/com/sdm/common/entity/req/system/DictTagReq.java
+++ b/common/src/main/java/com/sdm/common/entity/req/system/DictTagReq.java
@@ -4,16 +4,23 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
+import java.util.Map;
@Data
@Schema(description = "字典标签查询请求")
public class DictTagReq {
+ @Schema(description = "字典类型", example = "file_type")
+ private String dictClass;
+
@Schema(description = "字典名称", example = "file_type")
private String dictName;
@Schema(description = "字典值", example = "document")
private String dictValue;
+ @Schema(description = "字典值数组字符串", example = "document")
+ private String dictValues;
+
@Data
@Schema(description = "批量查询字典ID请求")
public static class BatchDictIdQueryReq {
diff --git a/common/src/main/java/com/sdm/common/feign/impl/system/SysConfigFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/system/SysConfigFeignClientImpl.java
index 697c301d..cac31e8a 100644
--- a/common/src/main/java/com/sdm/common/feign/impl/system/SysConfigFeignClientImpl.java
+++ b/common/src/main/java/com/sdm/common/feign/impl/system/SysConfigFeignClientImpl.java
@@ -36,10 +36,10 @@ public class SysConfigFeignClientImpl implements ISysConfigFeignClient {
}
@Override
- public SdmResponse