修改:知识库项目,所属项目,分析方向名称数据补充

This commit is contained in:
yangyang01000846
2025-11-18 20:40:01 +08:00
parent 55116a83f3
commit 2d49fa2938
13 changed files with 321 additions and 3 deletions

View File

@@ -19,6 +19,7 @@ public class NumberConstants {
public static final int EIGHT = 8;
public static final int NINE = 9;
public static final int TEN = 10;
public static final int NINE_NINE_NINE_NINE = 9999;
// String 类型常量
public static final String ZERO_STR = "0";

View File

@@ -0,0 +1,95 @@
package com.sdm.common.entity.resp.project;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author author
* @since 2025-11-17
*/
@Data
public class SimulationNodeResp implements Serializable {
private static final long serialVersionUID = -1L;
private Integer id;
private String uuid;
private String ownRootNodeUuid;
private String nodeName;
private String nodeCode;
private String englishName;
private String nodeType;
private String nodeSubType;
private String nodeStatus;
private String parentId;
private String folderId;
private Integer nodeLevel;
private String beginTime;
private String endTime;
private String finishTime;
private Integer progress;
private Integer achieveStatus;
private String nodeVersion;
private Long tenantId;
private String description;
private String detailImgUrl;
private Long creator;
private String createTime;
private Long updater;
private String updateTime;
private Integer pid;
private String exeStatus;
private String tag1;
private String tag2;
private String tag3;
private String tag4;
private String tag5;
private String tag6;
private String tag7;
private String tag8;
private String tag9;
private String tag10;
}

View File

@@ -4,6 +4,7 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.common.feign.inter.project.ISimulationNodeFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -93,5 +94,20 @@ public class SimulationNodeFeignClientImpl implements ISimulationNodeFeignClient
return response;
}
@Override
public SdmResponse<List<SimulationNodeResp>> querySimulationNodeByUuids(List<String> uuids) {
SdmResponse response;
try {
response = ISimulationNodeFeignClient.querySimulationNodeByUuids(uuids);
if (!response.isSuccess()) {
return SdmResponse.failed("查询失败");
}
} catch (Exception e) {
log.error("查询失败", e);
return SdmResponse.failed("查询失败");
}
return response;
}
}

View File

@@ -4,6 +4,7 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -39,5 +40,8 @@ public interface ISimulationNodeFeignClient {
@GetMapping("/node/list")
SdmResponse list(@RequestBody SpdmNodeListReq req);
// 根据uuids查询所有的node列表
@PostMapping(value = "/node/querySimulationNodeByUuids")
SdmResponse<List<SimulationNodeResp>> querySimulationNodeByUuids(@RequestBody List<String>uuids);
}

View File

@@ -46,7 +46,7 @@ public class CidApproveUtil {
);
result.put(key, nodeList);
}
} catch (IllegalArgumentException e) {
} catch (Exception e) {
CoreLogger.warn("convertApproveFlowInfos error,param:{},errMsg:{}",
JSON.toJSONString(data),JSON.toJSONString(e.getMessage()));
}

View File

@@ -0,0 +1,61 @@
package com.sdm.common.utils;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sdm.common.log.CoreLogger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ProjectUtil {
private static final ObjectMapper objectMapper = new ObjectMapper();
/**
* 将 com.sdm.project.controller.SimulationNodeController#list(com.sdm.common.entity.req.project.SpdmNodeListReq)
* 这个查询项目信息的接口返回数据转换成Map<uuid, Map(project信息)>
* key 为数据中的 uuidvalue 为对应对象的字段映射
*
* @param data 原始数据(包含 data 数组和 total 字段)
* @return 转换后的 Map<uuid, 字段映射>
* @throws Exception 解析异常
*/
public static Map<String, Map<String, Object>> convertProjectInfoMap(Object data) {
// 1. 将顶层数据转换为 Map<String, Object>,获取 "data" 字段的值
Map<String, Map<String, Object>> result = new HashMap<>();
try {
Map<String, Object> topLevelMap = objectMapper.convertValue(
data, new TypeReference<Map<String, Object>>() {}
);
Object dataArray = topLevelMap.get("data");
if (dataArray == null) {
// 若 data 字段为空,返回空 Map
return result;
}
// 2. 将 data 字段的值转换为 List<Map<String, Object>>(对象数组)
List<Map<String, Object>> dataList = objectMapper.convertValue(
dataArray,
new TypeReference<List<Map<String, Object>>>() {}
);
// 3. 遍历数组,以 uuid 为 key对象字段 Map 为 value 构建结果
result = new HashMap<>();
for (Map<String, Object> item : dataList) {
// 获取当前对象的 uuid确保 uuid 存在,避免空指针)
String uuid = (String) item.get("uuid");
if (uuid != null) {
result.put(uuid, item);
}
}
} catch (Exception e) {
CoreLogger.warn("convertProjectInfoMap error,param:{},errMsg:{}",
JSON.toJSONString(data),JSON.toJSONString(e.getMessage()));
}
return result;
}
}

View File

@@ -190,5 +190,12 @@ public class FileMetadataInfo implements Serializable {
@TableField(value = "cidFlowReviewer", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER)
private String cidFlowReviewer;
@Schema(description= "projectName:所属项目,只有列表展示使用")
@TableField(value = "projectName", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER)
private String projectName;
@Schema(description= "分析方向,只有列表展示使用")
@TableField(value = "analysisDirectionName", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER)
private String analysisDirectionName;
}

View File

@@ -13,19 +13,23 @@ import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.req.system.UserListReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.project.SimulationNodeFeignClientImpl;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.feign.inter.project.ISimulationNodeFeignClient;
import com.sdm.common.feign.inter.system.IApproveFeignClient;
import com.sdm.common.log.CoreLogger;
import com.sdm.common.utils.CidApproveUtil;
import com.sdm.common.utils.CidSysUserUtil;
import com.sdm.common.utils.PageUtils;
import com.sdm.common.utils.ProjectUtil;
import com.sdm.data.model.bo.ApprovalFileDataContentsModel;
import com.sdm.data.model.entity.FileMetadataExtension;
import com.sdm.data.model.entity.FileMetadataInfo;
@@ -118,6 +122,9 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
@Autowired
private IApproveFeignClient approveFeignClient;
@Autowired
private ISimulationNodeFeignClient isSimulationNodeFeignClient;
@Override
public String getType() {
return type;
@@ -650,6 +657,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
.list();
setCreatorNames(files);
setCidInfos(files);
setProjectName(files);
setAnalysisDirectionName(files);
PageDataResp<List<FileMetadataInfo>> page = new PageDataResp<>();
page.setData(files);
page.setTotal(pageDataResp.getTotal());
@@ -702,6 +711,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建人赋值
setCreatorNames(list);
setCidInfos(list);
setProjectName(list);
setAnalysisDirectionName(list);
PageInfo<FileMetadataInfo> page = new PageInfo<>(list);
return PageUtils.getJsonObjectSdmResponse(list, page);
}
@@ -1822,10 +1833,83 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
}
} catch (Exception e) {
log.error("setCreatorNames error:{}",e.getMessage());
log.error("setCidInfos error:{}",e.getMessage());
}
}
private void setProjectName(List<FileMetadataInfo> list) {
try {
if (ObjectUtils.isNotEmpty(list)) {
// 提取Id,当前不可能超过500无需分批
List<String> projectIds = list.stream()
.map(FileMetadataInfo::getProjectId)
.filter(Objects::nonNull)
.distinct()
.toList();
// 查询电子流详情
SpdmNodeListReq spdmNodeListReq = new SpdmNodeListReq();
spdmNodeListReq.setCurrent(NumberConstants.ONE);
spdmNodeListReq.setSize(NumberConstants.NINE_NINE_NINE_NINE);
spdmNodeListReq.setNodeType(NodeTypeEnum.PROJECT.getValue());
SdmResponse sdmResponse = isSimulationNodeFeignClient.list(spdmNodeListReq);
Object data = sdmResponse.getData();
// 批量设置
if (sdmResponse.isSuccess() && !Objects.isNull(data)) {
Map<String, Map<String, Object>> projectInfoMap = ProjectUtil.convertProjectInfoMap(data);
if(MapUtils.isNotEmpty(projectInfoMap)){
list.forEach(fileMetadataInfo -> {
String projectId = fileMetadataInfo.getProjectId();
Map<String, Object> project = projectInfoMap.get(projectId);
if(!Objects.isNull(project)){
fileMetadataInfo.setProjectName(Objects.isNull(project.get("nodeName"))?
"":project.get("nodeName").toString());
}
});
}
}
}
} catch (Exception e) {
log.error("setProjectName error:{}",e.getMessage());
}
}
private void setAnalysisDirectionName(List<FileMetadataInfo> list) {
try {
if (ObjectUtils.isNotEmpty(list)) {
// 提取Id,当前不可能超过1000无需分批
List<String> analyIds = list.stream()
.map(FileMetadataInfo::getAnalysisDirectionId)
.filter(Objects::nonNull)
.distinct()
.toList();
// 查询电子流详情
SdmResponse<List<SimulationNodeResp>> sdmResponse = isSimulationNodeFeignClient.querySimulationNodeByUuids(analyIds);
List<SimulationNodeResp> datas = sdmResponse.getData();
// 批量设置
if (sdmResponse.isSuccess() && CollectionUtils.isNotEmpty(datas)) {
Map<String, List<SimulationNodeResp>> simulationNodeMap = datas.stream()
.collect(Collectors.groupingBy(SimulationNodeResp::getUuid));
if(MapUtils.isNotEmpty(simulationNodeMap)){
list.forEach(fileMetadataInfo -> {
String analysisDirectionId = fileMetadataInfo.getAnalysisDirectionId();
List<SimulationNodeResp> simulationNodeResps = simulationNodeMap.get(analysisDirectionId);
if(CollectionUtils.isNotEmpty(simulationNodeResps)){
fileMetadataInfo.setAnalysisDirectionName(Objects.isNull(simulationNodeResps.get(0).getNodeName())?
"":simulationNodeResps.get(0).getNodeName());
}
});
}
}
}
} catch (Exception e) {
log.error("setAnalysisDirectionName error:{}",e.getMessage());
}
}
// 从审批详情里拼接审批人
private String getCidFlowReviewer(List<Map<String, Object>> flowInfos) {
try {

View File

@@ -6,6 +6,7 @@ import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.common.feign.inter.project.ISimulationNodeFeignClient;
import com.sdm.project.model.req.*;
import com.sdm.project.service.INodeService;
@@ -209,4 +210,15 @@ public class SimulationNodeController implements ISimulationNodeFeignClient {
return nodeService.uploadProjectFiles(req);
}
/**
* 根据List<uuid> 查询所有的 simulation_node 信息
* @param
* @return SimulationNode集合
*/
@PostMapping(value = "/querySimulationNodeByUuids")
@Operation(summary = "根据uuids查询所有的node列表", description = "根据uuids查询所有的node列表")
public SdmResponse<List<SimulationNodeResp>> querySimulationNodeByUuids(@RequestBody List<String>uuids) {
return nodeService.querySimulationNodeByUuids(uuids);
}
}

View File

@@ -1,6 +1,7 @@
package com.sdm.project.dao;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.project.model.bo.*;
import com.sdm.project.model.po.*;
import com.sdm.project.model.req.ProjectTreeReq;
@@ -173,4 +174,6 @@ public interface SimulationProjectMapper {
List<RunNodePo> getRunListByNodeIdList(@Param("taskIdList") List<String> taskIdList);
List<SimulationNodeResp> querySimulationNodeByUuids(@Param("list")List<String> uuids);
}

View File

@@ -7,6 +7,7 @@ import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.project.model.entity.SimulationNode;
import com.sdm.project.model.req.*;
import org.springframework.stereotype.Service;
@@ -53,4 +54,7 @@ public interface INodeService extends IService<SimulationNode> {
SdmResponse delteNode(DelNodeReq req);
SdmResponse uploadProjectFiles(UploadFilesReq req);
SdmResponse<List<SimulationNodeResp>> querySimulationNodeByUuids(List<String> uuids);
}

View File

@@ -16,12 +16,14 @@ import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.req.system.QueryGroupDetailReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.entity.resp.project.SimulationNodeResp;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.entity.resp.system.SysUserGroupDetailResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
import com.sdm.common.feign.impl.system.SysConfigFeignClientImpl;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.common.log.CoreLogger;
import com.sdm.common.utils.DateUtils;
import com.sdm.common.utils.RandomUtil;
import com.sdm.project.dao.SimulationDemandMapper;
@@ -45,6 +47,7 @@ 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.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -92,6 +95,9 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Autowired
private SysConfigFeignClientImpl sysConfigFeignClient;
@Value("${node.batch.queryCounts:1000}")
private Integer queryCounts;
private HashMap<String, String> idMap = new HashMap<>();
@@ -211,8 +217,10 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
public SdmResponse list(SpdmNodeListReq req) {
int pos = (req.getCurrent() - 1) * req.getSize();
int limit = req.getSize();
Long tenantId = ThreadLocalContext.getTenantId();
List<SpdmNodeVo> nodeList = nodeMapper.getNodeList(req.getNodeType(), req.getNodeSubType(), req.getProgressStatus(), req.getNodeCode(), req.getManager(), req.getNodeName(),
ThreadLocalContext.getTenantId(), pos, limit);
tenantId, pos, limit);
CoreLogger.info("getNodeList param:{},tenantId:{}", JSONObject.toJSONString(req), tenantId);
if (CollectionUtils.isEmpty(nodeList)) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", nodeList);
@@ -1081,4 +1089,17 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
public SdmResponse uploadProjectFiles(UploadFilesReq req) {
return dataFeignClient.uploadFiles(req);
}
@Override
public SdmResponse<List<SimulationNodeResp>> querySimulationNodeByUuids(List<String> uuids) {
if(CollectionUtils.isEmpty(uuids)){
return SdmResponse.failed("参数为空");
}
if(uuids.size()>queryCounts){
return SdmResponse.failed("单次批量查询不允许超过"+queryCounts);
}
List<SimulationNodeResp> simulationNodeResps = mapper.querySimulationNodeByUuids(uuids);
return SdmResponse.success(simulationNodeResps);
}
}

View File

@@ -646,6 +646,16 @@
)
</select>
<select id="querySimulationNodeByUuids" resultType="com.sdm.common.entity.resp.project.SimulationNodeResp">
select uuid,ownRootNodeUuid,nodeName,nodeCode,englishName,nodeType,nodeSubType,nodeStatus,parentId,folderId,nodeLevel,beginTime,endTime,finishTime,progress,
achieveStatus,nodeVersion,tenantId,description,detailImgUrl,creator,create_time,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10
from simulation_node where uuid in (
<foreach collection='list' item='udid' index='index' separator=','>
#{udid}
</foreach>
)
</select>
<!-- <select id="getTaskList" resultType="com.sdm.project.entity.vo.SpdmTaskVo">-->
<!-- select * from simulation_task where tenant_id = #{tenantId}-->
<!-- <if test="taskName != null and taskName != ''">-->