fix[project]: 仿真策划时创建任务时,同时创建需求

This commit is contained in:
2026-03-24 14:40:05 +08:00
parent 05ecc1eb3c
commit 8a9fbce849
2 changed files with 81 additions and 8 deletions

View File

@@ -121,6 +121,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
public static final String PROGRAM_TEAM = "programTeam";
public static final String REFERENCE_ITEM = "referenceItem";
public static final String PROJECT_UNDERTAKER = "projectUndertaker";
public static final String IS_MOLD_MAKING = "isMoldMaking";
// 同步待办锁
private final ReentrantLock syncTodoInfoLock = new ReentrantLock();

View File

@@ -45,10 +45,7 @@ import com.sdm.common.utils.RandomUtil;
import com.sdm.common.utils.SystemOperate;
import com.sdm.common.utils.excel.ExcelUtil;
import com.sdm.project.bo.ExportOperate;
import com.sdm.project.common.MemberTypeEnum;
import com.sdm.project.common.NodeMemberTypeEnum;
import com.sdm.project.common.TaskExeStatusEnum;
import com.sdm.project.common.VersionEnum;
import com.sdm.project.common.*;
import com.sdm.project.dao.SimulationDemandMapper;
import com.sdm.project.dao.SimulationNodeMapper;
import com.sdm.project.dao.SimulationProjectMapper;
@@ -78,11 +75,13 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.File;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.sdm.project.service.impl.LyricInternalServiceImpl.*;
import static com.sdm.project.service.impl.NodeServiceImpl.*;
@Slf4j
@@ -2193,7 +2192,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
log.info("仿真策划时,删除用户权限的返回值为:{}",updatePermissionResponse);
}
private SdmResponse newRealAddSimulationTaskItems(TaskNodeTree taskNodeTree, Long tenantId, List<TaskNodeTag> tagList, String ownRootNodeUuid) {
private SdmResponse newRealAddSimulationTaskItems(TaskNodeTree taskNodeTree, Long tenantId, List<TaskNodeTag> tagList, String ownRootNodeUuid,List<SpdmNodeExtraVo> nodeExtraList) {
Long userId = ThreadLocalContext.getUserId();
SdmResponse response = SdmResponse.success();
if (CollectionUtils.isEmpty(taskNodeTree.getNodeList())) {
@@ -2409,7 +2408,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
// 20260320 新增任务时,同步新增一个需求
try {
addDemandByTask(taskNodeList);
addDemandByTask(taskNodeList,nodeExtraList);
}catch (Exception ex) {
log.error("新增任务时,同步新增需求时异常:{}",ex.getMessage());
}
@@ -2489,7 +2488,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
return response;
}
public void addDemandByTask(List<TaskNode> taskNodeList) {
public void addDemandByTask(List<TaskNode> taskNodeList,List<SpdmNodeExtraVo> nodeExtraList) {
log.info("addDemandByTask 策划任务时,新增需求");
Long tenantId = ThreadLocalContext.getTenantId();
Long jobNumber = ThreadLocalContext.getUserId();
@@ -2512,11 +2511,65 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
String attentionMemberList = taskNode.getAMemberList();
req.setCreateTime(curDateStr);
req.setUuid(RandomUtil.generateString(32));
req.setDemandName(taskNode.getTaskName());
req.setProjectId(String.join(",", taskNode.getTag1()));
req.setPhaseId(String.join(",", taskNode.getTag2()));
req.setMachineId(String.join(",", taskNode.getTag4()));
req.setWorkspaceId(String.join(",", taskNode.getTag5()));
req.setSimType(taskNode.getDiscipline());
req.setBeginTime(taskNode.getBeginTime());
req.setEndTime(taskNode.getEndTime());
req.setDemandStatus(String.valueOf(DemandStatusTypeEnum.NOT_STARTED.getCode()));
// 没有的属性:
if (demandMapper.addDemand(req, tenantId, jobNumber) <= 0) {
log.error("addDemandByTask 新增需求失败!");
return;
}
long demandId = req.getId();
List<SpdmDemandExtraReq> demandExtraList = new ArrayList<>();
// 项目承接主题
SpdmNodeExtraVo projectUndertakerExtraVo = nodeExtraList.stream().filter(nodeExtra -> PROJECT_UNDERTAKER.equals(nodeExtra.getPropertyName())).findFirst().orElse(null);
if (projectUndertakerExtraVo != null) {
SpdmDemandExtraReq demandExtraReq = new SpdmDemandExtraReq();
demandExtraReq.setDemandId(req.getUuid());
demandExtraReq.setPropertyName(PROJECT_UNDERTAKER);
demandExtraReq.setPropertyValue(projectUndertakerExtraVo.getPropertyValue());
demandExtraReq.setPropertyClass(projectUndertakerExtraVo.getPropertyClass());
demandExtraReq.setCreator(jobNumber);
demandExtraReq.setCreateTime(curDateStr);
demandExtraList.add(demandExtraReq);
}
// 产品线
SpdmNodeExtraVo projectLineExtraVo = nodeExtraList.stream().filter(nodeExtra -> PRODUCE_LINE.equals(nodeExtra.getPropertyName())).findFirst().orElse(null);
if (projectLineExtraVo != null) {
SpdmDemandExtraReq demandExtraReq = new SpdmDemandExtraReq();
demandExtraReq.setDemandId(req.getUuid());
demandExtraReq.setPropertyName(PRODUCE_LINE);
demandExtraReq.setPropertyValue(projectLineExtraVo.getPropertyValue());
demandExtraReq.setPropertyClass(projectLineExtraVo.getPropertyClass());
demandExtraReq.setCreator(jobNumber);
demandExtraReq.setCreateTime(curDateStr);
demandExtraList.add(demandExtraReq);
}
// 是否开模件
SpdmNodeExtraVo isMoldMakingExtraVo = nodeExtraList.stream().filter(nodeExtra -> IS_MOLD_MAKING.equals(nodeExtra.getPropertyName())).findFirst().orElse(null);
if (isMoldMakingExtraVo != null) {
SpdmDemandExtraReq demandExtraReq = new SpdmDemandExtraReq();
demandExtraReq.setDemandId(req.getUuid());
demandExtraReq.setPropertyName(IS_MOLD_MAKING);
demandExtraReq.setPropertyValue(isMoldMakingExtraVo.getPropertyValue());
demandExtraReq.setPropertyClass(isMoldMakingExtraVo.getPropertyClass());
demandExtraReq.setCreator(jobNumber);
demandExtraReq.setCreateTime(curDateStr);
demandExtraList.add(demandExtraReq);
}
if (CollectionUtils.isNotEmpty(demandExtraList)) {
demandMapper.addDemandExtra(demandExtraList);
}
List<SpdmDemandRelateMemberReq> allMemberList = new ArrayList<>();
String uuid = req.getUuid();
if (StringUtils.isNotBlank(pMemberList)) {
@@ -3003,7 +3056,10 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
Long tenantId = ThreadLocalContext.getTenantId();
TaskNodeTree taskNodeTree = newParseTaskTree(JSONArray.parseArray(JSONArray.toJSONString(addNodeList)));
tagMap = req.getTagMap();
SdmResponse response = newRealAddSimulationTaskItems(taskNodeTree, tenantId, req.getTagMap(),req.getOwnRootNodeUuid());
List<String> tag1Id = addNodeList.get(0).getTag1();
// 查询项目的拓展属性
List<SpdmNodeExtraVo> nodeExtraList = nodeMapper.getNodeExtraListByNodeIdList(tag1Id);
SdmResponse response = newRealAddSimulationTaskItems(taskNodeTree, tenantId, req.getTagMap(),req.getOwnRootNodeUuid(),nodeExtraList);
if (response.getCode() != ResultCode.SUCCESS.getCode()) {
log.error("新增任务、分析项失败,清理新增数据!");
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -3908,4 +3964,20 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
return PageUtils.getJsonObjectSdmResponse(pagedList, pageInfo);
}
public static void setTagProperty(Object obj, String propertyName, Object value) throws Exception {
Class<?> clazz = obj.getClass();
Field field = clazz.getDeclaredField(propertyName);
field.setAccessible(true);
field.set(obj, value);
field.setAccessible(false);
}
public static String getTagProperty(Object obj, String propertyName) throws Exception {
Class<?> clazz = obj.getClass();
Field field = clazz.getDeclaredField(propertyName);
field.setAccessible(true);
return (String) field.get(obj);
}
}