Explorar o código

处理isc_key业务逻辑

车车 hai 4 meses
pai
achega
84bb7611d0

+ 110 - 95
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/key/KeyController.java

@@ -1,95 +1,110 @@
-package cn.iocoder.yudao.module.iscs.controller.admin.key;
-
-import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import jakarta.validation.constraints.*;
-import jakarta.validation.*;
-import jakarta.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
-
-import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.*;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
-import cn.iocoder.yudao.module.iscs.service.key.KeyService;
-
-@Tag(name = "管理后台 - 钥匙")
-@RestController
-@RequestMapping("/iscs/key")
-@Validated
-public class KeyController {
-
-    @Resource
-    private KeyService keyService;
-
-    @PostMapping("/insertKey")
-    @Operation(summary = "创建钥匙")
-    @PreAuthorize("@ss.hasPermission('iscs:key:create')")
-    public CommonResult<Long> insertKey(@Valid @RequestBody KeySaveReqVO createReqVO) {
-        return success(keyService.createKey(createReqVO));
-    }
-
-    @PutMapping("/updateKey")
-    @Operation(summary = "更新钥匙")
-    @PreAuthorize("@ss.hasPermission('iscs:key:update')")
-    public CommonResult<Boolean> updateKey(@Valid @RequestBody KeySaveReqVO updateReqVO) {
-        keyService.updateKey(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/deleteKeyList")
-    @Parameter(name = "ids", description = "编号", required = true)
-    @Operation(summary = "批量删除钥匙")
-                @PreAuthorize("@ss.hasPermission('iscs:key:delete')")
-    public CommonResult<Boolean> deleteKeyList(@RequestParam("ids") List<Long> ids) {
-        keyService.deleteKeyListByIds(ids);
-        return success(true);
-    }
-
-    @GetMapping("/selectKeyById")
-    @Operation(summary = "获得钥匙")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('iscs:key:query')")
-    public CommonResult<KeyRespVO> selectKeyById(@RequestParam("id") Long id) {
-        KeyDO key = keyService.getKey(id);
-        return success(BeanUtils.toBean(key, KeyRespVO.class));
-    }
-
-    @GetMapping("/getKeyPage")
-    @Operation(summary = "获得钥匙分页")
-    @PreAuthorize("@ss.hasPermission('iscs:key:query')")
-    public CommonResult<PageResult<KeyRespVO>> getKeyPage(@Valid KeyPageReqVO pageReqVO) {
-        PageResult<KeyDO> pageResult = keyService.getKeyPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, KeyRespVO.class));
-    }
-
-    @GetMapping("/exportKeyExcel")
-    @Operation(summary = "导出钥匙 Excel")
-    @PreAuthorize("@ss.hasPermission('iscs:key:export')")
-    @ApiAccessLog(operateType = EXPORT)
-    public void exportKeyExcel(@Valid KeyPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<KeyDO> list = keyService.getKeyPage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "钥匙.xls", "数据", KeyRespVO.class,
-                        BeanUtils.toBean(list, KeyRespVO.class));
-    }
-
-}
+package cn.iocoder.yudao.module.iscs.controller.admin.key;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeySaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
+import cn.iocoder.yudao.module.iscs.service.key.KeyService;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 钥匙")
+@RestController
+@RequestMapping("/iscs/key")
+@Validated
+public class KeyController {
+
+    @Resource
+    private KeyService keyService;
+
+    @PostMapping("/insertKey")
+    @Operation(summary = "创建钥匙")
+    @PreAuthorize("@ss.hasPermission('iscs:key:create')")
+    public CommonResult<Long> insertKey(@Valid @RequestBody KeySaveReqVO createReqVO) {
+        return success(keyService.createKey(createReqVO));
+    }
+
+    @PutMapping("/updateKey")
+    @Operation(summary = "更新钥匙")
+    @PreAuthorize("@ss.hasPermission('iscs:key:update')")
+    public CommonResult<Boolean> updateKey(@Valid @RequestBody KeySaveReqVO updateReqVO) {
+        keyService.updateKey(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteKeyList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除钥匙")
+                @PreAuthorize("@ss.hasPermission('iscs:key:delete')")
+    public CommonResult<Boolean> deleteKeyList(@RequestParam("ids") List<Long> ids) {
+        keyService.deleteKeyListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectKeyById")
+    @Operation(summary = "获得钥匙")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:key:query')")
+    public CommonResult<KeyRespVO> selectKeyById(@RequestParam("id") Long id) {
+        KeyDO key = keyService.getKey(id);
+        return success(BeanUtils.toBean(key, KeyRespVO.class));
+    }
+
+    @GetMapping("/getKeyPage")
+    @Operation(summary = "获得钥匙分页")
+    @PreAuthorize("@ss.hasPermission('iscs:key:query')")
+    public CommonResult<PageResult<KeyRespVO>> getKeyPage(@Valid KeyPageReqVO pageReqVO) {
+        PageResult<KeyRespVO> pageResult = keyService.getKeyPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, KeyRespVO.class));
+    }
+
+    @GetMapping("/exportKeyExcel")
+    @Operation(summary = "导出钥匙 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:key:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportKeyExcel(@Valid KeyPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<KeyRespVO> list = keyService.getKeyPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "钥匙.xls", "数据", KeyRespVO.class,
+                        BeanUtils.toBean(list, KeyRespVO.class));
+    }
+
+    @GetMapping("/selectKeyByNfc")
+    @Operation(summary = "通过NFC获取钥匙详细信息-开放不登陆情况下可调用")
+    @Parameter(name = "nfc", description = "nfc")
+    public CommonResult<KeyRespVO> selectKeyByNfc(String nfc) {
+        KeyDO one = keyService.getOne(Wrappers.<KeyDO>lambdaQuery()
+                .eq(KeyDO::getKeyNfc, nfc));
+        return CommonResult.success(BeanUtils.toBean(one, KeyRespVO.class));
+    }
+
+    @PostMapping("/insertKeyByCabinet")
+    @Operation(summary = "机柜录入钥匙")
+    @PreAuthorize("@ss.hasPermission('iscs:key:create')")
+    public CommonResult<Long> insertKeyByCabinet(@Valid @RequestBody KeySaveReqVO createReqVO) {
+        return success(keyService.insertKeyByCabinet(createReqVO));
+    }
+
+}

+ 9 - 5
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/key/vo/KeyRespVO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.key.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 钥匙 Response VO")
 @Data
@@ -28,6 +28,10 @@ public class KeyRespVO {
     @ExcelProperty("硬件ID")
     private Long hardwareId;
 
+    @Schema(description = "硬件类型Name")
+    @ExcelProperty("硬件类型Name")
+    private String hardwareName;
+
     @Schema(description = "钥匙NFC")
     @ExcelProperty("钥匙NFC")
     private String keyNfc;
@@ -56,4 +60,4 @@ public class KeyRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
-}
+}

+ 8 - 5
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/key/KeyMapper.java

@@ -1,13 +1,14 @@
 package cn.iocoder.yudao.module.iscs.dal.mysql.key;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyRespVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.*;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 钥匙 Mapper
@@ -32,4 +33,6 @@ public interface KeyMapper extends BaseMapperX<KeyDO> {
                 .orderByDesc(KeyDO::getId));
     }
 
-}
+    Page<KeyRespVO> getKeyPage(Page<KeyDO> page, @Param(value = "vo") KeyPageReqVO vo);
+
+}

+ 73 - 63
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/key/KeyService.java

@@ -1,63 +1,73 @@
-package cn.iocoder.yudao.module.iscs.service.key;
-
-import java.util.*;
-import jakarta.validation.*;
-import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.*;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * 钥匙 Service 接口
- *
- * @author 芋道源码
- */
-public interface KeyService extends IService<KeyDO> {
-
-    /**
-     * 创建钥匙
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createKey(@Valid KeySaveReqVO createReqVO);
-
-    /**
-     * 更新钥匙
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateKey(@Valid KeySaveReqVO updateReqVO);
-
-    /**
-     * 删除钥匙
-     *
-     * @param id 编号
-     */
-    void deleteKey(Long id);
-
-    /**
-    * 批量删除钥匙
-    *
-    * @param ids 编号
-    */
-    void deleteKeyListByIds(List<Long> ids);
-
-    /**
-     * 获得钥匙
-     *
-     * @param id 编号
-     * @return 钥匙
-     */
-    KeyDO getKey(Long id);
-
-    /**
-     * 获得钥匙分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 钥匙分页
-     */
-    PageResult<KeyDO> getKeyPage(KeyPageReqVO pageReqVO);
-
-}
+package cn.iocoder.yudao.module.iscs.service.key;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeySaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * 钥匙 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface KeyService extends IService<KeyDO> {
+
+    /**
+     * 创建钥匙
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createKey(@Valid KeySaveReqVO createReqVO);
+
+    /**
+     * 更新钥匙
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateKey(@Valid KeySaveReqVO updateReqVO);
+
+    /**
+     * 删除钥匙
+     *
+     * @param id 编号
+     */
+    void deleteKey(Long id);
+
+    /**
+    * 批量删除钥匙
+    *
+    * @param ids 编号
+    */
+    void deleteKeyListByIds(List<Long> ids);
+
+    /**
+     * 获得钥匙
+     *
+     * @param id 编号
+     * @return 钥匙
+     */
+    KeyDO getKey(Long id);
+
+    /**
+     * 获得钥匙分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 钥匙分页
+     */
+    PageResult<KeyRespVO> getKeyPage(KeyPageReqVO pageReqVO);
+
+    /**
+     * 机柜录入钥匙
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long insertKeyByCabinet(@Valid KeySaveReqVO createReqVO);
+
+}

+ 156 - 94
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/key/KeyServiceImpl.java

@@ -1,94 +1,156 @@
-package cn.iocoder.yudao.module.iscs.service.key;
-
-import cn.hutool.core.collection.CollUtil;
-import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.*;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-import cn.iocoder.yudao.module.iscs.dal.mysql.key.KeyMapper;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
-import static cn.iocoder.yudao.module.iscs.enums.ErrorCodeConstants.*;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-/**
- * 钥匙 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-public class KeyServiceImpl extends ServiceImpl<KeyMapper, KeyDO> implements KeyService {
-
-    @Resource
-    private KeyMapper keyMapper;
-
-    @Override
-    public Long createKey(KeySaveReqVO createReqVO) {
-        // 插入
-        KeyDO key = BeanUtils.toBean(createReqVO, KeyDO.class);
-        keyMapper.insert(key);
-
-        // 返回
-        return key.getId();
-    }
-
-    @Override
-    public void updateKey(KeySaveReqVO updateReqVO) {
-        // 校验存在
-        validateKeyExists(updateReqVO.getId());
-        // 更新
-        KeyDO updateObj = BeanUtils.toBean(updateReqVO, KeyDO.class);
-        keyMapper.updateById(updateObj);
-    }
-
-    @Override
-    public void deleteKey(Long id) {
-        // 校验存在
-        validateKeyExists(id);
-        // 删除
-        keyMapper.deleteById(id);
-    }
-
-    @Override
-        public void deleteKeyListByIds(List<Long> ids) {
-        // 校验存在
-        validateKeyExists(ids);
-        // 删除
-        keyMapper.deleteByIds(ids);
-        }
-
-    private void validateKeyExists(List<Long> ids) {
-        List<KeyDO> list = keyMapper.selectByIds(ids);
-        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
-            throw exception(KEY_NOT_EXISTS);
-        }
-    }
-
-    private void validateKeyExists(Long id) {
-        if (keyMapper.selectById(id) == null) {
-            throw exception(KEY_NOT_EXISTS);
-        }
-    }
-
-    @Override
-    public KeyDO getKey(Long id) {
-        return keyMapper.selectById(id);
-    }
-
-    @Override
-    public PageResult<KeyDO> getKeyPage(KeyPageReqVO pageReqVO) {
-        return keyMapper.selectPage(pageReqVO);
-    }
-
-}
+package cn.iocoder.yudao.module.iscs.service.key;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeySaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.key.KeyMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.iscs.enums.ErrorCodeConstants.KEY_NOT_EXISTS;
+
+/**
+ * 钥匙 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class KeyServiceImpl extends ServiceImpl<KeyMapper, KeyDO> implements KeyService {
+
+    @Resource
+    private KeyMapper keyMapper;
+
+    @Override
+    public Long createKey(KeySaveReqVO createReqVO) {
+        Assert.notBlank(createReqVO.getKeyName(), "名称不能为空!");
+        // 1.检查钥匙名称是否重复
+        List<KeyDO> list = list(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyName, createReqVO.getKeyName()));
+        Assert.isFalse(!list.isEmpty(), "该钥匙名称已被使用!");
+        // 3.检查nfc是否重复
+        if (StringUtils.isNotBlank(createReqVO.getKeyNfc())) {
+            List<KeyDO> isKeys1 = list(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, createReqVO.getKeyNfc()));
+            Assert.isFalse(!isKeys1.isEmpty(), "该NFC已被使用!");
+        }
+        // 4.检查MAC是否重复
+        if (StringUtils.isNotBlank(createReqVO.getMacAddress())) {
+            List<KeyDO> isKeys2 = list(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getMacAddress, createReqVO.getMacAddress()));
+            Assert.isFalse(!isKeys2.isEmpty(), "该MAC已被使用!");
+        }
+        // 插入
+        KeyDO key = BeanUtils.toBean(createReqVO, KeyDO.class);
+        keyMapper.insert(key);
+
+        // 返回
+        return key.getId();
+    }
+
+    @Override
+    public void updateKey(KeySaveReqVO updateReqVO) {
+        // 1.检查钥匙名称是否重复
+        Assert.notBlank(updateReqVO.getKeyName(), "名称不能为空!");
+        List<KeyDO> list = list(Wrappers.<KeyDO>lambdaQuery()
+                .eq(KeyDO::getKeyName, updateReqVO.getKeyName())
+                .ne(KeyDO::getId, updateReqVO.getId()));
+        Assert.isFalse(!list.isEmpty(), "该钥匙名称已被使用!");
+        // 3.检查nfc是否重复
+        if (StringUtils.isNotBlank(updateReqVO.getKeyNfc())) {
+            List<KeyDO> isKeys1 = list(Wrappers.<KeyDO>lambdaQuery()
+                    .eq(KeyDO::getKeyNfc, updateReqVO.getKeyNfc())
+                    .ne(KeyDO::getId, updateReqVO.getId()));
+            Assert.isFalse(!isKeys1.isEmpty(), "该NFC已被使用!");
+        }
+        // 4.检查MAC是否重复
+        if (StringUtils.isNotBlank(updateReqVO.getMacAddress())) {
+            List<KeyDO> isKeys2 = list(Wrappers.<KeyDO>lambdaQuery()
+                    .eq(KeyDO::getMacAddress, updateReqVO.getMacAddress())
+                    .ne(KeyDO::getId, updateReqVO.getId()));
+            Assert.isFalse(!isKeys2.isEmpty(), "该MAC已被使用!");
+        }
+
+        // 校验存在
+        validateKeyExists(updateReqVO.getId());
+        // 更新
+        KeyDO updateObj = BeanUtils.toBean(updateReqVO, KeyDO.class);
+        keyMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteKey(Long id) {
+        // 校验存在
+        validateKeyExists(id);
+        // 删除
+        keyMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteKeyListByIds(List<Long> ids) {
+        // 校验存在
+        validateKeyExists(ids);
+        // 删除
+        keyMapper.deleteByIds(ids);
+        }
+
+    private void validateKeyExists(List<Long> ids) {
+        List<KeyDO> list = keyMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            throw exception(KEY_NOT_EXISTS);
+        }
+    }
+
+    private void validateKeyExists(Long id) {
+        if (keyMapper.selectById(id) == null) {
+            throw exception(KEY_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public KeyDO getKey(Long id) {
+        return keyMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<KeyRespVO> getKeyPage(KeyPageReqVO pageReqVO) {
+        Page<KeyDO> page = new Page<KeyDO>().setCurrent(pageReqVO.getPageNo()).setSize(pageReqVO.getPageSize());
+        Page<KeyRespVO> keyPage = keyMapper.getKeyPage(page, pageReqVO);
+        PageResult<KeyRespVO> keyRespVOPageResult = new PageResult<>();
+        keyRespVOPageResult.setList(keyPage.getRecords());
+        keyRespVOPageResult.setTotal(keyPage.getTotal());
+        return keyRespVOPageResult;
+    }
+
+    @Override
+    public Long insertKeyByCabinet(KeySaveReqVO createReqVO) {
+        Assert.isFalse(StringUtils.isBlank(createReqVO.getKeyNfc()), "请给我钥匙的nfc!");
+        Assert.isFalse(StringUtils.isBlank(createReqVO.getMacAddress()), "请给我钥匙的mac地址!");
+        // 0.检查钥匙的nfc是否存在,存在就不允许添加
+        List<KeyDO> list = list(Wrappers.<KeyDO>lambdaQuery()
+                .eq(KeyDO::getKeyNfc, createReqVO.getKeyNfc()));
+        Assert.isTrue(list.isEmpty(), "该nfc的钥匙已存在!");
+        // 0.1检查mac是否重复
+        List<KeyDO> list1 = list(Wrappers.<KeyDO>lambdaQuery()
+                .eq(KeyDO::getMacAddress, createReqVO.getMacAddress()));
+        Assert.isTrue(list1.isEmpty(), "该mac的钥匙已存在!");
+        // 1.自动生成名称
+        String keyName = "钥匙-" + createReqVO.getKeyNfc();
+        createReqVO.setKeyName(keyName);
+        // 插入
+        KeyDO key = BeanUtils.toBean(createReqVO, KeyDO.class);
+        keyMapper.insert(key);
+        return key.getId();
+    }
+
+}

+ 22 - 1
yudao-module-iscs/src/main/resources/mapper/KeyMapper.xml

@@ -9,4 +9,25 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
-</mapper>
+    <select id="getKeyPage" resultType="cn.iocoder.yudao.module.iscs.controller.admin.key.vo.KeyRespVO">
+        SELECT
+        k.*,
+        h.hardware_name
+        FROM
+        isc_key k
+        LEFT JOIN is_hardware h ON k.hardware_id = h.id
+        <where>
+            <if test="vo.keyCode != null and vo.keyCode.trim != ''">
+                and k.key_code like concat('%',#{vo.keyCode},'%')
+            </if>
+            <if test="vo.keyName != null and vo.keyName.trim != ''">
+                and k.key_name like concat('%',#{vo.keyName},'%')
+            </if>
+            <if test="vo.hardwareId != null">
+                and k.hardware_id = #{vo.hardwareId}
+            </if>
+        </where>
+        ORDER BY
+        k.id DESC
+    </select>
+</mapper>