1、拉取待办时,若系统内不存在待办关联的阶段,则进行同步阶段、机台、工位
2、项目列表需要返回EP的当前阶段
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -689,7 +689,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)) {
|
||||
// 设置自建类型项目
|
||||
|
||||
Reference in New Issue
Block a user