diff --git a/project/src/main/java/com/sdm/project/bo/ExportOperate.java b/project/src/main/java/com/sdm/project/bo/ExportOperate.java index f827cded..3316b1e8 100644 --- a/project/src/main/java/com/sdm/project/bo/ExportOperate.java +++ b/project/src/main/java/com/sdm/project/bo/ExportOperate.java @@ -4,7 +4,9 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.sdm.common.common.SdmResponse; +import com.sdm.common.entity.enums.NodeTypeEnum; import com.sdm.common.entity.req.project.SimulationPerformance; +import com.sdm.common.entity.resp.system.CIDUserResp; import com.sdm.common.utils.SystemOperate; import com.sdm.project.model.po.ExportExternalForm; import com.sdm.project.model.po.NodeAllBase; @@ -18,8 +20,11 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; @Slf4j @Component @@ -190,7 +195,7 @@ public class ExportOperate { * @param columnFile 指标字段配置文件路径 * @return 解析结果响应 */ - private SdmResponse executeExternalFormPythonScript(String jsonOutputFile, String excelFile, String columnFile) { + private SdmResponse executeExternalFormPythonScript(String jsonOutputFile, String excelFile, String columnFile,Map usernameToUserMap) { // 构建Python执行命令 String shellPath = scriptPath + File.separator + PYTHON_INPUT_SCRIPT_NAME; String pythonCmd = String.format("%s%s %s %s %s %s", @@ -213,7 +218,7 @@ public class ExportOperate { } // 读取并解析JSON结果文件 - return parseExternalFormScriptOutput(jsonOutputFile); + return parseExternalFormScriptOutput(jsonOutputFile,usernameToUserMap); } catch (Exception e) { log.error("执行Python脚本异常", e); return SdmResponse.failed(ERROR_SCRIPT_EXECUTE + ":" + e.getMessage()); @@ -252,7 +257,7 @@ public class ExportOperate { * @param jsonFile JSON文件路径 * @return 解析结果响应 */ - private SdmResponse parseExternalFormScriptOutput(String jsonFile) { + private SdmResponse parseExternalFormScriptOutput(String jsonFile,Map usernameToUserMap) { // 使用try-with-resources自动关闭流,无需手动close try (InputStream inputStream = new FileInputStream(jsonFile)) { byte[] jsonContents = inputStream.readAllBytes(); @@ -260,6 +265,60 @@ public class ExportOperate { log.info("读取JSON结果文件成功,内容长度:{}", externalFormJsonString.length()); ExportExternalForm exportExternalForm = JSON.parseObject(externalFormJsonString, ExportExternalForm.class); log.info("解析出的项目树为:{}", exportExternalForm); + if (ObjectUtils.isNotEmpty(exportExternalForm) && CollectionUtils.isNotEmpty(exportExternalForm.getNodes())) { + // 前端导入的文件中的用户信息是工号,需要转成userId + List nodeList = exportExternalForm.getNodes(); + // 过滤出任务 + List taskList = nodeList.stream().filter(node -> NodeTypeEnum.TASK.getValue().equals(node.getNodeType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(taskList)) { + for (NodeAllBase task : taskList) { + // 仿真负责人 + List pMemberList = task.getPMemberList(); + if (CollectionUtils.isNotEmpty(pMemberList)) { + List newPMemberList = new ArrayList<>(); + for (CIDUserResp cidUserResp : pMemberList) { + CIDUserResp user = usernameToUserMap.get(cidUserResp.getJobNumber()); + if (user == null) { + log.info("{}对应的用户不存在", cidUserResp.getJobNumber()); + continue; + } + newPMemberList.add(user); + } + task.setPMemberList(newPMemberList); + } + + // 执行人 + List eMemberList = task.getEMemberList(); + if (CollectionUtils.isNotEmpty(eMemberList)) { + List newEMemberList = new ArrayList<>(); + for (CIDUserResp cidUserResp : eMemberList) { + CIDUserResp user = usernameToUserMap.get(cidUserResp.getJobNumber()); + if (user == null) { + log.info("{}对应的用户不存在", cidUserResp.getJobNumber()); + continue; + } + newEMemberList.add(user); + } + task.setEMemberList(newEMemberList); + } + + // 3D负责人 + List tMemberList = task.getTMemberList(); + if (CollectionUtils.isNotEmpty(tMemberList)) { + List newTMemberList = new ArrayList<>(); + for (CIDUserResp cidUserResp : tMemberList) { + CIDUserResp user = usernameToUserMap.get(cidUserResp.getJobNumber()); + if (user == null) { + log.info("{}对应的用户不存在", cidUserResp.getJobNumber()); + continue; + } + newTMemberList.add(user); + } + task.setTMemberList(newTMemberList); + } + } + } + } SdmResponse response = SdmResponse.success(); response.setData(exportExternalForm); return response; @@ -401,7 +460,7 @@ public class ExportOperate { * @param columns 外部表单字段JSON字符串 * @return 解析结果响应 */ - public SdmResponse parseSimulationExternalForm(MultipartFile externalFormFile, String columns) { + public SdmResponse parseSimulationExternalForm(MultipartFile externalFormFile, String columns, Map usernameToUserMap) { // 1. 参数校验 if (externalFormFile == null || externalFormFile.isEmpty()) { log.warn("解析外部表单文件失败:文件为空"); @@ -433,7 +492,7 @@ public class ExportOperate { } // 5. 执行Python脚本解析文件 - response = executeExternalFormPythonScript(externalFormJsonFileName, externalmanceFileName, columnFileName); + response = executeExternalFormPythonScript(externalFormJsonFileName, externalmanceFileName, columnFileName,usernameToUserMap); } catch (Exception e) { log.error("解析外部表单文件发生异常", e); response = SdmResponse.failed(ERROR_PARSE_FILE + ":" + e.getMessage()); diff --git a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java index efd0aa42..5e4ea649 100644 --- a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java @@ -5132,8 +5132,20 @@ public class TaskServiceImpl implements ITaskService { @Override public SdmResponse importSimulationExternalForm(MultipartFile file, String columns) { + Long tenantId = ThreadLocalContext.getTenantId(); + // 将利元亨的用户工号与userId映射 + Map usernameToUserMap = new HashMap<>(); + UserListReq userListReq = new UserListReq(); + userListReq.setTenantId(tenantId); + userListReq.setCurrent(1); + userListReq.setSize(9999); + SdmResponse>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq); + if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) { + List userList = pageDataRespSdmResponse.getData().getData(); + usernameToUserMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, Function.identity())); + } // 通过脚本解析导入的指标excel文件 - return exportOperate.parseSimulationExternalForm(file,columns); + return exportOperate.parseSimulationExternalForm(file,columns,usernameToUserMap); }