소스 검색

新增PDA操作 归还钥匙

车车 3 주 전
부모
커밋
cc21f9242f

+ 46 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/PDATicketController.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.BackDataVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.KeyStatusVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.PDAKeyBackVO;
+import cn.iocoder.yudao.module.iscs.service.workdesign.PDAHandleService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.annotation.security.PermitAll;
+import jakarta.validation.Valid;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - 作业票处理过程")
+@RestController
+@RequestMapping("/isc/work-handle-pda")
+@Validated
+public class PDATicketController {
+
+    @Resource
+    private PDAHandleService pdaHandleService;
+
+    @PermitAll
+    @PostMapping("/updateKeyBack")
+    @Operation(summary = "归还钥匙(任意时间)")
+    public CommonResult<BackDataVO> updateKeyBack(@Valid @RequestBody PDAKeyBackVO vo) {
+        return success(pdaHandleService.updateKeyBack(vo));
+    }
+
+
+    @PermitAll
+    @GetMapping("/getKeyStatus")
+    @Operation(summary = "通过钥匙的mac_address获取钥匙的使用状态")
+    public CommonResult<List<KeyStatusVO>> getKeyStatus(@RequestParam("macs") List<String> macs) {
+        List<KeyStatusVO> keyStates = pdaHandleService.getKeyStatus(macs);
+        return success(keyStates);
+    }
+
+}

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

@@ -107,12 +107,4 @@ public class WorkflowWorkTicketController {
         return success(respVO);
     }
 
-    @PermitAll
-    @GetMapping("/getKeyStates")
-    @Operation(summary = "通过钥匙的mac_address获取钥匙的使用状态")
-    public CommonResult<List<KeyStateVO>> getKeyStates(List<String> macs) {
-        WorkflowWorkNodeRespVO respVO = workflowWorkHandleService.getKeyStates(macs);
-        return success(respVO);
-    }
-
 }

+ 2 - 2
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/vo/KeyStateVO.java → yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/vo/KeyStatusVO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 
 @Schema(description = "管理后台 - 钥匙状态")
 @Data
-public class KeyStateVO {
+public class KeyStatusVO {
 
     @Schema(description = "ID")
     private Long id;
@@ -22,7 +22,7 @@ public class KeyStateVO {
     @Schema(description = "MAC地址")
     private String macAddress;
 
-    @Schema(description = "使用状态", example = "0未使用 1使用中")
+    @Schema(description = "使用状态", example = "0未使用 1使用中 2未知")
     private String usageStatus;
 
 }

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

@@ -0,0 +1,24 @@
+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;
+
+@Schema(description = "管理后台 - 钥匙上传数据")
+@Data
+public class PDAKeyBackVO {
+
+    @Schema(description = "钥匙目标(0-挂锁 1-解锁)")
+    private Integer target;
+
+    @Schema(description = "钥匙nfc")
+    private String keyNfc;
+
+    @Schema(description = "柜子标识")
+    private String hardwareCode;
+
+    @Schema(description = "点位和挂锁对应关系")
+    private List<PointLockVO> list;
+
+}

+ 21 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/PDAHandleService.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.iscs.service.workdesign;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.*;
+
+import java.util.List;
+
+/**
+ * 作业票处理过程 Service 接口
+ *
+ * @author 博士安全
+ */
+public interface PDAHandleService {
+
+
+
+    BackDataVO updateKeyBack(PDAKeyBackVO vo);
+
+    List<KeyStatusVO> getKeyStatus(List<String> macs);
+
+
+}

+ 449 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/PDAHandleServiceImpl.java

@@ -0,0 +1,449 @@
+package cn.iocoder.yudao.module.iscs.service.workdesign;
+
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworknode.vo.ApprovalNodeReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
+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.service.key.KeyService;
+import cn.iocoder.yudao.module.iscs.service.lock.LockService;
+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;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 作业票处理过程 Service 实现类
+ *
+ * @author 博士安全
+ */
+@Service
+@Validated
+@Slf4j
+public class PDAHandleServiceImpl implements PDAHandleService {
+
+    @Autowired
+    private WorkflowWorkTicketService ticketService;
+    @Autowired
+    private WorkflowWorkTicketKeyService keyService;
+    @Autowired
+    private WorkflowWorkTicketLockService lockService;
+    @Autowired
+    private WorkflowWorkPointService pointService;
+    @Autowired
+    private WorkflowWorkNodeUserService nodeUserService;
+    @Autowired
+    private AdminUserService adminUserService;
+    @Autowired
+    private WorkflowWorkService workflowWorkService;
+    @Autowired
+    private WorkflowWorkNodeService workflowWorkNodeService;
+    @Autowired
+    private KeyService iscsKeyService;
+    @Autowired
+    private LockService iscsLockService;
+    @Autowired
+    private WorkflowWorkPointService workflowWorkPointService;
+    @Autowired
+    private WorkflowWorkLogService workflowWorkLogService;
+
+
+    /**
+     * 点位上锁(归还钥匙)
+     *
+     * @param keyBackVO
+     * @return
+     */
+    @Transactional
+    public BackDataVO updatePointLock(PDAKeyBackVO keyBackVO) {
+        LocalDateTime now = LocalDateTime.now();
+        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 = list.get(0).getNodeId();
+                WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
+                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(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 {
+                    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不可为空");
+                        if (StringUtils.isNotBlank(vo.getPointNfc())
+                                && StringUtils.isNotBlank(vo.getLockNfc())
+                                && vo.getClosed().equals(1)) {
+                            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"));
+
+                            lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
+                                    .eq(WorkflowWorkTicketLockDO::getNodeId, vo.getNodeId())
+                                    .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
+                                    .set(WorkflowWorkTicketLockDO::getLockStatus, "2"));
+                        }
+                    }
+                    // 检测上锁完成,更改上锁人状态
+                    List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                            .eq(WorkflowWorkPointDO::getNodeId, nodeId)
+                            .eq(WorkflowWorkPointDO::getStatus, "0"));
+                    List<WorkflowWorkNodeUserDO> list2 = new ArrayList<>();
+                    if (unclockPoints.isEmpty()) {
+                        // 说明全部点位上锁完成,可以更新上锁人状态
+                        nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
+                                .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
+                                .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
+                                .set(WorkflowWorkNodeUserDO::getStatus, "1")
+                                .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"));
+                        }
+                    }
+
+                    // 帮助归还钥匙
+                    String keyNfc = keyBackVO.getKeyNfc();
+                    if (StringUtils.isNotBlank(keyNfc)) {
+                        // PDA需要判断是否全部上锁完成,完成才可以归还
+                        if (unclockPoints.isEmpty()) {
+                            // 开始归还钥匙
+                            keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
+                                    .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
+                                    .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
+                                    .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
+                                    .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
+                                    .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
+                        }
+
+                        if (!list2.isEmpty()) {
+                            // 如果list2是空的则在updateNodeApproval中被记录
+                            // isc_workflow_work_log日志记录
+                            workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
+                        }
+
+                    }
+                }
+            }
+        } 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;
+    }
+
+
+
+
+    @Transactional
+    public BackDataVO updatePointUnlock(PDAKeyBackVO keyBackVO) {
+        LocalDateTime now = LocalDateTime.now();
+        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);
+                if (StringUtils.isNotBlank(byId.getIsolationNodeUuid())) {
+                    // 如果是解除节点的查询操作,则查询对应隔离节点的数据
+                    WorkflowWorkNodeDO one = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                            .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
+                            .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
+                    fatherNodeId = one.getId();
+                }
+
+                WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(byId.getWorkId());
+                List<WorkflowWorkPointDO> list1 = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                        .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId));
+
+                // 检查是不是所有人都已经解除共锁
+                Boolean b = pointUnlockCheck(fatherNodeId);
+                if (!b || list1.isEmpty() || list1.size() != list.size()) {
+                    // 检测作业有没有完成,没有完成提示归还失败
+                    backDataVO.setWorkName(workflowWorkDO.getName());
+                    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 {
+                    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不可为空");
+                        if (StringUtils.isNotBlank(vo.getPointNfc())
+                                && StringUtils.isNotBlank(vo.getLockNfc())
+                                && vo.getClosed().equals(1)) {
+                            // closed = 1 说明这个点位解锁任务操作完成
+                            pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
+                                    .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
+                                    .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
+                                    .set(WorkflowWorkPointDO::getUnlockTime, now)
+                                    .set(WorkflowWorkPointDO::getStatus, "2"));
+                            lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
+                                    .eq(WorkflowWorkTicketLockDO::getNodeId, fatherNodeId)
+                                    .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
+                                    .set(WorkflowWorkTicketLockDO::getLockStatus, "4"));
+                        }
+                    }
+
+                    // 检测解除共锁(未解除不可解锁,前面pointUnlockCheck判断了现在不用判断了)和点位解锁是否完成
+                    Boolean b1 = checkBackAutoApproval(nodeId, fatherNodeId);
+
+                    // 帮助归还钥匙
+                    String keyNfc = keyBackVO.getKeyNfc();
+                    if (StringUtils.isNotBlank(keyNfc)) {
+                        // PDA需要检测是不是全部解锁完成,全部解锁完成了才算归还
+                        if (b1) {
+                            // 开始归还钥匙
+                            keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
+                                    .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
+                                    .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
+                                    .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
+                                    .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
+                                    .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
+                        }
+
+                        // isc_workflow_work_log日志记录
+                        // workflowWorkLogService.createWorkflowWorkLog(nodeId, "1");
+                    }
+                }
+            }
+        } 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;
+    }
+
+
+    /**
+     * 检测点位是不是全部解锁,如果是,自动审批当前节点
+     *
+     * @param nodeId       解除隔离节点的nodeId
+     * @param fatherNodeId 隔离节点的nodeId
+     * @return
+     */
+    private Boolean checkBackAutoApproval(Long nodeId, Long fatherNodeId) {
+        LocalDateTime now = LocalDateTime.now();
+        // 检测点位是不是全部解锁完成
+        List<WorkflowWorkPointDO> list = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
+                .eq(WorkflowWorkPointDO::getNodeId, nodeId)
+                .ne(WorkflowWorkPointDO::getStatus, "2"));
+        if (!list.isEmpty()) {
+            // 说明没有全部解锁
+            return false;
+        } else {
+            // 说明全部解锁,同时更新上锁人解锁完成状态
+            nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
+                    .eq(WorkflowWorkNodeUserDO::getNodeId, fatherNodeId)
+                    .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
+                    .set(WorkflowWorkNodeUserDO::getStatus, "2")
+                    .set(WorkflowWorkNodeUserDO::getUnlockTime, now));
+        }
+
+        /*// 检测挂锁是不是还了
+        List<WorkflowWorkTicketLockDO> list2 = lockService.list(Wrappers.<WorkflowWorkTicketLockDO>lambdaQuery()
+                .eq(WorkflowWorkTicketLockDO::getNodeId, fatherNodeId)
+                .ne(WorkflowWorkTicketLockDO::getLockStatus, "5"));
+        if (!list2.isEmpty()) {
+            return false;
+        }*/
+
+        // 全部解锁完成开始审批
+        ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
+        approvalNodeReqVO.setNodeId(nodeId);
+        approvalNodeReqVO.setApprovalStatus("approved");
+        approvalNodeReqVO.setApprovalOpinion("approved");
+        workflowWorkService.updateNodeApproval(approvalNodeReqVO);
+
+        // isc_workflow_work_log日志记录
+        // updateNodeApproval方法种已经记录,防止多次记录
+        // workflowWorkLogService.createWorkflowWorkLog(nodeId, null);
+
+        return true;
+    }
+
+    private Boolean pointUnlockCheck(Long nodeId) {
+        // 检查是不是所有人都已经解除共锁
+        List<WorkflowWorkNodeUserDO> list = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
+                .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
+                .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 + "未解除共锁,暂不可解锁");
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public BackDataVO updateKeyBack(PDAKeyBackVO vo) {
+        System.out.println("vo----------" + vo);
+        Assert.notNull(vo.getTarget(), "target不能为空!");
+        BackDataVO backDataVO = new BackDataVO();
+        if (vo.getTarget().equals(0)) {
+            backDataVO = updatePointLock(vo);
+        }
+        if (vo.getTarget().equals(1)) {
+            backDataVO = updatePointUnlock(vo);
+        }
+        System.out.println("backDataVO------------" + backDataVO);
+        return backDataVO;
+    }
+
+
+    @Override
+    public List<KeyStatusVO> getKeyStatus(List<String> macs) {
+        ArrayList<KeyStatusVO> keyStatusVOS = new ArrayList<>();
+        if (!macs.isEmpty()) {
+            // 初始化一下
+            for (String mac : macs) {
+                KeyStatusVO keyStatusVO = new KeyStatusVO();
+                keyStatusVO.setMacAddress(mac);
+                keyStatusVO.setUsageStatus("2");
+                keyStatusVOS.add(keyStatusVO);
+            }
+
+            // 获取系统内钥匙的信息,考虑可能获取不到的情况
+            List<KeyDO> keyDOList = iscsKeyService.list(Wrappers.<KeyDO>lambdaQuery()
+                    .in(KeyDO::getMacAddress, macs));
+            if (!keyDOList.isEmpty()) {
+                // 获取正在使用的钥匙信息
+                List<String> keyNfcs = keyDOList.stream().map(KeyDO::getKeyNfc).toList();
+                List<WorkflowWorkTicketKeyDO> ticketKeyDOS = keyService.list(Wrappers.<WorkflowWorkTicketKeyDO>lambdaQuery()
+                        .in(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfcs)
+                        .eq(WorkflowWorkTicketKeyDO::getKeyStatus, "1"));
+                // 进行数据封装
+                for (KeyStatusVO keyStatusVO : keyStatusVOS) {
+                    for (KeyDO keyDO : keyDOList) {
+                        if (StringUtils.isNotBlank(keyDO.getMacAddress()) && keyStatusVO.getMacAddress().equals(keyDO.getMacAddress())) {
+                            keyStatusVO.setId(keyDO.getId());
+                            keyStatusVO.setKeyCode(keyDO.getKeyCode());
+                            keyStatusVO.setKeyName(keyDO.getKeyName());
+                            keyStatusVO.setKeyNfc(keyDO.getKeyNfc());
+                            keyStatusVO.setUsageStatus("0");
+                        }
+                    }
+                    for (WorkflowWorkTicketKeyDO ticketKeyDO : ticketKeyDOS) {
+                        if (StringUtils.isNotBlank(keyStatusVO.getKeyNfc())
+                                && StringUtils.isNotBlank(ticketKeyDO.getKeyNfc())
+                                && keyStatusVO.getKeyNfc().equals(ticketKeyDO.getKeyNfc())) {
+                            keyStatusVO.setUsageStatus("1");
+                        }
+                    }
+                }
+            }
+        }
+        return keyStatusVOS;
+    }
+
+
+}

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

@@ -35,7 +35,4 @@ public interface WorkflowWorkHandleService {
 
     WorkflowWorkNodeRespVO getNodeDetailByNfc(String nfc);
 
-    List<KeyStateVO> getKeyStates(List<String> macs);
-
-
 }

+ 0 - 16
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleServiceImpl.java

@@ -766,21 +766,5 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         return new WorkflowWorkNodeRespVO();
     }
 
-    @Override
-    public List<KeyStateVO> getKeyStates(List<String> macs) {
-        ArrayList<KeyStateVO> keyStateVOS = new ArrayList<>();
-        if (!macs.isEmpty()) {
-            List<KeyDO> keyDOList = iscsKeyService.list(Wrappers.<KeyDO>lambdaQuery()
-                    .in(KeyDO::getMacAddress, macs));
-            if (!keyDOList.isEmpty()) {
-                
-            }
-
-        }
-
-
-        return List.of();
-    }
-
 
 }