From 4dc636927eb3b61f88c3469e0efb6293f5ec00d7 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 13 Jan 2026 14:06:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BB=BB=E5=8A=A1=E6=A0=91=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=202=E3=80=81=E6=8E=A8=E9=80=81=E6=8A=A5=E5=91=8Abugfi?= =?UTF-8?q?x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sdm/common/config/CacheConfig.java | 4 +- .../sdm/outbridge/mode/HkUploadFileReq.java | 2 +- .../service/lyric/LyricIntegrateService.java | 3 - .../SimulationProjectController.java | 14 + .../project/dao/SimulationProjectMapper.java | 3 + .../project/model/req/ProjectTreeListReq.java | 19 ++ .../sdm/project/service/IProjectService.java | 2 + .../impl/LyricInternalServiceImpl.java | 4 +- .../service/impl/ProjectServiceImpl.java | 242 ++++++++++++++++++ .../src/main/resources/application-lyric.yml | 1 + .../mapper/SimulationProjectMapper.xml | 8 + 11 files changed, 295 insertions(+), 7 deletions(-) create mode 100644 project/src/main/java/com/sdm/project/model/req/ProjectTreeListReq.java diff --git a/common/src/main/java/com/sdm/common/config/CacheConfig.java b/common/src/main/java/com/sdm/common/config/CacheConfig.java index ada42515..0f3ed61c 100644 --- a/common/src/main/java/com/sdm/common/config/CacheConfig.java +++ b/common/src/main/java/com/sdm/common/config/CacheConfig.java @@ -26,7 +26,9 @@ public class CacheConfig { SimpleCacheManager cacheManager = new SimpleCacheManager(); cacheManager.setCaches(Arrays.asList( // 用户名缓存 - new ConcurrentMapCache("userNames") + new ConcurrentMapCache("userNames"), + // 查询任务树列表缓存 + new ConcurrentMapCache("taskTreeListCache") // 可以添加其他缓存配置 )); return cacheManager; diff --git a/outbridge/src/main/java/com/sdm/outbridge/mode/HkUploadFileReq.java b/outbridge/src/main/java/com/sdm/outbridge/mode/HkUploadFileReq.java index 864b5dbb..cfabdef2 100644 --- a/outbridge/src/main/java/com/sdm/outbridge/mode/HkUploadFileReq.java +++ b/outbridge/src/main/java/com/sdm/outbridge/mode/HkUploadFileReq.java @@ -27,7 +27,7 @@ public class HkUploadFileReq { public long componentInstId = 8000004142460000204L; @Schema(description = "表名称") - public String tableName = "oa_threee_d_review"; + public String tableName = "oa_three_d_review"; @Schema(description = "字段名称") public String columnName = "simulation_table;"; diff --git a/outbridge/src/main/java/com/sdm/outbridge/service/lyric/LyricIntegrateService.java b/outbridge/src/main/java/com/sdm/outbridge/service/lyric/LyricIntegrateService.java index 9e7ece68..d0502b3f 100644 --- a/outbridge/src/main/java/com/sdm/outbridge/service/lyric/LyricIntegrateService.java +++ b/outbridge/src/main/java/com/sdm/outbridge/service/lyric/LyricIntegrateService.java @@ -489,9 +489,6 @@ public class LyricIntegrateService { return response; } - public String getHkToken(String jobNo) { - return getHKCloudToken(jobNo); - } } diff --git a/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java b/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java index 7b37696a..374b841e 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java @@ -5,6 +5,7 @@ import com.sdm.common.entity.req.task.TaskExportExcelFormat; import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat; import com.sdm.common.log.annotation.SysLog; import com.sdm.project.model.bo.ModifyProjectNode; +import com.sdm.project.model.req.ProjectTreeListReq; import com.sdm.project.model.req.ProjectTreeTagReq; import com.sdm.project.model.req.SpdmNodeReq; import com.sdm.project.service.IProjectService; @@ -68,5 +69,18 @@ public class SimulationProjectController { return taskService.newExportTaskTree(taskTreeExportExcelFormat, httpservletResponse); } + /** + * 任务分析项树 + * + * @param req + * @return + */ + @SysLog("获取多个项目的任务分析项树") + @PostMapping("/getTaskTreeList") + @Operation(summary = "获取多个项目的任务分析项树", description = "获取多个项目的任务分析项树") + public SdmResponse getTaskTreeList(@RequestBody ProjectTreeListReq req) { + return projectService.getTaskTreeList(req); + } + } diff --git a/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java index 39af2ef4..fb5dd0dd 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java @@ -181,4 +181,7 @@ public interface SimulationProjectMapper { List querySimulationNodeByUuids(@Param("list")List uuids); List getNodeByIdList(@Param("nodeIdList") List nodeIdList); + + List getNodeListByType(@Param("nodeTypeList") List nodeTypeList); + } diff --git a/project/src/main/java/com/sdm/project/model/req/ProjectTreeListReq.java b/project/src/main/java/com/sdm/project/model/req/ProjectTreeListReq.java new file mode 100644 index 00000000..aaa8e2cc --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/ProjectTreeListReq.java @@ -0,0 +1,19 @@ +package com.sdm.project.model.req; + +import com.sdm.project.model.bo.TaskNodeTag; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class ProjectTreeListReq { + + private String projectNodeId; + + private String phaseNodeId; + + @NotEmpty(message = "tagMap不能为空") + private List tagMap; + +} diff --git a/project/src/main/java/com/sdm/project/service/IProjectService.java b/project/src/main/java/com/sdm/project/service/IProjectService.java index 45c7f39e..bb3dc0d0 100644 --- a/project/src/main/java/com/sdm/project/service/IProjectService.java +++ b/project/src/main/java/com/sdm/project/service/IProjectService.java @@ -28,4 +28,6 @@ public interface IProjectService { SdmResponse exportTaskTree(TaskTreeExportExcelFormat taskTreeExportExcelFormat, HttpServletResponse httpservletResponse); + SdmResponse getTaskTreeList(ProjectTreeListReq req); + } diff --git a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java index 6bf529e8..f4c6df5d 100644 --- a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java @@ -1171,7 +1171,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { uploadFileReq.setSysId(1691399963692630016L); uploadFileReq.setFormId(1847115435993071616L); uploadFileReq.setComponentInstId(8000004142460000204L); - uploadFileReq.setTableName("oa_threee_d_review"); + uploadFileReq.setTableName("oa_three_d_review"); uploadFileReq.setColumnName("simulation_table"); uploadFileReq.setXmh(req.getProjectCode()); uploadFileReq.setGwh(req.getWorkspaceCode()); @@ -1435,7 +1435,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { if (cidUserRespSdmResponse.getData() == null) { return SdmResponse.failed("根据工号获取username失败"); } - String token = lyricIntegrateService.getHkToken(cidUserRespSdmResponse.getData().getUsername()); + String token = lyricIntegrateService.getHKCloudToken(cidUserRespSdmResponse.getData().getUsername()); return SdmResponse.success(token); } diff --git a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java index 2226a94e..16bd179e 100644 --- a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java @@ -36,6 +36,7 @@ import com.sdm.project.model.req.*; import com.sdm.project.model.vo.SpdmExportNewTaskVo; import com.sdm.project.model.vo.SpdmNewTaskVo; import com.sdm.project.model.vo.SpdmNodeExtraVo; +import com.sdm.project.model.vo.SpdmNodeVo; import com.sdm.project.service.IProjectService; import com.sdm.project.service.ISimulationPerformanceExtraService; import com.sdm.project.service.ISimulationPerformanceService; @@ -48,6 +49,8 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; @@ -139,6 +142,15 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { private static final String PERFORMANCE_CODE = "指标编号"; + private static final String TAG1 = "tag1"; + private static final String TAG2 = "tag2"; + private static final String NODE_TYPE_PROJECT = NodeTypeEnum.PROJECT.getValue(); + private static final String NODE_TYPE_PHASE = NodeTypeEnum.PHASE.getValue(); + private static final List EMPTY_TAG_LIST = Collections.emptyList(); + @Autowired + private CacheManager cacheManager; + + @Override @Transactional public SdmResponse add(JSONObject jsonObject) { @@ -2508,4 +2520,234 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { return projectNodePo; } + /** + * 调用getTaskTree并统一处理返回结果 + * @param req + * @return + */ + private List getTaskTreeData(ProjectTreeTagReq req) { + if (req == null || CollectionUtils.isEmpty(req.getIdMap())) { + return new ArrayList<>(); + } + // 构建缓存key:唯一标识本次查询 + String cacheKey = "taskTree_" + req.getIdMap().stream().map(t -> t.getKey() + "_" + t.getValue()).collect(Collectors.joining(",")); + Cache cache = cacheManager.getCache("taskTreeListCache"); + if (cache != null && cache.get(cacheKey) != null) { + // 缓存命中,直接返回,不调用getTaskTree() + log.info("--------------------------命中缓存--------------------------"); + return (List) cache.get(cacheKey).get(); + } + // 缓存未命中,执行原逻辑 + SdmResponse taskTree = getTaskTree(req); + if (taskTree == null || taskTree.getData() == null) { + return new ArrayList<>(); + } + if (!(taskTree.getData() instanceof List)) { + return new ArrayList<>(); + } + List dataList = (List) taskTree.getData(); + if (dataList.stream().noneMatch(NodeAllBase.class::isInstance)) { + return new ArrayList<>(); + } + List result = dataList.stream().map(NodeAllBase.class::cast).collect(Collectors.toList()); + // 存入缓存,设置过期时间(根据业务调整,比如5分钟,避免数据不一致) + if (cache != null) { + cache.put(cacheKey, result); + } + return result; + } + + + public SdmResponse getTaskTreeList(ProjectTreeListReq req) { + // 1. 提取入参,统一变量 + String projectNodeId = req.getProjectNodeId(); + String phaseNodeId = req.getPhaseNodeId(); + List tagMap = req.getTagMap(); + // 2. 四种业务场景 + if (StringUtils.isNotBlank(projectNodeId) && StringUtils.isNotBlank(phaseNodeId)) { + return handleBothIdsSpecified(projectNodeId, phaseNodeId, tagMap); + } else if (StringUtils.isBlank(projectNodeId) && StringUtils.isBlank(phaseNodeId)) { + return handleNoIdsSpecified(tagMap); + } else if (StringUtils.isBlank(projectNodeId)) { + return handleOnlyPhaseSpecified(phaseNodeId, tagMap); + } else if (StringUtils.isBlank(phaseNodeId)) { + return handleOnlyProjectSpecified(projectNodeId, tagMap); + } + return SdmResponse.success(Collections.emptyList()); + } + + /** + * 构建ProjectTreeTagReq请求对象 + */ + private ProjectTreeTagReq buildProjectTreeTagReq(List idMapList, List tagMap) { + ProjectTreeTagReq req = new ProjectTreeTagReq(); + req.setIdMap(CollectionUtils.isEmpty(idMapList) ? EMPTY_TAG_LIST : idMapList); + req.setTagMap(CollectionUtils.isEmpty(tagMap) ? EMPTY_TAG_LIST : tagMap); + return req; + } + + /** + * 创建单个TaskNodeTag对象 + */ + private TaskNodeTag createTaskNodeTag(String key, String value) { + TaskNodeTag tag = new TaskNodeTag(); + tag.setKey(key); + tag.setValue(value); + return tag; + } + + private void batchSetNodeExtras(List nodeList) { + if (CollectionUtils.isEmpty(nodeList)) { + return; + } + // 1. 提取所有需要查询的节点UUID + List nodeUuids = nodeList.stream() + .map(ProjectNodePo::getUuid) + .filter(StringUtils::isNotBlank) + .distinct() // 去重,避免重复查询相同UUID + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(nodeUuids)) { + return; + } + // 2. 批量查询所有扩展信息 + List allExtras = nodeMapper.getNodeExtraListByNodeIdList(nodeUuids); + if (CollectionUtils.isEmpty(allExtras)) { + return; + } + // 3. 转Map映射 + Map> extraMap = allExtras.stream() + .collect(Collectors.groupingBy(SpdmNodeExtraVo::getNodeId)); + // 4. 批量赋值 + nodeList.forEach(node -> node.setExtras(extraMap.getOrDefault(node.getUuid(), new ArrayList<>()))); + } + + + /** + * 场景1:项目ID+阶段ID 都传的情况 + */ + private SdmResponse handleBothIdsSpecified(String projectNodeId, String phaseNodeId, List tagMap) { + // 构建查询参数 - 复用常量,减少对象创建 + List idMap = Arrays.asList( + createTaskNodeTag(projectNodeId, TAG1), + createTaskNodeTag(phaseNodeId, TAG2) + ); + ProjectTreeTagReq req = buildProjectTreeTagReq(idMap, tagMap); + // 获取任务树数据 + List nodeAllBaseList = getTaskTreeData(req); + if (CollectionUtils.isEmpty(nodeAllBaseList)) { + return SdmResponse.success(Collections.emptyList()); + } + // 查询节点信息 + List nodeIds = Arrays.asList(projectNodeId, phaseNodeId); + List nodeList = mapper.getNodeListByNodeIdList(nodeIds); + if (CollectionUtils.isEmpty(nodeList) || nodeList.size() != 2) { + log.error("【双ID查询】节点数量异常, projectNodeId={}, phaseNodeId={}, 数量={}", projectNodeId, phaseNodeId, nodeList.size()); + return SdmResponse.success(Collections.emptyList()); + } + // 流式过滤+Optional处理 + ProjectNodePo projectNode = nodeList.stream().filter(node -> NODE_TYPE_PROJECT.equals(node.getNodeType())).findFirst().orElse(null); + ProjectNodePo phaseNode = nodeList.stream().filter(node -> NODE_TYPE_PHASE.equals(node.getNodeType())).findFirst().orElse(null); + if (projectNode == null || phaseNode == null) { + log.error("【双ID查询】未匹配到对应类型节点, projectNodeId={}, phaseNodeId={}", projectNodeId, phaseNodeId); + return SdmResponse.success(Collections.emptyList()); + } + // 组装树形结构 + 【批量赋值扩展信息】仅1次查询 + batchSetNodeExtras(Arrays.asList(projectNode, phaseNode)); + phaseNode.setChildren(nodeAllBaseList); + projectNode.setChildren(Collections.singletonList(phaseNode)); + return SdmResponse.success(Collections.singletonList(projectNode)); + } + + /** + * 场景2:项目ID+阶段ID 都不传的情况(查所有项目) + */ + private SdmResponse handleNoIdsSpecified(List tagMap) { + List projectNodeList = mapper.getNodeListByType(Collections.singletonList(NODE_TYPE_PROJECT)); + if (CollectionUtils.isEmpty(projectNodeList)) { + log.error("【全量查询】未查询到任何项目节点"); + return SdmResponse.success(Collections.emptyList()); + } + // 批量设置扩展信息 + batchSetNodeExtras(projectNodeList); + projectNodeList.forEach(projectNode -> { + List idMap = Collections.singletonList(createTaskNodeTag(projectNode.getUuid(), TAG1)); + ProjectTreeTagReq req = buildProjectTreeTagReq(idMap, tagMap); + List children = getTaskTreeData(req); + if (!CollectionUtils.isEmpty(children)) { + projectNode.setChildren(children); + } + }); + return SdmResponse.success(projectNodeList); + } + + /** + * 场景3:只传阶段ID,不传项目ID(查所有项目的指定阶段) + */ + private SdmResponse handleOnlyPhaseSpecified(String phaseNodeId, List tagMap) { + List phaseNodeList = mapper.getNodeListByNodeIdList(Collections.singletonList(phaseNodeId)); + if (CollectionUtils.isEmpty(phaseNodeList)) { + log.error("【仅阶段查询】未查询到阶段节点, phaseNodeId={}", phaseNodeId); + return SdmResponse.success(Collections.emptyList()); + } + // 提取项目ID+批量查询项目节点 + 转MAP + List projectIdList = phaseNodeList.stream() + .map(ProjectNodePo::getTag1) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(projectIdList)) { + log.error("【仅阶段查询】无关联的项目ID, phaseNodeId={}", phaseNodeId); + return SdmResponse.success(Collections.emptyList()); + } + List projectNodeList = mapper.getNodeListByNodeIdList(projectIdList); + if (CollectionUtils.isEmpty(projectNodeList)) { + log.error("【仅阶段查询】未查询到关联项目节点, projectIdList={}", projectIdList); + return SdmResponse.success(Collections.emptyList()); + } + Map projectNodeMap = projectNodeList.stream() + .collect(Collectors.toMap(ProjectNodePo::getUuid, p -> p, (k1, k2) -> k1)); // 解决重复key问题 + // 批量设置所有节点的扩展信息 + batchSetNodeExtras(phaseNodeList); + batchSetNodeExtras(projectNodeList); + phaseNodeList.forEach(phaseNode -> { + List idMap = Arrays.asList( + createTaskNodeTag(phaseNode.getUuid(), TAG1), + createTaskNodeTag(phaseNode.getUuid(), TAG2) + ); + ProjectTreeTagReq req = buildProjectTreeTagReq(idMap, tagMap); + List children = getTaskTreeData(req); + if (!CollectionUtils.isEmpty(children)) { + phaseNode.setChildren(children); + } + // MAP直接取值,O(1)效率 + ProjectNodePo projectNode = projectNodeMap.get(phaseNode.getTag1()); + if (projectNode != null) { + projectNode.setChildren(Collections.singletonList(phaseNode)); + } + }); + return SdmResponse.success(projectNodeList); + } + + /** + * 场景4:只传项目ID,不传阶段ID(查指定项目的全量数据) + */ + private SdmResponse handleOnlyProjectSpecified(String projectNodeId, List tagMap) { + List projectNodeList = mapper.getNodeListByNodeIdList(Collections.singletonList(projectNodeId)); + if (CollectionUtils.isEmpty(projectNodeList)) { + log.error("【仅项目查询】未查询到项目节点, projectNodeId={}", projectNodeId); + return SdmResponse.success(Collections.emptyList()); + } + // 批量设置扩展信息 + batchSetNodeExtras(projectNodeList); + projectNodeList.forEach(projectNode -> { + List idMap = Collections.singletonList(createTaskNodeTag(projectNode.getUuid(), TAG1)); + ProjectTreeTagReq req = buildProjectTreeTagReq(idMap, tagMap); + List children = getTaskTreeData(req); + if (!CollectionUtils.isEmpty(children)) { + projectNode.setChildren(children); + } + }); + return SdmResponse.success(projectNodeList); + } + } diff --git a/project/src/main/resources/application-lyric.yml b/project/src/main/resources/application-lyric.yml index 98f1b289..dccd98c6 100644 --- a/project/src/main/resources/application-lyric.yml +++ b/project/src/main/resources/application-lyric.yml @@ -124,6 +124,7 @@ security: - /run/getSimulationKeyResultFileIds - /run/generateReportInternal - /dataManager/tree/node/listUserByIds + - /node/updateApprovalStatus #logging: # config: ./config/logback.xml diff --git a/project/src/main/resources/mapper/SimulationProjectMapper.xml b/project/src/main/resources/mapper/SimulationProjectMapper.xml index 3f5d6cfc..3508c252 100644 --- a/project/src/main/resources/mapper/SimulationProjectMapper.xml +++ b/project/src/main/resources/mapper/SimulationProjectMapper.xml @@ -713,6 +713,14 @@ ) + + From 2315e0be10534b22fed206c1cb3bf3e321e716bd Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 13 Jan 2026 14:16:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?1=E3=80=81=E9=A1=B9=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95=E9=87=8F=E5=92=8C?= =?UTF-8?q?=E7=AD=BE=E5=8D=95=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sdm/outbridge/entity/LyricVProjectToDM.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/outbridge/src/main/java/com/sdm/outbridge/entity/LyricVProjectToDM.java b/outbridge/src/main/java/com/sdm/outbridge/entity/LyricVProjectToDM.java index 6c2787da..f4dfc1f5 100644 --- a/outbridge/src/main/java/com/sdm/outbridge/entity/LyricVProjectToDM.java +++ b/outbridge/src/main/java/com/sdm/outbridge/entity/LyricVProjectToDM.java @@ -108,4 +108,12 @@ public class LyricVProjectToDM { @TableField(value = "machine_type") public String machineType; + @Schema(description = "订单量") + @TableField(value = "order_quantity") + public Integer orderQuantity; + + @Schema(description = "签单数量") + @TableField(value = "sign_num") + public Integer signNum; + } \ No newline at end of file From fe32e2769a1afe0854cbde4de96e0e8eac675b1c Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Tue, 13 Jan 2026 14:33:03 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=E5=A4=8D=E5=88=B6=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/ReportTemplateDto.java | 4 ++-- .../SimulationReportTemplateServiceImpl.java | 21 ++++++++++++++++--- .../entity/constants/CommonConstants.java | 4 ++++ .../impl/data/DataClientFeignClientImpl.java | 4 ++-- .../feign/inter/data/IDataFeignClient.java | 2 +- .../data/controller/DataFileController.java | 2 +- .../sdm/data/service/IDataFileService.java | 2 +- .../impl/MinioFileIDataFileServiceImpl.java | 11 ++-------- .../impl/SystemFileIDataFileServiceImpl.java | 5 +++++ 9 files changed, 36 insertions(+), 19 deletions(-) diff --git a/capability/src/main/java/com/sdm/capability/model/dto/ReportTemplateDto.java b/capability/src/main/java/com/sdm/capability/model/dto/ReportTemplateDto.java index 55a384ab..ad317581 100644 --- a/capability/src/main/java/com/sdm/capability/model/dto/ReportTemplateDto.java +++ b/capability/src/main/java/com/sdm/capability/model/dto/ReportTemplateDto.java @@ -87,7 +87,7 @@ public class ReportTemplateDto { @Schema(description = "分页参数,一页几条") private int size; - @Schema(description = "是否复制模板") - private boolean isCopied; + @Schema(description = "是否复制模板 Y/N") + private String copyFlag; } diff --git a/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java b/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java index 13e8522f..acf7f9f1 100644 --- a/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java +++ b/capability/src/main/java/com/sdm/capability/service/impl/SimulationReportTemplateServiceImpl.java @@ -12,19 +12,23 @@ import com.sdm.capability.service.ISimulationReportTemplateService; import com.sdm.common.common.SdmResponse; import com.sdm.common.common.ThreadLocalContext; import com.sdm.common.entity.bo.DataPageInfo; +import com.sdm.common.entity.constants.CommonConstants; import com.sdm.common.entity.constants.NumberConstants; import com.sdm.common.entity.enums.ApproveStatusEnum; import com.sdm.common.entity.enums.ApproveTypeEnum; import com.sdm.common.entity.req.data.DelFileReq; +import com.sdm.common.entity.req.data.GetFileBaseInfoReq; import com.sdm.common.entity.req.data.UpdateScriptAndReportReq; import com.sdm.common.entity.req.data.UploadFilesReq; import com.sdm.common.entity.req.system.LaunchApproveReq; +import com.sdm.common.entity.resp.data.FileMetadataInfoResp; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; import com.sdm.common.feign.impl.system.ApproveFeignClientImpl; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; @@ -54,12 +58,23 @@ public class SimulationReportTemplateServiceImpl extends ServiceImpl response = dataFeignClient.getMultipartFileByFileId(templateDto.getFileId()); + if (CommonConstants.GENERAL_Y.equals(templateDto.getCopyFlag())) { + GetFileBaseInfoReq getFileBaseInfoReq = new GetFileBaseInfoReq(); + getFileBaseInfoReq.setFileId(templateDto.getFileId()); + SdmResponse fileBaseInfoResp = dataFeignClient.getFileBaseInfo(getFileBaseInfoReq); + if (!fileBaseInfoResp.isSuccess() || fileBaseInfoResp.getData() == null) { + return SdmResponse.failed("获取文件失败"); + } + SdmResponse response = dataFeignClient.getMultipartFileByFileId(templateDto.getFileId()); if (!response.isSuccess()) { return response; } - file = response.getData(); + file = new MockMultipartFile( + fileBaseInfoResp.getData().getOriginalName(), + fileBaseInfoResp.getData().getOriginalName(), + "application/octet-stream", + response.getData() + ); } else { file = templateDto.getFile(); } diff --git a/common/src/main/java/com/sdm/common/entity/constants/CommonConstants.java b/common/src/main/java/com/sdm/common/entity/constants/CommonConstants.java index 3790d92a..bba1f54a 100644 --- a/common/src/main/java/com/sdm/common/entity/constants/CommonConstants.java +++ b/common/src/main/java/com/sdm/common/entity/constants/CommonConstants.java @@ -10,4 +10,8 @@ public class CommonConstants { */ public static final String ROLE_CODE_GENERAL = "GENERAL_USER"; + public static final String GENERAL_Y = "Y"; + + public static final String GENERAL_N = "N"; + } diff --git a/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java index 75231dec..5ca9e3d7 100644 --- a/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java +++ b/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java @@ -247,8 +247,8 @@ public class DataClientFeignClientImpl implements IDataFeignClient { } @Override - public SdmResponse getMultipartFileByFileId(Long fileId) { - SdmResponse response; + public SdmResponse getMultipartFileByFileId(Long fileId) { + SdmResponse response; try { response = dataClient.getMultipartFileByFileId(fileId); return response; diff --git a/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java b/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java index e60b9e43..387f1291 100644 --- a/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java +++ b/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java @@ -95,6 +95,6 @@ public interface IDataFeignClient { SdmResponse updateReportTemplateFile(UpdateScriptAndReportReq req); @GetMapping("/data/getMultipartFileByFileId") - SdmResponse getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId); + SdmResponse getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId); } diff --git a/data/src/main/java/com/sdm/data/controller/DataFileController.java b/data/src/main/java/com/sdm/data/controller/DataFileController.java index 6a8ed74b..c9f8d2a9 100644 --- a/data/src/main/java/com/sdm/data/controller/DataFileController.java +++ b/data/src/main/java/com/sdm/data/controller/DataFileController.java @@ -489,7 +489,7 @@ public class DataFileController implements IDataFeignClient { @GetMapping("/getMultipartFileByFileId") @Operation(summary = "根据fileId获取MultipartFile文件", description = "根据fileId获取MultipartFile文件") - public SdmResponse getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId) { + public SdmResponse getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId) { return IDataFileService.getMultipartFileByFileId(fileId); } diff --git a/data/src/main/java/com/sdm/data/service/IDataFileService.java b/data/src/main/java/com/sdm/data/service/IDataFileService.java index e1515bc2..85fc2c0e 100644 --- a/data/src/main/java/com/sdm/data/service/IDataFileService.java +++ b/data/src/main/java/com/sdm/data/service/IDataFileService.java @@ -357,7 +357,7 @@ public interface IDataFileService { SdmResponse downloadFileForEdit(Long fileId); - SdmResponse getMultipartFileByFileId(Long fileId); + SdmResponse getMultipartFileByFileId(Long fileId); default SdmResponse> queryFileListByIdList(QueryFileReq queryFileReq){return null;} diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 7b24e0d2..92ee50fa 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -2996,7 +2996,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { } @Override - public SdmResponse getMultipartFileByFileId(Long fileId) { + public SdmResponse getMultipartFileByFileId(Long fileId) { try { FileMetadataInfo fileMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, fileId).one(); if (ObjectUtils.isEmpty(fileMetadataInfo)) { @@ -3005,14 +3005,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { String fileObjectKey = fileMetadataInfo.getObjectKey(); // 从MinIO下载文件 byte[] fileData = minioService.downloadFile(fileObjectKey,fileMetadataInfo.getBucketName()); - String contentType = getContentTypeByFileName(fileMetadataInfo.getOriginalName()); - MultipartFile multipartFile = new MockMultipartFile( - fileMetadataInfo.getOriginalName(), - fileMetadataInfo.getOriginalName(), - contentType, - fileData - ); - return SdmResponse.success(multipartFile); + return SdmResponse.success(fileData); } catch (Exception e) { log.error("获取文件失败", e); } diff --git a/data/src/main/java/com/sdm/data/service/impl/SystemFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/SystemFileIDataFileServiceImpl.java index d8521766..3f9b54a9 100644 --- a/data/src/main/java/com/sdm/data/service/impl/SystemFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/SystemFileIDataFileServiceImpl.java @@ -1620,5 +1620,10 @@ public class SystemFileIDataFileServiceImpl implements IDataFileService { return null; } + @Override + public SdmResponse getMultipartFileByFileId(Long fileId) { + return null; + } + }