ソースを参照

新增nfc获取钥匙/挂锁信息,以及使用状态

车车 1 週間 前
コミット
a654e5085a

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

@@ -4,6 +4,7 @@ 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.controller.admin.workdesign.workhandle.vo.UsageStatusVO;
 import cn.iocoder.yudao.module.iscs.service.workdesign.PDAHandleService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -43,4 +44,12 @@ public class PDATicketController {
         return success(keyStates);
     }
 
+    @PermitAll
+    @GetMapping("/getStatusByNfc")
+    @Operation(summary = "通过nfc去获取钥匙的使用状态")
+    public CommonResult<List<UsageStatusVO>> getStatusByNfc(@RequestParam("nfcList") List<String> nfcList) {
+        List<UsageStatusVO> keyStates = pdaHandleService.getStatusByNfc(nfcList);
+        return success(keyStates);
+    }
+
 }

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

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 设备状态")
+@Data
+public class UsageStatusVO {
+
+    @Schema(description = "ID")
+    private Long id;
+
+    @Schema(description = "类型(0-钥匙 1-挂锁)")
+    private Integer type;
+
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "名称", example = "张三")
+    private String name;
+
+    @Schema(description = "NFC")
+    private String nfc;
+
+    @Schema(description = "MAC地址")
+    private String macAddress;
+
+    @Schema(description = "使用状态", example = "0未使用 1使用中 2未知")
+    private String usageStatus;
+
+}

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

@@ -17,5 +17,7 @@ public interface PDAHandleService {
 
     List<KeyStatusVO>  getKeyStatus(List<String> macs);
 
+    List<UsageStatusVO>  getStatusByNfc(List<String> nfcList);
+
 
 }

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

@@ -4,6 +4,7 @@ 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.lock.LockDO;
 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;
@@ -463,5 +464,76 @@ public class PDAHandleServiceImpl implements PDAHandleService {
         return keyStatusVOS;
     }
 
+    @Override
+    public List<UsageStatusVO> getStatusByNfc(List<String> nfcList) {
+        if (nfcList.isEmpty()) {
+            return new ArrayList<UsageStatusVO>();
+        }
+
+        List<UsageStatusVO> usageStatusVOS = new ArrayList<>();
+        for (String nfc : nfcList) {
+            UsageStatusVO usageStatusVO = new UsageStatusVO();
+            usageStatusVO.setNfc(nfc);
+            usageStatusVOS.add(usageStatusVO);
+        }
+
+
+        // 因为可能包含钥匙和挂锁的nfc,所以需要分类查询
+        // 1.开始查询钥匙
+        List<KeyDO> keyDOList = iscsKeyService.list(Wrappers.<KeyDO>lambdaQuery()
+                .in(KeyDO::getKeyNfc, nfcList));
+        // 1.1如果有钥匙数据,查下使用状态吧
+        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 (UsageStatusVO usageStatusVO : usageStatusVOS) {
+                for (KeyDO keyDO : keyDOList) {
+                    if (usageStatusVO.getNfc().equals(keyDO.getKeyNfc())) {
+                        usageStatusVO.setId(keyDO.getId());
+                        usageStatusVO.setType(0);
+                        usageStatusVO.setCode(keyDO.getKeyCode());
+                        usageStatusVO.setName(keyDO.getKeyName());
+                        usageStatusVO.setMacAddress(keyDO.getMacAddress());
+                    }
+                }
+                for (WorkflowWorkTicketKeyDO ticketKeyDO : ticketKeyDOS) {
+                    if (usageStatusVO.getNfc().equals(ticketKeyDO.getKeyNfc())) {
+                        usageStatusVO.setUsageStatus("1");
+                    }
+                }
+            }
+        }
+
+        // 2.开始查询挂锁
+        List<LockDO> lockDOList = iscsLockService.list(Wrappers.<LockDO>lambdaQuery()
+                .in(LockDO::getLockNfc, nfcList));
+        // 2.1如果有挂锁数据,查下使用状态吧
+        if (!lockDOList.isEmpty()) {
+            List<String> lockNfcs = lockDOList.stream().map(LockDO::getLockNfc).toList();
+            List<WorkflowWorkTicketLockDO> ticketLockDOS = lockService.list(Wrappers.<WorkflowWorkTicketLockDO>lambdaQuery()
+                    .in(WorkflowWorkTicketLockDO::getLockNfc, lockNfcs)
+                    .eq(WorkflowWorkTicketLockDO::getLockStatus, "1"));
+            for (UsageStatusVO usageStatusVO : usageStatusVOS) {
+                for (LockDO lockDO : lockDOList) {
+                    if (usageStatusVO.getNfc().equals(lockDO.getLockNfc())) {
+                        usageStatusVO.setId(lockDO.getId());
+                        usageStatusVO.setType(0);
+                        usageStatusVO.setCode(lockDO.getLockCode());
+                        usageStatusVO.setName(lockDO.getLockName());
+                        // usageStatusVO.setMacAddress(lockDO.get());
+                    }
+                }
+                for (WorkflowWorkTicketLockDO ticketLockDO : ticketLockDOS) {
+                    if (usageStatusVO.getNfc().equals(ticketLockDO.getLockNfc())) {
+                        usageStatusVO.setUsageStatus("1");
+                    }
+                }
+            }
+        }
+        return usageStatusVOS;
+    }
+
 
 }