Explorar el Código

新增上锁节点和共锁节点修改时的人员和点位的解析

车车 hace 1 semana
padre
commit
a86647de87

+ 33 - 18
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkNodeServiceImpl.java

@@ -80,17 +80,35 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
     public void updateWorkflowWorkNode(WorkflowWorkNodeSaveReqVO updateReqVO) {
         Assert.notNull(updateReqVO.getNodeId(), "nodeId不能为空!");
         WorkflowWorkNodeDO byId = getById(updateReqVO.getNodeId());
-        // 更新
-        WorkflowWorkNodeDO updateObj = BeanUtils.toBean(updateReqVO, WorkflowWorkNodeDO.class);
-        updateObj.setId(updateReqVO.getNodeId());
-        workflowWorkNodeMapper.updateById(updateObj);
-        // 开始新建isc_workflow_work_node_user关联关系
-        if (updateReqVO.getNodeUserDOList() != null && !updateReqVO.getNodeUserDOList().isEmpty()) {
+
+        // 开始新建isc_workflow_work_node_user关联关系,如果是上锁和共锁才有意义
+        if (byId != null
+                && (byId.getType().equals(WorkTypeEnum.LOCK.getValue()) || byId.getType().equals(WorkTypeEnum.COLOCK.getValue()))
+                && updateReqVO.getNodeUserDOList() != null
+                && !updateReqVO.getNodeUserDOList().isEmpty()) {
             // 无论有没有 先删除再生成
             workflowWorkNodeUserService.remove(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, updateReqVO.getNodeId()));
             // 开始生成
             updateReqVO.getNodeUserDOList().forEach(o -> o.setNodeId(updateReqVO.getNodeId()));
             workflowWorkNodeUserService.saveBatch(updateReqVO.getNodeUserDOList());
+
+            if (byId.getType().equals(WorkTypeEnum.LOCK.getValue())) {
+                // 如果是上锁,修改一下上锁人字段
+                updateReqVO.setLockPerson(String.valueOf(updateReqVO.getNodeUserDOList().get(0).getUserId()));
+            }
+            if (byId.getType().equals(WorkTypeEnum.COLOCK.getValue())) {
+                // 如果是共锁,修改一下共锁人字段
+                String colockPersons = updateReqVO.getNodeUserDOList().stream().map(WorkflowWorkNodeUserDO::getUserId).map(String::valueOf).collect(Collectors.joining(",", "[", "]"));
+                updateReqVO.setColockPersons(colockPersons);
+            }
+
+            // 同时需要修改解锁/解除共锁字段
+            update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
+                    .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
+                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, byId.getUuid())
+                    .set(byId.getType().equals(WorkTypeEnum.LOCK.getValue()), WorkflowWorkNodeDO::getLockPerson, updateReqVO.getLockPerson())
+                    .set(byId.getType().equals(WorkTypeEnum.COLOCK.getValue()), WorkflowWorkNodeDO::getColockPersons, updateReqVO.getColockPersons())
+            );
         }
 
 
@@ -105,22 +123,19 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
         }
 
         // 检测,如果这个点位是隔离节点,并且他的有对应的解除隔离,需要更新解除隔离
-        if (byId.getType().equals(WorkTypeEnum.LOCK.getValue())) {
-            List<WorkflowWorkNodeDO> list = list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+        if (byId != null && byId.getType().equals(WorkTypeEnum.LOCK.getValue())) {
+            update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
                     .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
-                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, byId.getUuid()));
-            if (!list.isEmpty()) {
-                List<Long> ids = list.stream().map(WorkflowWorkNodeDO::getId).toList();
-                update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
-                        .in(WorkflowWorkNodeDO::getId, ids)
-                        .set(WorkflowWorkNodeDO::getIsolationPoints, updateReqVO.getIsolationPoints())
-                        .set(WorkflowWorkNodeDO::getLockPerson, byId.getLockPerson())
-                        .set(WorkflowWorkNodeDO::getColockPersons, byId.getColockPersons()));
-            }
+                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, byId.getUuid())
+                    .set(WorkflowWorkNodeDO::getIsolationPoints, updateReqVO.getIsolationPoints()));
         }
 
-    }
+        // 更新
+        WorkflowWorkNodeDO updateObj = BeanUtils.toBean(updateReqVO, WorkflowWorkNodeDO.class);
+        updateObj.setId(updateReqVO.getNodeId());
+        workflowWorkNodeMapper.updateById(updateObj);
 
+    }
 
     @Override
     public WorkflowWorkNodeDO getWorkflowWorkNode(Long id) {