diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 42ccb15d..64269a4f 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -952,6 +952,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { if(CollectionUtils.isNotEmpty(files)){ files.stream().forEach(x -> { x.setApprovalStatus(ApproveFileDataTypeEnum.getStatusStr(x.getApproveType())); + // 假如是pending 数据创建人和当前查询人不是一个人,则这是操作修改或者删除了,对于当前查询人展示的就是未变更的数据,那就是审核完成状态 + if(!Objects.isNull(userId)){ + if(Objects.equals(x.getApprovalStatus(), ApprovalFileDataStatusEnum.PENDING.getKey())&& + !Objects.equals(userId,x.getCreatorId())){ + // 完成态 + x.setApprovalStatus("approved"); + } + } }); } setCreatorNames(files); @@ -1138,6 +1146,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { dto.setKnowledgeBaseName(knowledgeBaseName); // 设置审批状态 dto.setApprovalStatus(ApproveFileDataTypeEnum.getStatusStr(entity.getApproveType())); + // 假如是pending 数据创建人和当前查询人不是一个人,则这是操作修改或者删除了,对于当前查询人展示的就是未变更的数据,那就是审核完成状态 + if(!Objects.isNull(userId)){ + if(Objects.equals(dto.getApprovalStatus(), ApprovalFileDataStatusEnum.PENDING.getKey())&& + !Objects.equals(userId,entity.getCreatorId())){ + // 完成态 + dto.setApprovalStatus("approved"); + } + } return dto; }).collect(Collectors.toList()); 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 3201ba2a..466c466e 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 @@ -202,10 +202,10 @@ public class LyricInternalServiceImpl implements ILyricInternalService { private LyricVProjectStationExcepTionToDMMapper lyricVProjectStationExcepTionToDMMapper; // 拉取的EP项目,设置项目经理权限时,暂时写死为仿真组的19个用户 - List epFixManagerUserIdList = Arrays.asList(2003641538857771009L,2003641499053826049L,2000891541365284865L, - 2003641270736887809L,2000891541367895412L,2000891541367892039L,2017165368993247238L,2017165370440282114L, - 2017165373720227852L,2017166413785972745L,2017166413785972746L,2017166413785972749L,2017166413785972753L, - 2017166413785972755L,2017166413785972758L,2017166413785972774L,2017166413785972780L,2017166417586012738L, + List epFixManagerUserIdList = Arrays.asList(2003641538857771009L, 2003641499053826049L, 2000891541365284865L, + 2003641270736887809L, 2000891541367895412L, 2000891541367892039L, 2017165368993247238L, 2017165370440282114L, + 2017165373720227852L, 2017166413785972745L, 2017166413785972746L, 2017166413785972749L, 2017166413785972753L, + 2017166413785972755L, 2017166413785972758L, 2017166413785972774L, 2017166413785972780L, 2017166417586012738L, 2017166417586012737L); /** @@ -358,7 +358,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { * 核心同步逻辑:构建数据并执行批量操作 */ private SdmResponse syncTodoData(List projectNodeList, - List todoInfoList, String traceId, Long tenantId,Long userId,String jobNumber,String userName) { + List todoInfoList, String traceId, Long tenantId, Long userId, String jobNumber, String userName) { if (StringUtils.isNotBlank(traceId)) { MdcUtil.putTraceId(traceId); } @@ -409,7 +409,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { try { String demandUuid = RandomUtil.generateString(UUID_LENGTH); // 1. 构建需求基础参数 + 成员 + 权限 - SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr,tenantId,usernameToUserIdMap); + SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr, tenantId, usernameToUserIdMap); List memberList = buildDemandMemberList(todo, demandUuid, userId, curDateStr); List demandExtraList = buildDemandExtraList(todo, demandUuid, userId, curDateStr); // 2. 构建权限更新参数 @@ -417,7 +417,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 3. 构建需求文件夹节点 demandDirNodeList.add(buildDemandDirNode(demandUuid, projectNode, demandReq.getDemandName())); // 4. 异步保存需求数据 - asyncSaveDemandData(demandReq, memberList, tenantId, userId, usernameToUserIdMap,demandExtraList); + asyncSaveDemandData(demandReq, memberList, tenantId, userId, usernameToUserIdMap, demandExtraList); SimulationDemand demand = new SimulationDemand(); BeanUtils.copyProperties(demandReq, demand); @@ -499,9 +499,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 这里取EP中的创建时间 String createTime = todo.getCreateTime(); if (StringUtils.isBlank(createTime)) { - log.error("待办的创建时间为空,待办id为:{}",todo.getTodoId()); + log.error("待办的创建时间为空,待办id为:{}", todo.getTodoId()); } - req.setCreateTime(createTime.replace("T"," ")); + req.setCreateTime(createTime.replace("T", " ")); req.setDemandSource(SYNC_PROJECT_SOURCE); // if (isConvertibleToInt(todo.getIntroduceBy())) { // req.setCreator(Long.valueOf(todo.getIntroduceBy())); @@ -541,26 +541,30 @@ public class LyricInternalServiceImpl implements ILyricInternalService { && node.getNodeCode().equals(todo.getProjectStage())) .findFirst() .ifPresent(node -> req.setPhaseId(node.getUuid())); - - // 填充需求的工位ID - Optional workspaceNodeOptional = allNodeList.stream() - .filter(node -> NodeTypeEnum.WORKSPACE.getValue().equals(node.getNodeType()) - && node.getNodeCode().equals(todo.getStationNum())) - .findFirst(); - if (workspaceNodeOptional.isPresent()) { - SimulationNode workspaceNode = workspaceNodeOptional.get(); - req.setWorkspaceId(workspaceNode.getUuid()); - if (StringUtils.isBlank(workspaceNode.getParentId())) { - log.info("工位:{}的parentId为空,无法查询机台节点", workspaceNode.getUuid()); - return; + if (StringUtils.isNotBlank(req.getPhaseId())) { + // 填充需求的工位ID + Optional workspaceNodeOptional = allNodeList.stream() + .filter(node -> NodeTypeEnum.WORKSPACE.getValue().equals(node.getNodeType()) + && node.getNodeCode().equals(todo.getStationNum())) + .findFirst(); + if (workspaceNodeOptional.isPresent()) { + SimulationNode workspaceNode = workspaceNodeOptional.get(); + req.setWorkspaceId(workspaceNode.getUuid()); + if (StringUtils.isBlank(workspaceNode.getParentId())) { + log.info("工位:{}的parentId为空,无法查询机台节点", workspaceNode.getUuid()); + return; + } + // 填充需求的机台ID + SimulationNode machineNode = nodeService.lambdaQuery().eq(SimulationNode::getUuid, workspaceNode.getParentId()).one(); + if (ObjectUtils.isEmpty(machineNode)) { + log.info("根据工位parentId:{},未查询到机台节点", workspaceNode.getParentId()); + return; + } + req.setMachineId(machineNode.getUuid()); } - // 填充需求的机台ID - SimulationNode machineNode = nodeService.lambdaQuery().eq(SimulationNode::getUuid, workspaceNode.getParentId()).one(); - if (ObjectUtils.isEmpty(machineNode)) { - log.info("根据工位parentId:{},未查询到机台节点", workspaceNode.getParentId()); - return; - } - req.setMachineId(machineNode.getUuid()); + }else { + // 阶段不存在,同步阶段机台工位 + syncTodoPhase(todo.getCreateTime(),req.getTenantId(),todo.getProjectStage(),projectNode.getUuid(),req); } } @@ -600,7 +604,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService { String[] userIdStr; if (MemberTypeEnum.PRINCIPAL.getCode().equals(type) || MemberTypeEnum.EXECUTOR.getCode().equals(type)) { userIdStr = memberStr.split(","); - } { + } + { userIdStr = memberStr.split("-"); } if (ObjectUtils.isEmpty(userIdStr)) { @@ -878,8 +883,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } // 4. 构建同步数据并执行批量操作 - return (Objects.equals("http", from)) ? httpSyncTodoData(projectNodeList, todoInfoList,null,null,null,null) : - syncTodoData(projectNodeList, todoInfoList, "",null,null,null,null); + return (Objects.equals("http", from)) ? httpSyncTodoData(projectNodeList, todoInfoList, null, null, null, null) : + syncTodoData(projectNodeList, todoInfoList, "", null, null, null, null); } @@ -2181,7 +2186,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { List expTodoInfoList = todoInfoList.stream().filter(todoInfo -> DemandTypeEnum.FINITE_ELEMENT_SIMULATION.getName().equals(todoInfo.getRelevanceTask())) .toList(); if (CollectionUtils.isNotEmpty(expTodoInfoList)) { - log.error("同步到了异常类型的待办,id为:{}",expTodoInfoList.stream().map(LyricVTodoEmulationInfoDM::getId).toList()); + log.error("同步到了异常类型的待办,id为:{}", expTodoInfoList.stream().map(LyricVTodoEmulationInfoDM::getId).toList()); } // 过滤已同步的待办 @@ -2203,6 +2208,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { /** * 根据间隔天数计算时间范围 + * * @param lyricTodoInterval 倒退的天数(int类型) * @return 数组,索引0是起始时间字符串,索引1是结束时间(当前时间)字符串 */ @@ -2221,7 +2227,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } @Override - public SdmResponse optimisedGetTodoList(String http,String startTime,String endTime) { + public SdmResponse optimisedGetTodoList(String http, String startTime, String endTime) { Long tenantId = ThreadLocalContext.getTenantId(); Long userId = ThreadLocalContext.getUserId(); String jobNumber = ThreadLocalContext.getJobNumber(); @@ -2243,13 +2249,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 先查询系统内所有待办(90天内仿真类型),同步历史待办时,先取startTime和endTime,同步固定某段时间内的待办 List lyricVTodoEmulationInfoDMList = queryTodoListWithFixedTime(startTime, endTime); - log.info("{}到{}之间,共有{}个待办",startTime,endTime,lyricVTodoEmulationInfoDMList.size()); + log.info("{}到{}之间,共有{}个待办", startTime, endTime, lyricVTodoEmulationInfoDMList.size()); // 待办信息在系统中是否都已经存在 if (CollectionUtils.isEmpty(lyricVTodoEmulationInfoDMList)) { log.info("lyricVTodoEmulationInfoDMList为空"); return SdmResponse.success(); } - log.info("本次共同步待办:{}个",lyricVTodoEmulationInfoDMList.size()); + log.info("本次共同步待办:{}个", lyricVTodoEmulationInfoDMList.size()); // 根据待办关联的项目情况,分为关联的项目已在系统和关联的项目未在系统两部分数据 List noRelatedProjectVTodoEmulationInfoDMList; @@ -2275,29 +2281,29 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 关联的项目未在系统 // 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)创建任务(不创建任务文件夹,等下发时进行创建) if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) { - List spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId,jobNumber,userName); - log.info("httpSyncHandleNoRelatedProjectTodo响应值为:{}",spdmProjectNodeEditReqList); + List spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName); + log.info("httpSyncHandleNoRelatedProjectTodo响应值为:{}", spdmProjectNodeEditReqList); for (SpdmProjectNodeEditReq spdmProjectNodeEditReq : spdmProjectNodeEditReqList) { SimulationNode simulationNode = new SimulationNode(); - BeanUtils.copyProperties(spdmProjectNodeEditReq,simulationNode); + BeanUtils.copyProperties(spdmProjectNodeEditReq, simulationNode); projectNodeList.add(simulationNode); } } // 关联的项目已在系统 // 直接关联在相应的项目下 创建任务(不创建任务文件夹,等下发时进行创建) - SdmResponse response = handleRelatedProjectTodo(projectNodeList, lyricVTodoEmulationInfoDMList, tenantId, userId,jobNumber,userName); - log.info("handleRelatedProjectTodo响应值为:{}",response); + SdmResponse response = handleRelatedProjectTodo(projectNodeList, lyricVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName); + log.info("handleRelatedProjectTodo响应值为:{}", response); return response; } @Override - public SdmResponse>> queryEncExceptionByTaskId(String taskId,Integer current, Integer size) { + public SdmResponse>> queryEncExceptionByTaskId(String taskId, Integer current, Integer size) { // taskId --> project code & station code List encNodeSpdmList = nodeMapper.getEncNodeListByTaskId(taskId); - log.info("queryEncExceptionByTaskId spdm db back:{}",JSONObject.toJSONString(encNodeSpdmList)); - String projectNodeCode=""; - String workspaceNodeCode=""; + log.info("queryEncExceptionByTaskId spdm db back:{}", JSONObject.toJSONString(encNodeSpdmList)); + String projectNodeCode = ""; + String workspaceNodeCode = ""; if (CollectionUtils.isNotEmpty(encNodeSpdmList)) { // 从集合中提取 nodeType = project 的 nodeCode projectNodeCode = encNodeSpdmList.stream() @@ -2313,24 +2319,24 @@ public class LyricInternalServiceImpl implements ILyricInternalService { .findFirst() .orElse(""); } - if(StringUtils.isBlank(projectNodeCode)||StringUtils.isBlank(workspaceNodeCode)){ + if (StringUtils.isBlank(projectNodeCode) || StringUtils.isBlank(workspaceNodeCode)) { log.warn("queryEncExceptionByTaskId projectNodeCode or workspaceNodeCode is null"); return SdmResponse.success(); } // enc 视图查询 - log.info("queryEncExceptionByTaskId send lyric db projectNodeCode:{},workspaceNodeCode:{}",projectNodeCode,workspaceNodeCode); - PageHelper.startPage(current,size); + log.info("queryEncExceptionByTaskId send lyric db projectNodeCode:{},workspaceNodeCode:{}", projectNodeCode, workspaceNodeCode); + PageHelper.startPage(current, size); List lyricEncInfos = lyricVProjectStationExcepTionToDMMapper.queryExceptionByProjectAndStation(projectNodeCode, workspaceNodeCode); - log.info("queryEncExceptionByTaskId lyric db back:{}",lyricEncInfos.size()); + log.info("queryEncExceptionByTaskId lyric db back:{}", lyricEncInfos.size()); PageInfo pageList = new PageInfo<>(lyricEncInfos); SdmResponse>> response = PageUtils.getJsonObjectSdmResponse(pageList.getList(), pageList); return response; } - private List httpSyncHandleNoRelatedProjectTodo(List noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId,String jobNumber,String userName) { + private List httpSyncHandleNoRelatedProjectTodo(List noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) { CompletableFuture> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() -> - handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId,jobNumber,userName)); + handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName)); try { List spdmProjectNodeEditReqList = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS); return spdmProjectNodeEditReqList; @@ -2349,7 +2355,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } } - private List handleNoRelatedProjectTodo(List noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId,String jobNumber,String userName) { + private List handleNoRelatedProjectTodo(List noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) { // 尝试获取锁(立即返回,不等待) if (!syncTodoInfoProjectLock.tryLock()) { return new ArrayList<>(); @@ -2394,7 +2400,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { if (CollectionUtils.isNotEmpty(allNodeManagerList)) { nodeMapper.addNodeMemberBatch(allNodeManagerList); } - }catch (Exception e) { + } catch (Exception e) { log.error("handleNoRelatedProjectTodo 未知 error: {}", e.getMessage()); return new ArrayList<>(); } finally { @@ -2624,6 +2630,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { /** * 构建批量创建节点文件夹的参数并调用接口 + * * @param addNodeList */ public void batchCreateNodeDir(List addNodeList) { @@ -2673,7 +2680,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { Date createTime = lyricVProjectToDM.getCreateTime(); if (ObjectUtils.isNotEmpty(createTime)) { curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime); - }else { + } else { curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } List currentNodeList; @@ -2978,7 +2985,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { item.setUuid(spdmProjectNodeEditReq.getUuid()); Map userPermissions = new HashMap<>(); for (Long userId : epFixManagerUserIdList) { - userPermissions.put(userId,FilePermissionEnum.ALL.getValue()); + userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); } item.setUserPermissions(userPermissions); filePermissions.add(item); @@ -2986,21 +2993,21 @@ public class LyricInternalServiceImpl implements ILyricInternalService { if (CollectionUtils.isNotEmpty(filePermissions)) { BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); batchReq.setFilePermissions(filePermissions); - log.info("同步待办拉取项目时,批量更新权限,数量为:{}",filePermissions.size()); + log.info("同步待办拉取项目时,批量更新权限,数量为:{}", filePermissions.size()); SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); - log.info("同步待办拉取项目时,批量更新权限结果为:{}",response); + log.info("同步待办拉取项目时,批量更新权限结果为:{}", response); } return spdmProjectNodeEditReq; } - private SdmResponse handleRelatedProjectTodo(List projectNodeList, List relatedProjectVTodoEmulationInfoDMList, Long tenantId,Long userId,String jobNumber,String userName) { + private SdmResponse handleRelatedProjectTodo(List projectNodeList, List relatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) { return httpSyncTodoData(projectNodeList, relatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName); } - private SdmResponse httpSyncTodoData(List projectNodeList, List todoInfoList, Long tenantId,Long userId,String jobNumber,String userName) { + private SdmResponse httpSyncTodoData(List projectNodeList, List todoInfoList, Long tenantId, Long userId, String jobNumber, String userName) { String traceId = MdcUtil.getTraceId(); CompletableFuture syncTodoDataFeature = CompletableFuture.supplyAsync(() -> syncTodoData(projectNodeList, todoInfoList, traceId, tenantId, userId, jobNumber, userName)); @@ -3209,5 +3216,162 @@ public class LyricInternalServiceImpl implements ILyricInternalService { return resultList; } + private void syncTodoPhase(String curDateStr, Long projectId, String currentPhase, String projectNodeId,SpdmAddDemandReq req) { + Long tenantId = req.getTenantId(); + Long jobNumber = req.getCreator(); + List currentNodeList; + List addNodeList = new ArrayList<>(); + // 构建阶段——机台——工位节点树 + // 根据projectId查询项目机台工位信息的视图 + List projectStationList = new ArrayList<>(); + try { + projectStationList = lyricVProjectStationToDmService.lambdaQuery() + .eq(LyricVProjectStationToDM::getProjectId, projectId) + .list(); + } catch (MyBatisSystemException ex) { + // 查询发生异常,记录异常日志(可能是测试环境预期异常) + log.warn("查询项目机台工位信息的视图时发生异常(可能是测试环境预期异常),项目id:{},异常信息:{}", + projectId, ex.getMessage()); + } + if (CollectionUtils.isNotEmpty(projectStationList)) { + // 同步EP中的节点、机台、工位到DM + SpdmProjectNodeEditReq phaseNode = new SpdmProjectNodeEditReq(); + phaseNode.setUuid(RandomUtil.generateString(32)); + phaseNode.setNodeCode(currentPhase); + phaseNode.setNodeName(currentPhase); + phaseNode.setNodeType(NodeTypeEnum.PHASE.getValue()); + phaseNode.setCreateTime(curDateStr); + phaseNode.setCreator(jobNumber); + phaseNode.setTenantId(tenantId); + phaseNode.setProjectSource(SYNC_PROJECT_SOURCE); + phaseNode.setPid(projectNodeId); + addNodeList.add(phaseNode); + // 机台、工位 + Map> machineMap = projectStationList.stream().collect(Collectors.groupingBy(LyricVProjectStationToDM::getMachineNumber)); + for (Map.Entry> machineEntry : machineMap.entrySet()) { + String machineNumber = machineEntry.getKey(); + List projectStationByMachineNumberList = machineEntry.getValue(); + SpdmProjectNodeEditReq machineNode = new SpdmProjectNodeEditReq(); + machineNode.setUuid(RandomUtil.generateString(32)); + machineNode.setNodeCode(machineNumber); + machineNode.setNodeName(projectStationByMachineNumberList.get(0).getMachineName()); + machineNode.setNodeType(NodeTypeEnum.MACHINE.getValue()); + machineNode.setCreateTime(curDateStr); + machineNode.setCreator(jobNumber); + machineNode.setTenantId(tenantId); + machineNode.setProjectSource(SYNC_PROJECT_SOURCE); + machineNode.setPid(phaseNode.getUuid()); + addNodeList.add(machineNode); + // 从EP拉取机台时,创建一个工位,一个机台建一个工位,用机台的编号加上M,例如01机台,工位名称和工位号都叫 01-M + SpdmProjectNodeEditReq fixedWorkspaceNode = new SpdmProjectNodeEditReq(); + fixedWorkspaceNode.setUuid(RandomUtil.generateString(32)); + fixedWorkspaceNode.setNodeCode(machineNumber + "-M"); + fixedWorkspaceNode.setNodeName(machineNumber + "-M"); + fixedWorkspaceNode.setNodeType(NodeTypeEnum.WORKSPACE.getValue()); + fixedWorkspaceNode.setCreateTime(curDateStr); + fixedWorkspaceNode.setCreator(jobNumber); + fixedWorkspaceNode.setTenantId(tenantId); + fixedWorkspaceNode.setProjectSource(SYNC_PROJECT_SOURCE); + fixedWorkspaceNode.setPid(machineNode.getUuid()); + addNodeList.add(fixedWorkspaceNode); + for (LyricVProjectStationToDM lyricVProjectStationToDM : projectStationByMachineNumberList) { + SpdmProjectNodeEditReq workspaceNode = new SpdmProjectNodeEditReq(); + workspaceNode.setUuid(RandomUtil.generateString(32)); + workspaceNode.setNodeCode(lyricVProjectStationToDM.getStationNum()); + workspaceNode.setNodeName(lyricVProjectStationToDM.getStationName()); + workspaceNode.setNodeType(NodeTypeEnum.WORKSPACE.getValue()); + workspaceNode.setCreateTime(curDateStr); + workspaceNode.setCreator(jobNumber); + workspaceNode.setTenantId(tenantId); + workspaceNode.setProjectSource(SYNC_PROJECT_SOURCE); + workspaceNode.setPid(machineNode.getUuid()); + addNodeList.add(workspaceNode); + } + } + } + + List tagMap = new ArrayList<>(); + TaskNodeTag projectTaskNodeTag = new TaskNodeTag(); + projectTaskNodeTag.setKey(NodeTypeEnum.PROJECT.getValue()); + projectTaskNodeTag.setValue("tag1"); + TaskNodeTag phaseTaskNodeTag = new TaskNodeTag(); + phaseTaskNodeTag.setKey(NodeTypeEnum.PHASE.getValue()); + phaseTaskNodeTag.setValue("tag2"); + TaskNodeTag machineTaskNodeTag = new TaskNodeTag(); + machineTaskNodeTag.setKey(NodeTypeEnum.MACHINE.getValue()); + machineTaskNodeTag.setValue("tag4"); + TaskNodeTag workspaceTaskNodeTag = new TaskNodeTag(); + workspaceTaskNodeTag.setKey(NodeTypeEnum.WORKSPACE.getValue()); + workspaceTaskNodeTag.setValue("tag5"); + tagMap.add(projectTaskNodeTag); + tagMap.add(phaseTaskNodeTag); + tagMap.add(machineTaskNodeTag); + tagMap.add(workspaceTaskNodeTag); + for (TaskNodeTag tagReq : tagMap) { + String currentNodeType = tagReq.getKey(); // project phase + log.info("当前nodeType为:{},tag为:{}", currentNodeType, tagReq.getValue()); + currentNodeList = addNodeList.stream().filter(node -> node.getNodeType().equals(currentNodeType)).toList(); // projectNodeList phaseNodeList + if (CollectionUtils.isEmpty(currentNodeList)) { + log.error("addNodeList中不存在{}类型的节点", currentNodeType); + continue; + } + SpdmProjectNodeEditReq eachSpdmProjectNodeEditReq; + String tagListProperty; + for (SpdmProjectNodeEditReq addNode : currentNodeList) { + if (StringUtils.isBlank(addNode.getUuid())) { + addNode.setUuid(RandomUtil.generateString(32)); + } + String pid = addNode.getPid(); + if (StringUtils.isBlank(pid)) { + try { + // tagReq.getValue()="Tag1" + setTagProperty(addNode, tagReq.getValue(), addNode.getUuid()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } else { + // 复制父节点的tag + eachSpdmProjectNodeEditReq = addNodeList.stream().filter(node -> pid.equals(node.getUuid())).findFirst().orElse(null); + if (ObjectUtils.isNotEmpty(eachSpdmProjectNodeEditReq)) { + for (int i = 1; i <= 10; i++) { + try { + tagListProperty = getTagProperty(eachSpdmProjectNodeEditReq, "tag" + i); + if (StringUtils.isBlank(tagListProperty)) { + continue; + } + setTagProperty(addNode, "tag" + i, tagListProperty); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + try { + // tagReq.getValue()="Tag1" + setTagProperty(addNode, tagReq.getValue(), addNode.getUuid()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + // 设置 当前节点所属项目根节点uuid + // addNode.getPid()为空时,在创建项目,ownRootNodeUuid就是addNode本身uuid + // addNode.getPid()不为空时,在创建阶段,ownRootNodeUuid就是入参的pid父节点 + addNode.setOwnRootNodeUuid(ObjectUtils.isEmpty(addNode.getPid()) ? addNode.getUuid() : addNode.getPid()); + addNode.setCreateTime(curDateStr); + addNode.setCreator(jobNumber); + addNode.setTenantId(tenantId); + } + } + + if (nodeMapper.addNodeBatch(addNodeList) <= 0) { + return ; + } + + // 批量创建文件夹 + batchCreateNodeDir(addNodeList); + + + } + } diff --git a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java index 28634cec..c0c33ec4 100644 --- a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java @@ -686,7 +686,7 @@ public class NodeServiceImpl extends ServiceImpl dmProjectNodeList = nodeList.stream().filter(node -> !SYNC_PROJECT_SOURCE.equals(node.getProjectSource())).toList(); if (CollectionUtils.isNotEmpty(epProjectNodeList)) { // 设置EP类型项目 - setEpCurrentPhase(dmProjectNodeList); + setEpCurrentPhase(epProjectNodeList); } if (CollectionUtils.isNotEmpty(dmProjectNodeList)) { // 设置自建类型项目