From fa43e36a0b89270011df6e83c58a2fb438da6957 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 10 Feb 2026 08:41:37 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=90=8C=E6=AD=A5=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 8 +- .../SimulationLyricNodeController.java | 11 +- .../sdm/project/dao/SimulationTaskMapper.java | 10 ++ .../model/entity/SimulationTaskAttention.java | 3 + .../model/req/SpdmDemandRelateMemberReq.java | 1 + .../schedule/lyric/LyricTodoListSchedule.java | 2 +- .../service/ILyricInternalService.java | 2 +- .../impl/LyricInternalServiceImpl.java | 151 ++++++++++++------ .../project/service/impl/NodeServiceImpl.java | 37 ++++- .../impl/SimulationTaskServiceImpl.java | 17 +- .../project/service/impl/TaskServiceImpl.java | 40 +++++ .../main/resources/application-dev-190.yml | 6 +- .../src/main/resources/application-dev-65.yml | 5 +- .../src/main/resources/application-local.yml | 2 +- .../src/main/resources/application-lyric.yml | 5 +- .../src/main/resources/application-prod.yml | 5 +- .../src/main/resources/application-test.yml | 5 +- .../src/main/resources/application-yian.yml | 5 +- .../resources/mapper/SimulationTaskMapper.xml | 37 +++++ 19 files changed, 280 insertions(+), 72 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 097422c2..21f512b4 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -24,10 +24,10 @@ - - - - + + + + diff --git a/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java b/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java index f2c0af47..afe558e0 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java @@ -12,6 +12,8 @@ import com.sdm.project.model.req.ep.EpSyncPhaseReq; import com.sdm.project.service.IDemandService; import com.sdm.project.service.ILyricInternalService; import com.sdm.project.service.ISimulationLyricNodeService; +import com.sdm.project.service.ISimulationTaskService; +import com.sdm.project.service.impl.TaskServiceImpl; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +38,11 @@ public class SimulationLyricNodeController { @Resource private IDemandService demandService; + @Autowired + private TaskServiceImpl taskServiceImpl; + + @Autowired + private ISimulationTaskService simulationTaskService; @GetMapping("/updateApprovalStatus") @Operation(summary = "仿真节点审批状态更新", description = "仿真节点审批状态更新") @@ -51,8 +58,8 @@ public class SimulationLyricNodeController { @GetMapping("/optimisedGetTodoList") @Operation(summary = "获取待办列表(优化版)", description = "获取待办列表(优化版)") - public SdmResponse optimisedGetTodoList(@RequestParam(value = "startTime") @Validated String startTime,@RequestParam(value = "endTime") @Validated String endTime) { - return lyricInternalService.optimisedGetTodoList("http",startTime,endTime); + public SdmResponse optimisedGetTodoList() { + return lyricInternalService.optimisedGetTodoList("http"); } @GetMapping("/getProjectList") diff --git a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java index e0ae26ac..3e6c4b71 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java @@ -6,6 +6,9 @@ import com.sdm.common.entity.resp.project.SpdmTaskVo; import com.sdm.outbridge.mode.SimulationTaskSyncExBo; import com.sdm.project.model.entity.SimulationTask; import com.sdm.common.entity.resp.project.TaskNodeExtraPo; +import com.sdm.project.model.entity.SimulationTaskAttention; +import com.sdm.project.model.entity.SimulationTaskExtra; +import com.sdm.project.model.entity.SimulationTaskMember; import com.sdm.project.model.req.SpdmAnalysisTaskListReq; import com.sdm.project.model.req.*; import com.sdm.project.model.vo.*; @@ -72,4 +75,11 @@ public interface SimulationTaskMapper extends BaseMapper { List queryLyricAllTasksDatas(@Param("offset")int offset, @Param("pageSize")int pageSize); + void saveBatchTask(@Param("list") List tasksToCreate); + + void saveBatchTaskExtra(@Param("list") List taskExtrasToCreate); + + void saveBatchTaskMember(@Param("list") List taskMembersToCreate); + + void saveBatchTaskAttention(@Param("list") List taskAttentionsToCreate); } diff --git a/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java b/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java index 4bc189ae..9dd4bbb9 100644 --- a/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java +++ b/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java @@ -57,4 +57,7 @@ public class SimulationTaskAttention implements Serializable { @TableField("update_time") private String updateTime; + @TableField(exist = false) + private Long creatorValue; + } diff --git a/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java b/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java index b67aa311..9f23d2f0 100644 --- a/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java +++ b/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java @@ -27,5 +27,6 @@ public class SpdmDemandRelateMemberReq extends BaseEntity { private String name; private Long userId; + private String userIdStr; } diff --git a/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java b/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java index 1afc2472..6a690ca4 100644 --- a/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java +++ b/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java @@ -36,7 +36,7 @@ public class LyricTodoListSchedule { ThreadLocalContext.setTenantId(paramJson.getLong("tenantId")); ThreadLocalContext.setUserId(paramJson.getLong("userId")); long startTime = System.currentTimeMillis(); - SdmResponse response = lyricInternalService.getTodoList("schedule"); + SdmResponse response = lyricInternalService.optimisedGetTodoList("schedule"); long endTime = System.currentTimeMillis(); long second = (endTime - startTime) / 1000; log.info("{} lyricTodoListHandler cost [{}] s", traceId,second); diff --git a/project/src/main/java/com/sdm/project/service/ILyricInternalService.java b/project/src/main/java/com/sdm/project/service/ILyricInternalService.java index 82d84721..d05fe595 100644 --- a/project/src/main/java/com/sdm/project/service/ILyricInternalService.java +++ b/project/src/main/java/com/sdm/project/service/ILyricInternalService.java @@ -52,5 +52,5 @@ public interface ILyricInternalService { SdmResponse listNoPermission(SpdmNodeListReq req); - SdmResponse optimisedGetTodoList(String http,String startTime,String endTime); + SdmResponse optimisedGetTodoList(String http); } 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 569eb217..2a9fb31a 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 @@ -99,9 +99,10 @@ public class LyricInternalServiceImpl implements ILyricInternalService { private static final String CACHE_NAME_SYNC_TODO = "syncTodo"; private static final String CACHE_KEY_TODO = "todo"; - private static final long SYNC_INTERVAL_MS = 30 * 1000L; + private static final long SYNC_INTERVAL_MS = 60 * 1000L; private static final String DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss"; private static final int UUID_LENGTH = 32; + private static final String PROJECT_STAGE = "PROJECT_STAGE"; // 同步待办锁 private final ReentrantLock syncTodoInfoLock = new ReentrantLock(); @@ -185,8 +186,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService { private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 同步待办时,查询待办的最大时间间隔,单位:天 -// @Value("${lyricTodoInterval:7}") -// private int lyricTodoInterval; + @Value("${lyricTodoInterval:90}") + private int lyricTodoInterval; /** * 判断字符串是否可以安全转换为Long类型 @@ -389,12 +390,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 1. 构建需求基础参数 + 成员 + 权限 SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr); List memberList = buildDemandMemberList(todo, demandUuid, jobNumber, curDateStr); + List demandExtraList = buildDemandExtraList(todo, demandUuid, jobNumber, curDateStr); // 2. 构建权限更新参数 buildPermissionReqList(demandUuid, jobNumber, todo, updatePermissionList, usernameToUserIdMap); // 3. 构建需求文件夹节点 demandDirNodeList.add(buildDemandDirNode(demandUuid, projectNode, demandReq.getDemandName())); // 4. 异步保存需求数据 - asyncSaveDemandData(demandReq, memberList, tenantId, jobNumber, usernameToUserIdMap); + asyncSaveDemandData(demandReq, memberList, tenantId, jobNumber, usernameToUserIdMap,demandExtraList); SimulationDemand demand = new SimulationDemand(); BeanUtils.copyProperties(demandReq, demand); @@ -429,6 +431,17 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } } + private List buildDemandExtraList(LyricVTodoEmulationInfoDM todo, String demandUuid, Long jobNumber, String curDateStr) { + List demandExtraReqList = new ArrayList<>(); + SpdmDemandExtraReq spdmDemandExtraReq = new SpdmDemandExtraReq(); + spdmDemandExtraReq.setDemandId(demandUuid); + spdmDemandExtraReq.setPropertyName(PROJECT_STAGE); + spdmDemandExtraReq.setPropertyValue(todo.getProjectStage()); + spdmDemandExtraReq.setCreateTime(curDateStr); + demandExtraReqList.add(spdmDemandExtraReq); + return demandExtraReqList; + } + /** * 构建项目级文件夹创建参数 */ @@ -462,6 +475,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { req.setEndTime(todo.getClosedTime()); req.setCreateTime(curDateStr); req.setDemandSource(SYNC_PROJECT_SOURCE); + req.setCreator(Long.valueOf(todo.getIntroduceBy())); // 补充项目/阶段/工位ID fillProjectPhaseWorkspaceId(req, todo); @@ -526,11 +540,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService { List memberList = new ArrayList<>(); // 仿真负责人 - addDemandMember(todo.getEmulationPerformer(), 0, demandUuid, jobNumber, curDateStr, memberList); + addDemandMember(todo.getVerifierNo(), MemberTypeEnum.PRINCIPAL.getCode(), demandUuid, jobNumber, curDateStr, memberList); // 仿真执行人 - addDemandMember(todo.getEmulationExecutor(), 1, demandUuid, jobNumber, curDateStr, memberList); + addDemandMember(todo.getFollowBy(), MemberTypeEnum.EXECUTOR.getCode(), demandUuid, jobNumber, curDateStr, memberList); // 3D负责人 - addDemandMember(todo.getThreeDimensionalPerformer(), 2, demandUuid, jobNumber, curDateStr, memberList); +// addDemandMember(todo.getThreeDimensionalPerformer(), MemberTypeEnum.THREED.getCode(), demandUuid, jobNumber, curDateStr, memberList); return memberList; } @@ -548,18 +562,25 @@ public class LyricInternalServiceImpl implements ILyricInternalService { return; } - SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq(); - memberReq.setDemandId(demandUuid); - memberReq.setType(type); - memberReq.setCreateTime(curDateStr); - memberReq.setCreator(jobNumber); - String userIdStr = memberStr.split("-")[0]; - if (isConvertibleToLong(userIdStr)) { - memberReq.setUserId(Long.valueOf(userIdStr)); + String[] userIdStr; + if (MemberTypeEnum.PRINCIPAL.getCode().equals(type) || MemberTypeEnum.EXECUTOR.getCode().equals(type)) { + userIdStr = memberStr.split(","); + } { + userIdStr = memberStr.split("-"); + } + if (ObjectUtils.isEmpty(userIdStr)) { + return; + } + for (String userId : userIdStr) { + SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq(); + memberReq.setDemandId(demandUuid); + memberReq.setType(type); + memberReq.setCreateTime(curDateStr); + memberReq.setCreator(jobNumber); + memberReq.setUserIdStr(userId); + memberList.add(memberReq); } - - memberList.add(memberReq); } /** @@ -574,9 +595,32 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // permissionList.add(buildUpdatePermissionReq(demandUuid, currentUserId, null)); // 仿真负责人权限 - addPermissionReq(usernameToUserIdMap.get(todo.getVerifier()), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode()); + String verifier = todo.getVerifier(); + if (StringUtils.isNotBlank(verifier)) { + String[] pArray = verifier.split(","); + for (String pUserId : pArray) { + addPermissionReq(usernameToUserIdMap.get(pUserId), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode()); + } + } + // 需求创建人权限 - addPermissionReq(usernameToUserIdMap.get(todo.getIntroduceBy()), demandUuid, permissionList, MemberTypeEnum.CREATOR.getCode()); + String introduceBy = todo.getIntroduceBy(); + if (StringUtils.isNotBlank(introduceBy)) { + String[] iArray = introduceBy.split(","); + for (String iUserId : iArray) { + addPermissionReq(usernameToUserIdMap.get(iUserId), demandUuid, permissionList, MemberTypeEnum.CREATOR.getCode()); + } + } + + // 需求执行人权限 + String followBy = todo.getFollowBy(); + if (StringUtils.isNotBlank(followBy)) { + String[] fArray = followBy.split(","); + for (String fUserId : fArray) { + addPermissionReq(usernameToUserIdMap.get(fUserId), demandUuid, permissionList, MemberTypeEnum.EXECUTOR.getCode()); + } + } + } /** @@ -627,10 +671,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService { List memberList, Long tenantId, Long jobNumber, - Map usernameToUserIdMap) { + Map usernameToUserIdMap, + List demandExtraList) { CompletableFuture.runAsync(() -> { try { - demandMapper.addDemand(demandReq, tenantId, jobNumber); + demandMapper.addDemand(demandReq, tenantId, demandReq.getCreator()); if (CollectionUtils.isNotEmpty(memberList)) { for (SpdmDemandRelateMemberReq member : memberList) { Long cidUserId = usernameToUserIdMap.get(String.valueOf(member.getUserId())); @@ -640,6 +685,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } demandMapper.addDemandMember(memberList); } + if (CollectionUtils.isNotEmpty(demandExtraList)) { + demandMapper.addDemandExtra(demandExtraList); + } } catch (Exception e) { log.error("异步保存需求[{}]数据异常: ", demandReq.getDemandCode(), e); } @@ -2118,7 +2166,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } @Override - public SdmResponse optimisedGetTodoList(String http, String startTime, String endTime) { + public SdmResponse optimisedGetTodoList(String http) { Long tenantId = ThreadLocalContext.getTenantId(); Long jobNumber = ThreadLocalContext.getUserId(); @@ -2129,19 +2177,19 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } // TODO 现场手动同步完成后,根据配置文件动态计算拉取待办的开始、结束时间 -// String[] timeArray = calculateTimeRange(lyricTodoInterval); -// String startTime = timeArray[0]; -// String endTime = timeArray[1]; + String[] timeArray = calculateTimeRange(lyricTodoInterval); + String startTime = timeArray[0]; + String endTime = timeArray[1]; // 先查询系统内所有待办(90天内仿真类型),同步历史待办时,先取startTime和endTime,同步固定某段时间内的待办 List lyricVTodoEmulationInfoDMList = queryTodoListWithFixedTime(startTime, endTime); - + log.info("{}天内,共有{}个待办",lyricTodoInterval,lyricVTodoEmulationInfoDMList.size()); // 待办信息在系统中是否都已经存在 if (CollectionUtils.isEmpty(lyricVTodoEmulationInfoDMList)) { log.info("lyricVTodoEmulationInfoDMList为空"); return SdmResponse.success(); } - log.info("本次共同步待办:{}个",lyricVTodoEmulationInfoDMList.stream()); + log.info("本次共同步待办:{}个",lyricVTodoEmulationInfoDMList.size()); // 根据待办关联的项目情况,分为关联的项目已在系统和关联的项目未在系统两部分数据 List noRelatedProjectVTodoEmulationInfoDMList; @@ -2480,6 +2528,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService { folderItemReq.setFolderUuid(RandomUtil.generateString(32)); folderItemReqList.add(folderItemReq); batchCreateNormalDirReq.setFolderItems(folderItemReqList); + batchCreateNormalDirReq.setSkipPermissionCheck(true); log.info("创建【项目文件】文件夹请求参数:{}", batchCreateNormalDirReq); try { SdmResponse response = dataFeignClient.batchCreateNormalDirs(batchCreateNormalDirReq); @@ -2513,12 +2562,14 @@ public class LyricInternalServiceImpl implements ILyricInternalService { spdmProjectNodeEditReq.setCreator(jobNumber); spdmProjectNodeEditReq.setTenantId(tenantId); spdmProjectNodeEditReq.setProjectSource(SYNC_PROJECT_SOURCE); - + spdmProjectNodeEditReq.setProjectId(Math.toIntExact(lyricVProjectToDM.getId())); + spdmProjectNodeEditReq.setNodeSubType("self_develop"); + addNodeList.add(spdmProjectNodeEditReq); // 根据projectId查询项目机台工位信息的视图 List projectStationList = new ArrayList<>(); try { projectStationList = lyricVProjectStationToDmService.lambdaQuery() - .eq(LyricVProjectStationToDM::getProjectId, spdmProjectNodeEditReq.getProjectId()) + .eq(LyricVProjectStationToDM::getProjectId, lyricVProjectToDM.getId()) .list(); } catch (MyBatisSystemException ex) { // 查询发生异常,记录异常日志(可能是测试环境预期异常) @@ -2666,27 +2717,27 @@ public class LyricInternalServiceImpl implements ILyricInternalService { // 批量创建文件夹 batchCreateNodeDir(addNodeList); - // 批量更新权限 - List filePermissions = new ArrayList<>(); - for (SpdmProjectNodeEditReq addNode : addNodeList) { - BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); - item.setUuid(addNode.getUuid()); - Map userPermissions = new HashMap<>(); - // 2026-02-09 因为项目视图中没有项目经理,这里将项目创建人当成项目经理 - userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue()); - item.setUserPermissions(userPermissions); - filePermissions.add(item); - } - if (CollectionUtils.isNotEmpty(filePermissions)) { - BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); - batchReq.setFilePermissions(filePermissions); - log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size()); - SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); - log.info("创建项目阶段时,批量更新权限结果:{}", response); - if (!response.isSuccess()) { - log.error("批量更新权限失败:{}", response.getMessage()); - } - } + // 批量更新权限 2026-02-09 先不授予权限,待后面设置项目经理时授予权限 (设置项目经理的权限需要控制好) +// List filePermissions = new ArrayList<>(); +// for (SpdmProjectNodeEditReq addNode : addNodeList) { +// BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); +// item.setUuid(addNode.getUuid()); +// Map userPermissions = new HashMap<>(); +// // 2026-02-09 因为项目视图中没有项目经理,这里将项目创建人当成项目经理 +// userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue()); +// item.setUserPermissions(userPermissions); +// filePermissions.add(item); +// } +// if (CollectionUtils.isNotEmpty(filePermissions)) { +// BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); +// batchReq.setFilePermissions(filePermissions); +// log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size()); +// SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); +// log.info("创建项目阶段时,批量更新权限结果:{}", response); +// if (!response.isSuccess()) { +// log.error("批量更新权限失败:{}", response.getMessage()); +// } +// } } 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 0dc99a76..52440cf9 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 @@ -1171,6 +1171,25 @@ public class NodeServiceImpl extends ServiceImpl userPermissions = new HashMap<>(); + userPermissions.put(userId, FilePermissionEnum.ZERO.getValue()); + updatePermissionReq.setUserPermissions(userPermissions); + log.info("编辑节点时,删除用户权限的参数为:{}", updatePermissionReq); + SdmResponse updatePermissionResponse = dataClientFeignClient.updatePermission(updatePermissionReq); + log.info("编辑节点时,删除用户权限的返回值为:{}", updatePermissionResponse); + } + private boolean editNode(List editNodeList, Long tenantId, Long jobNumber) { log.info("editNode参数为:{}", editNodeList); String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); @@ -1210,10 +1229,18 @@ public class NodeServiceImpl extends ServiceImpl nodeMemberList = nodeMapper.getNodeMemberListByNodeIdList(nodeIdList); + if (CollectionUtils.isNotEmpty(nodeMemberList)) { + // 先删除所有成员 + nodeMapper.deleteNodeMemberBatch(editNodeList.stream().map(SpdmNodeDetailReq::getUuid).toList()); + // 删除权限 + for (SpdmNodeMemberVo spdmNodeMemberVo : nodeMemberList) { + deletePermission(spdmNodeMemberVo.getUserId(),spdmNodeMemberVo.getNodeId()); + } + } + allNodeManagerList.forEach(node -> { node.setCreateTime(curDateStr); node.setCreator(jobNumber); @@ -1221,6 +1248,12 @@ public class NodeServiceImpl extends ServiceImpl createTaskMembers(SimulationDemand demand, String taskUuid) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SimulationDemandMember::getDemandId, demand.getUuid()); - queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.FOLLOWER.getCode()); + queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.SIMULATION_EXECUTOR.getCode()); List demandMembers = simulationDemandMemberService.list(queryWrapper); diff --git a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java index 404eac50..7ff6f1db 100644 --- a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java @@ -3911,6 +3911,10 @@ public class TaskServiceImpl implements ITaskService { SpdmBatchTaskOprTagReq spdmBatchTaskOprTagReq = new SpdmBatchTaskOprTagReq(); SpringBeanCopyUtil.copyPropertiesIgnoreNull(task, spdmBatchTaskOprTagReq); SpringBeanCopyUtil.copyPropertiesIgnoreNull(req, task); + // task设置nodeId + String maxNonEmptyTaskTag = getMaxNonEmptyTagForTask(task); + log.info("maxNonEmptyTaskTag为:{}",maxNonEmptyTaskTag); + task.setNodeId(maxNonEmptyTaskTag); if (!simulationTaskService.updateById(task)) { throw new RuntimeException("编辑任务:" + task.getTaskName() + "失败"); } @@ -4070,6 +4074,42 @@ public class TaskServiceImpl implements ITaskService { return SdmResponse.success(); } + public static String getMaxNonEmptyTagForTask(SimulationTask req) { + // 空对象校验 + if (req == null) { + return null; + } + + // 按编号从大到小检查,找到第一个非空值立即返回 + if (StringUtils.isNotBlank(req.getTag8())) { + return req.getTag8(); + } + if (StringUtils.isNotBlank(req.getTag7())) { + return req.getTag7(); + } + if (StringUtils.isNotBlank(req.getTag6())) { + return req.getTag6(); + } + if (StringUtils.isNotBlank(req.getTag5())) { + return req.getTag5(); + } + if (StringUtils.isNotBlank(req.getTag4())) { + return req.getTag4(); + } + if (StringUtils.isNotBlank(req.getTag3())) { + return req.getTag3(); + } + if (StringUtils.isNotBlank(req.getTag2())) { + return req.getTag2(); + } + if (StringUtils.isNotBlank(req.getTag1())) { + return req.getTag1(); + } + + // 所有 tag 都为空 + return null; + } + /** * 返回 tag 数字最大的不为空的值 * @param req SpdmBatchTaskOprTagReq 对象 diff --git a/project/src/main/resources/application-dev-190.yml b/project/src/main/resources/application-dev-190.yml index 3f35d92e..38f12b99 100644 --- a/project/src/main/resources/application-dev-190.yml +++ b/project/src/main/resources/application-dev-190.yml @@ -183,4 +183,8 @@ xxl: # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 0 \ No newline at end of file +lyricFlag : 0 + + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/application-dev-65.yml b/project/src/main/resources/application-dev-65.yml index b222c077..d920de1c 100644 --- a/project/src/main/resources/application-dev-65.yml +++ b/project/src/main/resources/application-dev-65.yml @@ -182,4 +182,7 @@ xxl: # xxljob 配置结束 # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 0 \ No newline at end of file +lyricFlag : 0 + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/application-local.yml b/project/src/main/resources/application-local.yml index abbca104..3f33270d 100644 --- a/project/src/main/resources/application-local.yml +++ b/project/src/main/resources/application-local.yml @@ -191,4 +191,4 @@ xxl: lyricFlag : 0 # 同步待办时,查询待办的最大时间间隔,单位:天 -#lyricTodoInterval : 7 \ No newline at end of file +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/application-lyric.yml b/project/src/main/resources/application-lyric.yml index e96615bc..d43e10b5 100644 --- a/project/src/main/resources/application-lyric.yml +++ b/project/src/main/resources/application-lyric.yml @@ -184,4 +184,7 @@ xxl: # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 1 \ No newline at end of file +lyricFlag : 1 + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 90 \ No newline at end of file diff --git a/project/src/main/resources/application-prod.yml b/project/src/main/resources/application-prod.yml index 712f2ca1..099b5265 100644 --- a/project/src/main/resources/application-prod.yml +++ b/project/src/main/resources/application-prod.yml @@ -144,4 +144,7 @@ scheduler: project: 10.11.00 # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 1 \ No newline at end of file +lyricFlag : 1 + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/application-test.yml b/project/src/main/resources/application-test.yml index 3cef6a89..e2e5a390 100644 --- a/project/src/main/resources/application-test.yml +++ b/project/src/main/resources/application-test.yml @@ -137,4 +137,7 @@ scheduler: project: 10.11.00 # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 0 \ No newline at end of file +lyricFlag : 0 + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/application-yian.yml b/project/src/main/resources/application-yian.yml index f3ca10f2..934c27c3 100644 --- a/project/src/main/resources/application-yian.yml +++ b/project/src/main/resources/application-yian.yml @@ -153,4 +153,7 @@ project: # 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) -lyricFlag : 0 \ No newline at end of file +lyricFlag : 0 + +# 同步待办时,查询待办的最大时间间隔,单位:天 +lyricTodoInterval : 7 \ No newline at end of file diff --git a/project/src/main/resources/mapper/SimulationTaskMapper.xml b/project/src/main/resources/mapper/SimulationTaskMapper.xml index 48f99c67..8e4cdbc3 100644 --- a/project/src/main/resources/mapper/SimulationTaskMapper.xml +++ b/project/src/main/resources/mapper/SimulationTaskMapper.xml @@ -10,6 +10,43 @@ + + insert into simulation_task (uuid,task_name,task_code,task_pool_name,task_pool_version,node_id,days,standard,fold_id,status,achieve_status,begin_time,end_time,progress,exe_status,confidence,analyse_target,analyse_software,approval_status,description,difficult,tenant_id + ,creator,create_time,department,sectionName,groupName,bCapacity,flowTemplate,englishName,demand_id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,imageFileId,discipline) values + + (#{it.uuid},#{it.taskName},#{it.taskCode},'','',#{it.nodeId},#{it.days},#{it.standard},'',1,0, + #{it.beginTime},#{it.endTime},0,1,#{it.confidence},#{it.analyseTarget},#{it.analyseSoftware},'0',#{it.description},#{it.difficult},#{it.tenantId}, + #{it.creator},#{it.createTime},#{it.department},#{it.sectionName},#{it.groupName},#{it.bCapacity},#{it.flowTemplate},#{it.englishName},#{it.demandId},#{it.tag1},#{it.tag2}, + #{it.tag3},#{it.tag4}, + #{it.tag5},#{it.tag6}, + #{it.tag7},#{it.tag8}, + #{it.tag9},#{it.tag10}, + #{it.imageFileId},#{it.discipline}) + + + + + + insert into simulation_task_member (task_id,identity,name,user_id,creator,create_time,type) values + + (#{addNodeMember.taskId},#{addNodeMember.identity},#{addNodeMember.name},#{addNodeMember.userId},#{addNodeMember.creator},#{addNodeMember.createTime},#{addNodeMember.type}) + + + + + insert into simulation_task_extra (task_id, property_name, property_value, value_type, property_class, creator, create_time) values + + (#{taskExtra.nodeId}, #{taskExtra.propertyName}, #{taskExtra.propertyValue}, #{taskExtra.valueType}, #{taskExtra.propertyClass}, #{taskExtra.creator}, #{taskExtra.createTime}) + + + + + insert into simulation_task_attention (task_id,identity,name,user_id,creator,create_time) values + + (#{attention.taskId},null,null,#{attention.userId},#{attention.creatorValue},#{attention.createTime}) + + + update simulation_task