批量下发/多仿真执行人展示

This commit is contained in:
2025-11-07 17:49:29 +08:00
parent e92009da91
commit 1dc4693f96
11 changed files with 199 additions and 187 deletions

View File

@@ -12,28 +12,27 @@ public class BaseBean {
for (Field field : fields) {
Class typeClass = field.getType();
if (typeClass == String.class) {
String empty = "";
field.set(this, empty);
field.set(this, "");
}
else if(typeClass == Byte.class)
{
field.setByte(this,(byte)0);
field.set(this, (byte)0);
}
else if(typeClass == Integer.class)
{
field.setInt(this,0);
field.set(this, 0);
}
else if(typeClass == Long.class)
{
field.setLong(this,0);
field.set(this, 0L);
}
else if(typeClass == Float.class)
{
field.setFloat(this,0);
field.set(this, 0.0f);
}
else if(typeClass == Double.class)
{
field.setDouble(this,0);
field.set(this, 0.0);
}
}
}

View File

@@ -74,7 +74,7 @@ public class SimulationDemandController {
* @return
*/
@PostMapping("/issueTask")
@Operation(summary = "下发任务", description = "下发任务")
@Operation(summary = "下发任务(可批量)", description = "下发任务(可批量)")
public SdmResponse issueTask(@RequestBody SpdmTaskIssue req) {
return demandService.issueTask(req);
}

View File

@@ -91,7 +91,7 @@ public class SimulationNode implements Serializable {
@ApiModelProperty(value = "创建人")
@TableField("creator")
private String creator;
private Long creator;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
@@ -99,7 +99,7 @@ public class SimulationNode implements Serializable {
@ApiModelProperty(value = "更新人")
@TableField("updater")
private String updater;
private Long updater;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")

View File

@@ -124,7 +124,7 @@ public class SimulationTask implements Serializable {
@ApiModelProperty(value = "创建人")
@TableField("creator")
private String creator;
private Long creator;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
@@ -132,7 +132,7 @@ public class SimulationTask implements Serializable {
@ApiModelProperty(value = "更新人")
@TableField("updater")
private String updater;
private Long updater;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")

View File

@@ -43,7 +43,7 @@ public class SimulationTaskMember implements Serializable {
@ApiModelProperty(value = "创建人")
@TableField("creator")
private String creator;
private Long creator;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
@@ -51,7 +51,7 @@ public class SimulationTaskMember implements Serializable {
@ApiModelProperty(value = "更新人")
@TableField("updater")
private String updater;
private Long updater;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")

View File

@@ -11,11 +11,8 @@ import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class SpdmTaskIssue extends BaseEntity {
public class SpdmTaskIssue {
List<TaskNodeTag> idMap;
List<SpdmTaskIssueReq> reqList;
List<TaskNode> addNodeList;
String demandId;
}

View File

@@ -0,0 +1,20 @@
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.TaskNode;
import com.sdm.project.model.bo.TaskNodeTag;
import lombok.Data;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class SpdmTaskIssueReq extends BaseEntity {
List<TaskNodeTag> idMap;
List<TaskNode> addNodeList;
String demandId;
}

View File

@@ -1,6 +1,7 @@
package com.sdm.project.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSONObject;
import com.sdm.common.common.Constants;
import com.sdm.common.common.SdmResponse;
@@ -441,161 +442,163 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
}
@Override
public SdmResponse issueTask(SpdmTaskIssue req) {
log.info("issueTask参数为{}", req);
public SdmResponse issueTask(SpdmTaskIssue issueReq) {
log.info("issueTask参数为{}", issueReq);
Long tenantId = ThreadLocalContext.getTenantId();
List<TaskNode> taskNodeList = req.getAddNodeList();
if (CollectionUtils.isEmpty(taskNodeList)) {
return SdmResponse.success(new ArrayList<>());
}
Long jobNumber = ThreadLocalContext.getUserId();
SdmResponse response = SdmResponse.success();
String parentUuid = getLastNodeId(taskNodeList.get(0));
log.info("下发任务时parentId为{}", parentUuid);
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) {
task.setUuid(RandomUtil.generateString(32));
task.setDemandId(demandId);
task.setTaskName(task.getNodeName());
task.setTaskCode(task.getNodeCode());
task.setTenantId(tenantId);
String pUserIdStr = task.getPMemberList();
String eUserIdStr = task.getEMemberList();
log.info("下发的仿真负责人为:{}", pUserIdStr);
log.info("下发的仿真执行人为:{}", eUserIdStr);
if (StringUtils.isNotBlank(pUserIdStr)) {
String[] userIdArr = pUserIdStr.split(",");
for (String userId : userIdArr) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setTaskId(task.getUuid());
taskMemberNode.setNodeId(task.getUuid());
taskMemberNode.setUserId(userId);
taskMemberNode.setType(MemberTypeEnum.PRINCIPAL.getCode());
projectNodeMemberList.add(taskMemberNode);
if (CollectionUtils.isNotEmpty(issueReq.getReqList())) {
for (SpdmTaskIssueReq req : issueReq.getReqList()) {
List<TaskNode> taskNodeList = req.getAddNodeList();
if (CollectionUtils.isEmpty(taskNodeList)) {
return SdmResponse.success(new ArrayList<>());
}
}
if (StringUtils.isNotBlank(eUserIdStr)) {
String[] userIdArr = eUserIdStr.split(",");
for (String userId : userIdArr) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setTaskId(task.getUuid());
taskMemberNode.setNodeId(task.getUuid());
taskMemberNode.setUserId(userId);
taskMemberNode.setType(MemberTypeEnum.EXECUTOR.getCode());
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);
String parentUuid = getLastNodeId(taskNodeList.get(0));
log.info("下发任务时parentId为{}", parentUuid);
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) {
task.setUuid(RandomUtil.generateString(32));
task.setDemandId(demandId);
task.setTaskName(task.getNodeName());
task.setTaskCode(task.getNodeCode());
task.setTenantId(tenantId);
String pUserIdStr = task.getPMemberList();
String eUserIdStr = task.getEMemberList();
log.info("下发的仿真负责人为:{}", pUserIdStr);
log.info("下发的仿真执行人为:{}", eUserIdStr);
if (StringUtils.isNotBlank(pUserIdStr)) {
String[] userIdArr = pUserIdStr.split(",");
for (String userId : userIdArr) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setTaskId(task.getUuid());
taskMemberNode.setNodeId(task.getUuid());
taskMemberNode.setUserId(userId);
taskMemberNode.setType(MemberTypeEnum.PRINCIPAL.getCode());
projectNodeMemberList.add(taskMemberNode);
}
}
if (StringUtils.isNotBlank(eUserIdStr)) {
String[] userIdArr = eUserIdStr.split(",");
for (String userId : userIdArr) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setTaskId(task.getUuid());
taskMemberNode.setNodeId(task.getUuid());
taskMemberNode.setUserId(userId);
taskMemberNode.setType(MemberTypeEnum.EXECUTOR.getCode());
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 createTime = DateUtil.now();
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.getUuid(), parentUuid, taskNode.getNodeName());
}
}
allPerformanceList.add(performance);
}
}
Long jobNumber = ThreadLocalContext.getUserId();
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.getUuid(), parentUuid, 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;
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;
}
}
createDir(taskNode.getUuid(),
ObjectUtils.isNotEmpty(taskNodePoMap.get(taskNode.getTaskId())) ? taskNodePoMap.get(taskNode.getTaskId()).getUuid() : taskNodeMap.get(taskNode.getTaskId()).getUuid(),
taskNode.getNodeName());
}
}
if (CollectionUtils.isNotEmpty(allPerformanceExtraList)) {
allPerformanceExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime));
if (projectMapper.batchAddSimulationPerformanceExtra(allPerformanceExtraList) <= 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.getUuid(),
ObjectUtils.isNotEmpty(taskNodePoMap.get(taskNode.getTaskId())) ? taskNodePoMap.get(taskNode.getTaskId()).getUuid() : taskNodeMap.get(taskNode.getTaskId()).getUuid(),
taskNode.getNodeName());
}
}
if (CollectionUtils.isNotEmpty(allPerformanceExtraList)) {
allPerformanceExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime));
if (projectMapper.batchAddSimulationPerformanceExtra(allPerformanceExtraList) <= 0) {
response = SdmResponse.failed("新增任务指标附加属性失败");
return response;
}
}
}
}
return response;
}

View File

@@ -29,7 +29,7 @@ public class SimulationTaskMemberServiceImpl extends ServiceImpl<SimulationTaskM
entity.setTaskId(taskId);
entity.setType(type);
entity.setUserId(userId);
entity.setCreator(String.valueOf(ThreadLocalContext.getUserId()));
entity.setCreator(ThreadLocalContext.getUserId());
entity.setCreateTime(DateUtil.now());
this.save(entity);
}

View File

@@ -50,7 +50,7 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
if (req.getNodeName() != null) {
wrapper.set(SimulationTask::getTaskName, req.getNodeName());
}
wrapper.set(SimulationTask::getCreator, String.valueOf(ThreadLocalContext.getUserId()));
wrapper.set(SimulationTask::getCreator, ThreadLocalContext.getUserId());
wrapper.set(SimulationTask::getCreateTime, DateUtil.now());
return this.update(wrapper);
}

View File

@@ -256,14 +256,9 @@ public class TaskServiceImpl implements ITaskService {
}
// task.setPMemberList(eachMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).toList());
// task.setEMemberList(eachMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).toList());
// 由于我分发的、我执行的、我关注的、所有任务,都需要展示仿真负责人,故将负责人抽成方法调用
setPMemberList(task, eachMemberList);
// 只有所有任务需要展示仿真执行人
List<Long> eUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(eUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(eUserIdList).build());
task.setEMemberList(cidUserResp.getData());
}
setEMemberList(task, eachMemberList);
}
jsonObject.put("total", taskList.size());
taskList = taskList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList();
@@ -358,10 +353,6 @@ public class TaskServiceImpl implements ITaskService {
jsonObject.put("total", taskList.size());
taskList = taskList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList();
for (SpdmTaskVo task : taskList) {
setPMemberList(task, copyTaskMemberList);
}
if (CollectionUtils.isEmpty(taskList)) {
jsonObject.put("data", taskList);
return SdmResponse.success(jsonObject);
@@ -436,16 +427,9 @@ public class TaskServiceImpl implements ITaskService {
if (CollectionUtils.isEmpty(eachTaskMemberList)) {
continue;
}
List<Long> pUserIdList = eachTaskMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(pUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build());
task.setPMemberList(cidUserResp.getData());
}
List<Long> eUserIdList = eachTaskMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(eUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build());
task.setEMemberList(cidUserResp.getData());
}
// 设置仿真负责人和执行人
setPMemberList(task, copyTaskMemberList);
setEMemberList(task, copyTaskMemberList);
}
List<SpdmNewTaskVo> newTaskList = new ArrayList<>();
for (SpdmTaskVo taskVo : taskList) {
@@ -478,6 +462,15 @@ public class TaskServiceImpl implements ITaskService {
}
}
private void setEMemberList(SpdmTaskVo task, List<SpdmTaskMemberVo> eachMemberList) {
// 由于我分发的、我关注的、所有任务,都需要展示仿真执行人,故将执行人抽成方法调用
List<Long> eUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && StringUtils.equals(task.getUuid(), member.getTaskId())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(eUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(eUserIdList).build());
task.setEMemberList(cidUserResp.getData());
}
}
@Override
public SdmResponse countByStatus(SpdmTaskCountReq req) {
Long tenantId = ThreadLocalContext.getTenantId();