diff --git a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java index dad9a582..452248d8 100644 --- a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java @@ -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(); 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 8a07ce73..22aa3ece 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 @@ -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 tagList, String ownRootNodeUuid) { + private SdmResponse newRealAddSimulationTaskItems(TaskNodeTree taskNodeTree, Long tenantId, List tagList, String ownRootNodeUuid,List 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 taskNodeList) { + public void addDemandByTask(List taskNodeList,List 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 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 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 tag1Id = addNodeList.get(0).getTag1(); + // 查询项目的拓展属性 + List 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); + } + }