1、同步EP项目时,专项代表从PDT视图拉取

This commit is contained in:
2026-03-17 07:47:57 +08:00
parent 0c0918477f
commit 3814a95ccb

View File

@@ -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<String, Long> usernameToUserIdMap = new HashMap<>();
UserListReq userListReq = new UserListReq();
userListReq.setTenantId(tenantId);
userListReq.setCurrent(1);
userListReq.setSize(9999);
SdmResponse<PageDataResp<List<CIDUserResp>>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq);
if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) {
List<CIDUserResp> userList = pageDataRespSdmResponse.getData().getData();
usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId));
}
if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) {
List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName);
List<SpdmProjectNodeEditReq> 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<SpdmProjectNodeEditReq> httpSyncHandleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) {
private List<SpdmProjectNodeEditReq> httpSyncHandleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName,Map<String, Long> usernameToUserIdMap) {
CompletableFuture<List<SpdmProjectNodeEditReq>> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() ->
handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName));
handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName,usernameToUserIdMap));
try {
List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS);
return spdmProjectNodeEditReqList;
@@ -2559,7 +2572,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
}
private List<SpdmProjectNodeEditReq> handleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) {
private List<SpdmProjectNodeEditReq> handleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName,Map<String, Long> 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<LyricVPdtToDM> pdtToDMList = lyricVPdtDmService.lambdaQuery().eq(LyricVPdtToDM::getProjectRole, SIMULATION_REPRESENTATIVE)
.in(LyricVPdtToDM::getProjectNum, projectNumList).list();
Map<String, List<LyricVPdtToDM>> pdtMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(pdtToDMList)) {
pdtMap = pdtToDMList.stream().collect(Collectors.groupingBy(LyricVPdtToDM::getProjectNum));
}
List<SpdmNodeRelateMemberReq> allNodeManagerList = new ArrayList<>();
List<LyricVPdtToDM> 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<String, List<LyricVPdtToDM>> pdtMap,Map<String, Long> 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<Long, Byte> userPermissions = new HashMap<>();
for (Long userId : epFixManagerUserIdList) {
userPermissions.put(userId, FilePermissionEnum.ALL.getValue());
List<LyricVPdtToDM> 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<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = new ArrayList<>();
try {
List<SpdmNodeRelateMemberReq> allNodeManagerList = new ArrayList<>();
SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, userId);
// 将利元亨的用户工号与userId映射
Map<String, Long> usernameToUserIdMap = new HashMap<>();
UserListReq userListReq = new UserListReq();
userListReq.setTenantId(tenantId);
userListReq.setCurrent(1);
userListReq.setSize(9999);
SdmResponse<PageDataResp<List<CIDUserResp>>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq);
if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) {
List<CIDUserResp> userList = pageDataRespSdmResponse.getData().getData();
usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId));
}
List<LyricVPdtToDM> pdtToDMList = lyricVPdtDmService.lambdaQuery().eq(LyricVPdtToDM::getProjectNum, lyricVProjectToDM.getProjectNum())
.eq(LyricVPdtToDM::getProjectRole, SIMULATION_REPRESENTATIVE)
.list();
Map<String, List<LyricVPdtToDM>> 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)) {