Ver código fonte

修改角色查询和硬件归还

车车 3 meses atrás
pai
commit
be3d9f7d01

+ 1 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/WorkflowWorkTicketController.java

@@ -66,7 +66,7 @@ public class WorkflowWorkTicketController {
 
     @PostMapping("/updateBackLock")
     @Operation(summary = "归还挂锁")
-    public CommonResult<Boolean> updateBackLock(@Valid @RequestBody List<HandleLockVO> list) {
+    public CommonResult<List<BackDataVO>> updateBackLock(@Valid @RequestBody List<HandleLockVO> list) {
         return success(workflowWorkHandleService.updateBackLock(list));
     }
 

+ 12 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/vo/BackDataVO.java

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.util.List;
+import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 归还钥匙/挂锁的返回数据")
 @Data
@@ -21,7 +21,16 @@ public class BackDataVO {
     @Schema(description = "发起人姓名(冗余字段)", example = "赵六")
     private String initiatorName;
 
-    @Schema(description = "任务描述")
-    private List<HardwareDataVO> hardwareDataList;
+    @Schema(description = "硬件名称")
+    private String hardwareName;
+
+    @Schema(description = "归还描述")
+    private String backDesc;
+
+    @Schema(description = "归还状态(0-失败 1-成功)")
+    private String backStatus;
+
+    @Schema(description = "操作时间")
+    private LocalDateTime operationTime;
 
 }

+ 0 - 19
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/vo/HardwareDataVO.java

@@ -1,19 +0,0 @@
-package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - 归还钥匙/挂锁的返回数据")
-@Data
-public class HardwareDataVO {
-    @Schema(description = "硬件名称")
-    private String hardwareName;
-
-    @Schema(description = "归还描述")
-    private String backDesc;
-
-    @Schema(description = "操作时间")
-    private LocalDateTime operationTime;
-}

+ 1 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleService.java

@@ -24,6 +24,6 @@ public interface WorkflowWorkHandleService {
 
     BackDataVO updatePointUnlock(KeyBackVO vo);
 
-    Boolean updateBackLock(List<HandleLockVO> list);
+    List<BackDataVO> updateBackLock(List<HandleLockVO> list);
 
 }

+ 224 - 257
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleServiceImpl.java

@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.iscs.service.lock.LockService;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,7 +21,6 @@ import org.springframework.validation.annotation.Validated;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 作业票处理过程 Service 实现类
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
  */
 @Service
 @Validated
+@Slf4j
 public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService {
 
     @Autowired
@@ -48,10 +49,11 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
     @Autowired
     private WorkflowWorkNodeService workflowWorkNodeService;
     @Autowired
-    private KeyService isKeyService;
+    private KeyService iscsKeyService;
     @Autowired
     private LockService iscsLockService;
-
+    @Autowired
+    private WorkflowWorkPointService workflowWorkPointService;
 
     @Override
     public Boolean insertWorkTicket(WorkHandleSaveReqVO vo) {
@@ -110,116 +112,95 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
     public BackDataVO updatePointLock(KeyBackVO keyBackVO) {
         LocalDateTime now = LocalDateTime.now();
         List<PointLockVO> list = keyBackVO.getList();
-        Long nodeId = null;
+        BackDataVO backDataVO = new BackDataVO();
+        KeyDO keyDO = iscsKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
         try {
-            if (!list.isEmpty()) {
-                nodeId = list.get(0).getNodeId();
-                Assert.notNull(nodeId, "nodeId不可为空");
-                for (PointLockVO vo : list) {
-                    Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
-                    Assert.notBlank(vo.getLockNfc(), "lockNfc不可为空");
-                    pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
-                            .eq(WorkflowWorkPointDO::getNodeId, vo.getNodeId())
-                            .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
-                            .set(WorkflowWorkPointDO::getLockNfc, vo.getLockNfc())
-                            .set(WorkflowWorkPointDO::getLockTime, now)
-                            .set(WorkflowWorkPointDO::getStatus, "1"));
-                }
-                // 检测上锁完成,更改上锁人状态
-                List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
-                        .eq(WorkflowWorkPointDO::getNodeId, nodeId)
-                        .eq(WorkflowWorkPointDO::getStatus, "0"));
-                if (unclockPoints.isEmpty()) {
-                    // 说明全部点位上锁完成,可以更新上锁人状态
-                    nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
-                            .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
-                            .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
-                            .set(WorkflowWorkNodeUserDO::getStatus, "1")
-                            .set(WorkflowWorkNodeUserDO::getLockTime, now));
-                }
-
-                // 帮助归还钥匙
-                String keyNfc = keyBackVO.getKeyNfc();
-                if (StringUtils.isNotBlank(keyNfc)) {
-                    // 开始归还钥匙
-                    keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
-                            .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
-                            .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
-                            .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
-                            .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
-                }
-            }
-        } catch (Exception e) {
-            Assert.isTrue(false, e.getMessage());
-        } finally {
-            BackDataVO backDataVO = new BackDataVO();
-            // backDataVO.setWorkName();
-            // backDataVO.setNodeName();
-            // backDataVO.setOrderNo();
-            // backDataVO.setInitiatorName();
-            // backDataVO.setHardwareDataList();
-            List<HardwareDataVO> hardwareDataVOS = new ArrayList<>();
-            HardwareDataVO hardwareDataVO = new HardwareDataVO();
-
-            if (nodeId == null && StringUtils.isNotBlank(keyBackVO.getKeyNfc())) {
-                // 百分百没有作业直接返回钥匙返还成功
-                KeyDO keyDO = isKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
-                if (keyDO != null) {
-                    hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                    hardwareDataVO.setBackDesc("钥匙归还成功");
-                    hardwareDataVO.setOperationTime(now);
-                } else {
-                    hardwareDataVO.setHardwareName("无法识别钥匙");
-                    hardwareDataVO.setBackDesc("钥匙归还失败");
-                    hardwareDataVO.setOperationTime(now);
-                }
-
-                backDataVO.setWorkName("无作业任务");
-                backDataVO.setNodeName("无关联作业");
-                // backDataVO.setOrderNo();
-                // backDataVO.setInitiatorName();
-                hardwareDataVOS.add(hardwareDataVO);
-                backDataVO.setHardwareDataList(hardwareDataVOS);
-            }
-
-            if (nodeId != null && StringUtils.isNotBlank(keyBackVO.getKeyNfc())) {
+            if (keyDO == null || list.isEmpty()) {
+                // 如果没有任务,则直接返回
+                backDataVO.setWorkName("无作业");
+                backDataVO.setNodeName("无任务");
+                backDataVO.setOrderNo(null);
+                backDataVO.setInitiatorName(null);
+                backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
+                backDataVO.setBackDesc("归还成功");
+                backDataVO.setBackStatus("1");
+                backDataVO.setOperationTime(now);
+                return backDataVO;
+            } else {
+                Long nodeId = list.get(0).getNodeId();
                 WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
-                KeyDO keyDO = isKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
-                if (nodeDO != null) {
-                    WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(nodeDO.getWorkId());
-                    if (keyDO != null) {
-                        hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                        hardwareDataVO.setBackDesc("钥匙归还成功");
-                        hardwareDataVO.setOperationTime(now);
-                    } else {
-                        hardwareDataVO.setHardwareName("无法识别钥匙");
-                        hardwareDataVO.setBackDesc("钥匙归还失败");
-                        hardwareDataVO.setOperationTime(now);
-                    }
+                WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(nodeDO.getWorkId());
+                List<WorkflowWorkPointDO> list1 = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                        .eq(WorkflowWorkPointDO::getNodeId, nodeId));
+                if (list1.isEmpty() || list1.size() != list.size()) {
+                    // 检测作业有没有完成,没有完成提示归还失败
                     backDataVO.setWorkName(workflowWorkDO.getName());
-                    backDataVO.setNodeName(nodeDO.getNodeName());
+                    backDataVO.setNodeName(workflowWorkDO.getName());
                     backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
                     backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                    backDataVO.setHardwareName(keyDO.getKeyName());
+                    backDataVO.setBackDesc("归还失败(任务未完成)");
+                    backDataVO.setBackStatus("0");
+                    backDataVO.setOperationTime(LocalDateTime.now());
+                    return backDataVO;
                 } else {
-                    if (keyDO != null) {
-                        hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                        hardwareDataVO.setBackDesc("钥匙归还成功");
-                        hardwareDataVO.setOperationTime(now);
-                    } else {
-                        hardwareDataVO.setHardwareName("无法识别钥匙");
-                        hardwareDataVO.setBackDesc("钥匙归还失败");
-                        hardwareDataVO.setOperationTime(now);
+                    backDataVO.setWorkName(workflowWorkDO.getName());
+                    backDataVO.setNodeName(workflowWorkDO.getName());
+                    backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
+                    backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                    backDataVO.setHardwareName(keyDO.getKeyName());
+                    backDataVO.setBackDesc("归还成功");
+                    backDataVO.setBackStatus("1");
+                    backDataVO.setOperationTime(LocalDateTime.now());
+
+                    for (PointLockVO vo : list) {
+                        Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
+                        Assert.notBlank(vo.getLockNfc(), "lockNfc不可为空");
+                        pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
+                                .eq(WorkflowWorkPointDO::getNodeId, vo.getNodeId())
+                                .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
+                                .set(WorkflowWorkPointDO::getLockNfc, vo.getLockNfc())
+                                .set(WorkflowWorkPointDO::getLockTime, now)
+                                .set(WorkflowWorkPointDO::getStatus, "1"));
+                    }
+                    // 检测上锁完成,更改上锁人状态
+                    List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                            .eq(WorkflowWorkPointDO::getNodeId, nodeId)
+                            .eq(WorkflowWorkPointDO::getStatus, "0"));
+                    if (unclockPoints.isEmpty()) {
+                        // 说明全部点位上锁完成,可以更新上锁人状态
+                        nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
+                                .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
+                                .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
+                                .set(WorkflowWorkNodeUserDO::getStatus, "1")
+                                .set(WorkflowWorkNodeUserDO::getLockTime, now));
+                    }
+
+                    // 帮助归还钥匙
+                    String keyNfc = keyBackVO.getKeyNfc();
+                    if (StringUtils.isNotBlank(keyNfc)) {
+                        // 开始归还钥匙
+                        keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
+                                .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
+                                .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
+                                .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
+                                .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
                     }
-                    backDataVO.setWorkName("无作业任务");
-                    backDataVO.setNodeName("无关联作业");
-                    // backDataVO.setOrderNo();
-                    // backDataVO.setInitiatorName();
-                    hardwareDataVOS.add(hardwareDataVO);
-                    backDataVO.setHardwareDataList(hardwareDataVOS);
                 }
             }
+        } catch (Exception e) {
+            log.error("发生异常{}", e);
+            backDataVO.setWorkName(null);
+            backDataVO.setNodeName(null);
+            backDataVO.setOrderNo(null);
+            backDataVO.setInitiatorName(null);
+            backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
+            backDataVO.setBackDesc(null);
+            backDataVO.setBackStatus("1");
+            backDataVO.setOperationTime(now);
             return backDataVO;
         }
+        return backDataVO;
     }
 
 
@@ -322,10 +303,23 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
     @Override
     public BackDataVO updatePointUnlock(KeyBackVO keyBackVO) {
         LocalDateTime now = LocalDateTime.now();
-        Long nodeId = null;
-        try{
-            if (!keyBackVO.getList().isEmpty()) {
-                nodeId = keyBackVO.getList().get(0).getNodeId();
+        List<PointLockVO> list = keyBackVO.getList();
+        BackDataVO backDataVO = new BackDataVO();
+        KeyDO keyDO = iscsKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
+        try {
+            if (keyDO == null || list.isEmpty()) {
+                // 如果没有任务,则直接返回
+                backDataVO.setWorkName("无作业");
+                backDataVO.setNodeName("无任务");
+                backDataVO.setOrderNo(null);
+                backDataVO.setInitiatorName(null);
+                backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
+                backDataVO.setBackDesc("归还成功");
+                backDataVO.setBackStatus("1");
+                backDataVO.setOperationTime(now);
+                return backDataVO;
+            } else {
+                Long nodeId = keyBackVO.getList().get(0).getNodeId();
                 Long fatherNodeId = 0L;
                 Assert.notNull(nodeId, "nodeId不可为空");
                 WorkflowWorkNodeDO byId = workflowWorkNodeService.getById(nodeId);
@@ -336,102 +330,70 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                             .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
                     fatherNodeId = one.getId();
                 }
-                // 检查是不是所有人都已经解除共锁
-                pointUnlockCheck(fatherNodeId);
-                for (PointLockVO vo : keyBackVO.getList()) {
-                    Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
-                    pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
-                            .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
-                            .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
-                            .set(WorkflowWorkPointDO::getUnlockTime, now)
-                            .set(WorkflowWorkPointDO::getStatus, "2"));
-                }
 
-                // 检测解除共锁(未解除不可解锁,前面pointUnlockCheck判断了现在不用判断了)和点位解锁是否完成
-                checkBackAutoApproval(nodeId, fatherNodeId);
-
-                // 帮助归还钥匙
-                String keyNfc = keyBackVO.getKeyNfc();
-                if (StringUtils.isNotBlank(keyNfc)) {
-                    // 开始归还钥匙
-                    keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
-                            .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
-                            .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
-                            .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
-                            .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
-                }
-            }
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-        } finally {
-            BackDataVO backDataVO = new BackDataVO();
-            // backDataVO.setWorkName();
-            // backDataVO.setNodeName();
-            // backDataVO.setOrderNo();
-            // backDataVO.setInitiatorName();
-            // backDataVO.setHardwareDataList();
-            List<HardwareDataVO> hardwareDataVOS = new ArrayList<>();
-            HardwareDataVO hardwareDataVO = new HardwareDataVO();
-
-            if (nodeId == null && StringUtils.isNotBlank(keyBackVO.getKeyNfc())) {
-                // 百分百没有作业直接返回钥匙返还成功
-                KeyDO keyDO = isKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
-                if (keyDO != null) {
-                    hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                    hardwareDataVO.setBackDesc("钥匙归还成功");
-                    hardwareDataVO.setOperationTime(now);
-                } else {
-                    hardwareDataVO.setHardwareName("无法识别钥匙");
-                    hardwareDataVO.setBackDesc("钥匙归还失败");
-                    hardwareDataVO.setOperationTime(now);
-                }
-
-                backDataVO.setWorkName("无作业任务");
-                backDataVO.setNodeName("无关联作业");
-                // backDataVO.setOrderNo();
-                // backDataVO.setInitiatorName();
-                hardwareDataVOS.add(hardwareDataVO);
-                backDataVO.setHardwareDataList(hardwareDataVOS);
-            }
+                WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(byId.getWorkId());
+                List<WorkflowWorkPointDO> list1 = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                        .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId));
 
-            if (nodeId != null && StringUtils.isNotBlank(keyBackVO.getKeyNfc())) {
-                WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
-                KeyDO keyDO = isKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
-                if (nodeDO != null) {
-                    WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(nodeDO.getWorkId());
-                    if (keyDO != null) {
-                        hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                        hardwareDataVO.setBackDesc("钥匙归还成功");
-                        hardwareDataVO.setOperationTime(now);
-                    } else {
-                        hardwareDataVO.setHardwareName("无法识别钥匙");
-                        hardwareDataVO.setBackDesc("钥匙归还失败");
-                        hardwareDataVO.setOperationTime(now);
-                    }
+                // 检查是不是所有人都已经解除共锁
+                Boolean b = pointUnlockCheck(fatherNodeId);
+                if (!b || list1.isEmpty() || list1.size() != list.size()) {
+                    // 检测作业有没有完成,没有完成提示归还失败
                     backDataVO.setWorkName(workflowWorkDO.getName());
-                    backDataVO.setNodeName(nodeDO.getNodeName());
+                    backDataVO.setNodeName(workflowWorkDO.getName());
                     backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
                     backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                    backDataVO.setHardwareName(keyDO.getKeyName());
+                    backDataVO.setBackDesc("归还失败(任务未完成)");
+                    backDataVO.setBackStatus("0");
+                    backDataVO.setOperationTime(LocalDateTime.now());
+                    return backDataVO;
                 } else {
-                    if (keyDO != null) {
-                        hardwareDataVO.setHardwareName(keyDO.getKeyName());
-                        hardwareDataVO.setBackDesc("钥匙归还成功");
-                        hardwareDataVO.setOperationTime(now);
-                    } else {
-                        hardwareDataVO.setHardwareName("无法识别钥匙");
-                        hardwareDataVO.setBackDesc("钥匙归还失败");
-                        hardwareDataVO.setOperationTime(now);
+                    backDataVO.setWorkName(workflowWorkDO.getName());
+                    backDataVO.setNodeName(workflowWorkDO.getName());
+                    backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
+                    backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                    backDataVO.setHardwareName(keyDO.getKeyName());
+                    backDataVO.setBackDesc("归还成功");
+                    backDataVO.setBackStatus("1");
+                    backDataVO.setOperationTime(LocalDateTime.now());
+                    for (PointLockVO vo : keyBackVO.getList()) {
+                        Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
+                        pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
+                                .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
+                                .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
+                                .set(WorkflowWorkPointDO::getUnlockTime, now)
+                                .set(WorkflowWorkPointDO::getStatus, "2"));
+                    }
+
+                    // 检测解除共锁(未解除不可解锁,前面pointUnlockCheck判断了现在不用判断了)和点位解锁是否完成
+                    checkBackAutoApproval(nodeId, fatherNodeId);
+
+                    // 帮助归还钥匙
+                    String keyNfc = keyBackVO.getKeyNfc();
+                    if (StringUtils.isNotBlank(keyNfc)) {
+                        // 开始归还钥匙
+                        keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
+                                .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
+                                .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
+                                .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
+                                .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
                     }
-                    backDataVO.setWorkName("无作业任务");
-                    backDataVO.setNodeName("无关联作业");
-                    // backDataVO.setOrderNo();
-                    // backDataVO.setInitiatorName();
-                    hardwareDataVOS.add(hardwareDataVO);
-                    backDataVO.setHardwareDataList(hardwareDataVOS);
                 }
             }
+        } catch (Exception e) {
+            log.error("发生异常{}", e);
+            backDataVO.setWorkName(null);
+            backDataVO.setNodeName(null);
+            backDataVO.setOrderNo(null);
+            backDataVO.setInitiatorName(null);
+            backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
+            backDataVO.setBackDesc(null);
+            backDataVO.setBackStatus("1");
+            backDataVO.setOperationTime(now);
             return backDataVO;
         }
+        return backDataVO;
     }
 
 
@@ -484,88 +446,93 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                 .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
                 .eq(WorkflowWorkNodeUserDO::getStatus, "1"));
         if (!list.isEmpty()) {
-            List<Long> colockUserIds = list.stream().map(WorkflowWorkNodeUserDO::getUserId).toList();
-            List<AdminUserDO> userList = adminUserService.getUserList(colockUserIds);
-            String colockUserNames = userList.stream().map(AdminUserDO::getNickname).collect(Collectors.joining(","));
-            Assert.isTrue(false, colockUserNames + "未解除共锁,暂不可解锁");
+            // List<Long> colockUserIds = list.stream().map(WorkflowWorkNodeUserDO::getUserId).toList();
+            // List<AdminUserDO> userList = adminUserService.getUserList(colockUserIds);
+            // String colockUserNames = userList.stream().map(AdminUserDO::getNickname).collect(Collectors.joining(","));
+            // Assert.isTrue(false, colockUserNames + "未解除共锁,暂不可解锁");
+            return false;
         }
         return true;
     }
 
     @Override
-    public Boolean updateBackLock(List<HandleLockVO> list) {
+    public List<BackDataVO> updateBackLock(List<HandleLockVO> list) {
         // 直接还
-        LocalDateTime now = LocalDateTime.now();
-        Long nodeId = null;
+        List<BackDataVO> backDataVOList = new ArrayList<>();
+
         try {
             if (!list.isEmpty()) {
-                nodeId = list.get(0).getNodeId();
-                Assert.notNull(nodeId, "nodeId不能为空!");
-                WorkflowWorkNodeDO byId = workflowWorkNodeService.getById(nodeId);
-
                 for (HandleLockVO vo : list) {
                     Assert.notNull(vo.getLockNfc(), "lockNfc不可为空");
                     Assert.notNull(vo.getHardwareCode(), "hardwareCode不可为空");
-                    lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
+                    // 查询挂锁信息
+                    LockDO lockDO = iscsLockService.getOne(Wrappers.<LockDO>lambdaQuery().eq(LockDO::getLockNfc, vo.getLockNfc()));
+                    // 查询该挂锁是不是有已解锁未归还的任务
+                    List<WorkflowWorkTicketLockDO> list1 = lockService.list((Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
                             .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
-                            .set(WorkflowWorkTicketLockDO::getLockStatus, "5")
-                            .set(WorkflowWorkTicketLockDO::getToHardwareCode, vo.getHardwareCode()));
-                }
-
-                if (StringUtils.isNotBlank(byId.getIsolationNodeUuid())) {
-                    // 如果是解除节点的查询操作,则查询对应隔离节点的数据
-                    WorkflowWorkNodeDO one = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
-                            .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
-                            .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
-                    Long fatherNodeId = one.getId();
-
-                    // 检测是不是都已经
-                    checkBackAutoApproval(nodeId, fatherNodeId);
+                            .eq(WorkflowWorkTicketLockDO::getLockStatus, "4")));
+                    if (lockDO == null || list1.isEmpty()) {
+                        // 如果没有任务,则直接返回
+                        BackDataVO backDataVO = new BackDataVO();
+                        backDataVO.setWorkName("无作业");
+                        backDataVO.setNodeName("无任务");
+                        backDataVO.setOrderNo(null);
+                        backDataVO.setInitiatorName(null);
+                        backDataVO.setHardwareName(lockDO != null ? lockDO.getLockName() : "无法识别的挂锁");
+                        backDataVO.setBackDesc("归还成功");
+                        backDataVO.setBackStatus("1");
+                        backDataVO.setOperationTime(LocalDateTime.now());
+                        backDataVOList.add(backDataVO);
+                    } else {
+                        WorkflowWorkNodeDO workflowWorkNode = workflowWorkNodeService.getWorkflowWorkNode(list1.get(0).getNodeId());
+                        WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(workflowWorkNode.getWorkId());
+                        // 查询钥匙有没有归还,没归还提示归还失败
+                        List<WorkflowWorkTicketKeyDO> list2 = keyService.list(Wrappers.<WorkflowWorkTicketKeyDO>lambdaQuery()
+                                .eq(WorkflowWorkTicketKeyDO::getNodeId, workflowWorkNode.getId())
+                                .eq(WorkflowWorkTicketKeyDO::getKeyStatus, "1"));
+                        if (!list2.isEmpty()) {
+                            BackDataVO backDataVO = new BackDataVO();
+                            backDataVO.setWorkName(workflowWorkDO.getName());
+                            backDataVO.setNodeName(workflowWorkDO.getName());
+                            backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
+                            backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                            backDataVO.setHardwareName(lockDO.getLockName());
+                            backDataVO.setBackDesc("归还失败(任务未完成)");
+                            backDataVO.setBackStatus("0");
+                            backDataVO.setOperationTime(LocalDateTime.now());
+                            backDataVOList.add(backDataVO);
+                        } else {
+                            BackDataVO backDataVO = new BackDataVO();
+                            backDataVO.setWorkName(workflowWorkDO.getName());
+                            backDataVO.setNodeName(workflowWorkDO.getName());
+                            backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
+                            backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
+                            backDataVO.setHardwareName(lockDO.getLockName());
+                            backDataVO.setBackDesc("归还成功");
+                            backDataVO.setBackStatus("1");
+                            backDataVO.setOperationTime(LocalDateTime.now());
+                            backDataVOList.add(backDataVO);
+
+                            // 开始执行完成任务节点的挂锁归还
+                            lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
+                                    .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
+                                    .eq(WorkflowWorkTicketLockDO::getLockStatus, "4")
+                                    .set(WorkflowWorkTicketLockDO::getLockStatus, "5")
+                                    .set(WorkflowWorkTicketLockDO::getToHardwareCode, vo.getHardwareCode()));
+
+                            // 检测是不是都已经归还
+                            WorkflowWorkNodeDO childNode = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                                    .eq(WorkflowWorkNodeDO::getWorkId, workflowWorkNode.getWorkId())
+                                    .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, workflowWorkNode.getUuid()));
+                            checkBackAutoApproval(childNode.getId(), workflowWorkNode.getId());
+                        }
+                    }
                 }
             }
         } catch (Exception e) {
-            System.out.println(e.getMessage());
-        } finally {
-            BackDataVO backDataVO = new BackDataVO();
-            List<HardwareDataVO> hardwareDataVOS = new ArrayList<>();
-            if (nodeId == null) {
-                for (HandleLockVO vo : list) {
-                    LockDO lockDO = iscsLockService.getOne(Wrappers.<LockDO>lambdaUpdate()
-                            .eq(LockDO::getLockNfc, vo.getLockNfc()));
-                    HardwareDataVO hardwareDataVO = new HardwareDataVO();
-                    hardwareDataVO.setHardwareName(lockDO != null ? lockDO.getLockName() : "无挂锁信息");
-                    hardwareDataVO.setBackDesc(lockDO != null ? "钥匙归还成功" : "钥匙归还失败");
-                    hardwareDataVO.setOperationTime(now);
-                    hardwareDataVOS.add(hardwareDataVO);
-                }
-                backDataVO.setWorkName("无作业任务");
-                backDataVO.setNodeName("无关联作业");
-                backDataVO.setHardwareDataList(hardwareDataVOS);
-
-            } else {
-                WorkflowWorkNodeDO workflowWorkNode = workflowWorkNodeService.getWorkflowWorkNode(nodeId);
-                WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(workflowWorkNode.getWorkId());
-
-                for (HandleLockVO vo : list) {
-                    LockDO lockDO = iscsLockService.getOne(Wrappers.<LockDO>lambdaUpdate()
-                            .eq(LockDO::getLockNfc, vo.getLockNfc()));
-                    WorkflowWorkTicketLockDO ticketLockDO = lockService.getOne(Wrappers.<WorkflowWorkTicketLockDO>lambdaQuery()
-                            .eq(WorkflowWorkTicketLockDO::getNodeId, nodeId)
-                            .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc()));
-                    HardwareDataVO hardwareDataVO = new HardwareDataVO();
-                    hardwareDataVO.setHardwareName(lockDO != null ? lockDO.getLockName() : "无挂锁信息");
-                    hardwareDataVO.setBackDesc(lockDO != null ? "钥匙归还成功" : "钥匙归还失败");
-                    hardwareDataVO.setOperationTime(now);
-                    hardwareDataVOS.add(hardwareDataVO);
-                }
-                backDataVO.setWorkName("无作业任务");
-                backDataVO.setNodeName("无关联作业");
-                backDataVO.setHardwareDataList(hardwareDataVOS);
-
-            }
+            log.error("发生异常{}", e);
         }
-
-        return true;
+        return backDataVOList;
     }
 
 

+ 17 - 2
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkServiceImpl.java

@@ -59,6 +59,8 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
     private WorkflowWorkPointService workflowWorkPointService;
     @Resource
     private WorkflowWorkTicketLockService workflowWorkTicketLockService;
+    @Resource
+    private WorkflowWorkTicketKeyService workflowWorkTicketKeyService;
 
     @Transactional
     @Override
@@ -142,8 +144,21 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
         // 删除
         workflowWorkMapper.deleteByIds(ids);
         // 同时删除解析的作业节点
-        workflowWorkNodeService.remove(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
-                .in(WorkflowWorkNodeDO::getWorkId, ids));
+        List<WorkflowWorkNodeDO> nodeDOList = workflowWorkNodeService.list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery().eq(WorkflowWorkNodeDO::getWorkId, ids));
+        if (!nodeDOList.isEmpty()) {
+            List<Long> nodeIds = nodeDOList.stream().map(WorkflowWorkNodeDO::getId).toList();
+            // 删除key
+            workflowWorkTicketKeyService.remove(Wrappers.<WorkflowWorkTicketKeyDO>lambdaQuery().in(WorkflowWorkTicketKeyDO::getNodeId, nodeIds));
+            // 删除lock
+            workflowWorkTicketLockService.remove(Wrappers.<WorkflowWorkTicketLockDO>lambdaQuery().in(WorkflowWorkTicketLockDO::getNodeId, nodeIds));
+            // 删除点位相关数据
+            workflowWorkPointService.remove(Wrappers.<WorkflowWorkPointDO>lambdaQuery().in(WorkflowWorkPointDO::getNodeId, nodeIds));
+            // 删除节点信息
+            workflowWorkNodeService.remove(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                    .in(WorkflowWorkNodeDO::getWorkId, ids));
+        }
+
+
     }
 
 

+ 4 - 0
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.system.controller.admin.auth.vo;
 
 import cn.iocoder.yudao.module.system.dal.dataobject.homepage.PageUiComponentDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -23,6 +24,9 @@ public class AuthPermissionInfoRespVO {
     @Schema(description = "角色标识数组", requiredMode = Schema.RequiredMode.REQUIRED)
     private Set<String> roles;
 
+    @Schema(description = "角色标识数组", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Set<RoleDO> roleList;
+
     @Schema(description = "操作权限数组", requiredMode = Schema.RequiredMode.REQUIRED)
     private Set<String> permissions;
 

+ 1 - 0
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java

@@ -33,6 +33,7 @@ public interface AuthConvert {
         return AuthPermissionInfoRespVO.builder()
                 .user(BeanUtils.toBean(user, AuthPermissionInfoRespVO.UserVO.class))
                 .roles(convertSet(roleList, RoleDO::getCode))
+                .roleList(convertSet(roleList))
                 // 权限标识信息
                 .permissions(convertSet(menuList, MenuDO::getPermission))
                 // 菜单树