diff --git a/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java b/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java index 85726edd..588c4d07 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java @@ -2,10 +2,7 @@ package com.sdm.project.controller; import com.sdm.common.common.SdmResponse; import com.sdm.project.model.bo.ModifyProjectNode; -import com.sdm.project.model.req.SpdmAddDemandReq; -import com.sdm.project.model.req.SpdmDeleteDemandReq; -import com.sdm.project.model.req.SpdmDemandListReq; -import com.sdm.project.model.req.SpdmEditDemandReq; +import com.sdm.project.model.req.*; import com.sdm.project.service.IDemandService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -70,16 +67,16 @@ public class SimulationDemandController { return demandService.list(req); } -// /** -// * 下发任务 -// * -// * @param req -// * @return -// */ -// @PostMapping("/issueTask") -// @Operation(summary = "下发任务", description = "下发任务") -// public SdmResponse issueTask(@RequestBody ModifyProjectNode req) { -// return demandService.issueTask(req); -// } + /** + * 下发任务 + * + * @param req + * @return + */ + @PostMapping("/issueTask") + @Operation(summary = "下发任务", description = "下发任务") + public SdmResponse issueTask(@RequestBody SpdmTaskIssue req) { + return demandService.issueTask(req); + } } diff --git a/project/src/main/java/com/sdm/project/model/bo/TaskNode.java b/project/src/main/java/com/sdm/project/model/bo/TaskNode.java index be533bdf..b1bb5488 100644 --- a/project/src/main/java/com/sdm/project/model/bo/TaskNode.java +++ b/project/src/main/java/com/sdm/project/model/bo/TaskNode.java @@ -251,6 +251,6 @@ public class TaskNode extends BaseEntity { // private String tags9; // private String tags10; - + private String demandId; } diff --git a/project/src/main/java/com/sdm/project/model/req/SpdmTaskIssue.java b/project/src/main/java/com/sdm/project/model/req/SpdmTaskIssue.java new file mode 100644 index 00000000..e8ba6b44 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/SpdmTaskIssue.java @@ -0,0 +1,21 @@ +package com.sdm.project.model.req; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.sdm.common.entity.pojo.BaseEntity; +import com.sdm.project.model.bo.ProjectNode; +import com.sdm.project.model.bo.TaskNode; +import com.sdm.project.model.bo.TaskNodeTag; +import lombok.Data; + +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class SpdmTaskIssue extends BaseEntity { + + List idMap; + + List addNodeList; + + String demandId; +} diff --git a/project/src/main/java/com/sdm/project/service/IDemandService.java b/project/src/main/java/com/sdm/project/service/IDemandService.java index 9ac88991..31510512 100644 --- a/project/src/main/java/com/sdm/project/service/IDemandService.java +++ b/project/src/main/java/com/sdm/project/service/IDemandService.java @@ -17,4 +17,6 @@ public interface IDemandService { SdmResponse list(SpdmDemandListReq req); + SdmResponse issueTask(SpdmTaskIssue req); + } diff --git a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java index 9c836166..55524056 100644 --- a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java @@ -1,5 +1,6 @@ package com.sdm.project.service.impl; + import com.alibaba.fastjson2.JSONObject; import com.sdm.common.common.SdmResponse; import com.sdm.common.common.ThreadLocalContext; @@ -10,7 +11,11 @@ import com.sdm.project.common.DemandStatusTypeEnum; import com.sdm.project.common.MemberTypeEnum; import com.sdm.project.dao.SimulationDemandMapper; import com.sdm.project.dao.SimulationNodeMapper; +import com.sdm.project.dao.SimulationProjectMapper; import com.sdm.project.dao.SimulationTaskMapper; +import com.sdm.project.model.bo.*; +import com.sdm.project.model.po.ProjectNodePo; +import com.sdm.project.model.po.TaskNodePo; import com.sdm.project.model.req.*; import com.sdm.project.model.vo.*; import com.sdm.project.service.IDemandService; @@ -27,6 +32,8 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; +import static com.sdm.project.service.impl.NodeServiceImpl.setTagProperty; + @Slf4j @Service public class DemandServiceImpl extends BaseService implements IDemandService { @@ -34,6 +41,8 @@ public class DemandServiceImpl extends BaseService implements IDemandService { @Autowired private SimulationDemandMapper mapper; + private SimulationProjectMapper projectMapper; + @Autowired private SimulationTaskMapper taskMapper; @@ -112,7 +121,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService { } CreateDirReq createDirReq = new CreateDirReq(); - createDirReq.setNodeId((int)demandId); + createDirReq.setNodeId((int) demandId); createDirReq.setParentNodeId(null); createDirReq.setDirName(req.getDemandName()); log.info("创建需求时,调用创建文件夹的参数为:{}", createDirReq); @@ -262,7 +271,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService { eachTaskList = taskMap.get(demand.getUuid()); if (CollectionUtils.isEmpty(eachTaskList)) { newDemandList.add(demand); - }else { + } else { if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains("不合格")) { eachStatus = "不合格"; } else { @@ -284,7 +293,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService { } if (StringUtils.isNotBlank(req.getDemandStatus())) { - if (CollectionUtils.isEmpty(taskList) ) { + if (CollectionUtils.isEmpty(taskList)) { demandList = demandList.stream().filter(firstDemand -> req.getDemandStatus().equals(firstDemand.getDemandStatus())).toList(); } else { List eachTaskList; @@ -294,19 +303,19 @@ public class DemandServiceImpl extends BaseService implements IDemandService { eachTaskList = taskMap.get(demand.getUuid()); if (CollectionUtils.isEmpty(eachTaskList)) { newDemandList.add(demand); - }else { + } else { List statusList = eachTaskList.stream().map(SpdmTaskVo::getExeStatus).toList(); if (statusList.contains(DemandStatusTypeEnum.UNASSIGNED.getName())) { eachStatus = DemandStatusTypeEnum.UNASSIGNED.getName(); - } else if (statusList.contains(DemandStatusTypeEnum.NOT_STARTED.getName())){ + } else if (statusList.contains(DemandStatusTypeEnum.NOT_STARTED.getName())) { eachStatus = DemandStatusTypeEnum.NOT_STARTED.getName(); - } else if (statusList.contains(DemandStatusTypeEnum.IN_PROGRESS.getName())){ + } else if (statusList.contains(DemandStatusTypeEnum.IN_PROGRESS.getName())) { eachStatus = DemandStatusTypeEnum.IN_PROGRESS.getName(); - } else if (statusList.contains(DemandStatusTypeEnum.PAUSE.getName())){ + } else if (statusList.contains(DemandStatusTypeEnum.PAUSE.getName())) { eachStatus = DemandStatusTypeEnum.PAUSE.getName(); - } else if (statusList.contains(DemandStatusTypeEnum.CLOSED.getName())){ + } else if (statusList.contains(DemandStatusTypeEnum.CLOSED.getName())) { eachStatus = DemandStatusTypeEnum.CLOSED.getName(); - } else if (statusList.contains(DemandStatusTypeEnum.CLOSED_LOOP.getName())){ + } else if (statusList.contains(DemandStatusTypeEnum.CLOSED_LOOP.getName())) { eachStatus = DemandStatusTypeEnum.CLOSED_LOOP.getName(); } else { eachStatus = DemandStatusTypeEnum.REJECTED.getName(); @@ -326,9 +335,9 @@ public class DemandServiceImpl extends BaseService implements IDemandService { return SdmResponse.success(new ArrayList<>()); } JSONObject jsonObject = new JSONObject(); - jsonObject.put("currentPage",req.getCurrent()); - jsonObject.put("pageSize",req.getSize()); - jsonObject.put("total",demandList.size()); + jsonObject.put("currentPage", req.getCurrent()); + jsonObject.put("pageSize", req.getSize()); + jsonObject.put("total", demandList.size()); demandList = demandList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList(); if (CollectionUtils.isEmpty(demandList)) { log.error("demandList4为空"); @@ -397,5 +406,175 @@ public class DemandServiceImpl extends BaseService implements IDemandService { return SdmResponse.success(jsonObject); } + @Override + public SdmResponse issueTask(SpdmTaskIssue req) { + log.info("issueTask参数为:{}", req); + List taskNodeList = req.getAddNodeList(); + if (CollectionUtils.isEmpty(taskNodeList)) { + return SdmResponse.success(new ArrayList<>()); + } + List idMapList = req.getIdMap(); + idMapList = idMapList.stream().filter(idMap -> !"null".equals(idMap.getKey())).toList(); + if (CollectionUtils.isEmpty(idMapList)) { + return SdmResponse.success(new ArrayList<>()); + } + TaskNodeTag taskNodeTag = idMapList.get(idMapList.size() - 1); + List nodeListByNodeIdList = projectMapper.getNodeListByNodeIdList(Collections.singletonList(taskNodeTag.getKey())); + if (CollectionUtils.isEmpty(nodeListByNodeIdList)) { + return SdmResponse.success(new ArrayList<>()); + } + long parentId = nodeListByNodeIdList.get(0).getId(); + log.info("issueTask的idMap最后一层非空节点为:{}",taskNodeTag); + String demandId = req.getDemandId(); + List projectNodeMemberList = new ArrayList<>(); + List projectNodeExtraList = new ArrayList<>(); + List allPerformanceList = new ArrayList<>(); + List allPerformanceExtraList = new ArrayList<>(); + for (TaskNode task : taskNodeList) { + for (TaskNodeTag tag : idMapList) { + try { + setTagProperty(task, tag.getKey(), Arrays.stream(tag.getValue().split(",")).toList()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + task.setUuid(generateUuid()); + task.setDemandId(demandId); + List taskMemberNodeList = task.getMemberList(); + if (CollectionUtils.isNotEmpty(taskMemberNodeList)) { + for (TaskMemberNode member : taskMemberNodeList) { + TaskMemberNode taskMemberNode = new TaskMemberNode(); + taskMemberNode.setTaskId(task.getUuid()); + taskMemberNode.setNodeId(task.getUuid()); + taskMemberNode.setIdentity(member.getIdentity()); + taskMemberNode.setName(member.getName()); + taskMemberNode.setUserId(member.getUserId()); + taskMemberNode.setType(member.getType()); + projectNodeMemberList.add(taskMemberNode); + } + } + List extraList = task.getTaskExtraNodeList(); + if (CollectionUtils.isNotEmpty(extraList)) { + for (TaskExtraNode extra : extraList) { + TaskExtraNode taskExtraNode = new TaskExtraNode(); + taskExtraNode.setTaskId(task.getUuid()); + taskExtraNode.setNodeId(task.getUuid()); + taskExtraNode.setPropertyName(extra.getPropertyName()); + taskExtraNode.setPropertyValue(extra.getPropertyValue()); + projectNodeExtraList.add(taskExtraNode); + } + } + + // 指标 + List performanceList = task.getChildren(); + for (TaskNode performance : performanceList) { + performance.setTaskId(task.getUuid()); + List performanceExtraList = performance.getTaskExtraNodeList(); + if (CollectionUtils.isNotEmpty(performanceExtraList)) { + for (TaskExtraNode extra : performanceExtraList) { + extra.setPerformanceId(performance.getUuid()); + extra.setTaskId(performance.getTaskId()); + extra.setNodeId(performance.getNodeId()); + allPerformanceExtraList.add(extra); + } + } + allPerformanceList.add(performance); + } + + } + String jobNumber = ThreadLocalContext.getCommonHeader().getJobNumber(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String createTime = format.format(new Date()); + SdmResponse response = SdmResponse.success(); + Map taskNodeMap = Map.of(); + if (CollectionUtils.isNotEmpty(taskNodeList)) { + taskNodeList.forEach(projectNode -> { + projectNode.setCreator(jobNumber); + projectNode.setCreateTime(createTime); + }); + if (projectMapper.batchAddSimulationTask(taskNodeList) <= 0) { + response = SdmResponse.failed("新增任务失败"); + return response; + } + taskNodeMap = taskNodeList.stream().collect(Collectors.groupingBy( + TaskNode::getUuid, + Collectors.collectingAndThen( + Collectors.toList(), + list -> list.get(0) + ) + )); + for (TaskNode taskNode : taskNodeList) { + createDir(taskNode.getId(),parentId, taskNode.getNodeName()); + } + } + if (CollectionUtils.isNotEmpty(projectNodeExtraList)) { + projectNodeExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime)); + if (projectMapper.batchAddSimulationTaskExtra(projectNodeExtraList) <= 0) { + response = SdmResponse.failed("新增任务附加属性失败"); + } + } + if (CollectionUtils.isNotEmpty(projectNodeMemberList)) { + projectNodeMemberList.forEach(projectNode -> projectNode.setCreateTime(createTime)); + if (projectMapper.batchAddSimulationTaskMember(projectNodeMemberList) <= 0) { + response = SdmResponse.failed("新增任务成员属性失败"); + return response; + } + } + + + // 指标 + if (CollectionUtils.isNotEmpty(allPerformanceList)) { + allPerformanceList.forEach(projectNode -> projectNode.setCreateTime(createTime)); + if (projectMapper.batchAddSimulationPerformance(allPerformanceList) <= 0) { + response = SdmResponse.failed("新增指标失败"); + return response; + } + + List newTaskNodeList = projectMapper.getTaskListByNodeIdList(allPerformanceList.stream().map(TaskNode::getTaskId).toList()); + Map taskNodePoMap = Map.of(); + if (CollectionUtils.isNotEmpty(newTaskNodeList)) { + taskNodePoMap = newTaskNodeList.stream().collect(Collectors.groupingBy( + TaskNodePo::getUuid, + Collectors.collectingAndThen( + Collectors.toList(), + list -> list.get(0) + ) + )); + } + for (TaskNode taskNode : allPerformanceList) { + if (ObjectUtils.isEmpty(taskNodePoMap.get(taskNode.getTaskId())) && ObjectUtils.isEmpty(taskNodeMap.get(taskNode.getTaskId()))) { + log.error("taskNodeMap不空,根据taskId:{},未查询到任务", taskNode.getTaskId()); + response = SdmResponse.failed("新增指标时,创建文件失败"); + return response; + } + createDir(taskNode.getId(), + ObjectUtils.isNotEmpty(taskNodePoMap.get(taskNode.getTaskId())) ? taskNodePoMap.get(taskNode.getTaskId()).getId() : taskNodeMap.get(taskNode.getTaskId()).getId(), + taskNode.getNodeName()); + } + + } + if (CollectionUtils.isNotEmpty(allPerformanceExtraList)) { + allPerformanceExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime)); + if (projectMapper.batchAddSimulationPerformanceExtra(allPerformanceExtraList) <= 0) { + response = SdmResponse.failed("新增任务指标附加属性失败"); + return response; + } + } + + return response; + } + + + + + private void createDir(Long nodeId, Long parentNodeId, String dirName) { + CreateDirReq createDirReq = new CreateDirReq(); + createDirReq.setNodeId(Math.toIntExact(nodeId)); + createDirReq.setParentNodeId(Math.toIntExact(parentNodeId)); + createDirReq.setDirName(dirName); + log.info("下发任务调用创建文件夹的参数为:{}", createDirReq); +// SdmResponse response = dataClientAPIClient.createDir(createDirReq); +// log.info("调用创建文件夹的返回值为:{}", response); + } } 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 d382c7a1..056bfb32 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 @@ -8,6 +8,7 @@ import com.sdm.common.common.SdmResponse; import com.sdm.common.common.ThreadLocalContext; import com.sdm.common.entity.constants.SystemConstants; import com.sdm.common.entity.constants.TagConstant; +import com.sdm.common.entity.req.data.CreateDirReq; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; import com.sdm.common.service.BaseService; import com.sdm.project.common.VersionEnum; @@ -989,19 +990,6 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { } - private List traverseProjectNodeTree(ProjectNodePo projectNodePo, List newProjectNodePoList) { - log.info("当前节点类型为:{}", projectNodePo.getNodeType()); - List projectNodePoList = mapper.queryNodeListByParentNodeId(Collections.singletonList(projectNodePo.getUuid())); - if (CollectionUtils.isEmpty(projectNodePoList)) { - return newProjectNodePoList; - } - for (ProjectNodePo nodePo : projectNodePoList) { - - } - return newProjectNodePoList; - } - - private void handlePerformanceExtra(TaskNode projectNode, List performanceNodeList, List performanceNodeExtraList) { performanceNodeList.add(projectNode); List extraList = projectNode.getTaskExtraNodeList(); @@ -1747,11 +1735,11 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { } private void createDir(Long nodeId, Long parentNodeId, String dirName) { -// CreateDirReq createDirReq = new CreateDirReq(); -// createDirReq.setNodeId(nodeId); -// createDirReq.setParentNodeId(parentNodeId); -// createDirReq.setDirName(dirName); -// log.info("调用创建文件夹的参数为:{}", createDirReq); + CreateDirReq createDirReq = new CreateDirReq(); + createDirReq.setNodeId(Math.toIntExact(nodeId)); + createDirReq.setParentNodeId(Math.toIntExact(parentNodeId)); + createDirReq.setDirName(dirName); + log.info("调用创建文件夹的参数为:{}", createDirReq); // SdmResponse response = dataClientAPIClient.createDir(createDirReq); // log.info("调用创建文件夹的返回值为:{}", response); }