仿真需求下发任务接口

This commit is contained in:
2025-10-21 09:37:06 +08:00
parent 660550dd6c
commit e3500d242c
6 changed files with 233 additions and 46 deletions

View File

@@ -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);
}
}

View File

@@ -251,6 +251,6 @@ public class TaskNode extends BaseEntity {
// private String tags9;
// private String tags10;
private String demandId;
}

View File

@@ -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<TaskNodeTag> idMap;
List<TaskNode> addNodeList;
String demandId;
}

View File

@@ -17,4 +17,6 @@ public interface IDemandService {
SdmResponse list(SpdmDemandListReq req);
SdmResponse issueTask(SpdmTaskIssue req);
}

View File

@@ -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<SpdmTaskVo> 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<String> 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<TaskNode> taskNodeList = req.getAddNodeList();
if (CollectionUtils.isEmpty(taskNodeList)) {
return SdmResponse.success(new ArrayList<>());
}
List<TaskNodeTag> 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<ProjectNodePo> 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<TaskMemberNode> projectNodeMemberList = new ArrayList<>();
List<TaskExtraNode> projectNodeExtraList = new ArrayList<>();
List<TaskNode> allPerformanceList = new ArrayList<>();
List<TaskExtraNode> 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<TaskMemberNode> 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<TaskExtraNode> 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<TaskNode> performanceList = task.getChildren();
for (TaskNode performance : performanceList) {
performance.setTaskId(task.getUuid());
List<TaskExtraNode> 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<String, TaskNode> 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<TaskNodePo> newTaskNodeList = projectMapper.getTaskListByNodeIdList(allPerformanceList.stream().map(TaskNode::getTaskId).toList());
Map<String, TaskNodePo> 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);
}
}

View File

@@ -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<ProjectNodePo> traverseProjectNodeTree(ProjectNodePo projectNodePo, List<ProjectNodePo> newProjectNodePoList) {
log.info("当前节点类型为:{}", projectNodePo.getNodeType());
List<ProjectNodePo> 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<TaskNode> performanceNodeList, List<TaskExtraNode> performanceNodeExtraList) {
performanceNodeList.add(projectNode);
List<TaskExtraNode> 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);
}