Преглед изворни кода

调整上锁和解锁节点 分裂成4个

车车 пре 1 недеља
родитељ
комит
9a0f1696be

+ 27 - 23
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mappoint/workdesign/WorkflowWorkLogServiceImpl.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkLogDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkLogDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkNodeDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkNodeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkLogMapper;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkLogMapper;
+import cn.iocoder.yudao.module.iscs.enums.WorkTypeEnum;
 import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkNodeService;
 import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkNodeService;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
@@ -75,55 +76,58 @@ public class WorkflowWorkLogServiceImpl extends ServiceImpl<WorkflowWorkLogMappe
         LocalDateTime taskFinishTime = workflowWorkLogDO.getTaskFinishTime();
         LocalDateTime taskFinishTime = workflowWorkLogDO.getTaskFinishTime();
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         // 创建作业-createJob
         // 创建作业-createJob
-        if ("createJob".equals(nodeDO.getType())) {
+        if (WorkTypeEnum.CREATEJOB.value.equals(nodeDO.getType())) {
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已启动";
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已启动";
         }
         }
 
 
         // 确认-confirm
         // 确认-confirm
-        if ("confirm".equals(nodeDO.getType())) {
+        if (WorkTypeEnum.CONFIRM.value.equals(nodeDO.getType())) {
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
         }
         }
 
 
         // 审核-review
         // 审核-review
-        if ("review".equals(nodeDO.getType())) {
+        if (WorkTypeEnum.REVIEW.value.equals(nodeDO.getType())) {
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
         }
         }
 
 
         // 录入信息-inputInfo
         // 录入信息-inputInfo
-        if ("inputInfo".equals(nodeDO.getType())) {
+        if (WorkTypeEnum.INPUTINFO.value.equals(nodeDO.getType())) {
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
         }
         }
 
 
-        // 隔离/方案-isolation
-        if ("isolation".equals(nodeDO.getType())) {
-            if ("2".equals(nodeDO.getNodeProgress())) {
-                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "取锁完成";
+        // 上锁lock
+        if (WorkTypeEnum.LOCK.value.equals(nodeDO.getType())) {
+            if ("1".equals(workflowWorkLogDO.getStep())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "取钥匙/锁完成";
             }
             }
-            if ("3".equals(nodeDO.getNodeProgress())) {
+            if (nodeDO.getApprovalStatus().equals("approved")) {
                 content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "上锁完成/归还钥匙完成";
                 content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "上锁完成/归还钥匙完成";
             }
             }
+        }
+
+        // 共锁coLock
+        if (WorkTypeEnum.COLOCK.value.equals(nodeDO.getType())) {
             // 下面的会覆盖上面,顺序重要
             // 下面的会覆盖上面,顺序重要
-            if ("approved".equals(nodeDO.getApprovalStatus())) {
-                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "共锁完成";
-            }
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "共锁完成";
         }
         }
 
 
-        // 解除隔离-releaseIsolation
-        if ("releaseIsolation".equals(nodeDO.getType())) {
-            if ("2".equals(nodeDO.getNodeProgress())) {
-                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解除共锁完成";
-            }
-            if ("3".equals(nodeDO.getNodeProgress())) {
-                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解锁完成";
+        // 解除共锁unlockCoLock
+        if (WorkTypeEnum.UNLOCKCOLOCK.value.equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解除共锁完成";
+        }
+
+        // 解锁unlock
+        if (WorkTypeEnum.UNLOCK.value.equals(nodeDO.getType())) {
+            if ("1".equals(workflowWorkLogDO.getStep())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解锁取钥匙完成";
             }
             }
-            // 下面的会覆盖上面,顺序重要
-            if ("approved".equals(nodeDO.getApprovalStatus())) {
-                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "归还钥匙完成";
+            if (nodeDO.getApprovalStatus().equals("approved")) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解锁归还钥匙完成";
             }
             }
         }
         }
 
 
         // 完成/结束-complete
         // 完成/结束-complete
-        if ("complete".equals(nodeDO.getType())) {
+        if (WorkTypeEnum.COMPLETE.value.equals(nodeDO.getType())) {
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已完成";
             content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已完成";
         }
         }
         return content;
         return content;

+ 6 - 2
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/enums/WorkTypeEnum.java

@@ -10,8 +10,12 @@ public enum WorkTypeEnum {
     CONFIRM("confirm"),                    // 确认
     CONFIRM("confirm"),                    // 确认
     REVIEW("review"),                      // 审核
     REVIEW("review"),                      // 审核
     INPUTINFO("inputInfo"),                // 录入信息
     INPUTINFO("inputInfo"),                // 录入信息
-    ISOLATION("isolation"),                // 隔离/方案
-    RELEASEISOLATION("releaseIsolation"),  // 解除隔离
+    // ISOLATION("isolation"),                // 隔离/方案
+    LOCK("lock"),                       // 上锁
+    COLOCK("coLock"),                   // 共锁
+    //RELEASEISOLATION("releaseIsolation"),  // 解除隔离
+    UNLOCKCOLOCK("unlockCoLock"),           // 解除共锁
+    UNLOCK("unlock"),                   // 解除上锁
     // RETURNLOCK("returnLock"),              // 还锁
     // RETURNLOCK("returnLock"),              // 还锁
     COMPLETE("complete");                  // 完成/结束
     COMPLETE("complete");                  // 完成/结束
 
 

+ 42 - 49
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleServiceImpl.java

@@ -106,7 +106,7 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
             keyService.saveBatch(keyDOList);
             keyService.saveBatch(keyDOList);
         }
         }
 
 
-        if (!vo.getLockNfcList().isEmpty() && "isolation".equals(nodeDO.getType())) {
+        if (!vo.getLockNfcList().isEmpty() && WorkTypeEnum.LOCK.value.equals(nodeDO.getType())) {
             // isolation节点才需要新增,releaseIsolation节点不需要
             // isolation节点才需要新增,releaseIsolation节点不需要
             List<WorkflowWorkTicketLockDO> lockDOList = new ArrayList<>();
             List<WorkflowWorkTicketLockDO> lockDOList = new ArrayList<>();
             for (HandleLockVO lock : vo.getLockNfcList()) {
             for (HandleLockVO lock : vo.getLockNfcList()) {
@@ -122,7 +122,7 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         }
         }
 
 
         // 如果是隔离任务检查是不是取锁完成
         // 如果是隔离任务检查是不是取锁完成
-        if (nodeDO.getType().equals(WorkTypeEnum.ISOLATION.value)) {
+        if (nodeDO.getType().equals(WorkTypeEnum.LOCK.value)) {
             // 1.检查钥匙有没有取
             // 1.检查钥匙有没有取
             // 2.检查挂锁和点位是不是数量相等
             // 2.检查挂锁和点位是不是数量相等
             Integer pointCount = (int) pointService.count(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
             Integer pointCount = (int) pointService.count(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
@@ -140,17 +140,17 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         }
         }
 
 
         // 如果是解除隔离任务检查是不是取锁完成
         // 如果是解除隔离任务检查是不是取锁完成
-        if (nodeDO.getType().equals(WorkTypeEnum.RELEASEISOLATION.value)) {
+        if (nodeDO.getType().equals(WorkTypeEnum.UNLOCK.value)) {
             // 1.检查钥匙有没有取
             // 1.检查钥匙有没有取
             if (!vo.getKeyNfcList().isEmpty()) {
             if (!vo.getKeyNfcList().isEmpty()) {
                 // 这样就算解除隔离的第二步骤完成,更新进度,更新nodeProgress
                 // 这样就算解除隔离的第二步骤完成,更新进度,更新nodeProgress
                 workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
                 workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
                         .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
                         .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
-                        .set(WorkflowWorkNodeDO::getNodeProgress, "3"));
+                        .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
                 workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
                 workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
 
 
                 // isc_workflow_work_log日志记录
                 // isc_workflow_work_log日志记录
-                workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
+                workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "1");
             }
             }
         }
         }
         return true;
         return true;
@@ -250,43 +250,26 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                         }
                         }
                     }
                     }
                     // 检测上锁完成,更改上锁人状态
                     // 检测上锁完成,更改上锁人状态
-                    List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                    List<WorkflowWorkPointDO> uncolockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
                             .eq(WorkflowWorkPointDO::getNodeId, nodeId)
                             .eq(WorkflowWorkPointDO::getNodeId, nodeId)
                             .eq(WorkflowWorkPointDO::getStatus, "0"));
                             .eq(WorkflowWorkPointDO::getStatus, "0"));
-                    List<WorkflowWorkNodeUserDO> list2 = new ArrayList<>();
-                    if (unclockPoints.isEmpty()) {
+                    if (uncolockPoints.isEmpty()) {
                         // 说明全部点位上锁完成,可以更新上锁人状态
                         // 说明全部点位上锁完成,可以更新上锁人状态
                         nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
                         nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
                                 .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
                                 .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
                                 .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
                                 .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
                                 .set(WorkflowWorkNodeUserDO::getStatus, "1")
                                 .set(WorkflowWorkNodeUserDO::getStatus, "1")
                                 .set(WorkflowWorkNodeUserDO::getLockTime, now));
                                 .set(WorkflowWorkNodeUserDO::getLockTime, now));
-                        // 更新nodeProgress
-                        workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
-                                .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
-                                .set(WorkflowWorkNodeDO::getNodeProgress, "3"));
-                        // 发送消息
-                        workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
-
 
 
-                        // 检测有没有共锁人共锁操作,没有直接跳过
-                        list2 = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
-                                .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
-                                .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
-                                .ne(WorkflowWorkNodeUserDO::getStatus, "1"));
-                        if (list2.isEmpty()) {
-                            // 说明没有共锁人需求或者全部共锁完成,可以审批节点
-                            ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
-                            approvalNodeReqVO.setNodeId(nodeId);
-                            approvalNodeReqVO.setApprovalStatus("approved");
-                            approvalNodeReqVO.setApprovalOpinion("approved");
-                            workflowWorkService.updateNodeApproval(approvalNodeReqVO);
-                            // 并且直接开启解锁节点的第二步骤,省略第一步骤的解除共锁操作
-                            workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
-                                    .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
-                                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, nodeDO.getUuid())
-                                    .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
-                        }
+                        // 发送消息
+                        // workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
+
+                        // 审批上锁节点
+                        ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
+                        approvalNodeReqVO.setNodeId(nodeId);
+                        approvalNodeReqVO.setApprovalStatus("approved");
+                        approvalNodeReqVO.setApprovalOpinion("approved");
+                        workflowWorkService.updateNodeApproval(approvalNodeReqVO);
                     }
                     }
 
 
                     // 帮助归还钥匙
                     // 帮助归还钥匙
@@ -299,13 +282,6 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                                 .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
                                 .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
                                 .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
                                 .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
                                 .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
                                 .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
-
-                        if (!list2.isEmpty()) {
-                            // 如果list2是空的则在updateNodeApproval中被记录
-                            // isc_workflow_work_log日志记录
-                            workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
-                        }
-
                     }
                     }
                 }
                 }
             }
             }
@@ -332,9 +308,16 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         Assert.notNull(vo.getNodeId(), "nodeId不可为空");
         Assert.notNull(vo.getNodeId(), "nodeId不可为空");
         Assert.notNull(vo.getCardNfc(), "cardNfc不可为空");
         Assert.notNull(vo.getCardNfc(), "cardNfc不可为空");
 
 
+        // 查询当前的共锁点位信息
+        WorkflowWorkNodeDO currentNode = workflowWorkNodeService.getWorkflowWorkNode(vo.getNodeId());
+
+        // 查询共锁相关的上锁点位
+        WorkflowWorkNodeDO lockNodeDO = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                .eq(WorkflowWorkNodeDO::getWorkId, currentNode.getWorkId())
+                .eq(WorkflowWorkNodeDO::getUuid, currentNode.getIsolationNodeUuid()));
         // 检查是不是所有点位已经上锁,不是不可共锁
         // 检查是不是所有点位已经上锁,不是不可共锁
         List<WorkflowWorkPointDO> unlockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
         List<WorkflowWorkPointDO> unlockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
-                .eq(WorkflowWorkPointDO::getNodeId, vo.getNodeId())
+                .eq(WorkflowWorkPointDO::getNodeId, lockNodeDO.getId())
                 .eq(WorkflowWorkPointDO::getStatus, "0"));
                 .eq(WorkflowWorkPointDO::getStatus, "0"));
         Assert.isTrue(unlockPoints.isEmpty(), "共锁失败,存在未上锁的的点位!");
         Assert.isTrue(unlockPoints.isEmpty(), "共锁失败,存在未上锁的的点位!");
 
 
@@ -406,14 +389,24 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                 .eq(WorkflowWorkNodeUserDO::getId, nodeUserDO.getId())
                 .eq(WorkflowWorkNodeUserDO::getId, nodeUserDO.getId())
                 .set(WorkflowWorkNodeUserDO::getUnlockTime, now)
                 .set(WorkflowWorkNodeUserDO::getUnlockTime, now)
                 .set(WorkflowWorkNodeUserDO::getStatus, "2"));
                 .set(WorkflowWorkNodeUserDO::getStatus, "2"));
-        // 更新nodeProgress
-        workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
-                .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
-                .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
-        workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
 
 
-        // isc_workflow_work_log日志记录
-        workflowWorkLogService.createWorkflowWorkLog(vo.getNodeId(), "1");
+        // 解除共锁检测,全部解除的话,审批当前节点,开启下一节点
+        List<WorkflowWorkNodeUserDO> list = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
+                .eq(WorkflowWorkNodeUserDO::getNodeId, fatherNodeId)
+                .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
+                .ne(WorkflowWorkNodeUserDO::getStatus, "2"));
+        if (list.isEmpty()) {
+            // 说明全部解除共锁完成,可以审批节点
+            ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
+            approvalNodeReqVO.setNodeId(vo.getNodeId());
+            approvalNodeReqVO.setApprovalStatus("approved");
+            approvalNodeReqVO.setApprovalOpinion("approved");
+            workflowWorkService.updateNodeApproval(approvalNodeReqVO);
+
+            // isc_workflow_work_log日志记录
+            // updateNodeApproval方法种已经记录,防止多次记录
+            // workflowWorkLogService.createWorkflowWorkLog(vo.getNodeId(), null);
+        }
 
 
         return true;
         return true;
     }
     }
@@ -560,7 +553,7 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime now = LocalDateTime.now();
         // 检测点位是不是全部解锁完成
         // 检测点位是不是全部解锁完成
         List<WorkflowWorkPointDO> list = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
         List<WorkflowWorkPointDO> list = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
-                .eq(WorkflowWorkPointDO::getNodeId, nodeId)
+                .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
                 .ne(WorkflowWorkPointDO::getStatus, "2"));
                 .ne(WorkflowWorkPointDO::getStatus, "2"));
         if (!list.isEmpty()) {
         if (!list.isEmpty()) {
             // 说明没有全部解锁
             // 说明没有全部解锁

+ 8 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkNodeService.java

@@ -72,4 +72,12 @@ public interface WorkflowWorkNodeService extends IService<WorkflowWorkNodeDO> {
     List<WorkflowWorkNodeRespVO> getMyCompletedNodeList(WorkflowWorkNodePageReqVO vo);
     List<WorkflowWorkNodeRespVO> getMyCompletedNodeList(WorkflowWorkNodePageReqVO vo);
 
 
 
 
+    /**
+     * 通过nodeId获取当前node相关的lock coLock unlockCoLock unlock
+     * @param nodeId
+     * @return
+     */
+    List<WorkflowWorkNodeDO> getNodeTaskList(Long nodeId);
+
+
 }
 }

+ 134 - 38
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkNodeServiceImpl.java

@@ -105,7 +105,7 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
         }
         }
 
 
         // 检测,如果这个点位是隔离节点,并且他的有对应的解除隔离,需要更新解除隔离
         // 检测,如果这个点位是隔离节点,并且他的有对应的解除隔离,需要更新解除隔离
-        if (byId.getType().equals(WorkTypeEnum.ISOLATION.getValue())) {
+        if (byId.getType().equals(WorkTypeEnum.LOCK.getValue())) {
             List<WorkflowWorkNodeDO> list = list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
             List<WorkflowWorkNodeDO> list = list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
                     .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
                     .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
                     .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, byId.getUuid()));
                     .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, byId.getUuid()));
@@ -164,31 +164,34 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
         });
         });
         saveBatch(workNodeDOList);
         saveBatch(workNodeDOList);
 
 
-        // 存储上锁人、公锁人、点位
+        // 存储上锁人、点位
         List<WorkflowWorkNodeUserDO> workflowWorkNodeUserDOS = new ArrayList<>();
         List<WorkflowWorkNodeUserDO> workflowWorkNodeUserDOS = new ArrayList<>();
         for (WorkflowWorkNodeDO nodeDO : workNodeDOList) {
         for (WorkflowWorkNodeDO nodeDO : workNodeDOList) {
-            if ("isolation".equals(nodeDO.getType())) {
-                for (WorkflowDesignNodeDO workflowDesignNodeDO : designNodeDOList) {
-                    if (nodeDO.getUuid().equals(workflowDesignNodeDO.getUuid())) {
-                        // 解析上锁人
-                        if (StringUtils.isNotBlank(workflowDesignNodeDO.getLockPerson())) {
-                            WorkflowWorkNodeUserDO workflowWorkNodeUserDO = new WorkflowWorkNodeUserDO();
-                            workflowWorkNodeUserDO.setNodeId(nodeDO.getId());
-                            workflowWorkNodeUserDO.setType("jtlocker");
-                            workflowWorkNodeUserDO.setUserId(Long.valueOf(workflowDesignNodeDO.getLockPerson()));
-                            workflowWorkNodeUserDOS.add(workflowWorkNodeUserDO);
-                        }
-                        // 解析共锁人
-                        if (StringUtils.isNotBlank(workflowDesignNodeDO.getColockPersons())) {
-                            List<Long> longs = parseStringToLongList(workflowDesignNodeDO.getColockPersons());
-                            for (Long aLong : longs) {
-                                WorkflowWorkNodeUserDO workflowWorkNodeUserDO = new WorkflowWorkNodeUserDO();
-                                workflowWorkNodeUserDO.setNodeId(nodeDO.getId());
-                                workflowWorkNodeUserDO.setType("jtcolocker");
-                                workflowWorkNodeUserDO.setUserId(aLong);
-                                workflowWorkNodeUserDOS.add(workflowWorkNodeUserDO);
-                            }
-                        }
+            if (WorkTypeEnum.LOCK.value.equals(nodeDO.getType())) {
+                // 解析上锁人
+                if (StringUtils.isNotBlank(nodeDO.getLockPerson())) {
+                    WorkflowWorkNodeUserDO workflowWorkNodeUserDO = new WorkflowWorkNodeUserDO();
+                    workflowWorkNodeUserDO.setNodeId(nodeDO.getId());
+                    workflowWorkNodeUserDO.setType("jtlocker");
+                    workflowWorkNodeUserDO.setUserId(Long.valueOf(nodeDO.getLockPerson()));
+                    workflowWorkNodeUserDOS.add(workflowWorkNodeUserDO);
+                }
+
+                // 解析点位进行存储
+                analysisPointSave(nodeDO.getId(), nodeDO.getIsolationPoints());
+            }
+
+            // 开始解析共锁人
+            if (WorkTypeEnum.COLOCK.value.equals(nodeDO.getType())) {
+                // 解析共锁人
+                if (StringUtils.isNotBlank(nodeDO.getColockPersons())) {
+                    List<Long> longs = parseStringToLongList(nodeDO.getColockPersons());
+                    for (Long aLong : longs) {
+                        WorkflowWorkNodeUserDO workflowWorkNodeUserDO = new WorkflowWorkNodeUserDO();
+                        workflowWorkNodeUserDO.setNodeId(nodeDO.getId());
+                        workflowWorkNodeUserDO.setType("jtcolocker");
+                        workflowWorkNodeUserDO.setUserId(aLong);
+                        workflowWorkNodeUserDOS.add(workflowWorkNodeUserDO);
                     }
                     }
                 }
                 }
 
 
@@ -334,9 +337,9 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
             }
             }
         }
         }
 
 
-        if (nodeDO.getType().equals(WorkTypeEnum.ISOLATION.value)) {
+        if (nodeDO.getType().equals(WorkTypeEnum.LOCK.value)) {
             String nodeProgress = nodeDO.getNodeProgress();
             String nodeProgress = nodeDO.getNodeProgress();
-            // 上锁/共锁
+            // 上锁
             List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, nodeDO.getId()));
             List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, nodeDO.getId()));
             // 上锁人数据
             // 上锁人数据
             List<Long> jtlockerIds = nodeUserDOList.stream().filter(o -> "jtlocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
             List<Long> jtlockerIds = nodeUserDOList.stream().filter(o -> "jtlocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
@@ -378,15 +381,20 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
                 templateParams.put("name", "");
                 templateParams.put("name", "");
                 copyMessageSend(nodeDO, longs, "MESSAGE_011", templateParams);
                 copyMessageSend(nodeDO, longs, "MESSAGE_011", templateParams);
             }
             }
+        }
+
+        if (nodeDO.getType().equals(WorkTypeEnum.COLOCK.value)) {
+            // 共锁
+            List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, nodeDO.getId()));
             // 共锁人
             // 共锁人
             List<Long> jtcolockerIds = nodeUserDOList.stream().filter(o -> "jtcolocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
             List<Long> jtcolockerIds = nodeUserDOList.stream().filter(o -> "jtcolocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
-            if (!jtcolockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "3".equals(nodeProgress)) {
+            if (!jtcolockerIds.isEmpty()) {
                 List<AdminUserDO> userList = adminUserService.getUserList(jtcolockerIds);
                 List<AdminUserDO> userList = adminUserService.getUserList(jtcolockerIds);
                 for (AdminUserDO adminUserDO : userList) {
                 for (AdminUserDO adminUserDO : userList) {
                     // 发送
                     // 发送
                     Map<String, Object> templateParams = new HashMap<>();
                     Map<String, Object> templateParams = new HashMap<>();
                     templateParams.put("name", adminUserDO.getNickname());
                     templateParams.put("name", adminUserDO.getNickname());
-                    templateParams.put("user", jtlockerName);
+                    templateParams.put("user", "");
                     sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_008", templateParams);
                     sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_008", templateParams);
                 }
                 }
                 // 抄送
                 // 抄送
@@ -397,10 +405,9 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
             }
             }
         }
         }
 
 
-        if (nodeDO.getType().equals(WorkTypeEnum.RELEASEISOLATION.value)) {
-            // 解除共锁/上锁
+        if (nodeDO.getType().equals(WorkTypeEnum.UNLOCKCOLOCK.value)) {
+            // 解除共锁
             if (StringUtils.isNotBlank(nodeDO.getIsolationNodeUuid())) {
             if (StringUtils.isNotBlank(nodeDO.getIsolationNodeUuid())) {
-                String nodeProgress = nodeDO.getNodeProgress();
                 // 先找到对应的上锁node
                 // 先找到对应的上锁node
                 WorkflowWorkNodeDO parentNode = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
                 WorkflowWorkNodeDO parentNode = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
                         .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
                         .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
@@ -410,7 +417,7 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
                 // 共锁人
                 // 共锁人
                 List<Long> jtcolockerIds = nodeUserDOList.stream().filter(o -> "jtcolocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
                 List<Long> jtcolockerIds = nodeUserDOList.stream().filter(o -> "jtcolocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
                 StringBuilder jtcolockerName = new StringBuilder();
                 StringBuilder jtcolockerName = new StringBuilder();
-                if (!jtcolockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "1".equals(nodeProgress)) {
+                if (!jtcolockerIds.isEmpty()) {
                     List<AdminUserDO> userList = adminUserService.getUserList(jtcolockerIds);
                     List<AdminUserDO> userList = adminUserService.getUserList(jtcolockerIds);
                     for (AdminUserDO adminUserDO : userList) {
                     for (AdminUserDO adminUserDO : userList) {
                         // 发送
                         // 发送
@@ -425,39 +432,52 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
                     templateParams.put("name", "");
                     templateParams.put("name", "");
                     copyMessageSend(nodeDO, longs, "MESSAGE_009", templateParams);
                     copyMessageSend(nodeDO, longs, "MESSAGE_009", templateParams);
                 }
                 }
+            }
+        }
+
+        if (nodeDO.getType().equals(WorkTypeEnum.UNLOCK.value)) {
+            // 解除上锁
+            if (StringUtils.isNotBlank(nodeDO.getIsolationNodeUuid())) {
+                String nodeProgress = nodeDO.getNodeProgress();
+                // 先找到对应的上锁node
+                WorkflowWorkNodeDO parentNode = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
+                        .eq(WorkflowWorkNodeDO::getUuid, nodeDO.getIsolationNodeUuid()));
+                // 再找关联的人员信息
+                List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, parentNode.getId()));
                 // 上锁人
                 // 上锁人
                 List<Long> jtlockerIds = nodeUserDOList.stream().filter(o -> "jtlocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
                 List<Long> jtlockerIds = nodeUserDOList.stream().filter(o -> "jtlocker".equals(o.getType())).map(WorkflowWorkNodeUserDO::getUserId).toList();
-                if (!jtlockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "2".equals(nodeProgress)) {
+                if (!jtlockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "1".equals(nodeProgress)) {
                     List<AdminUserDO> userList = adminUserService.getUserList(jtlockerIds);
                     List<AdminUserDO> userList = adminUserService.getUserList(jtlockerIds);
                     for (AdminUserDO adminUserDO : userList) {
                     for (AdminUserDO adminUserDO : userList) {
                         // 发送
                         // 发送
                         Map<String, Object> templateParams = new HashMap<>();
                         Map<String, Object> templateParams = new HashMap<>();
                         templateParams.put("name", adminUserDO.getNickname());
                         templateParams.put("name", adminUserDO.getNickname());
-                        templateParams.put("names", jtcolockerName);
+                        templateParams.put("names", "");
                         sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_005", templateParams);
                         sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_005", templateParams);
                     }
                     }
                     // 抄送
                     // 抄送
                     longs.addAll(jtlockerIds);
                     longs.addAll(jtlockerIds);
                     Map<String, Object> templateParams = new HashMap<>();
                     Map<String, Object> templateParams = new HashMap<>();
                     templateParams.put("name", "");
                     templateParams.put("name", "");
-                    templateParams.put("names", jtcolockerName);
+                    templateParams.put("names", "");
                     copyMessageSend(nodeDO, longs, "MESSAGE_005", templateParams);
                     copyMessageSend(nodeDO, longs, "MESSAGE_005", templateParams);
                 }
                 }
                 // 上锁人归还硬件
                 // 上锁人归还硬件
-                if (!jtlockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "3".equals(nodeProgress)) {
+                if (!jtlockerIds.isEmpty() && StringUtils.isNotBlank(nodeProgress) && "2".equals(nodeProgress)) {
                     List<AdminUserDO> userList = adminUserService.getUserList(jtlockerIds);
                     List<AdminUserDO> userList = adminUserService.getUserList(jtlockerIds);
                     for (AdminUserDO adminUserDO : userList) {
                     for (AdminUserDO adminUserDO : userList) {
                         // 发送
                         // 发送
                         Map<String, Object> templateParams = new HashMap<>();
                         Map<String, Object> templateParams = new HashMap<>();
                         templateParams.put("name", adminUserDO.getNickname());
                         templateParams.put("name", adminUserDO.getNickname());
-                        templateParams.put("names", jtcolockerName);
+                        templateParams.put("names", "");
                         sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_012", templateParams);
                         sendMessage(nodeDO, adminUserDO.getId(), "MESSAGE_012", templateParams);
                     }
                     }
                     // 抄送
                     // 抄送
                     longs.addAll(jtlockerIds);
                     longs.addAll(jtlockerIds);
                     Map<String, Object> templateParams = new HashMap<>();
                     Map<String, Object> templateParams = new HashMap<>();
                     templateParams.put("name", "");
                     templateParams.put("name", "");
-                    templateParams.put("names", jtcolockerName);
+                    templateParams.put("names", "");
                     copyMessageSend(nodeDO, longs, "MESSAGE_012", templateParams);
                     copyMessageSend(nodeDO, longs, "MESSAGE_012", templateParams);
                 }
                 }
             }
             }
@@ -639,5 +659,81 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
         return myCompletedNodeList;
         return myCompletedNodeList;
     }
     }
 
 
+    @Override
+    public List<WorkflowWorkNodeDO> getNodeTaskList(Long nodeId) {
+        // 定义上锁点位
+        WorkflowWorkNodeDO lockNode = null;
+        // 定义任务线返回值
+        List<WorkflowWorkNodeDO> workflowWorkNodeDOS = new ArrayList<>();
+
+
+        WorkflowWorkNodeDO byId = getById(nodeId);
+        if (byId != null) {
+            // 如果上锁节点
+            if (byId.getType().equals(WorkTypeEnum.LOCK.value)) {
+                lockNode = byId;
+            }
+
+            // 如果共锁节点 / 解锁节点
+            if (byId.getType().equals(WorkTypeEnum.COLOCK.value) || byId.getType().equals(WorkTypeEnum.UNLOCK.value)) {
+                WorkflowWorkNodeDO one = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.LOCK.value)
+                        .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
+                        .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
+                lockNode = one;
+            }
+
+            // 如果解除共锁节点
+            if (byId.getType().equals(WorkTypeEnum.UNLOCKCOLOCK.value)) {
+                // 先找打共锁
+                WorkflowWorkNodeDO one = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.COLOCK.value)
+                        .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
+                        .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
+                // 再找到上锁
+                WorkflowWorkNodeDO one1 = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.LOCK.value)
+                        .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
+                        .eq(WorkflowWorkNodeDO::getUuid, one.getIsolationNodeUuid()));
+                lockNode = one1;
+            }
+
+        }
+
+
+        // 通过上锁点位去查询
+        if (lockNode != null && lockNode.getType().equals(WorkTypeEnum.LOCK.value)) {
+            // lock
+            workflowWorkNodeDOS.add(lockNode);
+
+            // coLock
+            List<WorkflowWorkNodeDO> coLockNodes = list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                    .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.COLOCK.value)
+                    .eq(WorkflowWorkNodeDO::getWorkId, lockNode.getWorkId())
+                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, lockNode.getUuid()));
+            workflowWorkNodeDOS.addAll(coLockNodes);
+
+            // unlockCoLock
+            if (!coLockNodes.isEmpty()) {
+                List<String> coLockUuids = coLockNodes.stream().map(WorkflowWorkNodeDO::getUuid).toList();
+                List<WorkflowWorkNodeDO> unlockCoLockNodes = list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.UNLOCKCOLOCK.value)
+                        .eq(WorkflowWorkNodeDO::getWorkId, lockNode.getWorkId())
+                        .in(WorkflowWorkNodeDO::getIsolationNodeUuid, coLockUuids));
+                workflowWorkNodeDOS.addAll(unlockCoLockNodes);
+            }
+
+            // unlock
+            WorkflowWorkNodeDO unlockNodes = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                    .eq(WorkflowWorkNodeDO::getType, WorkTypeEnum.UNLOCK.value)
+                    .eq(WorkflowWorkNodeDO::getWorkId, lockNode.getWorkId())
+                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, lockNode.getUuid()));
+            workflowWorkNodeDOS.add(unlockNodes);
+
+        }
+
+        return workflowWorkNodeDOS;
+    }
+
 
 
 }
 }

+ 30 - 20
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkServiceImpl.java

@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.iscs.dal.dataobject.isolationpoint.IsolationPoint
 import cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign.WorkflowWorkLogService;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign.WorkflowWorkLogService;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.*;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkMapper;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkMapper;
+import cn.iocoder.yudao.module.iscs.enums.WorkTypeEnum;
 import cn.iocoder.yudao.module.iscs.service.isolationpoint.IsolationPointService;
 import cn.iocoder.yudao.module.iscs.service.isolationpoint.IsolationPointService;
 import cn.iocoder.yudao.module.iscs.utils.MonthTimeUtil;
 import cn.iocoder.yudao.module.iscs.utils.MonthTimeUtil;
 import cn.iocoder.yudao.module.iscs.utils.RandomCodeUtil;
 import cn.iocoder.yudao.module.iscs.utils.RandomCodeUtil;
@@ -37,6 +38,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -370,29 +372,37 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
 
 
         // ----------------------------- 以下逻辑nodeId变更,兼容解除隔离任务-----------------------------------
         // ----------------------------- 以下逻辑nodeId变更,兼容解除隔离任务-----------------------------------
         // 3.获取人员信息
         // 3.获取人员信息
-        if (StringUtils.isNotBlank(byId.getIsolationNodeUuid())) {
-            // 如果是解除节点的查询操作,则查询对应隔离节点的数据
-            WorkflowWorkNodeDO one = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
-                    .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
-                    .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
-            nodeId = one.getId();
-        }
-        List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
-                .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId));
-        if (!nodeUserDOList.isEmpty()) {
-            List<WorkflowWorkNodeUserRespVO> nodeUserRespVOList = BeanUtils.toBean(nodeUserDOList, WorkflowWorkNodeUserRespVO.class);
-            for (WorkflowWorkNodeUserRespVO workflowWorkNodeUserRespVO : nodeUserRespVOList) {
-                AdminUserDO adminUserDO = adminUserService.getUser(workflowWorkNodeUserRespVO.getUserId());
-                if (adminUserDO != null) {
-                    workflowWorkNodeUserRespVO.setUsername(adminUserDO.getUsername());
-                    workflowWorkNodeUserRespVO.setNickname(adminUserDO.getNickname());
-                    workflowWorkNodeUserRespVO.setMobile(adminUserDO.getMobile());
-                    workflowWorkNodeUserRespVO.setAvatar(adminUserDO.getAvatar());
-                    workflowWorkNodeUserRespVO.setCardNfc(adminUserDO.getCardNfc());
+        // 3.1 直接获取任务线,包括lock coLock unlockCoLock unlock
+        List<WorkflowWorkNodeDO> nodeTaskList = workflowWorkNodeService.getNodeTaskList(nodeId);
+        // 无论当前的节点不是上锁节点,找一下对应的任务线中上锁节点是哪个
+        if (!nodeTaskList.isEmpty()) {
+            // 找到上锁节点
+            Optional<WorkflowWorkNodeDO> first = nodeTaskList.stream().filter(o -> o.getType().equals(WorkTypeEnum.LOCK.value)).findFirst();
+            if (first.isPresent() && !byId.getType().equals(WorkTypeEnum.LOCK.value)) {
+                // 如果当前节点不是上锁节点,则直接赋值,后面的查询拿到的都是上锁节点的nodeId
+                nodeId = first.get().getId();
+            }
+
+            // 找到所有的人员信息,先拿到任务线的nodeId,只有任务线的id才有关联的人员和节点信息
+            List<Long> taskIds = nodeTaskList.stream().map(WorkflowWorkNodeDO::getId).toList();
+            List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
+                    .in(WorkflowWorkNodeUserDO::getNodeId, taskIds));
+            if (!nodeUserDOList.isEmpty()) {
+                List<WorkflowWorkNodeUserRespVO> nodeUserRespVOList = BeanUtils.toBean(nodeUserDOList, WorkflowWorkNodeUserRespVO.class);
+                for (WorkflowWorkNodeUserRespVO workflowWorkNodeUserRespVO : nodeUserRespVOList) {
+                    AdminUserDO adminUserDO = adminUserService.getUser(workflowWorkNodeUserRespVO.getUserId());
+                    if (adminUserDO != null) {
+                        workflowWorkNodeUserRespVO.setUsername(adminUserDO.getUsername());
+                        workflowWorkNodeUserRespVO.setNickname(adminUserDO.getNickname());
+                        workflowWorkNodeUserRespVO.setMobile(adminUserDO.getMobile());
+                        workflowWorkNodeUserRespVO.setAvatar(adminUserDO.getAvatar());
+                        workflowWorkNodeUserRespVO.setCardNfc(adminUserDO.getCardNfc());
+                    }
                 }
                 }
+                bean.setNodeUserList(nodeUserRespVOList);
             }
             }
-            bean.setNodeUserList(nodeUserRespVOList);
         }
         }
+
         // 4.节点设置的点位信息
         // 4.节点设置的点位信息
         List<WorkflowWorkPointDO> points = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
         List<WorkflowWorkPointDO> points = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
                 .in(WorkflowWorkPointDO::getNodeId, nodeId));
                 .in(WorkflowWorkPointDO::getNodeId, nodeId));