Merge branch 'main' of 192.168.65.198:toolchaintechnologycenter/spdm-backend into dev-glc

This commit is contained in:
2026-03-11 10:08:04 +08:00
3 changed files with 239 additions and 59 deletions

View File

@@ -202,10 +202,10 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
private LyricVProjectStationExcepTionToDMMapper lyricVProjectStationExcepTionToDMMapper;
// 拉取的EP项目设置项目经理权限时暂时写死为仿真组的19个用户
List<Long> epFixManagerUserIdList = Arrays.asList(2003641538857771009L,2003641499053826049L,2000891541365284865L,
2003641270736887809L,2000891541367895412L,2000891541367892039L,2017165368993247238L,2017165370440282114L,
2017165373720227852L,2017166413785972745L,2017166413785972746L,2017166413785972749L,2017166413785972753L,
2017166413785972755L,2017166413785972758L,2017166413785972774L,2017166413785972780L,2017166417586012738L,
List<Long> 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<SimulationNode> projectNodeList,
List<LyricVTodoEmulationInfoDM> todoInfoList, String traceId, Long tenantId,Long userId,String jobNumber,String userName) {
List<LyricVTodoEmulationInfoDM> 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<SpdmDemandRelateMemberReq> memberList = buildDemandMemberList(todo, demandUuid, userId, curDateStr);
List<SpdmDemandExtraReq> 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<SimulationNode> 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<SimulationNode> 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<LyricVTodoEmulationInfoDM> 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<LyricVTodoEmulationInfoDM> 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<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList;
@@ -2275,29 +2281,29 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// 关联的项目未在系统
// 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)创建任务(不创建任务文件夹,等下发时进行创建)
if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) {
List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId,jobNumber,userName);
log.info("httpSyncHandleNoRelatedProjectTodo响应值为{}",spdmProjectNodeEditReqList);
List<SpdmProjectNodeEditReq> 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<PageDataResp<List<LyricVProjectStationExcepTionToDM>>> queryEncExceptionByTaskId(String taskId,Integer current, Integer size) {
public SdmResponse<PageDataResp<List<LyricVProjectStationExcepTionToDM>>> queryEncExceptionByTaskId(String taskId, Integer current, Integer size) {
// taskId --> project code & station code
List<SimulationEncNodeVO> 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<LyricVProjectStationExcepTionToDM> lyricEncInfos = lyricVProjectStationExcepTionToDMMapper.queryExceptionByProjectAndStation(projectNodeCode, workspaceNodeCode);
log.info("queryEncExceptionByTaskId lyric db back:{}",lyricEncInfos.size());
log.info("queryEncExceptionByTaskId lyric db back:{}", lyricEncInfos.size());
PageInfo<LyricVProjectStationExcepTionToDM> pageList = new PageInfo<>(lyricEncInfos);
SdmResponse<PageDataResp<List<LyricVProjectStationExcepTionToDM>>> response = PageUtils.getJsonObjectSdmResponse(pageList.getList(), pageList);
return response;
}
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) {
CompletableFuture<List<SpdmProjectNodeEditReq>> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() ->
handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId,jobNumber,userName));
handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName));
try {
List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS);
return spdmProjectNodeEditReqList;
@@ -2349,7 +2355,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) {
// 尝试获取锁(立即返回,不等待)
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<SpdmProjectNodeEditReq> 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<SpdmProjectNodeEditReq> currentNodeList;
@@ -2978,7 +2985,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
item.setUuid(spdmProjectNodeEditReq.getUuid());
Map<Long, Byte> 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<SimulationNode> projectNodeList, List<LyricVTodoEmulationInfoDM> relatedProjectVTodoEmulationInfoDMList, Long tenantId,Long userId,String jobNumber,String userName) {
private SdmResponse handleRelatedProjectTodo(List<SimulationNode> projectNodeList, List<LyricVTodoEmulationInfoDM> relatedProjectVTodoEmulationInfoDMList, Long tenantId, Long userId, String jobNumber, String userName) {
return httpSyncTodoData(projectNodeList, relatedProjectVTodoEmulationInfoDMList, tenantId, userId, jobNumber, userName);
}
private SdmResponse httpSyncTodoData(List<SimulationNode> projectNodeList, List<LyricVTodoEmulationInfoDM> todoInfoList, Long tenantId,Long userId,String jobNumber,String userName) {
private SdmResponse httpSyncTodoData(List<SimulationNode> projectNodeList, List<LyricVTodoEmulationInfoDM> todoInfoList, Long tenantId, Long userId, String jobNumber, String userName) {
String traceId = MdcUtil.getTraceId();
CompletableFuture<SdmResponse> 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<SpdmProjectNodeEditReq> currentNodeList;
List<SpdmProjectNodeEditReq> addNodeList = new ArrayList<>();
// 构建阶段——机台——工位节点树
// 根据projectId查询项目机台工位信息的视图
List<LyricVProjectStationToDM> 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<String, List<LyricVProjectStationToDM>> machineMap = projectStationList.stream().collect(Collectors.groupingBy(LyricVProjectStationToDM::getMachineNumber));
for (Map.Entry<String, List<LyricVProjectStationToDM>> machineEntry : machineMap.entrySet()) {
String machineNumber = machineEntry.getKey();
List<LyricVProjectStationToDM> 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<TaskNodeTag> 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);
}
}

View File

@@ -686,7 +686,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
List<SpdmNodeVo> 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)) {
// 设置自建类型项目