fix[project]: 仿真策划导入外部表单,对导入的用户信息做转换
This commit is contained in:
@@ -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<String, CIDUserResp> 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<String, CIDUserResp> 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<NodeAllBase> nodeList = exportExternalForm.getNodes();
|
||||
// 过滤出任务
|
||||
List<NodeAllBase> taskList = nodeList.stream().filter(node -> NodeTypeEnum.TASK.getValue().equals(node.getNodeType())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
for (NodeAllBase task : taskList) {
|
||||
// 仿真负责人
|
||||
List<CIDUserResp> pMemberList = task.getPMemberList();
|
||||
if (CollectionUtils.isNotEmpty(pMemberList)) {
|
||||
List<CIDUserResp> 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<CIDUserResp> eMemberList = task.getEMemberList();
|
||||
if (CollectionUtils.isNotEmpty(eMemberList)) {
|
||||
List<CIDUserResp> 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<CIDUserResp> tMemberList = task.getTMemberList();
|
||||
if (CollectionUtils.isNotEmpty(tMemberList)) {
|
||||
List<CIDUserResp> 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<String, CIDUserResp> 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());
|
||||
|
||||
@@ -5132,8 +5132,20 @@ public class TaskServiceImpl implements ITaskService {
|
||||
|
||||
@Override
|
||||
public SdmResponse importSimulationExternalForm(MultipartFile file, String columns) {
|
||||
Long tenantId = ThreadLocalContext.getTenantId();
|
||||
// 将利元亨的用户工号与userId映射
|
||||
Map<String, CIDUserResp> usernameToUserMap = new HashMap<>();
|
||||
UserListReq userListReq = new UserListReq();
|
||||
userListReq.setTenantId(tenantId);
|
||||
userListReq.setCurrent(1);
|
||||
userListReq.setSize(9999);
|
||||
SdmResponse<PageDataResp<List<CIDUserResp>>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq);
|
||||
if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) {
|
||||
List<CIDUserResp> 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user