From 3814a95ccb6f8ad0c08954349c40a6303733d995 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 17 Mar 2026 07:47:57 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=90=8C=E6=AD=A5EP=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=97=B6=EF=BC=8C=E4=B8=93=E9=A1=B9=E4=BB=A3=E8=A1=A8?= =?UTF-8?q?=E4=BB=8EPDT=E8=A7=86=E5=9B=BE=E6=8B=89=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LyricInternalServiceImpl.java | 101 ++++++++++++++---- 1 file changed, 82 insertions(+), 19 deletions(-) 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 b7ba6154..a2b24bad 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 @@ -227,6 +227,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService { private static final String STRUCTURE = "结构仿真"; private static final String TECHNOLOGY_CENTER = "技术中心"; + private static final String SIMULATION_REPRESENTATIVE = "仿真代表"; + /** * 判断字符串是否可以安全转换为Long类型 * @@ -2484,8 +2486,19 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 关联的项目未在系统 // 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)创建任务(不创建任务文件夹,等下发时进行创建) + // 将利元亨的用户工号与userId映射 + Map usernameToUserIdMap = new HashMap<>(); + UserListReq userListReq = new UserListReq(); + userListReq.setTenantId(tenantId); + userListReq.setCurrent(1); + userListReq.setSize(9999); + SdmResponse>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq); + if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) { + List userList = pageDataRespSdmResponse.getData().getData(); + usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId)); + } if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) { - List spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName); + List spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName,usernameToUserIdMap); log.info("httpSyncHandleNoRelatedProjectTodo响应值为:{}", spdmProjectNodeEditReqList); for (SpdmProjectNodeEditReq spdmProjectNodeEditReq : spdmProjectNodeEditReqList) { SimulationNode simulationNode = new SimulationNode(); @@ -2538,9 +2551,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } - 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,Map usernameToUserIdMap) { CompletableFuture> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() -> - handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName)); + handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName,usernameToUserIdMap)); try { List spdmProjectNodeEditReqList = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS); return spdmProjectNodeEditReqList; @@ -2559,7 +2572,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,Map usernameToUserIdMap) { // 尝试获取锁(立即返回,不等待) if (!syncTodoInfoProjectLock.tryLock()) { return new ArrayList<>(); @@ -2585,15 +2598,33 @@ public class LyricInternalServiceImpl implements ILyricInternalService { log.info("lyricVProjectToDMList为空"); return new ArrayList<>(); } + // 查询PDT视图中的仿真代表 + projectNumList = lyricVProjectToDMList.stream().map(LyricVProjectToDM::getProjectNum).toList(); + List pdtToDMList = lyricVPdtDmService.lambdaQuery().eq(LyricVPdtToDM::getProjectRole, SIMULATION_REPRESENTATIVE) + .in(LyricVPdtToDM::getProjectNum, projectNumList).list(); + Map> pdtMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(pdtToDMList)) { + pdtMap = pdtToDMList.stream().collect(Collectors.groupingBy(LyricVPdtToDM::getProjectNum)); + } List allNodeManagerList = new ArrayList<>(); + List eachPdtToDMList; for (LyricVProjectToDM lyricVProjectToDM : lyricVProjectToDMList) { - SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, userId); + SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, userId,pdtMap,usernameToUserIdMap); if (spdmProjectNodeEditReq != null) { + eachPdtToDMList = pdtMap.get(spdmProjectNodeEditReq.getNodeCode()); spdmProjectNodeEditReqList.add(spdmProjectNodeEditReq); - for (Long epFixManagerUserId : epFixManagerUserIdList) { + if (CollectionUtils.isEmpty(eachPdtToDMList)) { + log.info("项目:{},没有仿真代表",spdmProjectNodeEditReq.getNodeName()); + continue; + } + for (LyricVPdtToDM lyricVPdtToDM : eachPdtToDMList) { + Long pdtUserId = usernameToUserIdMap.get(lyricVPdtToDM.getUser()); + if (pdtUserId == null) { + continue; + } SpdmNodeRelateMemberReq simulationNodeMember = new SpdmNodeRelateMemberReq(); simulationNodeMember.setNodeId(spdmProjectNodeEditReq.getUuid()); - simulationNodeMember.setUserId(epFixManagerUserId); + simulationNodeMember.setUserId(pdtUserId); simulationNodeMember.setCreator(userId); simulationNodeMember.setCreateTime(curDateStr); simulationNodeMember.setType(NodeMemberTypeEnum.MANAGER.getCode()); @@ -2897,7 +2928,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { log.info("创建节点时,调用批量创建文件夹的返回值为:{}", response); } - private SpdmProjectNodeEditReq buildProjectForTodoInfo(LyricVProjectToDM lyricVProjectToDM, Long tenantId, Long jobNumber) { + private SpdmProjectNodeEditReq buildProjectForTodoInfo(LyricVProjectToDM lyricVProjectToDM, Long tenantId, Long jobNumber,Map> pdtMap,Map usernameToUserIdMap) { String curDateStr; Date createTime = lyricVProjectToDM.getCreateTime(); if (ObjectUtils.isNotEmpty(createTime)) { @@ -3206,8 +3237,16 @@ public class LyricInternalServiceImpl implements ILyricInternalService { BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); item.setUuid(spdmProjectNodeEditReq.getUuid()); Map userPermissions = new HashMap<>(); - for (Long userId : epFixManagerUserIdList) { - userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); + + List pdtToDMList = pdtMap.get(lyricVProjectToDM.getProjectNum()); + if (CollectionUtils.isNotEmpty(pdtToDMList)) { + for (LyricVPdtToDM lyricVPdtToDM : pdtToDMList) { + Long pdtUserId = usernameToUserIdMap.get(lyricVPdtToDM.getUser()); + if (pdtUserId == null) { + continue; + } + userPermissions.put(pdtUserId, FilePermissionEnum.ALL.getValue()); + } } item.setUserPermissions(userPermissions); filePermissions.add(item); @@ -4085,17 +4124,41 @@ public class LyricInternalServiceImpl implements ILyricInternalService { List spdmProjectNodeEditReqList = new ArrayList<>(); try { List allNodeManagerList = new ArrayList<>(); - SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, userId); + // 将利元亨的用户工号与userId映射 + Map usernameToUserIdMap = new HashMap<>(); + UserListReq userListReq = new UserListReq(); + userListReq.setTenantId(tenantId); + userListReq.setCurrent(1); + userListReq.setSize(9999); + SdmResponse>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq); + if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) { + List userList = pageDataRespSdmResponse.getData().getData(); + usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId)); + } + List pdtToDMList = lyricVPdtDmService.lambdaQuery().eq(LyricVPdtToDM::getProjectNum, lyricVProjectToDM.getProjectNum()) + .eq(LyricVPdtToDM::getProjectRole, SIMULATION_REPRESENTATIVE) + .list(); + Map> pdtMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(pdtToDMList)) { + pdtMap = pdtToDMList.stream().collect(Collectors.groupingBy(LyricVPdtToDM::getProjectNum)); + } + SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, userId,pdtMap,usernameToUserIdMap); if (spdmProjectNodeEditReq != null) { spdmProjectNodeEditReqList.add(spdmProjectNodeEditReq); - for (Long epFixManagerUserId : epFixManagerUserIdList) { - SpdmNodeRelateMemberReq simulationNodeMember = new SpdmNodeRelateMemberReq(); - simulationNodeMember.setNodeId(spdmProjectNodeEditReq.getUuid()); - simulationNodeMember.setUserId(epFixManagerUserId); - simulationNodeMember.setCreator(userId); - simulationNodeMember.setCreateTime(curDateStr); - simulationNodeMember.setType(NodeMemberTypeEnum.MANAGER.getCode()); - allNodeManagerList.add(simulationNodeMember); + if (CollectionUtils.isNotEmpty(pdtToDMList)) { + for (LyricVPdtToDM lyricVPdtToDM : pdtToDMList) { + Long pdtUserId = usernameToUserIdMap.get(lyricVPdtToDM.getUser()); + if (pdtUserId == null) { + continue; + } + SpdmNodeRelateMemberReq simulationNodeMember = new SpdmNodeRelateMemberReq(); + simulationNodeMember.setNodeId(spdmProjectNodeEditReq.getUuid()); + simulationNodeMember.setUserId(pdtUserId); + simulationNodeMember.setCreator(userId); + simulationNodeMember.setCreateTime(curDateStr); + simulationNodeMember.setType(NodeMemberTypeEnum.MANAGER.getCode()); + allNodeManagerList.add(simulationNodeMember); + } } } if (CollectionUtils.isNotEmpty(allNodeManagerList)) {