Browse Source

feat:迁移代码

dzx 3 weeks ago
parent
commit
62649ad774
100 changed files with 8829 additions and 42 deletions
  1. 5 0
      yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ApiConstants.java
  2. 50 0
      yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ErrorCodeConstants.java
  3. 0 5
      yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ErrorcodeConstants.java
  4. 0 37
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/TestController.java
  5. 93 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/DmsCheckPlanController.java
  6. 105 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanPageReqVO.java
  7. 130 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanRespVO.java
  8. 95 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanSaveReqVO.java
  9. 141 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/DmsCheckTaskController.java
  10. 108 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskPageReqVO.java
  11. 148 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskRespVO.java
  12. 98 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskSaveReqVO.java
  13. 103 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/DmsCheckTaskItemController.java
  14. 57 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemPageReqVO.java
  15. 70 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemRespVO.java
  16. 49 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemSaveReqVO.java
  17. 145 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/DmsCheckTemplateController.java
  18. 54 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplatePageReqVO.java
  19. 66 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplateRespVO.java
  20. 46 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplateSaveReqVO.java
  21. 98 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/DmsCheckTemplateClassifyController.java
  22. 46 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifyListReqVO.java
  23. 62 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifyRespVO.java
  24. 43 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifySaveReqVO.java
  25. 25 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsSimpleCheckTemplateClassifyRespVO.java
  26. 93 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/DmsCheckTemplateItemController.java
  27. 42 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemPageReqVO.java
  28. 50 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemRespVO.java
  29. 34 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemSaveReqVO.java
  30. 107 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/DmsDeviceController.java
  31. 193 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDevicePageReqVO.java
  32. 258 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDeviceRespVO.java
  33. 187 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDeviceSaveReqVO.java
  34. 93 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/DmsDeviceAttributeController.java
  35. 45 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributePageReqVO.java
  36. 54 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributeRespVO.java
  37. 37 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributeSaveReqVO.java
  38. 98 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/DmsDeviceClassifyController.java
  39. 46 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyListReqVO.java
  40. 24 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyPageReqVO.java
  41. 64 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyRespVO.java
  42. 43 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifySaveReqVO.java
  43. 29 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsSimpleDeviceClassifyRespVO.java
  44. 93 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/DmsDeviceRepairController.java
  45. 235 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairPageReqVO.java
  46. 295 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairRespVO.java
  47. 215 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairSaveReqVO.java
  48. 145 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/DmsRelationOrgController.java
  49. 81 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgPageReqVO.java
  50. 103 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgRespVO.java
  51. 73 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgSaveReqVO.java
  52. 21 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsSimpleRelationOrgRespVO.java
  53. 26 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/convert/checktemplate/DmsCheckTemplateConvert.java
  54. 51 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/convert/checktemplateitem/DmsCheckTemplateItemConvert.java
  55. 166 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checkplan/DmsCheckPlanDO.java
  56. 188 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktask/DmsCheckTaskDO.java
  57. 75 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktaskitem/DmsCheckTaskItemDO.java
  58. 74 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplate/DmsCheckTemplateDO.java
  59. 72 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplateclassify/DmsCheckTemplateClassifyDO.java
  60. 66 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplateitem/DmsCheckTemplateItemDO.java
  61. 267 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/device/DmsDeviceDO.java
  62. 62 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/deviceattribute/DmsDeviceAttributeDO.java
  63. 76 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/deviceclassify/DmsDeviceClassifyDO.java
  64. 308 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/devicerepair/DmsDeviceRepairDO.java
  65. 91 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/relationorg/DmsRelationContractDO.java
  66. 109 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/relationorg/DmsRelationOrgDO.java
  67. 50 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checkplan/DmsCheckPlanMapper.java
  68. 51 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktask/DmsCheckTaskMapper.java
  69. 54 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktaskitem/DmsCheckTaskItemMapper.java
  70. 52 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplate/DmsCheckTemplateMapper.java
  71. 57 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplateclassify/DmsCheckTemplateClassifyMapper.java
  72. 33 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplateitem/DmsCheckTemplateItemMapper.java
  73. 76 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/device/DmsDeviceMapper.java
  74. 31 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/deviceattribute/DmsDeviceAttributeMapper.java
  75. 63 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/deviceclassify/DmsDeviceClassifyMapper.java
  76. 90 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/devicerepair/DmsDeviceRepairMapper.java
  77. 28 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/relationorg/DmsRelationContractMapper.java
  78. 50 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/relationorg/DmsRelationOrgMapper.java
  79. 15 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/framework/datapermission/config/DataPermissionConfiguration.java
  80. 55 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checkplan/DmsCheckPlanService.java
  81. 198 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checkplan/DmsCheckPlanServiceImpl.java
  82. 91 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktask/DmsCheckTaskService.java
  83. 169 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktask/DmsCheckTaskServiceImpl.java
  84. 65 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktaskitem/DmsCheckTaskItemService.java
  85. 78 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktaskitem/DmsCheckTaskItemServiceImpl.java
  86. 105 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplate/DmsCheckTemplateService.java
  87. 134 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplate/DmsCheckTemplateServiceImpl.java
  88. 61 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateclassify/DmsCheckTemplateClassifyService.java
  89. 146 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateclassify/DmsCheckTemplateClassifyServiceImpl.java
  90. 55 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateitem/DmsCheckTemplateItemService.java
  91. 71 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateitem/DmsCheckTemplateItemServiceImpl.java
  92. 69 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/device/DmsDeviceService.java
  93. 92 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/device/DmsDeviceServiceImpl.java
  94. 55 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceattribute/DmsDeviceAttributeService.java
  95. 71 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceattribute/DmsDeviceAttributeServiceImpl.java
  96. 61 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceclassify/DmsDeviceClassifyService.java
  97. 146 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceclassify/DmsDeviceClassifyServiceImpl.java
  98. 55 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/devicerepair/DmsDeviceRepairService.java
  99. 71 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/devicerepair/DmsDeviceRepairServiceImpl.java
  100. 105 0
      yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/relationorg/DmsRelationOrgService.java

+ 5 - 0
yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ApiConstants.java

@@ -20,4 +20,9 @@ public class ApiConstants {
 
     public static final String VERSION = "1.0.0";
 
+    /**
+     * 服务地址,调试用,默认为空
+     */
+    public static final String URL = "";
+
 }

+ 50 - 0
yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ErrorCodeConstants.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.dms.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+    // ========== 设备分类管理 ==========
+    ErrorCode DEVICE_CLASSIFY_NOT_EXISTS = new ErrorCode(1_003_001_000, "设备分类不存在");
+    ErrorCode DEVICE_CLASSIFY_EXITS_CHILDREN = new ErrorCode(1_003_001_001, "存在子设备分类,无法删除");
+    ErrorCode DEVICE_CLASSIFY_PARENT_NOT_EXITS = new ErrorCode(1_003_001_002, "父级设备分类不存在");
+    ErrorCode DEVICE_CLASSIFY_PARENT_ERROR = new ErrorCode(1_003_001_003, "不能设置自己为父设备分类");
+    ErrorCode DEVICE_CLASSIFY_NAME_DUPLICATE = new ErrorCode(1_003_001_004, "分类名称不能重复");
+    ErrorCode DEVICE_CLASSIFY_PARENT_IS_CHILD = new ErrorCode(1_003_001_005, "不能将子分类设置为为父分类");
+
+    // ========== 设备台账 ==========
+    ErrorCode DEVICE_NOT_EXISTS = new ErrorCode(1_003_002_001, "设备台账不存在");
+
+    // ========== 设备报修 ==========
+    ErrorCode DEVICE_REPAIR_NOT_EXISTS = new ErrorCode(1_003_003_001, "设备报修不存在");
+
+    // ========== 设备属性 ==========
+    ErrorCode DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_004_001, "设备属性不存在");
+
+    // ========== 点巡检计划  ==========
+    ErrorCode CHECK_PLAN_NOT_EXISTS = new ErrorCode(1_003_005_001, "点巡检计划不存在");
+
+    // ========== 点巡检任务  ==========
+    ErrorCode CHECK_TASK_NOT_EXISTS = new ErrorCode(1_003_006_001, "点巡检任务不存在");
+
+    // ========== 点巡检任务检查项  ==========
+    ErrorCode CHECK_TASK_ITEM_NOT_EXISTS = new ErrorCode(1_003_007_001, "点巡检任务检查项不存在");
+
+    // ========== 点巡检模板  ==========
+    ErrorCode CHECK_TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_008_001, "点巡检模板不存在");
+
+    // ========== 点巡检模板分类 ==========
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_NOT_EXISTS = new ErrorCode(1_003_009_001, "点巡检模板分类不存在");
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_EXITS_CHILDREN = new ErrorCode(1_003_009_002, "存在存在子点巡检模板分类,无法删除");
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_PARENT_NOT_EXITS = new ErrorCode(1_003_009_003, "父级点巡检模板分类不存在");
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_PARENT_ERROR = new ErrorCode(1_003_009_004, "不能设置自己为父点巡检模板分类");
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_NAME_DUPLICATE = new ErrorCode(1_003_009_005, "已经存在该设备设施分类名称的点巡检模板分类");
+    ErrorCode CHECK_TEMPLATE_CLASSIFY_PARENT_IS_CHILD = new ErrorCode(1_003_009_006, "不能设置自己的子DmsCheckTemplateClassify为父DmsCheckTemplateClassify");
+
+    // ========== 点巡检模板检查项 ==========
+    ErrorCode CHECK_TEMPLATE_ITEM_NOT_EXISTS = new ErrorCode(1_003_010_001, "点巡检模板检查项不存在");
+
+    // ========== 往来单位 ==========
+    ErrorCode RELATION_ORG_NOT_EXISTS = new ErrorCode(1_003_011_001, "往来单位不存在");
+    ErrorCode RELATION_CONTRACT_NOT_EXISTS = new ErrorCode(1_003_011_002, "往来单位联系人不存在");
+}
+

+ 0 - 5
yudao-module-dms-api/src/main/java/cn/iocoder/yudao/module/dms/enums/ErrorcodeConstants.java

@@ -1,5 +0,0 @@
-package cn.iocoder.yudao.module.dms.enums;
-
-public interface ErrorcodeConstants {
-}
-

+ 0 - 37
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/TestController.java

@@ -1,37 +0,0 @@
-package cn.iocoder.yudao.module.dms.controller.admin;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.annotation.security.PermitAll;
-
-/**
- * 测试 Controller
- */
-
-@Tag(name = "设备管理系统 - 测试")
-@RestController
-@RequestMapping("/dms/test")
-@Validated
-@Slf4j
-public class TestController {
-
-    @Resource
-    private AdminUserApi adminUserApi;
-
-    @GetMapping("/user")
-    @PermitAll
-    @Operation(summary = "使用账号密码登录")
-    public CommonResult<AdminUserRespDTO> login() {
-        return adminUserApi.getUser(103L);
-    }
-}

+ 93 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/DmsCheckPlanController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checkplan;
+
+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.dms.controller.admin.checkplan.vo.DmsCheckPlanPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checkplan.DmsCheckPlanDO;
+import cn.iocoder.yudao.module.dms.service.checkplan.DmsCheckPlanService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/check-plan")
+@Validated
+public class DmsCheckPlanController {
+
+    @Resource
+    private DmsCheckPlanService checkPlanService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检计划")
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:create')")
+    public CommonResult<Long> createCheckPlan(@Valid @RequestBody DmsCheckPlanSaveReqVO createReqVO) {
+        return success(checkPlanService.createCheckPlan(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检计划")
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:update')")
+    public CommonResult<Boolean> updateCheckPlan(@Valid @RequestBody DmsCheckPlanSaveReqVO updateReqVO) {
+        checkPlanService.updateCheckPlan(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检计划")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:delete')")
+    public CommonResult<Boolean> deleteCheckPlan(@RequestParam("id") Long id) {
+        checkPlanService.deleteCheckPlan(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检计划")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:query')")
+    public CommonResult<DmsCheckPlanRespVO> getCheckPlan(@RequestParam("id") Long id) {
+        DmsCheckPlanDO checkPlan = checkPlanService.getCheckPlan(id);
+        return success(BeanUtils.toBean(checkPlan, DmsCheckPlanRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得点巡检计划分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:query')")
+    public CommonResult<PageResult<DmsCheckPlanRespVO>> getCheckPlanPage(@Valid DmsCheckPlanPageReqVO pageReqVO) {
+        PageResult<DmsCheckPlanDO> pageResult = checkPlanService.getCheckPlanPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckPlanRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检计划 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-plan:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckPlanExcel(@Valid DmsCheckPlanPageReqVO pageReqVO,
+                                     HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsCheckPlanDO> list = checkPlanService.getCheckPlanPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检计划.xls", "数据", DmsCheckPlanRespVO.class,
+                BeanUtils.toBean(list, DmsCheckPlanRespVO.class));
+    }
+
+}

+ 105 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanPageReqVO.java

@@ -0,0 +1,105 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检计划分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsCheckPlanPageReqVO extends PageParam {
+
+    @Schema(description = "巡检计划名称")
+    private String name;
+
+    @Schema(description = "巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "计划开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] startTime;
+
+    @Schema(description = "计划结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] endTime;
+
+    @Schema(description = "创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    private Integer checkPeriodType;
+
+    @Schema(description = "模板检查周期执行时间值")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Integer[] checkPeriodTime;
+
+    @Schema(description = "间隔次数")
+    private Integer checkPeriodInterval;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "生成最近任务数量")
+    private Integer taskNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 130 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanRespVO.java

@@ -0,0 +1,130 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检计划 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckPlanRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "巡检计划名称")
+    @ExcelProperty("巡检计划名称")
+    private String name;
+
+    @Schema(description = "巡检计划模板ID")
+    @ExcelProperty("巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    @ExcelProperty("巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "设备ID")
+    @ExcelProperty("设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    @ExcelProperty("设备代码")
+    private String deviceCode;
+
+    @Schema(description = "点检项JSON配置")
+    @ExcelProperty("点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    @ExcelProperty("模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    @ExcelProperty("模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    @ExcelProperty("模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    @ExcelProperty("设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    @ExcelProperty("设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    @ExcelProperty("设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "计划开始日期")
+    @ExcelProperty("计划开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "计划结束日期")
+    @ExcelProperty("计划结束日期")
+    private LocalDateTime endTime;
+
+    @Schema(description = "创建者ID")
+    @ExcelProperty("创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    @ExcelProperty("创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    @ExcelProperty("执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    @ExcelProperty("执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    @ExcelProperty("模板检查周期类型")
+    private Integer checkPeriodType;
+
+
+    @Schema(description = "模板检查周期执行时间值")
+    @ExcelProperty("模板检查周期执行时间值")
+    private Integer checkPeriodTime;
+    @Schema(description = "间隔次数")
+    @ExcelProperty("间隔次数")
+    private Integer checkPeriodInterval;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "生成最近任务数量")
+    @ExcelProperty("生成最近任务数量")
+    private Integer taskNum;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 95 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checkplan/vo/DmsCheckPlanSaveReqVO.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检计划新增/修改 Request VO")
+@Data
+public class DmsCheckPlanSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "巡检计划名称")
+    private String name;
+
+    @Schema(description = "巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "计划开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "计划结束日期")
+    private LocalDateTime endTime;
+
+    @Schema(description = "创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    private Integer checkPeriodType;
+
+    @Schema(description = "模板检查周期执行时间值")
+    private Integer checkPeriodTime;
+
+    @Schema(description = "间隔次数")
+    private Integer checkPeriodInterval;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "生成最近任务数量")
+    private Integer taskNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 141 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/DmsCheckTaskController.java

@@ -0,0 +1,141 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktask;
+
+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.dms.controller.admin.checktask.vo.DmsCheckTaskPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import cn.iocoder.yudao.module.dms.service.checktask.DmsCheckTaskService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+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("/dms/check-task")
+@Validated
+public class DmsCheckTaskController {
+
+    @Resource
+    private DmsCheckTaskService checkTaskService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检任务")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:create')")
+    public CommonResult<Long> createCheckTask(@Valid @RequestBody DmsCheckTaskSaveReqVO createReqVO) {
+        return success(checkTaskService.createCheckTask(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检任务")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:update')")
+    public CommonResult<Boolean> updateCheckTask(@Valid @RequestBody DmsCheckTaskSaveReqVO updateReqVO) {
+        checkTaskService.updateCheckTask(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检任务")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-task:delete')")
+    public CommonResult<Boolean> deleteCheckTask(@RequestParam("id") Long id) {
+        checkTaskService.deleteCheckTask(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检任务")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<DmsCheckTaskRespVO> getCheckTask(@RequestParam("id") Long id) {
+        DmsCheckTaskDO checkTask = checkTaskService.getCheckTask(id);
+        return success(BeanUtils.toBean(checkTask, DmsCheckTaskRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得点巡检任务分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<PageResult<DmsCheckTaskRespVO>> getCheckTaskPage(@Valid DmsCheckTaskPageReqVO pageReqVO) {
+        PageResult<DmsCheckTaskDO> pageResult = checkTaskService.getCheckTaskPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckTaskRespVO.class));
+    }
+
+
+    @PostMapping("/postPage")
+    @Operation(summary = "获得点巡检任务分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<PageResult<DmsCheckTaskRespVO>> postPage(@RequestBody DmsCheckTaskPageReqVO pageReqVO) {
+        PageResult<DmsCheckTaskDO> pageResult = checkTaskService.getCheckTaskPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckTaskRespVO.class));
+    }
+
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检任务 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckTaskExcel(@Valid DmsCheckTaskPageReqVO pageReqVO,
+                                     HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsCheckTaskDO> list = checkTaskService.getCheckTaskPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检任务.xls", "数据", DmsCheckTaskRespVO.class,
+                BeanUtils.toBean(list, DmsCheckTaskRespVO.class));
+    }
+
+    @GetMapping("/tasks")
+    @Operation(summary = "统计任务数量")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<Map<String,Object>> tasks() {
+        return success(checkTaskService.tasks());
+    }
+    @PostMapping("/countCur")
+    @Operation(summary = "统计未完成任务数量")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<Long> countCur(@RequestBody DmsCheckTaskDO checkTaskDO) {
+        return success(checkTaskService.countCur(checkTaskDO));
+    }
+
+
+
+
+    @PutMapping("/tmpSave")
+    @Operation(summary = "任务暂存")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:update')")
+    public CommonResult<String> tmpSave(@Valid @RequestBody DmsCheckTaskDO checkTaskDO) {
+        return success(checkTaskService.tmpSave(checkTaskDO));
+    }
+
+    @PutMapping("/commit")
+    @Operation(summary = "任务提交")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:update')")
+    public CommonResult<String> commit(@Valid @RequestBody DmsCheckTaskDO checkTaskDO) {
+        return success(checkTaskService.commit(checkTaskDO));
+    }
+
+    @PostMapping("/getFirst")
+    @Operation(summary = "获得点巡检任务分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-task:query')")
+    public CommonResult<DmsCheckTaskRespVO> getFirst( @RequestBody DmsCheckTaskPageReqVO pageReqVO) {
+        DmsCheckTaskDO res = checkTaskService.getFirst(pageReqVO);
+        return success(BeanUtils.toBean(res, DmsCheckTaskRespVO.class));
+    }
+}

+ 108 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskPageReqVO.java

@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktask.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检任务分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsCheckTaskPageReqVO extends PageParam {
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "任务开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] startTime;
+
+    @Schema(description = "任务结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] endTime;
+
+    @Schema(description = "任务执行时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] executorTime;
+
+    @Schema(description = "创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    private Integer checkPeriodType;
+
+    @Schema(description = "任务状态")
+    private Integer status;
+
+    @Schema(description = "任务结束标识")
+    private Integer endFlag;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "巡检计划ID")
+    private Long checkPlanId;
+
+    @Schema(description = "巡检计划名称")
+    private String checkPlanName;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 148 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskRespVO.java

@@ -0,0 +1,148 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktask.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检任务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckTaskRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "设备ID")
+    @ExcelProperty("设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    @ExcelProperty("设备代码")
+    private String deviceCode;
+
+    @Schema(description = "巡检计划模板ID")
+    @ExcelProperty("巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    @ExcelProperty("巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "点检项JSON配置")
+    @ExcelProperty("点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    @ExcelProperty("模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    @ExcelProperty("模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    @ExcelProperty("模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    @ExcelProperty("设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    @ExcelProperty("设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    @ExcelProperty("设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "任务开始日期")
+    @ExcelProperty("任务开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "任务开始日期")
+    @ExcelProperty("任务开始日期")
+    private String startTimeStr;
+
+    @Schema(description = "任务结束日期")
+    @ExcelProperty("任务结束日期")
+    private LocalDateTime endTime;
+    @Schema(description = "任务结束日期")
+    @ExcelProperty("任务结束日期")
+    private String endTimeStr;
+
+
+    @Schema(description = "任务执行时间")
+    @ExcelProperty("任务执行时间")
+    private LocalDateTime executorTime;
+
+    @Schema(description = "任务执行时间")
+    @ExcelProperty("任务执行时间")
+    private String executorTimeStr;
+
+
+    @Schema(description = "创建者ID")
+    @ExcelProperty("创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    @ExcelProperty("创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    @ExcelProperty("执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    @ExcelProperty("执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    @ExcelProperty("模板检查周期类型")
+    private Integer checkPeriodType;
+
+    @Schema(description = "任务状态")
+    @ExcelProperty("任务状态")
+    private Integer status;
+
+    @Schema(description = "任务结束标识")
+    @ExcelProperty(value = "任务结束标识", converter = DictConvert.class)
+    @DictFormat("dms_end_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer endFlag;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "巡检计划ID")
+    @ExcelProperty("巡检计划ID")
+    private Long checkPlanId;
+
+    @Schema(description = "巡检计划名称")
+    @ExcelProperty("巡检计划名称")
+    private String checkPlanName;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 98 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktask/vo/DmsCheckTaskSaveReqVO.java

@@ -0,0 +1,98 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktask.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检任务新增/修改 Request VO")
+@Data
+public class DmsCheckTaskSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "巡检计划模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "巡检计划模板名称")
+    private String checkTemplateName;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID")
+    private Long templateClassifyId;
+
+    @Schema(description = "模板分类名称")
+    private String templateClassifyName;
+
+    @Schema(description = "模板分类代码")
+    private String templateClassifyCode;
+
+    @Schema(description = "设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "设备分类代码")
+    private String deviceClassifyCode;
+
+    @Schema(description = "任务开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "任务结束日期")
+    private LocalDateTime endTime;
+
+    @Schema(description = "任务执行时间")
+    private LocalDateTime executorTime;
+
+    @Schema(description = "创建者ID")
+    private Long creatorId;
+
+    @Schema(description = "创建者")
+    private String creatorName;
+
+    @Schema(description = "执行者ID")
+    private Long executorId;
+
+    @Schema(description = "执行者")
+    private String executorName;
+
+    @Schema(description = "模板检查周期类型")
+    private Integer checkPeriodType;
+
+    @Schema(description = "任务状态")
+    private Integer status;
+
+    @Schema(description = "任务结束标识")
+    private Integer endFlag;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "巡检计划ID")
+    private Long checkPlanId;
+
+    @Schema(description = "巡检计划名称")
+    private String checkPlanName;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 103 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/DmsCheckTaskItemController.java

@@ -0,0 +1,103 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktaskitem;
+
+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.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import cn.iocoder.yudao.module.dms.service.checktaskitem.DmsCheckTaskItemService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/check-task-item")
+@Validated
+public class DmsCheckTaskItemController {
+
+    @Resource
+    private DmsCheckTaskItemService checkTaskItemService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检任务检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:create')")
+    public CommonResult<Long> createCheckTaskItem(@Valid @RequestBody DmsCheckTaskItemSaveReqVO createReqVO) {
+        return success(checkTaskItemService.createCheckTaskItem(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检任务检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:update')")
+    public CommonResult<Boolean> updateCheckTaskItem(@Valid @RequestBody DmsCheckTaskItemSaveReqVO updateReqVO) {
+        checkTaskItemService.updateCheckTaskItem(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检任务检查项")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:delete')")
+    public CommonResult<Boolean> deleteCheckTaskItem(@RequestParam("id") Long id) {
+        checkTaskItemService.deleteCheckTaskItem(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检任务检查项")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:query')")
+    public CommonResult<DmsCheckTaskItemRespVO> getCheckTaskItem(@RequestParam("id") Long id) {
+        DmsCheckTaskItemDO checkTaskItem = checkTaskItemService.getCheckTaskItem(id);
+        return success(BeanUtils.toBean(checkTaskItem, DmsCheckTaskItemRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得点巡检任务检查项分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:query')")
+    public CommonResult<PageResult<DmsCheckTaskItemRespVO>> getCheckTaskItemPage(@Valid DmsCheckTaskItemPageReqVO pageReqVO) {
+        PageResult<DmsCheckTaskItemDO> pageResult = checkTaskItemService.getCheckTaskItemPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckTaskItemRespVO.class));
+    }
+
+    @GetMapping("/list")
+    @Operation(summary = "获得点巡检任务检查项分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:query')")
+    public CommonResult<List<DmsCheckTaskItemRespVO>> getCheckTaskItemList(@Valid DmsCheckTaskItemPageReqVO pageReqVO) {
+        return success(BeanUtils.toBean(checkTaskItemService.getCheckTaskItemList(pageReqVO), DmsCheckTaskItemRespVO.class));
+    }
+
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检任务检查项 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-task-item:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckTaskItemExcel(@Valid DmsCheckTaskItemPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsCheckTaskItemDO> list = checkTaskItemService.getCheckTaskItemPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检任务检查项.xls", "数据", DmsCheckTaskItemRespVO.class,
+                BeanUtils.toBean(list, DmsCheckTaskItemRespVO.class));
+    }
+
+
+
+}

+ 57 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemPageReqVO.java

@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检任务检查项分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsCheckTaskItemPageReqVO extends PageParam {
+
+    @Schema(description = "点巡检模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "点巡检任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称")
+    private String name;
+
+    @Schema(description = "模板检查项内容")
+    private String content;
+
+    @Schema(description = "图片")
+    private String imgs;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "模板检查项ID")
+    private Long checkTemplateItemId;
+
+    @Schema(description = "模板检查项名称")
+    private String checkTemplateItemName;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 70 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemRespVO.java

@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检任务检查项 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckTaskItemRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "点巡检模板ID")
+    @ExcelProperty("点巡检模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "点巡检任务ID")
+    @ExcelProperty("点巡检任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称")
+    @ExcelProperty("模板检查项名称")
+    private String name;
+
+    @Schema(description = "模板检查项内容")
+    @ExcelProperty("模板检查项内容")
+    private String content;
+
+    @Schema(description = "图片")
+    @ExcelProperty("图片")
+    private String imgs;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "模板检查项ID")
+    @ExcelProperty("模板检查项ID")
+    private Long checkTemplateItemId;
+
+    @Schema(description = "模板检查项名称")
+    @ExcelProperty("模板检查项名称")
+    private String checkTemplateItemName;
+
+    @Schema(description = "显示序列")
+    @ExcelProperty("显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 49 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktaskitem/vo/DmsCheckTaskItemSaveReqVO.java

@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 点巡检任务检查项新增/修改 Request VO")
+@Data
+public class DmsCheckTaskItemSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "点巡检模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "点巡检任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称")
+    private String name;
+
+    @Schema(description = "模板检查项内容")
+    private String content;
+
+    @Schema(description = "图片")
+    private String imgs;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "模板检查项ID")
+    private Long checkTemplateItemId;
+
+    @Schema(description = "模板检查项名称")
+    private String checkTemplateItemName;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 145 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/DmsCheckTemplateController.java

@@ -0,0 +1,145 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplate;
+
+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.dms.controller.admin.checktemplate.vo.DmsCheckTemplatePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplateRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplateSaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import cn.iocoder.yudao.module.dms.service.checktemplate.DmsCheckTemplateService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/check-template")
+@Validated
+public class DmsCheckTemplateController {
+
+    @Resource
+    private DmsCheckTemplateService checkTemplateService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检模板")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:create')")
+    public CommonResult<Long> createCheckTemplate(@Valid @RequestBody DmsCheckTemplateSaveReqVO createReqVO) {
+        return success(checkTemplateService.createCheckTemplate(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检模板")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:update')")
+    public CommonResult<Boolean> updateCheckTemplate(@Valid @RequestBody DmsCheckTemplateSaveReqVO updateReqVO) {
+        checkTemplateService.updateCheckTemplate(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检模板")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-template:delete')")
+    public CommonResult<Boolean> deleteCheckTemplate(@RequestParam("id") Long id) {
+        checkTemplateService.deleteCheckTemplate(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检模板")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:query')")
+    public CommonResult<DmsCheckTemplateRespVO> getCheckTemplate(@RequestParam("id") Long id) {
+        DmsCheckTemplateDO checkTemplate = checkTemplateService.getCheckTemplate(id);
+        return success(BeanUtils.toBean(checkTemplate, DmsCheckTemplateRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得点巡检模板分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:query')")
+    public CommonResult<PageResult<DmsCheckTemplateRespVO>> getCheckTemplatePage(@Valid DmsCheckTemplatePageReqVO pageReqVO) {
+        PageResult<DmsCheckTemplateDO> pageResult = checkTemplateService.getCheckTemplatePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckTemplateRespVO.class));
+    }
+
+    @GetMapping("/list")
+    @Operation(summary = "获得点巡检模板列表")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:query')")
+    public CommonResult<List<DmsCheckTemplateRespVO>> getCheckTemplateList(@Valid DmsCheckTemplatePageReqVO pageReqVO) {
+        List<DmsCheckTemplateDO> listResult = checkTemplateService.getCheckTemplateList(pageReqVO);
+        return success(BeanUtils.toBean(listResult,DmsCheckTemplateRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检模板 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckTemplateExcel(@Valid DmsCheckTemplatePageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsCheckTemplateDO> list = checkTemplateService.getCheckTemplatePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检模板.xls", "数据", DmsCheckTemplateRespVO.class,
+                BeanUtils.toBean(list, DmsCheckTemplateRespVO.class));
+    }
+
+    // ==================== 子表(点巡检模板检查项) ====================
+
+    @GetMapping("/check-template-item/page")
+    @Operation(summary = "获得点巡检模板检查项分页")
+    @Parameter(name = "checkTemplateId", description = "点巡检模板ID")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:query')")
+    public CommonResult<PageResult<DmsCheckTemplateItemDO>> getCheckTemplateItemPage(DmsCheckTemplateItemPageReqVO pageReqVO) {
+        return success(checkTemplateService.getCheckTemplateItemPage(pageReqVO));
+    }
+
+    @PostMapping("/check-template-item/create")
+    @Operation(summary = "创建点巡检模板检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:create')")
+    public CommonResult<Long> createCheckTemplateItem(@Valid @RequestBody DmsCheckTemplateItemDO checkTemplateItem) {
+        return success(checkTemplateService.createCheckTemplateItem(checkTemplateItem));
+    }
+
+    @PutMapping("/check-template-item/update")
+    @Operation(summary = "更新点巡检模板检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:update')")
+    public CommonResult<Boolean> updateCheckTemplateItem(@Valid @RequestBody DmsCheckTemplateItemDO checkTemplateItem) {
+        checkTemplateService.updateCheckTemplateItem(checkTemplateItem);
+        return success(true);
+    }
+
+    @DeleteMapping("/check-template-item/delete")
+    @Parameter(name = "id", description = "编号", required = true)
+    @Operation(summary = "删除点巡检模板检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-template:delete')")
+    public CommonResult<Boolean> deleteCheckTemplateItem(@RequestParam("id") Long id) {
+        checkTemplateService.deleteCheckTemplateItem(id);
+        return success(true);
+    }
+
+    @GetMapping("/check-template-item/get")
+    @Operation(summary = "获得点巡检模板检查项")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-template:query')")
+    public CommonResult<DmsCheckTemplateItemDO> getCheckTemplateItem(@RequestParam("id") Long id) {
+        return success(checkTemplateService.getCheckTemplateItem(id));
+    }
+
+}

+ 54 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplatePageReqVO.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检模板分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsCheckTemplatePageReqVO extends PageParam {
+
+    @Schema(description = "模板名称", example = "李四")
+    private String name;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID", example = "25775")
+    private Long classifyId;
+
+    @Schema(description = "模板分类名称", example = "张三")
+    private String classifyName;
+
+    @Schema(description = "设备分类ID", example = "29479")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称", example = "张三")
+    private String deviceClassifyName;
+
+    @Schema(description = "模板类型", example = "1")
+    private Integer checkTemplateType;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "UUID", example = "29651")
+    private String uuid;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 66 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplateRespVO.java

@@ -0,0 +1,66 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检模板 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckTemplateRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "13878")
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "李四")
+    @ExcelProperty("模板名称")
+    private String name;
+
+    @Schema(description = "点检项JSON配置")
+    @ExcelProperty("点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID", example = "25775")
+    @ExcelProperty("模板分类ID")
+    private Long classifyId;
+
+    @Schema(description = "模板分类名称", example = "张三")
+    @ExcelProperty("模板分类名称")
+    private String classifyName;
+
+    @Schema(description = "设备分类ID", example = "29479")
+    @ExcelProperty("设备分类ID")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称", example = "张三")
+    @ExcelProperty("设备分类名称")
+    private String deviceClassifyName;
+
+    @Schema(description = "模板类型", example = "1")
+    @ExcelProperty("模板类型")
+    private Integer checkTemplateType;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "UUID", example = "29651")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 46 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplate/vo/DmsCheckTemplateSaveReqVO.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 点巡检模板新增/修改 Request VO")
+@Data
+public class DmsCheckTemplateSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "13878")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "李四")
+    private String name;
+
+    @Schema(description = "点检项JSON配置")
+    private String checkItems;
+
+    @Schema(description = "模板分类ID", example = "25775")
+    private Long classifyId;
+
+    @Schema(description = "模板分类名称", example = "张三")
+    private String classifyName;
+
+    @Schema(description = "设备分类ID", example = "29479")
+    private Long deviceClassifyId;
+
+    @Schema(description = "设备分类名称", example = "张三")
+    private String deviceClassifyName;
+
+    @Schema(description = "模板类型", example = "1")
+    private Integer checkTemplateType;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "UUID", example = "29651")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 98 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/DmsCheckTemplateClassifyController.java

@@ -0,0 +1,98 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifyRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsSimpleCheckTemplateClassifyRespVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify.DmsCheckTemplateClassifyDO;
+import cn.iocoder.yudao.module.dms.service.checktemplateclassify.DmsCheckTemplateClassifyService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/check-template-classify")
+@Validated
+public class DmsCheckTemplateClassifyController {
+
+    @Resource
+    private DmsCheckTemplateClassifyService checkTemplateClassifyService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检模板分类")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:create')")
+    public CommonResult<Long> createCheckTemplateClassify(@Valid @RequestBody DmsCheckTemplateClassifySaveReqVO createReqVO) {
+        return success(checkTemplateClassifyService.createCheckTemplateClassify(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检模板分类")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:update')")
+    public CommonResult<Boolean> updateCheckTemplateClassify(@Valid @RequestBody DmsCheckTemplateClassifySaveReqVO updateReqVO) {
+        checkTemplateClassifyService.updateCheckTemplateClassify(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检模板分类")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:delete')")
+    public CommonResult<Boolean> deleteCheckTemplateClassify(@RequestParam("id") Long id) {
+        checkTemplateClassifyService.deleteCheckTemplateClassify(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检模板分类")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:query')")
+    public CommonResult<DmsCheckTemplateClassifyRespVO> getCheckTemplateClassify(@RequestParam("id") Long id) {
+        DmsCheckTemplateClassifyDO checkTemplateClassify = checkTemplateClassifyService.getCheckTemplateClassify(id);
+        return success(BeanUtils.toBean(checkTemplateClassify, DmsCheckTemplateClassifyRespVO.class));
+    }
+
+    @GetMapping("/list")
+    @Operation(summary = "获得点巡检模板分类列表")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:query')")
+    public CommonResult<List<DmsCheckTemplateClassifyRespVO>> getCheckTemplateClassifyList(@Valid DmsCheckTemplateClassifyListReqVO listReqVO) {
+        List<DmsCheckTemplateClassifyDO> list = checkTemplateClassifyService.getCheckTemplateClassifyList(listReqVO);
+        return success(BeanUtils.toBean(list, DmsCheckTemplateClassifyRespVO.class));
+    }
+
+    @GetMapping("/simple-list")
+    @Operation(summary = "获得点巡检模板分类精简列表", description = "主要用于前端的下拉选项")
+    public CommonResult<List<DmsSimpleCheckTemplateClassifyRespVO>> getSimpleDeviceClassifyList() {
+        List<DmsCheckTemplateClassifyDO> list = checkTemplateClassifyService.getSimpleCheckTemplateClassifyList();
+        return success(BeanUtils.toBean(list, DmsSimpleCheckTemplateClassifyRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检模板分类 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-classify:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckTemplateClassifyExcel(@Valid DmsCheckTemplateClassifyListReqVO listReqVO,
+                                                 HttpServletResponse response) throws IOException {
+        List<DmsCheckTemplateClassifyDO> list = checkTemplateClassifyService.getCheckTemplateClassifyList(listReqVO);
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检模板分类.xls", "数据", DmsCheckTemplateClassifyRespVO.class,
+                BeanUtils.toBean(list, DmsCheckTemplateClassifyRespVO.class));
+    }
+
+}

+ 46 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifyListReqVO.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检模板分类列表 Request VO")
+@Data
+public class DmsCheckTemplateClassifyListReqVO {
+
+    @Schema(description = "设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    private String note;
+
+    @Schema(description = "父设备设施分类ID")
+    private Long parentId;
+
+    @Schema(description = "上级分类名称")
+    private String parentName;
+
+    @Schema(description = "父子级联代码")
+    private String pcode;
+
+    @Schema(description = "分类级别 从1开始")
+    private Integer level;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 62 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifyRespVO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检模板分类 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckTemplateClassifyRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "设备设施分类名称")
+    @ExcelProperty("设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    @ExcelProperty("描述")
+    private String note;
+
+    @Schema(description = "父设备设施分类ID")
+    @ExcelProperty("父设备设施分类ID")
+    private Long parentId;
+
+    @Schema(description = "上级分类名称")
+    @ExcelProperty("上级分类名称")
+    private String parentName;
+
+    @Schema(description = "父子级联代码")
+    @ExcelProperty("父子级联代码")
+    private String pcode;
+
+    @Schema(description = "分类级别 从1开始")
+    @ExcelProperty("分类级别 从1开始")
+    private Integer level;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "显示序列 从小到大")
+    @ExcelProperty("显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 43 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsCheckTemplateClassifySaveReqVO.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 点巡检模板分类新增/修改 Request VO")
+@Data
+public class DmsCheckTemplateClassifySaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    private String note;
+
+    @Schema(description = "父设备设施分类ID")
+    private Long parentId;
+
+    @Schema(description = "上级分类名称")
+    private String parentName;
+
+    @Schema(description = "父子级联代码")
+    private String pcode;
+
+    @Schema(description = "分类级别 从1开始")
+    private Integer level;
+
+    @Schema(description = "显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 25 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateclassify/vo/DmsSimpleCheckTemplateClassifyRespVO.java

@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 点巡检模板分类 精简 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsSimpleCheckTemplateClassifyRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "分类名称")
+    @ExcelProperty("分类名称")
+    private String name;
+
+    @Schema(description = "父分类ID")
+    @ExcelProperty("父分类ID")
+    private Long parentId;
+
+}

+ 93 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/DmsCheckTemplateItemController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem;
+
+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.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import cn.iocoder.yudao.module.dms.service.checktemplateitem.DmsCheckTemplateItemService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/check-template-item")
+@Validated
+public class DmsCheckTemplateItemController {
+
+    @Resource
+    private DmsCheckTemplateItemService checkTemplateItemService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建点巡检模板检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:create')")
+    public CommonResult<Long> createCheckTemplateItem(@Valid @RequestBody DmsCheckTemplateItemSaveReqVO createReqVO) {
+        return success(checkTemplateItemService.createCheckTemplateItem(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新点巡检模板检查项")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:update')")
+    public CommonResult<Boolean> updateCheckTemplateItem(@Valid @RequestBody DmsCheckTemplateItemSaveReqVO updateReqVO) {
+        checkTemplateItemService.updateCheckTemplateItem(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除点巡检模板检查项")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:delete')")
+    public CommonResult<Boolean> deleteCheckTemplateItem(@RequestParam("id") Long id) {
+        checkTemplateItemService.deleteCheckTemplateItem(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得点巡检模板检查项")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:query')")
+    public CommonResult<DmsCheckTemplateItemRespVO> getCheckTemplateItem(@RequestParam("id") Long id) {
+        DmsCheckTemplateItemDO checkTemplateItem = checkTemplateItemService.getCheckTemplateItem(id);
+        return success(BeanUtils.toBean(checkTemplateItem, DmsCheckTemplateItemRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得点巡检模板检查项分页")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:query')")
+    public CommonResult<PageResult<DmsCheckTemplateItemRespVO>> getCheckTemplateItemPage(@Valid DmsCheckTemplateItemPageReqVO pageReqVO) {
+        PageResult<DmsCheckTemplateItemDO> pageResult = checkTemplateItemService.getCheckTemplateItemPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsCheckTemplateItemRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出点巡检模板检查项 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:check-template-item:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCheckTemplateItemExcel(@Valid DmsCheckTemplateItemPageReqVO pageReqVO,
+                                             HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsCheckTemplateItemDO> list = checkTemplateItemService.getCheckTemplateItemPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "点巡检模板检查项.xls", "数据", DmsCheckTemplateItemRespVO.class,
+                BeanUtils.toBean(list, DmsCheckTemplateItemRespVO.class));
+    }
+
+}

+ 42 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemPageReqVO.java

@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 点巡检模板检查项分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsCheckTemplateItemPageReqVO extends PageParam {
+
+    @Schema(description = "点巡检模板ID", example = "3445")
+    private Long checkTemplateId;
+
+    @Schema(description = "UUID", example = "2260")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称", example = "王五")
+    private String name;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 50 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemRespVO.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 点巡检模板检查项 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsCheckTemplateItemRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "3817")
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "点巡检模板ID", example = "3445")
+    @ExcelProperty("点巡检模板ID")
+    private Long checkTemplateId;
+
+    @Schema(description = "UUID", example = "2260")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称", example = "王五")
+    @ExcelProperty("模板检查项名称")
+    private String name;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "显示序列")
+    @ExcelProperty("显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 34 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/checktemplateitem/vo/DmsCheckTemplateItemSaveReqVO.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 点巡检模板检查项新增/修改 Request VO")
+@Data
+public class DmsCheckTemplateItemSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "3817")
+    private Long id;
+
+    @Schema(description = "点巡检模板ID", example = "3445")
+    private Long checkTemplateId;
+
+    @Schema(description = "UUID", example = "2260")
+    private String uuid;
+
+    @Schema(description = "模板检查项名称", example = "王五")
+    private String name;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 107 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/DmsDeviceController.java

@@ -0,0 +1,107 @@
+package cn.iocoder.yudao.module.dms.controller.admin.device;
+
+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.dms.controller.admin.device.vo.DmsDevicePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDeviceRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDeviceSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+import cn.iocoder.yudao.module.dms.service.device.DmsDeviceService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/device")
+@Validated
+public class DmsDeviceController {
+
+    @Resource
+    private DmsDeviceService deviceService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备管理")
+    @PreAuthorize("@ss.hasPermission('dms:device:create')")
+    public CommonResult<Long> createDevice(@Valid @RequestBody DmsDeviceSaveReqVO createReqVO) {
+        return success(deviceService.createDevice(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备管理")
+    @PreAuthorize("@ss.hasPermission('dms:device:update')")
+    public CommonResult<Boolean> updateDevice(@Valid @RequestBody DmsDeviceSaveReqVO updateReqVO) {
+        deviceService.updateDevice(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备管理")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:device:delete')")
+    public CommonResult<Boolean> deleteDevice(@RequestParam("id") Long id) {
+        deviceService.deleteDevice(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备管理")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:device:query')")
+    public CommonResult<DmsDeviceRespVO> getDevice(@RequestParam("id") Long id) {
+        DmsDeviceDO device = deviceService.getDevice(id);
+        return success(BeanUtils.toBean(device, DmsDeviceRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备管理分页")
+    @PreAuthorize("@ss.hasPermission('dms:device:query')")
+    public CommonResult<PageResult<DmsDeviceRespVO>> getDevicePage(@Valid DmsDevicePageReqVO pageReqVO) {
+        PageResult<DmsDeviceDO> pageResult = deviceService.getDevicePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsDeviceRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备管理 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:device:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceExcel(@Valid DmsDevicePageReqVO pageReqVO,
+                                  HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsDeviceDO> list = deviceService.getDevicePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备管理.xls", "数据", DmsDeviceRespVO.class,
+                BeanUtils.toBean(list, DmsDeviceRespVO.class));
+    }
+
+    @PostMapping("/location")
+    @Operation(summary = "设备定位")
+    @PreAuthorize("@ss.hasPermission('dms:device:update')")
+    public CommonResult<Long> location( @RequestBody DmsDeviceSaveReqVO createReqVO) {
+        return success(deviceService.location(createReqVO));
+    }
+
+    @PostMapping("/locationCount")
+    @Operation(summary = "设备未定位数量统计")
+    @PreAuthorize("@ss.hasPermission('dms:device:query')")
+    public CommonResult<Long> locationCount( @RequestBody DmsDeviceSaveReqVO saveReqVO) {
+        return success(deviceService.locationCount(saveReqVO));
+    }
+
+}

+ 193 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDevicePageReqVO.java

@@ -0,0 +1,193 @@
+package cn.iocoder.yudao.module.dms.controller.admin.device.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备管理分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsDevicePageReqVO extends PageParam {
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "设备设施名称")
+    private String name;
+
+    @Schema(description = "设备描述")
+    private String ddesc;
+
+    @Schema(description = "设备分类ID")
+    private Long cid;
+
+    @Schema(description = "设备分类名称")
+    private String cname;
+
+    @Schema(description = "父子级联代码")
+    private String pcode;
+
+    @Schema(description = "设备二维码")
+    private String qrCode;
+
+    @Schema(description = "作业场所ID")
+    private Long workPlaceId;
+
+    @Schema(description = "作业场所")
+    private String workPlaceName;
+
+    @Schema(description = "所在ID")
+    private Long partId;
+
+    @Schema(description = "所在部位")
+    private String partName;
+
+    @Schema(description = "投入使用时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] startDate;
+
+    @Schema(description = "结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] endDate;
+
+    @Schema(description = "设备图片 分号间隔")
+    private String imgs;
+
+    @Schema(description = "设备型号")
+    private String deviceModel;
+
+    @Schema(description = "特种设备标识")
+    private Integer specialFlag;
+
+    @Schema(description = "厂内编号")
+    private String factoryNo;
+
+    @Schema(description = "制造单位")
+    private String manufactureCompany;
+
+    @Schema(description = "安装单位")
+    private String installCompany;
+
+    @Schema(description = "设备管理员")
+    private String managerName;
+
+    @Schema(description = "运行状态")
+    private Integer runStatus;
+
+    @Schema(description = "是否完成注册标识")
+    private Integer registerFlag;
+
+    @Schema(description = "注册登记证编号")
+    private String registerNo;
+
+    @Schema(description = "三同时资料")
+    private String datums;
+
+    @Schema(description = "附件")
+    private String files;
+
+    @Schema(description = "风险分析对象编码")
+    private String riskNo;
+
+    @Schema(description = "检验日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] checkoutDate;
+
+    @Schema(description = "检验单位Id")
+    private Long checkoutCompanyId;
+
+    @Schema(description = "检验单位")
+    private String checkoutCompany;
+
+    @Schema(description = "检验合格证号")
+    private String checkoutNo;
+
+    @Schema(description = "检验附件")
+    private String checkoutFiles;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "地图坐标经度")
+    private Double lng;
+
+    @Schema(description = "地图坐标纬度")
+    private Double lat;
+
+    @Schema(description = "设备规格")
+    private String deviceSpecification;
+
+    @Schema(description = "设备管理员ID")
+    private Long managerId;
+
+    @Schema(description = "安装单位ID")
+    private Long installCompanyId;
+
+    @Schema(description = "生产厂商ID")
+    private Long manufactureCompanyId;
+
+    @Schema(description = "投入使用日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] useDate;
+
+    @Schema(description = "设备状态")
+    private Integer status;
+
+    @Schema(description = "分类父子级联代码")
+    private String classifyCode;
+
+    @Schema(description = "设备备件在库状态")
+    private Integer storeStatus;
+
+    @Schema(description = "安装位置")
+    private String positionName;
+
+    @Schema(description = "安装位置ID")
+    private Long positionId;
+
+    @Schema(description = "生命周期结束标识")
+    private Integer endFlag;
+
+    @Schema(description = "设备描述")
+    private String dcDesc;
+
+    @Schema(description = "设备分类ID")
+    private Long classifyId;
+
+    @Schema(description = "设备管理员")
+    private String manager;
+
+    @Schema(description = "固定资产编码(唯一性)")
+    private String fixedAssetsCode;
+
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    @Schema(description = "维保手册 Json结构")
+    private String manuals;
+
+    @Schema(description = "合格证")
+    private String certificates;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+    /**
+     * 部门 ID
+     */
+    @Schema(description = "部门id")
+    private Long deptId;
+}

+ 258 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDeviceRespVO.java

@@ -0,0 +1,258 @@
+package cn.iocoder.yudao.module.dms.controller.admin.device.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 设备管理 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsDeviceRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "设备设施名称")
+    @ExcelProperty("设备设施名称")
+    private String name;
+
+    @Schema(description = "设备描述")
+    @ExcelProperty("设备描述")
+    private String ddesc;
+
+    @Schema(description = "设备分类ID")
+    @ExcelProperty("设备分类ID")
+    private Long cid;
+
+    @Schema(description = "设备分类名称")
+    @ExcelProperty("设备分类名称")
+    private String cname;
+
+    @Schema(description = "父子级联代码")
+    @ExcelProperty("父子级联代码")
+    private String pcode;
+
+    @Schema(description = "设备二维码")
+    @ExcelProperty("设备二维码")
+    private String qrCode;
+
+    @Schema(description = "作业场所ID")
+    @ExcelProperty("作业场所ID")
+    private Long workPlaceId;
+
+    @Schema(description = "作业场所")
+    @ExcelProperty("作业场所")
+    private String workPlaceName;
+
+    @Schema(description = "所在ID")
+    @ExcelProperty("所在ID")
+    private Long partId;
+
+    @Schema(description = "所在部位")
+    @ExcelProperty("所在部位")
+    private String partName;
+
+    @Schema(description = "投入使用时间")
+    @ExcelProperty("投入使用时间")
+    private LocalDate startDate;
+
+    @Schema(description = "结束时间")
+    @ExcelProperty("结束时间")
+    private LocalDate endDate;
+
+    @Schema(description = "设备图片 分号间隔")
+    @ExcelProperty("设备图片 分号间隔")
+    private String imgs;
+
+    @Schema(description = "设备型号")
+    @ExcelProperty("设备型号")
+    private String deviceModel;
+
+    @Schema(description = "特种设备标识")
+    @ExcelProperty(value = "特种设备标识", converter = DictConvert.class)
+    @DictFormat("special_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer specialFlag;
+
+    @Schema(description = "厂内编号")
+    @ExcelProperty("厂内编号")
+    private String factoryNo;
+
+    @Schema(description = "制造单位")
+    @ExcelProperty("制造单位")
+    private String manufactureCompany;
+
+    @Schema(description = "安装单位")
+    @ExcelProperty("安装单位")
+    private String installCompany;
+
+    @Schema(description = "设备管理员")
+    @ExcelProperty("设备管理员")
+    private String managerName;
+
+    @Schema(description = "运行状态")
+    @ExcelProperty(value = "运行状态", converter = DictConvert.class)
+    @DictFormat("run_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer runStatus;
+
+    @Schema(description = "是否完成注册标识")
+    @ExcelProperty(value = "是否完成注册标识", converter = DictConvert.class)
+    @DictFormat("register_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer registerFlag;
+
+    @Schema(description = "注册登记证编号")
+    @ExcelProperty("注册登记证编号")
+    private String registerNo;
+
+    @Schema(description = "三同时资料")
+    @ExcelProperty("三同时资料")
+    private String datums;
+
+    @Schema(description = "附件")
+    @ExcelProperty("附件")
+    private String files;
+
+    @Schema(description = "风险分析对象编码")
+    @ExcelProperty("风险分析对象编码")
+    private String riskNo;
+
+    @Schema(description = "检验日期")
+    @ExcelProperty("检验日期")
+    private LocalDate checkoutDate;
+
+    @Schema(description = "检验单位Id")
+    @ExcelProperty("检验单位Id")
+    private Long checkoutCompanyId;
+
+    @Schema(description = "检验单位")
+    @ExcelProperty("检验单位")
+    private String checkoutCompany;
+
+    @Schema(description = "检验合格证号")
+    @ExcelProperty("检验合格证号")
+    private String checkoutNo;
+
+    @Schema(description = "检验附件")
+    @ExcelProperty("检验附件")
+    private String checkoutFiles;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "地图坐标经度")
+    @ExcelProperty("地图坐标经度")
+    private Double lng;
+
+    @Schema(description = "地图坐标纬度")
+    @ExcelProperty("地图坐标纬度")
+    private Double lat;
+
+    @Schema(description = "设备规格")
+    @ExcelProperty("设备规格")
+    private String deviceSpecification;
+
+    @Schema(description = "设备管理员ID")
+    @ExcelProperty("设备管理员ID")
+    private Long managerId;
+
+    @Schema(description = "安装单位ID")
+    @ExcelProperty("安装单位ID")
+    private Long installCompanyId;
+
+    @Schema(description = "生产厂商ID")
+    @ExcelProperty("生产厂商ID")
+    private Long manufactureCompanyId;
+
+    @Schema(description = "投入使用日期")
+    @ExcelProperty("投入使用日期")
+    private LocalDate useDate;
+
+    @Schema(description = "设备状态")
+    @ExcelProperty("设备状态")
+    private Integer status;
+
+    @Schema(description = "分类父子级联代码")
+    @ExcelProperty("分类父子级联代码")
+    private String classifyCode;
+
+    @Schema(description = "设备备件在库状态")
+    @ExcelProperty(value = "设备备件在库状态", converter = DictConvert.class)
+    @DictFormat("dms_store_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer storeStatus;
+
+    @Schema(description = "安装位置")
+    @ExcelProperty("安装位置")
+    private String positionName;
+
+    @Schema(description = "安装位置ID")
+    @ExcelProperty("安装位置ID")
+    private Long positionId;
+
+    @Schema(description = "生命周期结束标识")
+    @ExcelProperty(value = "生命周期结束标识", converter = DictConvert.class)
+    @DictFormat("dms_end_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer endFlag;
+
+    @Schema(description = "设备描述")
+    @ExcelProperty("设备描述")
+    private String dcDesc;
+
+    @Schema(description = "设备分类ID")
+    @ExcelProperty("设备分类ID")
+    private Long classifyId;
+
+    @Schema(description = "设备管理员")
+    @ExcelProperty("设备管理员")
+    private String manager;
+
+
+    @Schema(description = "固定资产编码(唯一性)")
+    @ExcelProperty("固定资产编码(唯一性)")
+    private String fixedAssetsCode;
+
+    @Schema(description = "设备编码")
+    @ExcelProperty("设备编码")
+    private String deviceCode;
+
+    @Schema(description = "维保手册 Json结构")
+    @ExcelProperty("维保手册 Json结构")
+    private String manuals;
+
+    @Schema(description = "合格证")
+    @ExcelProperty("合格证")
+    private String certificates;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+    /**
+     * 部门 ID
+     */
+    @Schema(description = "部门id")
+    private Long deptId;
+
+    @Schema(description = "部门")
+    private String deptName;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+
+}

+ 187 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/device/vo/DmsDeviceSaveReqVO.java

@@ -0,0 +1,187 @@
+package cn.iocoder.yudao.module.dms.controller.admin.device.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+@Schema(description = "管理后台 - 设备管理新增/修改 Request VO")
+@Data
+public class DmsDeviceSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "设备设施名称")
+    private String name;
+
+    @Schema(description = "设备描述")
+    private String ddesc;
+
+    @Schema(description = "设备分类ID")
+    private Long cid;
+
+    @Schema(description = "设备分类名称")
+    private String cname;
+
+    @Schema(description = "父子级联代码")
+    private String pcode;
+
+    @Schema(description = "设备二维码")
+    private String qrCode;
+
+    @Schema(description = "作业场所ID")
+    private Long workPlaceId;
+
+    @Schema(description = "作业场所")
+    private String workPlaceName;
+
+    @Schema(description = "所在ID")
+    private Long partId;
+
+    @Schema(description = "所在部位")
+    private String partName;
+
+    @Schema(description = "投入使用时间")
+    private LocalDate startDate;
+
+    @Schema(description = "结束时间")
+    private LocalDate endDate;
+
+    @Schema(description = "设备图片 分号间隔")
+    private String imgs;
+
+    @Schema(description = "设备型号")
+    private String deviceModel;
+
+    @Schema(description = "特种设备标识")
+    private Integer specialFlag;
+
+    @Schema(description = "厂内编号")
+    private String factoryNo;
+
+    @Schema(description = "制造单位")
+    private String manufactureCompany;
+
+    @Schema(description = "安装单位")
+    private String installCompany;
+
+    @Schema(description = "设备管理员ID")
+    private Long managerId;
+
+    @Schema(description = "设备管理员")
+    private String managerName;
+
+    @Schema(description = "运行状态")
+    private Integer runStatus;
+
+    @Schema(description = "是否完成注册标识")
+    private Integer registerFlag;
+
+    @Schema(description = "注册登记证编号")
+    private String registerNo;
+
+    @Schema(description = "三同时资料")
+    private String datums;
+
+    @Schema(description = "附件")
+    private String files;
+
+    @Schema(description = "风险分析对象编码")
+    private String riskNo;
+
+    @Schema(description = "检验日期")
+    private LocalDate checkoutDate;
+
+    @Schema(description = "检验单位Id")
+    private Long checkoutCompanyId;
+
+    @Schema(description = "检验单位")
+    private String checkoutCompany;
+
+    @Schema(description = "检验合格证号")
+    private String checkoutNo;
+
+    @Schema(description = "检验附件")
+    private String checkoutFiles;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "地图坐标经度")
+    private Double lng;
+
+    @Schema(description = "地图坐标纬度")
+    private Double lat;
+
+    @Schema(description = "设备规格")
+    private String deviceSpecification;
+
+    @Schema(description = "安装单位ID")
+    private Long installCompanyId;
+
+    @Schema(description = "生产厂商ID")
+    private Long manufactureCompanyId;
+
+    @Schema(description = "投入使用日期")
+    private LocalDate useDate;
+
+    @Schema(description = "设备状态")
+    private Integer status;
+
+    @Schema(description = "分类父子级联代码")
+    private String classifyCode;
+
+    @Schema(description = "设备备件在库状态")
+    private Integer storeStatus;
+
+    @Schema(description = "安装位置")
+    private String positionName;
+
+    @Schema(description = "安装位置ID")
+    private Long positionId;
+
+    @Schema(description = "生命周期结束标识")
+    private Integer endFlag;
+
+    @Schema(description = "设备描述")
+    private String dcDesc;
+
+    @Schema(description = "设备分类ID")
+    private Long classifyId;
+
+    @Schema(description = "设备管理员")
+    private String manager;
+
+    @Schema(description = "固定资产编码(唯一性)")
+    private String fixedAssetsCode;
+
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    @Schema(description = "维保手册 Json结构")
+    private String manuals;
+
+    @Schema(description = "合格证")
+    private String certificates;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+    /**
+     * 部门 ID
+     */
+    @Schema(description = "部门id")
+    private Long deptId;
+
+    @Schema(description = "部门")
+    private String deptName;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+}

+ 93 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/DmsDeviceAttributeController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceattribute;
+
+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.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributeRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributeSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute.DmsDeviceAttributeDO;
+import cn.iocoder.yudao.module.dms.service.deviceattribute.DmsDeviceAttributeService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/device-attribute")
+@Validated
+public class DmsDeviceAttributeController {
+
+    @Resource
+    private DmsDeviceAttributeService deviceAttributeService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备属性")
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:create')")
+    public CommonResult<Long> createDeviceAttribute(@Valid @RequestBody DmsDeviceAttributeSaveReqVO createReqVO) {
+        return success(deviceAttributeService.createDeviceAttribute(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备属性")
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:update')")
+    public CommonResult<Boolean> updateDeviceAttribute(@Valid @RequestBody DmsDeviceAttributeSaveReqVO updateReqVO) {
+        deviceAttributeService.updateDeviceAttribute(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备属性")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:delete')")
+    public CommonResult<Boolean> deleteDeviceAttribute(@RequestParam("id") Long id) {
+        deviceAttributeService.deleteDeviceAttribute(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备属性")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:query')")
+    public CommonResult<DmsDeviceAttributeRespVO> getDeviceAttribute(@RequestParam("id") Long id) {
+        DmsDeviceAttributeDO deviceAttribute = deviceAttributeService.getDeviceAttribute(id);
+        return success(BeanUtils.toBean(deviceAttribute, DmsDeviceAttributeRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备属性分页")
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:query')")
+    public CommonResult<PageResult<DmsDeviceAttributeRespVO>> getDeviceAttributePage(@Valid DmsDeviceAttributePageReqVO pageReqVO) {
+        PageResult<DmsDeviceAttributeDO> pageResult = deviceAttributeService.getDeviceAttributePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsDeviceAttributeRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备属性 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:device-attribute:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceAttributeExcel(@Valid DmsDeviceAttributePageReqVO pageReqVO,
+                                           HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsDeviceAttributeDO> list = deviceAttributeService.getDeviceAttributePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备属性.xls", "数据", DmsDeviceAttributeRespVO.class,
+                BeanUtils.toBean(list, DmsDeviceAttributeRespVO.class));
+    }
+
+}

+ 45 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributePageReqVO.java

@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备属性分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsDeviceAttributePageReqVO extends PageParam {
+
+    @Schema(description = "UUID", example = "7350")
+    private String uuid;
+
+    @Schema(description = "设备ID", example = "4772")
+    private Long did;
+
+    @Schema(description = "设备属性名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "设备属性值")
+    private String value;
+
+    @Schema(description = "设备属性描述")
+    private String adesc;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 54 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributeRespVO.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 设备属性 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsDeviceAttributeRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "10152")
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "UUID", example = "7350")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "设备ID", example = "4772")
+    @ExcelProperty("设备ID")
+    private Long did;
+
+    @Schema(description = "设备属性名称", example = "赵六")
+    @ExcelProperty("设备属性名称")
+    private String name;
+
+    @Schema(description = "设备属性值")
+    @ExcelProperty("设备属性值")
+    private String value;
+
+    @Schema(description = "设备属性描述")
+    @ExcelProperty("设备属性描述")
+    private String adesc;
+
+    @Schema(description = "显示序列")
+    @ExcelProperty("显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 37 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceattribute/vo/DmsDeviceAttributeSaveReqVO.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 设备属性新增/修改 Request VO")
+@Data
+public class DmsDeviceAttributeSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED, example = "10152")
+    private Long id;
+
+    @Schema(description = "UUID", example = "7350")
+    private String uuid;
+
+    @Schema(description = "设备ID", example = "4772")
+    private Long did;
+
+    @Schema(description = "设备属性名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "设备属性值")
+    private String value;
+
+    @Schema(description = "设备属性描述")
+    private String adesc;
+
+    @Schema(description = "显示序列")
+    private Integer orderNum;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 98 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/DmsDeviceClassifyController.java

@@ -0,0 +1,98 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifyRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsSimpleDeviceClassifyRespVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify.DmsDeviceClassifyDO;
+import cn.iocoder.yudao.module.dms.service.deviceclassify.DmsDeviceClassifyService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/device-classify")
+@Validated
+public class DmsDeviceClassifyController {
+
+    @Resource
+    private DmsDeviceClassifyService deviceClassifyService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备分类")
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:create')")
+    public CommonResult<Long> createDeviceClassify(@Valid @RequestBody DmsDeviceClassifySaveReqVO createReqVO) {
+        return success(deviceClassifyService.createDeviceClassify(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备分类")
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:update')")
+    public CommonResult<Boolean> updateDeviceClassify(@Valid @RequestBody DmsDeviceClassifySaveReqVO updateReqVO) {
+        deviceClassifyService.updateDeviceClassify(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备分类")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:delete')")
+    public CommonResult<Boolean> deleteDeviceClassify(@RequestParam("id") Long id) {
+        deviceClassifyService.deleteDeviceClassify(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备分类")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:query')")
+    public CommonResult<DmsDeviceClassifyRespVO> getDeviceClassify(@RequestParam("id") Long id) {
+        DmsDeviceClassifyDO deviceClassify = deviceClassifyService.getDeviceClassify(id);
+        return success(BeanUtils.toBean(deviceClassify, DmsDeviceClassifyRespVO.class));
+    }
+
+    @GetMapping("/list")
+    @Operation(summary = "获得设备分类列表")
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:query')")
+    public CommonResult<List<DmsDeviceClassifyRespVO>> getDeviceClassifyList(@Valid DmsDeviceClassifyListReqVO listReqVO) {
+        List<DmsDeviceClassifyDO> list = deviceClassifyService.getDeviceClassifyList(listReqVO);
+        return success(BeanUtils.toBean(list, DmsDeviceClassifyRespVO.class));
+    }
+
+    @GetMapping("/simple-list")
+    @Operation(summary = "获得设备分类精简列表", description = "主要用于前端的下拉选项")
+    public CommonResult<List<DmsSimpleDeviceClassifyRespVO>> getSimpleDeviceClassifyList() {
+        List<DmsDeviceClassifyDO> list = deviceClassifyService.getSimpleDeviceClassifyList();
+        return success(BeanUtils.toBean(list, DmsSimpleDeviceClassifyRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备分类 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:device-classify:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceClassifyExcel(@Valid DmsDeviceClassifyListReqVO listReqVO,
+                                          HttpServletResponse response) throws IOException {
+        List<DmsDeviceClassifyDO> list = deviceClassifyService.getDeviceClassifyList(listReqVO);
+        // 导出 Excel
+        ExcelUtils.write(response, "设备分类.xls", "数据", DmsDeviceClassifyRespVO.class,
+                BeanUtils.toBean(list, DmsDeviceClassifyRespVO.class));
+    }
+
+}

+ 46 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyListReqVO.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备分类列表 Request VO")
+@Data
+public class DmsDeviceClassifyListReqVO {
+
+    @Schema(description = "设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    private String note;
+
+    @Schema(description = "父分类ID")
+    private Long parentId;
+
+    @Schema(description = "父分类名称")
+    private String parentName;
+
+    @Schema(description = "维保标识")
+    private Integer maintainFlag;
+
+    @Schema(description = "动静标识")
+    private Integer staticFlag;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+}

+ 24 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyPageReqVO.java

@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 设备分类分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsDeviceClassifyPageReqVO extends PageParam {
+
+    @Schema(description = "分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    private String note;
+
+    @Schema(description = "父分类名称")
+    private String parentName;
+
+}

+ 64 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifyRespVO.java

@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 设备分类 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsDeviceClassifyRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "设备设施分类名称")
+    @ExcelProperty("设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    @ExcelProperty("描述")
+    private String note;
+
+    @Schema(description = "父分类ID")
+    @ExcelProperty("父分类ID")
+    private Long parentId;
+
+    @Schema(description = "父分类名称")
+    @ExcelProperty("父分类名称")
+    private String parentName;
+
+    @Schema(description = "维保标识")
+    @ExcelProperty(value = "维保标识", converter = DictConvert.class)
+    @DictFormat("maintain_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer maintainFlag;
+
+    @Schema(description = "动静标识")
+    @ExcelProperty(value = "动静标识", converter = DictConvert.class)
+    @DictFormat("static_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer staticFlag;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "显示序列 从小到大")
+    @ExcelProperty("显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+}

+ 43 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsDeviceClassifySaveReqVO.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 设备分类新增/修改 Request VO")
+@Data
+public class DmsDeviceClassifySaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "设备设施分类名称")
+    private String name;
+
+    @Schema(description = "描述")
+    private String note;
+
+    @Schema(description = "父分类ID")
+    private Long parentId;
+
+    @Schema(description = "父分类名称")
+    private String parentName;
+
+    @Schema(description = "维保标识")
+    private Integer maintainFlag;
+
+    @Schema(description = "动静标识")
+    private Integer staticFlag;
+
+    @Schema(description = "显示序列 从小到大")
+    private Integer orderNum;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+}

+ 29 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/deviceclassify/vo/DmsSimpleDeviceClassifyRespVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 设备分类 精简 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsSimpleDeviceClassifyRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "设备分类名称")
+    @ExcelProperty("设备分类名称")
+    private String name;
+
+    @Schema(description = "父分类ID")
+    @ExcelProperty("父分类ID")
+    private Long parentId;
+
+    @Schema(description = "父分类名称")
+    @ExcelProperty("父分类名称")
+    private String parentName;
+
+}

+ 93 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/DmsDeviceRepairController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.dms.controller.admin.devicerepair;
+
+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.dms.controller.admin.devicerepair.vo.DmsDeviceRepairPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.devicerepair.DmsDeviceRepairDO;
+import cn.iocoder.yudao.module.dms.service.devicerepair.DmsDeviceRepairService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/device-repair")
+@Validated
+public class DmsDeviceRepairController {
+
+    @Resource
+    private DmsDeviceRepairService deviceRepairService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建设备报修")
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:create')")
+    public CommonResult<Long> createDeviceRepair(@Valid @RequestBody DmsDeviceRepairSaveReqVO createReqVO) {
+        return success(deviceRepairService.createDeviceRepair(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新设备报修")
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:update')")
+    public CommonResult<Boolean> updateDeviceRepair(@Valid @RequestBody DmsDeviceRepairSaveReqVO updateReqVO) {
+        deviceRepairService.updateDeviceRepair(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除设备报修")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:delete')")
+    public CommonResult<Boolean> deleteDeviceRepair(@RequestParam("id") Long id) {
+        deviceRepairService.deleteDeviceRepair(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得设备报修")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:query')")
+    public CommonResult<DmsDeviceRepairRespVO> getDeviceRepair(@RequestParam("id") Long id) {
+        DmsDeviceRepairDO deviceRepair = deviceRepairService.getDeviceRepair(id);
+        return success(BeanUtils.toBean(deviceRepair, DmsDeviceRepairRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得设备报修分页")
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:query')")
+    public CommonResult<PageResult<DmsDeviceRepairRespVO>> getDeviceRepairPage(@Valid DmsDeviceRepairPageReqVO pageReqVO) {
+        PageResult<DmsDeviceRepairDO> pageResult = deviceRepairService.getDeviceRepairPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsDeviceRepairRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出设备报修 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:device-repair:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDeviceRepairExcel(@Valid DmsDeviceRepairPageReqVO pageReqVO,
+                                        HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsDeviceRepairDO> list = deviceRepairService.getDeviceRepairPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "设备报修.xls", "数据", DmsDeviceRepairRespVO.class,
+                BeanUtils.toBean(list, DmsDeviceRepairRespVO.class));
+    }
+
+}

+ 235 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairPageReqVO.java

@@ -0,0 +1,235 @@
+package cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 设备报修分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsDeviceRepairPageReqVO extends PageParam {
+
+    @Schema(description = "报修主题")
+    private String title;
+
+    @Schema(description = "报修内容")
+    private String content;
+
+    @Schema(description = "报修图片")
+    private String imgs;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "任务检查项ID")
+    private Long checkTaskItemId;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "报修人ID")
+    private Long reportorId;
+
+    @Schema(description = "报修人姓名")
+    private String reportorName;
+
+    @Schema(description = "报修内容")
+    private String reportContent;
+
+    @Schema(description = "报修图片")
+    private String reportImgs;
+
+    @Schema(description = "报修开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Timestamp[] reportStartTime;
+
+    @Schema(description = "报修结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Timestamp[] reportEndTime;
+
+    @Schema(description = "决策者(维修部负责人)ID")
+    private Long deciderId;
+
+    @Schema(description = "决策者(维修部负责人)姓名")
+    private String deciderName;
+
+    @Schema(description = "决策内容")
+    private String decideContent;
+
+    @Schema(description = "决策图片")
+    private String decideImgs;
+
+    @Schema(description = "决策开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] decideStartTime;
+
+    @Schema(description = "决策结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] decideEndTime;
+
+    @Schema(description = "维修组ID")
+    private Long maintainOrgId;
+
+    @Schema(description = "维修组")
+    private String maintainOrgName;
+
+    @Schema(description = "维修组代码")
+    private String maintainOrgCode;
+
+    @Schema(description = "维修工ID")
+    private Long maintainerId;
+
+    @Schema(description = "维修工姓名")
+    private String maintainerName;
+
+    @Schema(description = "维修内容")
+    private String maintainContent;
+
+    @Schema(description = "维修图片")
+    private String maintainImgs;
+
+    @Schema(description = "维修开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] maintainStartTime;
+
+    @Schema(description = "维修结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] maintainEndTime;
+
+    @Schema(description = "维修流转详情")
+    private String maintainFlow;
+
+    @Schema(description = "维修流转次数")
+    private String maintainNum;
+
+    @Schema(description = "确认者ID")
+    private Long affirmantId;
+
+    @Schema(description = "确认者姓名")
+    private String affirmantName;
+
+    @Schema(description = "确认内容")
+    private String affirmContent;
+
+    @Schema(description = "确认图片")
+    private String affirmImgs;
+
+    @Schema(description = "确认开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] affirmStartTime;
+
+    @Schema(description = "确认结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] affirmEndTime;
+
+    @Schema(description = "报修开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] startTime;
+
+    @Schema(description = "报修结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] endTime;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "报修生命周期状态")
+    private Integer status;
+
+    @Schema(description = "流转者ID")
+    private Long transferId;
+
+    @Schema(description = "流转者姓名")
+    private String transferName;
+
+    @Schema(description = "流转内容")
+    private String transferContent;
+
+    @Schema(description = "流转图片")
+    private String transferImgs;
+
+    @Schema(description = "流转开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] transferStartTime;
+
+    @Schema(description = "流转结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] transferEndTime;
+
+    @Schema(description = "报修人联系方式")
+    private String reportorTel;
+
+    @Schema(description = "紧急程度")
+    private String repairPress;
+
+    @Schema(description = "故障类型")
+    private String repairReason;
+
+    @Schema(description = "维修单号")
+    private String repairCode;
+
+    @Schema(description = "维修记录")
+    private String repairRecords;
+
+    @Schema(description = "主修人变更记录")
+    private String mainRepairHistory;
+
+    @Schema(description = "流转信息")
+    private String flowRecords;
+
+    @Schema(description = "维修内容补充")
+    private Double repairFee;
+
+    @Schema(description = "维修级别")
+    private Short repairLevel;
+
+    @Schema(description = "维修类型")
+    private Short repairType;
+
+    @Schema(description = "设备位置")
+    private String repairPosition;
+
+    @Schema(description = "故障原因")
+    private Short repairCausation;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "結束标识")
+    private Integer endFlag;
+
+    @Schema(description = "是否停机")
+    private Short stopFlag;
+
+    @Schema(description = "维修时是否停机")
+    private Short maintainStopFlag;
+
+    @Schema(description = "是否替换备件")
+    private Short partsFlag;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+    @Schema(description = "部门id", example = "28516")
+    private Long deptId;
+
+}

+ 295 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairRespVO.java

@@ -0,0 +1,295 @@
+package cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 设备报修 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsDeviceRepairRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "报修主题")
+    @ExcelProperty("报修主题")
+    private String title;
+
+    @Schema(description = "报修内容")
+    @ExcelProperty("报修内容")
+    private String content;
+
+    @Schema(description = "报修图片")
+    @ExcelProperty("报修图片")
+    private String imgs;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "任务ID")
+    @ExcelProperty("任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "任务检查项ID")
+    @ExcelProperty("任务检查项ID")
+    private Long checkTaskItemId;
+
+    @Schema(description = "设备ID")
+    @ExcelProperty("设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    @ExcelProperty("设备代码")
+    private String deviceCode;
+
+    @Schema(description = "报修人ID")
+    @ExcelProperty("报修人ID")
+    private Long reportorId;
+
+    @Schema(description = "报修人姓名")
+    @ExcelProperty("报修人姓名")
+    private String reportorName;
+
+    @Schema(description = "报修内容")
+    @ExcelProperty("报修内容")
+    private String reportContent;
+
+    @Schema(description = "报修图片")
+    @ExcelProperty("报修图片")
+    private String reportImgs;
+
+    @Schema(description = "报修开始时间")
+    @ExcelProperty("报修开始时间")
+    private LocalDateTime reportStartTime;
+
+    @Schema(description = "报修结束时间")
+    @ExcelProperty("报修结束时间")
+    private LocalDateTime reportEndTime;
+
+    @Schema(description = "决策者(维修部负责人)ID")
+    @ExcelProperty("决策者(维修部负责人)ID")
+    private Long deciderId;
+
+    @Schema(description = "决策者(维修部负责人)姓名")
+    @ExcelProperty("决策者(维修部负责人)姓名")
+    private String deciderName;
+
+    @Schema(description = "决策内容")
+    @ExcelProperty("决策内容")
+    private String decideContent;
+
+    @Schema(description = "决策图片")
+    @ExcelProperty("决策图片")
+    private String decideImgs;
+
+    @Schema(description = "决策开始时间")
+    @ExcelProperty("决策开始时间")
+    private LocalDateTime decideStartTime;
+
+    @Schema(description = "决策结束时间")
+    @ExcelProperty("决策结束时间")
+    private LocalDateTime decideEndTime;
+
+    @Schema(description = "维修组ID")
+    @ExcelProperty("维修组ID")
+    private Long maintainOrgId;
+
+    @Schema(description = "维修组")
+    @ExcelProperty("维修组")
+    private String maintainOrgName;
+
+    @Schema(description = "维修组代码")
+    @ExcelProperty("维修组代码")
+    private String maintainOrgCode;
+
+    @Schema(description = "维修工ID")
+    @ExcelProperty("维修工ID")
+    private Long maintainerId;
+
+    @Schema(description = "维修工姓名")
+    @ExcelProperty("维修工姓名")
+    private String maintainerName;
+
+    @Schema(description = "维修内容")
+    @ExcelProperty("维修内容")
+    private String maintainContent;
+
+    @Schema(description = "维修图片")
+    @ExcelProperty("维修图片")
+    private String maintainImgs;
+
+    @Schema(description = "维修开始时间")
+    @ExcelProperty("维修开始时间")
+    private LocalDateTime maintainStartTime;
+
+    @Schema(description = "维修结束时间")
+    @ExcelProperty("维修结束时间")
+    private LocalDateTime maintainEndTime;
+
+    @Schema(description = "维修流转详情")
+    @ExcelProperty("维修流转详情")
+    private String maintainFlow;
+
+    @Schema(description = "维修流转次数")
+    @ExcelProperty("维修流转次数")
+    private String maintainNum;
+
+    @Schema(description = "确认者ID")
+    @ExcelProperty("确认者ID")
+    private Long affirmantId;
+
+    @Schema(description = "确认者姓名")
+    @ExcelProperty("确认者姓名")
+    private String affirmantName;
+
+    @Schema(description = "确认内容")
+    @ExcelProperty("确认内容")
+    private String affirmContent;
+
+    @Schema(description = "确认图片")
+    @ExcelProperty("确认图片")
+    private String affirmImgs;
+
+    @Schema(description = "确认开始时间")
+    @ExcelProperty("确认开始时间")
+    private LocalDateTime affirmStartTime;
+
+    @Schema(description = "确认结束时间")
+    @ExcelProperty("确认结束时间")
+    private LocalDateTime affirmEndTime;
+
+    @Schema(description = "报修开始日期")
+    @ExcelProperty("报修开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "报修结束日期")
+    @ExcelProperty("报修结束日期")
+    private LocalDateTime endTime;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "报修生命周期状态")
+    @ExcelProperty(value = "报修生命周期状态", converter = DictConvert.class)
+    @DictFormat("device_repair_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "流转者ID")
+    @ExcelProperty("流转者ID")
+    private Long transferId;
+
+    @Schema(description = "流转者姓名")
+    @ExcelProperty("流转者姓名")
+    private String transferName;
+
+    @Schema(description = "流转内容")
+    @ExcelProperty("流转内容")
+    private String transferContent;
+
+    @Schema(description = "流转图片")
+    @ExcelProperty("流转图片")
+    private String transferImgs;
+
+    @Schema(description = "流转开始时间")
+    @ExcelProperty("流转开始时间")
+    private LocalDateTime transferStartTime;
+
+    @Schema(description = "流转结束时间")
+    @ExcelProperty("流转结束时间")
+    private LocalDateTime transferEndTime;
+
+    @Schema(description = "报修人联系方式")
+    @ExcelProperty("报修人联系方式")
+    private String reportorTel;
+
+    @Schema(description = "紧急程度")
+    @ExcelProperty("紧急程度")
+    private String repairPress;
+
+    @Schema(description = "故障类型")
+    @ExcelProperty("故障类型")
+    private String repairReason;
+
+    @Schema(description = "维修单号")
+    @ExcelProperty("维修单号")
+    private String repairCode;
+
+    @Schema(description = "维修记录")
+    @ExcelProperty("维修记录")
+    private String repairRecords;
+
+    @Schema(description = "主修人变更记录")
+    @ExcelProperty("主修人变更记录")
+    private String mainRepairHistory;
+
+    @Schema(description = "流转信息")
+    @ExcelProperty("流转信息")
+    private String flowRecords;
+
+    @Schema(description = "维修内容补充")
+    @ExcelProperty("维修内容补充")
+    private Double repairFee;
+
+    @Schema(description = "维修级别")
+    @ExcelProperty("维修级别")
+    private Short repairLevel;
+
+    @Schema(description = "维修类型")
+    @ExcelProperty("维修类型")
+    private Short repairType;
+
+    @Schema(description = "设备位置")
+    @ExcelProperty("设备位置")
+    private String repairPosition;
+
+    @Schema(description = "故障原因")
+    @ExcelProperty("故障原因")
+    private Short repairCausation;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "結束标识")
+    @ExcelProperty(value = "結束标识", converter = DictConvert.class)
+    @DictFormat("dms_end_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer endFlag;
+
+    @Schema(description = "是否停机")
+    @ExcelProperty(value = "是否停机", converter = DictConvert.class)
+    @DictFormat("dms_stop_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short stopFlag;
+
+    @Schema(description = "维修时是否停机")
+    @ExcelProperty(value = "维修时是否停机", converter = DictConvert.class)
+    @DictFormat("dms_stop_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short maintainStopFlag;
+
+    @Schema(description = "是否替换备件")
+    @ExcelProperty(value = "是否替换备件", converter = DictConvert.class)
+    @DictFormat("dms_parts_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short partsFlag;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+    @Schema(description = "部门id", example = "28516")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+}

+ 215 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/devicerepair/vo/DmsDeviceRepairSaveReqVO.java

@@ -0,0 +1,215 @@
+package cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 设备报修新增/修改 Request VO")
+@Data
+public class DmsDeviceRepairSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "报修主题")
+    private String title;
+
+    @Schema(description = "报修内容")
+    private String content;
+
+    @Schema(description = "报修图片")
+    private String imgs;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "任务ID")
+    private Long checkTaskId;
+
+    @Schema(description = "任务检查项ID")
+    private Long checkTaskItemId;
+
+    @Schema(description = "设备ID")
+    private Long deviceId;
+
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备代码")
+    private String deviceCode;
+
+    @Schema(description = "报修人ID")
+    private Long reportorId;
+
+    @Schema(description = "报修人姓名")
+    private String reportorName;
+
+    @Schema(description = "报修内容")
+    private String reportContent;
+
+    @Schema(description = "报修图片")
+    private String reportImgs;
+
+    @Schema(description = "报修开始时间")
+    private LocalDateTime reportStartTime;
+
+    @Schema(description = "报修结束时间")
+    private LocalDateTime reportEndTime;
+
+    @Schema(description = "决策者(维修部负责人)ID")
+    private Long deciderId;
+
+    @Schema(description = "决策者(维修部负责人)姓名")
+    private String deciderName;
+
+    @Schema(description = "决策内容")
+    private String decideContent;
+
+    @Schema(description = "决策图片")
+    private String decideImgs;
+
+    @Schema(description = "决策开始时间")
+    private LocalDateTime decideStartTime;
+
+    @Schema(description = "决策结束时间")
+    private LocalDateTime decideEndTime;
+
+    @Schema(description = "维修组ID")
+    private Long maintainOrgId;
+
+    @Schema(description = "维修组")
+    private String maintainOrgName;
+
+    @Schema(description = "维修组代码")
+    private String maintainOrgCode;
+
+    @Schema(description = "维修工ID")
+    private Long maintainerId;
+
+    @Schema(description = "维修工姓名")
+    private String maintainerName;
+
+    @Schema(description = "维修内容")
+    private String maintainContent;
+
+    @Schema(description = "维修图片")
+    private String maintainImgs;
+
+    @Schema(description = "维修开始时间")
+    private LocalDateTime maintainStartTime;
+
+    @Schema(description = "维修结束时间")
+    private LocalDateTime maintainEndTime;
+
+    @Schema(description = "维修流转详情")
+    private String maintainFlow;
+
+    @Schema(description = "维修流转次数")
+    private String maintainNum;
+
+    @Schema(description = "确认者ID")
+    private Long affirmantId;
+
+    @Schema(description = "确认者姓名")
+    private String affirmantName;
+
+    @Schema(description = "确认内容")
+    private String affirmContent;
+
+    @Schema(description = "确认图片")
+    private String affirmImgs;
+
+    @Schema(description = "确认开始时间")
+    private LocalDateTime affirmStartTime;
+
+    @Schema(description = "确认结束时间")
+    private LocalDateTime affirmEndTime;
+
+    @Schema(description = "报修开始日期")
+    private LocalDateTime startTime;
+
+    @Schema(description = "报修结束日期")
+    private LocalDateTime endTime;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "报修生命周期状态")
+    private Integer status;
+
+    @Schema(description = "流转者ID")
+    private Long transferId;
+
+    @Schema(description = "流转者姓名")
+    private String transferName;
+
+    @Schema(description = "流转内容")
+    private String transferContent;
+
+    @Schema(description = "流转图片")
+    private String transferImgs;
+
+    @Schema(description = "流转开始时间")
+    private LocalDateTime transferStartTime;
+
+    @Schema(description = "流转结束时间")
+    private LocalDateTime transferEndTime;
+
+    @Schema(description = "报修人联系方式")
+    private String reportorTel;
+
+    @Schema(description = "紧急程度")
+    private String repairPress;
+
+    @Schema(description = "故障类型")
+    private String repairReason;
+
+    @Schema(description = "维修单号")
+    private String repairCode;
+
+    @Schema(description = "维修记录")
+    private String repairRecords;
+
+    @Schema(description = "主修人变更记录")
+    private String mainRepairHistory;
+
+    @Schema(description = "流转信息")
+    private String flowRecords;
+
+    @Schema(description = "维修内容补充")
+    private Double repairFee;
+
+    @Schema(description = "维修级别")
+    private Short repairLevel;
+
+    @Schema(description = "维修类型")
+    private Short repairType;
+
+    @Schema(description = "设备位置")
+    private String repairPosition;
+
+    @Schema(description = "故障原因")
+    private Short repairCausation;
+
+    @Schema(description = "結束标识")
+    private Integer endFlag;
+
+    @Schema(description = "是否停机")
+    private Short stopFlag;
+
+    @Schema(description = "维修时是否停机")
+    private Short maintainStopFlag;
+
+    @Schema(description = "是否替换备件")
+    private Short partsFlag;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+    @Schema(description = "部门id", example = "28516")
+    private Long deptId;
+
+}

+ 145 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/DmsRelationOrgController.java

@@ -0,0 +1,145 @@
+package cn.iocoder.yudao.module.dms.controller.admin.relationorg;
+
+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.dms.controller.admin.relationorg.vo.DmsRelationOrgPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsRelationOrgRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsRelationOrgSaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsSimpleRelationOrgRespVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationContractDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationOrgDO;
+import cn.iocoder.yudao.module.dms.service.relationorg.DmsRelationOrgService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+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("/dms/relation-org")
+@Validated
+public class DmsRelationOrgController {
+
+    @Resource
+    private DmsRelationOrgService relationOrgService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建往来单位")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:create')")
+    public CommonResult<Long> createRelationOrg(@Valid @RequestBody DmsRelationOrgSaveReqVO createReqVO) {
+        return success(relationOrgService.createRelationOrg(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新往来单位")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:update')")
+    public CommonResult<Boolean> updateRelationOrg(@Valid @RequestBody DmsRelationOrgSaveReqVO updateReqVO) {
+        relationOrgService.updateRelationOrg(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除往来单位")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:delete')")
+    public CommonResult<Boolean> deleteRelationOrg(@RequestParam("id") Long id) {
+        relationOrgService.deleteRelationOrg(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得往来单位")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:query')")
+    public CommonResult<DmsRelationOrgRespVO> getRelationOrg(@RequestParam("id") Long id) {
+        DmsRelationOrgDO relationOrg = relationOrgService.getRelationOrg(id);
+        return success(BeanUtils.toBean(relationOrg, DmsRelationOrgRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得往来单位分页")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:query')")
+    public CommonResult<PageResult<DmsRelationOrgRespVO>> getRelationOrgPage(@Valid DmsRelationOrgPageReqVO pageReqVO) {
+        PageResult<DmsRelationOrgDO> pageResult = relationOrgService.getRelationOrgPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DmsRelationOrgRespVO.class));
+    }
+
+    @GetMapping("/simple-list")
+    @Operation(summary = "获得往来单位精简列表", description = "主要用于前端的下拉选项")
+    public CommonResult<List<DmsSimpleRelationOrgRespVO>> getSimpleDeviceClassifyList() {
+        List<DmsRelationOrgDO> list = relationOrgService.getSimpleRelationOrgList();
+        return success(BeanUtils.toBean(list, DmsSimpleRelationOrgRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出往来单位 Excel")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRelationOrgExcel(@Valid DmsRelationOrgPageReqVO pageReqVO,
+                                       HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DmsRelationOrgDO> list = relationOrgService.getRelationOrgPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "往来单位.xls", "数据", DmsRelationOrgRespVO.class,
+                BeanUtils.toBean(list, DmsRelationOrgRespVO.class));
+    }
+
+    // ==================== 子表(往来单位联系人) ====================
+
+    @GetMapping("/relation-contract/page")
+    @Operation(summary = "获得往来单位联系人分页")
+    @Parameter(name = "orgId", description = "来往单位ID")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:query')")
+    public CommonResult<PageResult<DmsRelationContractDO>> getRelationContractPage(PageParam pageReqVO,
+                                                                                   @RequestParam("orgId") Long orgId) {
+        return success(relationOrgService.getRelationContractPage(pageReqVO, orgId));
+    }
+
+    @PostMapping("/relation-contract/create")
+    @Operation(summary = "创建往来单位联系人")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:create')")
+    public CommonResult<Long> createRelationContract(@Valid @RequestBody DmsRelationContractDO relationContract) {
+        return success(relationOrgService.createRelationContract(relationContract));
+    }
+
+    @PutMapping("/relation-contract/update")
+    @Operation(summary = "更新往来单位联系人")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:update')")
+    public CommonResult<Boolean> updateRelationContract(@Valid @RequestBody DmsRelationContractDO relationContract) {
+        relationOrgService.updateRelationContract(relationContract);
+        return success(true);
+    }
+
+    @DeleteMapping("/relation-contract/delete")
+    @Parameter(name = "id", description = "编号", required = true)
+    @Operation(summary = "删除往来单位联系人")
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:delete')")
+    public CommonResult<Boolean> deleteRelationContract(@RequestParam("id") Long id) {
+        relationOrgService.deleteRelationContract(id);
+        return success(true);
+    }
+
+    @GetMapping("/relation-contract/get")
+    @Operation(summary = "获得往来单位联系人")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('dms:relation-org:query')")
+    public CommonResult<DmsRelationContractDO> getRelationContract(@RequestParam("id") Long id) {
+        return success(relationOrgService.getRelationContract(id));
+    }
+
+}

+ 81 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgPageReqVO.java

@@ -0,0 +1,81 @@
+package cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 往来单位分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DmsRelationOrgPageReqVO extends PageParam {
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "单位名称")
+    private String name;
+
+    @Schema(description = "单位简称")
+    private String sortName;
+
+    @Schema(description = "单位类型")
+    private Integer rtype;
+
+    @Schema(description = "单位地址")
+    private String address;
+
+    @Schema(description = "邮政编码")
+    private String postCode;
+
+    @Schema(description = "联系电话")
+    private String phone;
+
+    @Schema(description = "电子邮箱")
+    private String email;
+
+    @Schema(description = "网址")
+    private String site;
+
+    @Schema(description = "税号/统一社会信用代码")
+    private String uniCode;
+
+    @Schema(description = "银行开户行")
+    private String bankName;
+
+    @Schema(description = "银行账号")
+    private String bankAccount;
+
+    @Schema(description = "发票地址/电话")
+    private String invoiceInfo;
+
+    @Schema(description = "发票公司名称")
+    private String invoiceName;
+
+    @Schema(description = "信用额度")
+    private Integer credit;
+
+    @Schema(description = "信用评级")
+    private Double creditLevel;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "使用标识")
+    private Short useFlag;
+
+    @Schema(description = "部门id")
+    private Long deptId;
+
+}

+ 103 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgRespVO.java

@@ -0,0 +1,103 @@
+package cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 往来单位 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsRelationOrgRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "UUID")
+    @ExcelProperty("UUID")
+    private String uuid;
+
+    @Schema(description = "单位名称")
+    @ExcelProperty("单位名称")
+    private String name;
+
+    @Schema(description = "单位简称")
+    @ExcelProperty("单位简称")
+    private String sortName;
+
+    @Schema(description = "单位类型")
+    @ExcelProperty(value = "单位类型", converter = DictConvert.class)
+    @DictFormat("dms_relation_org_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer rtype;
+
+    @Schema(description = "单位地址")
+    @ExcelProperty("单位地址")
+    private String address;
+
+    @Schema(description = "邮政编码")
+    @ExcelProperty("邮政编码")
+    private String postCode;
+
+    @Schema(description = "联系电话")
+    @ExcelProperty("联系电话")
+    private String phone;
+
+    @Schema(description = "电子邮箱")
+    @ExcelProperty("电子邮箱")
+    private String email;
+
+    @Schema(description = "网址")
+    @ExcelProperty("网址")
+    private String site;
+
+    @Schema(description = "税号/统一社会信用代码")
+    @ExcelProperty("税号/统一社会信用代码")
+    private String uniCode;
+
+    @Schema(description = "银行开户行")
+    @ExcelProperty("银行开户行")
+    private String bankName;
+
+    @Schema(description = "银行账号")
+    @ExcelProperty("银行账号")
+    private String bankAccount;
+
+    @Schema(description = "发票地址/电话")
+    @ExcelProperty("发票地址/电话")
+    private String invoiceInfo;
+
+    @Schema(description = "发票公司名称")
+    @ExcelProperty("发票公司名称")
+    private String invoiceName;
+
+    @Schema(description = "信用额度")
+    @ExcelProperty("信用额度")
+    private Integer credit;
+
+    @Schema(description = "信用评级")
+    @ExcelProperty("信用评级")
+    private Double creditLevel;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String note;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "使用标识", converter = DictConvert.class)
+    @DictFormat("use_flag") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Short useFlag;
+
+    @Schema(description = "部门id")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+}

+ 73 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsRelationOrgSaveReqVO.java

@@ -0,0 +1,73 @@
+package cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 往来单位新增/修改 Request VO")
+@Data
+public class DmsRelationOrgSaveReqVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long id;
+
+    @Schema(description = "UUID")
+    private String uuid;
+
+    @Schema(description = "单位名称")
+    private String name;
+
+    @Schema(description = "单位简称")
+    private String sortName;
+
+    @Schema(description = "单位类型")
+    private Integer rtype;
+
+    @Schema(description = "单位地址")
+    private String address;
+
+    @Schema(description = "邮政编码")
+    private String postCode;
+
+    @Schema(description = "联系电话")
+    private String phone;
+
+    @Schema(description = "电子邮箱")
+    private String email;
+
+    @Schema(description = "网址")
+    private String site;
+
+    @Schema(description = "税号/统一社会信用代码")
+    private String uniCode;
+
+    @Schema(description = "银行开户行")
+    private String bankName;
+
+    @Schema(description = "银行账号")
+    private String bankAccount;
+
+    @Schema(description = "发票地址/电话")
+    private String invoiceInfo;
+
+    @Schema(description = "发票公司名称")
+    private String invoiceName;
+
+    @Schema(description = "信用额度")
+    private Integer credit;
+
+    @Schema(description = "信用评级")
+    private Double creditLevel;
+
+    @Schema(description = "备注")
+    private String note;
+
+    @Schema(description = "使用标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "使用标识不能为空")
+    private Short useFlag;
+
+    @Schema(description = "部门id")
+    private Long deptId;
+
+}

+ 21 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/controller/admin/relationorg/vo/DmsSimpleRelationOrgRespVO.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 往来单位精简列表 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DmsSimpleRelationOrgRespVO {
+
+    @Schema(description = "ID 自增长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("ID 自增长")
+    private Long id;
+
+    @Schema(description = "单位名称")
+    @ExcelProperty("单位名称")
+    private String name;
+
+}

+ 26 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/convert/checktemplate/DmsCheckTemplateConvert.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.dms.convert.checktemplate;
+
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplateRespVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 点巡检模板检查项 Convert
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTemplateConvert {
+
+    DmsCheckTemplateConvert INSTANCE = Mappers.getMapper(DmsCheckTemplateConvert.class);
+
+    /**
+     * DoToVo
+     *
+     * @param checkTemplateItemDO 实体
+     * @return Vo
+     */
+    DmsCheckTemplateRespVO convert(DmsCheckTemplateDO checkTemplateItemDO);
+
+}

+ 51 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/convert/checktemplateitem/DmsCheckTemplateItemConvert.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.dms.convert.checktemplateitem;
+
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemRespVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 点巡检模板检查项 Convert
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTemplateItemConvert {
+
+    DmsCheckTemplateItemConvert INSTANCE = Mappers.getMapper(DmsCheckTemplateItemConvert.class);
+
+    /**
+     * saveVoToListDoList
+     *
+     * @param items           保存修改用vo集合
+     * @param checkTemplateId 检查模板id
+     * @return List<DmsCheckTemplateItemDO>
+     */
+    default List<DmsCheckTemplateItemDO> convertList(List<DmsCheckTemplateItemSaveReqVO> items, Long checkTemplateId) {
+        return CollectionUtils.convertList(items, item -> {
+            item.setCheckTemplateId(checkTemplateId);
+            return this.convert(item);
+        });
+    }
+
+    /**
+     * saveVoToDo
+     *
+     * @param checkTemplateItemSaveReqVO 保存修改用vo
+     * @return DmsCheckTemplateItemDO
+     */
+    DmsCheckTemplateItemDO convert(DmsCheckTemplateItemSaveReqVO checkTemplateItemSaveReqVO);
+
+    /**
+     * DoToRespVo
+     *
+     * @param checkTemplateItemDO 实体
+     * @return DmsCheckTemplateItemRespVO
+     */
+    DmsCheckTemplateItemRespVO DoToRespVo(DmsCheckTemplateItemDO checkTemplateItemDO);
+}

+ 166 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checkplan/DmsCheckPlanDO.java

@@ -0,0 +1,166 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checkplan;
+
+import cn.hutool.core.lang.UUID;
+import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 点巡检计划 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_plan")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckPlanDO extends TenantBaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 巡检计划名称
+     */
+    private String name;
+    /**
+     * 巡检计划模板ID
+     */
+    private Long checkTemplateId;
+    /**
+     * 巡检计划模板名称
+     */
+    private String checkTemplateName;
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+    /**
+     * 设备代码
+     */
+    private String deviceCode;
+    /**
+     * 点检项JSON配置
+     */
+    private String checkItems;
+    /**
+     * 模板分类ID
+     */
+    private Long templateClassifyId;
+    /**
+     * 模板分类名称
+     */
+    private String templateClassifyName;
+    /**
+     * 模板分类代码
+     */
+    private String templateClassifyCode;
+    /**
+     * 设备分类ID
+     */
+    private Long deviceClassifyId;
+    /**
+     * 设备分类名称
+     */
+    private String deviceClassifyName;
+    /**
+     * 设备分类代码
+     */
+    private String deviceClassifyCode;
+    /**
+     * 计划开始日期
+     */
+    private LocalDateTime startTime;
+    /**
+     * 计划结束日期
+     */
+    private LocalDateTime endTime;
+    /**
+     * 创建者ID
+     */
+    private Long creatorId;
+    /**
+     * 创建者
+     */
+    private String creatorName;
+    /**
+     * 执行者ID
+     */
+    private Long executorId;
+    /**
+     * 执行者
+     */
+    private String executorName;
+    /**
+     * 模板检查周期类型
+     */
+    private Integer checkPeriodType;
+    /**
+     * 模板检查周期执行时间值
+     */
+    private Integer checkPeriodTime;
+    /**
+     * 间隔次数
+     */
+    private Integer checkPeriodInterval;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 生成最近任务数量
+     */
+    private Integer taskNum;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+
+    /**
+     * 部门
+     */
+    private Long deptName;
+
+    public DmsCheckTaskDO buildTask(){
+        return  DmsCheckTaskDO.builder().uuid(UUID.randomUUID().toString()).deviceId(this.deviceId).deviceName(this.deviceName)
+                .deviceCode(this.deviceCode).checkTemplateId(this.checkTemplateId).checkTemplateName(this.checkTemplateName)
+                .templateClassifyId(this.templateClassifyId).templateClassifyName(this.templateClassifyName)
+                .templateClassifyCode(this.templateClassifyCode).deviceClassifyId(this.deviceClassifyId).checkPeriodType(this.checkPeriodType)
+                .deviceClassifyName(this.deviceClassifyName).deviceClassifyCode(this.deviceClassifyCode).endFlag(0)
+                .executorId(this.executorId).executorName(this.executorName).creatorId(this.creatorId).creatorName(this.creatorName)
+                .deptId(this.deptId).deptName(this.deptName).deviceCode(this.deviceCode).createTime(LocalDateTime.now())
+                .checkPlanId(this.id).checkPlanName(this.name).build();
+    }
+    public Integer oneTotal(){
+        return this.checkPeriodType*(this.checkPeriodTime+this.checkPeriodInterval);
+    }
+    public Integer executeTotal(){
+        return this.checkPeriodType*this.checkPeriodTime;
+    }
+
+}

+ 188 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktask/DmsCheckTaskDO.java

@@ -0,0 +1,188 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checktask;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.google.common.collect.Lists;
+import lombok.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 点巡检任务 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_task")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckTaskDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+    /**
+     * 设备代码
+     */
+    private String deviceCode;
+    /**
+     * 巡检计划模板ID
+     */
+    private Long checkTemplateId;
+    /**
+     * 巡检计划模板名称
+     */
+    private String checkTemplateName;
+    /**
+     * 点检项JSON配置
+     */
+    private String checkItems;
+    /**
+     * 模板分类ID
+     */
+    private Long templateClassifyId;
+    /**
+     * 模板分类名称
+     */
+    private String templateClassifyName;
+    /**
+     * 模板分类代码
+     */
+    private String templateClassifyCode;
+    /**
+     * 设备分类ID
+     */
+    private Long deviceClassifyId;
+    /**
+     * 设备分类名称
+     */
+    private String deviceClassifyName;
+    /**
+     * 设备分类代码
+     */
+    private String deviceClassifyCode;
+    /**
+     * 任务开始日期
+     */
+    private LocalDateTime startTime;
+
+    @TableField(exist = false)
+    private String startTimeStr;
+    /**
+     * 任务结束日期
+     */
+    private LocalDateTime endTime;
+
+
+    @TableField(exist = false)
+    private String endTimeStr;
+
+    /**
+     * 任务执行时间
+     */
+    private LocalDateTime executorTime;
+
+    @TableField(exist = false)
+    private String executorTimeStr;
+    /**
+     * 创建者ID
+     */
+    private Long creatorId;
+    /**
+     * 创建者
+     */
+    private String creatorName;
+    /**
+     * 执行者ID
+     */
+    private Long executorId;
+    /**
+     * 执行者
+     */
+    private String executorName;
+    /**
+     * 模板检查周期类型
+     */
+    private Integer checkPeriodType;
+    /**
+     * 任务状态
+     */
+    private Integer status;
+    /**
+     * 任务结束标识
+     * <p>
+     * 枚举 {@link TODO dms_end_flag 对应的类}
+     */
+    private Integer endFlag;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 巡检计划ID
+     */
+    private Long checkPlanId;
+    /**
+     * 巡检计划名称
+     */
+    private String checkPlanName;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+
+    /**
+     * 部门
+     */
+    private Long deptName;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private List<DmsCheckTaskItemDO> checkTaskItems = Lists.newArrayList();
+
+    public String getStartTimeStr(){
+        return Objects.isNull(this.startTime)?"": LocalDateTimeUtil.format(this.startTime,"yyyy-MM-dd HH:mm:ss");
+    }
+
+    public String getEndTimeStr(){
+        return Objects.isNull(this.endTime)?"": LocalDateTimeUtil.format(this.endTime,"yyyy-MM-dd HH:mm:ss");
+    }
+    public String getExecutorTimeStr(){
+        return Objects.isNull(this.executorTime)?"": LocalDateTimeUtil.format(this.executorTime,"yyyy-MM-dd HH:mm:ss");
+    }
+
+}

+ 75 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktaskitem/DmsCheckTaskItemDO.java

@@ -0,0 +1,75 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 点巡检任务检查项 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_task_item")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckTaskItemDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 点巡检模板ID
+     */
+    private Long checkTemplateId;
+    /**
+     * 点巡检任务ID
+     */
+    private Long checkTaskId;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 模板检查项名称
+     */
+    private String name;
+    /**
+     * 模板检查项内容
+     */
+    private String content;
+    /**
+     * 图片
+     */
+    private String imgs;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 模板检查项ID
+     */
+    private Long checkTemplateItemId;
+    /**
+     * 模板检查项名称
+     */
+    private String checkTemplateItemName;
+    /**
+     * 显示序列
+     */
+    private Integer orderNum;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+
+}

+ 74 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplate/DmsCheckTemplateDO.java

@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 点巡检模板 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_template")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckTemplateDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 模板名称
+     */
+    private String name;
+    /**
+     * 点检项JSON配置
+     */
+    private String checkItems;
+    /**
+     * 模板分类ID
+     */
+    private Long classifyId;
+    /**
+     * 模板分类名称
+     */
+    private String classifyName;
+    /**
+     * 设备分类ID
+     */
+    private Long deviceClassifyId;
+    /**
+     * 设备分类名称
+     */
+    private String deviceClassifyName;
+    /**
+     * 模板类型
+     */
+    private Integer checkTemplateType;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+}

+ 72 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplateclassify/DmsCheckTemplateClassifyDO.java

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 点巡检模板分类 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_template_classify")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckTemplateClassifyDO extends BaseDO {
+
+    public static final Long PARENT_ID_ROOT = 0L;
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 设备设施分类名称
+     */
+    private String name;
+    /**
+     * 描述
+     */
+    private String note;
+    /**
+     * 父设备设施分类ID
+     */
+    private Long parentId;
+    /**
+     * 上级分类名称
+     */
+    private String parentName;
+    /**
+     * 父子级联代码
+     */
+    private String pcode;
+    /**
+     * 分类级别 从1开始
+     */
+    private Integer level;
+    /**
+     * 显示序列 从小到大
+     */
+    private Integer orderNum;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+}

+ 66 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/checktemplateitem/DmsCheckTemplateItemDO.java

@@ -0,0 +1,66 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem;
+
+import cn.hutool.core.lang.UUID;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 点巡检模板检查项 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_check_template_item")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsCheckTemplateItemDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 点巡检模板ID
+     */
+    private Long checkTemplateId;
+
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 模板检查项名称
+     */
+    private String name;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 显示序列
+     */
+    private Integer orderNum;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+
+    public DmsCheckTaskItemDO buildCheckTaskItem(){
+        DmsCheckTaskItemDO checkTaskItemDO  = DmsCheckTaskItemDO.builder().checkTemplateId(this.checkTemplateId).uuid(UUID.randomUUID().toString()).name(this.name)
+                .note(this.note).checkTemplateItemId(this.id).checkTemplateItemName(this.name).orderNum(this.orderNum).build();
+        checkTaskItemDO.setCreateTime(LocalDateTime.now());
+        return checkTaskItemDO;
+    }
+}

+ 267 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/device/DmsDeviceDO.java

@@ -0,0 +1,267 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.device;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDate;
+
+/**
+ * 设备管理 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("dms_device")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsDeviceDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 设备设施名称
+     */
+    private String name;
+    /**
+     * 设备描述
+     */
+    private String ddesc;
+    /**
+     * 设备分类ID
+     */
+    private Long cid;
+    /**
+     * 设备分类名称
+     */
+    private String cname;
+    /**
+     * 父子级联代码
+     */
+    private String pcode;
+    /**
+     * 设备二维码
+     */
+    private String qrCode;
+    /**
+     * 作业场所ID
+     */
+    private Long workPlaceId;
+    /**
+     * 作业场所
+     */
+    private String workPlaceName;
+    /**
+     * 所在ID
+     */
+    private Long partId;
+    /**
+     * 所在部位
+     */
+    private String partName;
+    /**
+     * 投入使用时间
+     */
+    private LocalDate startDate;
+    /**
+     * 结束时间
+     */
+    private LocalDate endDate;
+    /**
+     * 设备图片 分号间隔
+     */
+    private String imgs;
+    /**
+     * 设备型号
+     */
+    private String deviceModel;
+    /**
+     * 特种设备标识
+     * <p>
+     * 枚举 {@link TODO special_flag 对应的类}
+     */
+    private Integer specialFlag;
+    /**
+     * 厂内编号
+     */
+    private String factoryNo;
+    /**
+     * 制造单位
+     */
+    private String manufactureCompany;
+    /**
+     * 安装单位
+     */
+    private String installCompany;
+    /**
+     * 设备管理员
+     */
+    private String managerName;
+    /**
+     * 运行状态
+     * <p>
+     * 枚举 {@link TODO run_status 对应的类}
+     */
+    private Integer runStatus;
+    /**
+     * 是否完成注册标识
+     * <p>
+     * 枚举 {@link TODO register_flag 对应的类}
+     */
+    private Integer registerFlag;
+    /**
+     * 注册登记证编号
+     */
+    private String registerNo;
+    /**
+     * 三同时资料
+     */
+    private String datums;
+    /**
+     * 附件
+     */
+    private String files;
+    /**
+     * 风险分析对象编码
+     */
+    private String riskNo;
+    /**
+     * 检验日期
+     */
+    private LocalDate checkoutDate;
+    /**
+     * 检验单位Id
+     */
+    private Long checkoutCompanyId;
+    /**
+     * 检验单位
+     */
+    private String checkoutCompany;
+    /**
+     * 检验合格证号
+     */
+    private String checkoutNo;
+    /**
+     * 检验附件
+     */
+    private String checkoutFiles;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 地图坐标经度
+     */
+    private Double lng;
+    /**
+     * 地图坐标纬度
+     */
+    private Double lat;
+    /**
+     * 设备规格
+     */
+    private String deviceSpecification;
+    /**
+     * 设备管理员ID
+     */
+    private Long managerId;
+    /**
+     * 安装单位ID
+     */
+    private Long installCompanyId;
+    /**
+     * 生产厂商ID
+     */
+    private Long manufactureCompanyId;
+    /**
+     * 投入使用日期
+     */
+    private LocalDate useDate;
+    /**
+     * 设备状态
+     */
+    private Integer status;
+    /**
+     * 分类父子级联代码
+     */
+    private String classifyCode;
+    /**
+     * 设备备件在库状态
+     * <p>
+     * 枚举 {@link TODO dms_store_status 对应的类}
+     */
+    private Integer storeStatus;
+    /**
+     * 安装位置
+     */
+    private String positionName;
+    /**
+     * 安装位置ID
+     */
+    private Long positionId;
+    /**
+     * 生命周期结束标识
+     * <p>
+     * 枚举 {@link TODO dms_end_flag 对应的类}
+     */
+    private Integer endFlag;
+    /**
+     * 设备描述
+     */
+    private String dcDesc;
+    /**
+     * 设备分类ID
+     */
+    private Long classifyId;
+    /**
+     * 设备管理员
+     */
+    private String manager;
+    /**
+     * 固定资产编码(唯一性)
+     */
+    private String fixedAssetsCode;
+    /**
+     * 设备编码
+     */
+    private String deviceCode;
+    /**
+     * 维保手册 Json结构
+     */
+    private String manuals;
+    /**
+     * 合格证
+     */
+    private String certificates;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+    /**
+     * 部门
+     */
+    private String deptName;
+
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+}

+ 62 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/deviceattribute/DmsDeviceAttributeDO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 设备属性 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_device_attribute")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsDeviceAttributeDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 设备ID
+     */
+    private Long did;
+    /**
+     * 设备属性名称
+     */
+    private String name;
+    /**
+     * 设备属性值
+     */
+    private String value;
+    /**
+     * 设备属性描述
+     */
+    private String adesc;
+    /**
+     * 显示序列
+     */
+    private Integer orderNum;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+}

+ 76 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/deviceclassify/DmsDeviceClassifyDO.java

@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 设备分类 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_device_classify")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsDeviceClassifyDO extends BaseDO {
+
+    public static final Long PARENT_ID_ROOT = 0L;
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 设备设施分类名称
+     */
+    private String name;
+    /**
+     * 描述
+     */
+    private String note;
+    /**
+     * 父分类ID
+     */
+    private Long parentId;
+    /**
+     * 父分类名称
+     */
+    private String parentName;
+    /**
+     * 维保标识
+     * <p>
+     * 枚举 {@link TODO maintain_flag 对应的类}
+     */
+    private Integer maintainFlag;
+    /**
+     * 动静标识
+     * <p>
+     * 枚举 {@link TODO static_flag 对应的类}
+     */
+    private Integer staticFlag;
+    /**
+     * 显示序列 从小到大
+     */
+    private Integer orderNum;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门 ID
+     */
+    private Long deptId;
+}

+ 308 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/devicerepair/DmsDeviceRepairDO.java

@@ -0,0 +1,308 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.devicerepair;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+
+/**
+ * 设备报修 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_device_repair")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsDeviceRepairDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 报修主题
+     */
+    private String title;
+    /**
+     * 报修内容
+     */
+    private String content;
+    /**
+     * 报修图片
+     */
+    private String imgs;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 任务ID
+     */
+    private Long checkTaskId;
+    /**
+     * 任务检查项ID
+     */
+    private Long checkTaskItemId;
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+    /**
+     * 设备代码
+     */
+    private String deviceCode;
+    /**
+     * 报修人ID
+     */
+    private Long reportorId;
+    /**
+     * 报修人姓名
+     */
+    private String reportorName;
+    /**
+     * 报修内容
+     */
+    private String reportContent;
+    /**
+     * 报修图片
+     */
+    private String reportImgs;
+    /**
+     * 报修开始时间
+     */
+    private LocalDateTime reportStartTime;
+    /**
+     * 报修结束时间
+     */
+    private LocalDateTime reportEndTime;
+    /**
+     * 决策者(维修部负责人)ID
+     */
+    private Long deciderId;
+    /**
+     * 决策者(维修部负责人)姓名
+     */
+    private String deciderName;
+    /**
+     * 决策内容
+     */
+    private String decideContent;
+    /**
+     * 决策图片
+     */
+    private String decideImgs;
+    /**
+     * 决策开始时间
+     */
+    private LocalDateTime decideStartTime;
+    /**
+     * 决策结束时间
+     */
+    private LocalDateTime decideEndTime;
+    /**
+     * 维修组ID
+     */
+    private Long maintainOrgId;
+    /**
+     * 维修组
+     */
+    private String maintainOrgName;
+    /**
+     * 维修组代码
+     */
+    private String maintainOrgCode;
+    /**
+     * 维修工ID
+     */
+    private Long maintainerId;
+    /**
+     * 维修工姓名
+     */
+    private String maintainerName;
+    /**
+     * 维修内容
+     */
+    private String maintainContent;
+    /**
+     * 维修图片
+     */
+    private String maintainImgs;
+    /**
+     * 维修开始时间
+     */
+    private LocalDateTime maintainStartTime;
+    /**
+     * 维修结束时间
+     */
+    private LocalDateTime maintainEndTime;
+    /**
+     * 维修流转详情
+     */
+    private String maintainFlow;
+    /**
+     * 维修流转次数
+     */
+    private String maintainNum;
+    /**
+     * 确认者ID
+     */
+    private Long affirmantId;
+    /**
+     * 确认者姓名
+     */
+    private String affirmantName;
+    /**
+     * 确认内容
+     */
+    private String affirmContent;
+    /**
+     * 确认图片
+     */
+    private String affirmImgs;
+    /**
+     * 确认开始时间
+     */
+    private LocalDateTime affirmStartTime;
+    /**
+     * 确认结束时间
+     */
+    private LocalDateTime affirmEndTime;
+    /**
+     * 报修开始日期
+     */
+    private LocalDateTime startTime;
+    /**
+     * 报修结束日期
+     */
+    private LocalDateTime endTime;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 报修生命周期状态
+     * <p>
+     * 枚举 {@link TODO device_repair_status 对应的类}
+     */
+    private Integer status;
+    /**
+     * 流转者ID
+     */
+    private Long transferId;
+    /**
+     * 流转者姓名
+     */
+    private String transferName;
+    /**
+     * 流转内容
+     */
+    private String transferContent;
+    /**
+     * 流转图片
+     */
+    private String transferImgs;
+    /**
+     * 流转开始时间
+     */
+    private LocalDateTime transferStartTime;
+    /**
+     * 流转结束时间
+     */
+    private LocalDateTime transferEndTime;
+    /**
+     * 报修人联系方式
+     */
+    private String reportorTel;
+    /**
+     * 紧急程度
+     */
+    private String repairPress;
+    /**
+     * 故障类型
+     */
+    private String repairReason;
+    /**
+     * 维修单号
+     */
+    private String repairCode;
+    /**
+     * 维修记录
+     */
+    private String repairRecords;
+    /**
+     * 主修人变更记录
+     */
+    private String mainRepairHistory;
+    /**
+     * 流转信息
+     */
+    private String flowRecords;
+    /**
+     * 维修内容补充
+     */
+    private Double repairFee;
+    /**
+     * 维修级别
+     */
+    private Short repairLevel;
+    /**
+     * 维修类型
+     */
+    private Short repairType;
+    /**
+     * 设备位置
+     */
+    private String repairPosition;
+    /**
+     * 故障原因
+     */
+    private Short repairCausation;
+    /**
+     * 結束标识
+     * <p>
+     * 枚举 {@link TODO dms_end_flag 对应的类}
+     */
+    private Integer endFlag;
+    /**
+     * 是否停机
+     * <p>
+     * 枚举 {@link TODO dms_stop_flag 对应的类}
+     */
+    private Short stopFlag;
+    /**
+     * 维修时是否停机
+     * <p>
+     * 枚举 {@link TODO dms_stop_flag 对应的类}
+     */
+    private Short maintainStopFlag;
+    /**
+     * 是否替换备件
+     * <p>
+     * 枚举 {@link TODO dms_parts_flag 对应的类}
+     */
+    private Short partsFlag;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+}

+ 91 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/relationorg/DmsRelationContractDO.java

@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.relationorg;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 往来单位联系人 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_relation_contract")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsRelationContractDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 联系人名称
+     */
+    private String name;
+    /**
+     * 联系人职位
+     */
+    private String post;
+    /**
+     * 联系人地址
+     */
+    private String address;
+    /**
+     * 邮政编码
+     */
+    private String postCode;
+    /**
+     * 联系电话
+     */
+    private String phone;
+    /**
+     * 传真号码
+     */
+    private String fax;
+    /**
+     * 电子邮箱
+     */
+    private String email;
+    /**
+     * 微信号
+     */
+    private String wx;
+    /**
+     * 微信号
+     */
+    private String qq;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 来往单位ID
+     */
+    private Long orgId;
+    /**
+     * 来往单位
+     */
+    private String orgName;
+
+}

+ 109 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/dataobject/relationorg/DmsRelationOrgDO.java

@@ -0,0 +1,109 @@
+package cn.iocoder.yudao.module.dms.dal.dataobject.relationorg;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 往来单位 DO
+ *
+ * @author dzx
+ */
+@TableName("dms_relation_org")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DmsRelationOrgDO extends BaseDO {
+
+    /**
+     * ID 自增长
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * UUID
+     */
+    private String uuid;
+    /**
+     * 单位名称
+     */
+    private String name;
+    /**
+     * 单位简称
+     */
+    private String sortName;
+    /**
+     * 单位类型
+     * <p>
+     * 枚举 {@link TODO dms_relation_org_type 对应的类}
+     */
+    private Integer rtype;
+    /**
+     * 单位地址
+     */
+    private String address;
+    /**
+     * 邮政编码
+     */
+    private String postCode;
+    /**
+     * 联系电话
+     */
+    private String phone;
+    /**
+     * 电子邮箱
+     */
+    private String email;
+    /**
+     * 网址
+     */
+    private String site;
+    /**
+     * 税号/统一社会信用代码
+     */
+    private String uniCode;
+    /**
+     * 银行开户行
+     */
+    private String bankName;
+    /**
+     * 银行账号
+     */
+    private String bankAccount;
+    /**
+     * 发票地址/电话
+     */
+    private String invoiceInfo;
+    /**
+     * 发票公司名称
+     */
+    private String invoiceName;
+    /**
+     * 信用额度
+     */
+    private Integer credit;
+    /**
+     * 信用评级
+     */
+    private Double creditLevel;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 使用标识
+     * <p>
+     * 枚举 {@link TODO use_flag 对应的类}
+     */
+    private Short useFlag;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+}

+ 50 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checkplan/DmsCheckPlanMapper.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checkplan;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checkplan.DmsCheckPlanDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 点巡检计划 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckPlanMapper extends BaseMapperX<DmsCheckPlanDO> {
+
+    default PageResult<DmsCheckPlanDO> selectPage(DmsCheckPlanPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsCheckPlanDO>()
+                .likeIfPresent(DmsCheckPlanDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckPlanDO::getCheckTemplateId, reqVO.getCheckTemplateId())
+                .likeIfPresent(DmsCheckPlanDO::getCheckTemplateName, reqVO.getCheckTemplateName())
+                .eqIfPresent(DmsCheckPlanDO::getDeviceId, reqVO.getDeviceId())
+                .likeIfPresent(DmsCheckPlanDO::getDeviceName, reqVO.getDeviceName())
+                .eqIfPresent(DmsCheckPlanDO::getDeviceCode, reqVO.getDeviceCode())
+                .eqIfPresent(DmsCheckPlanDO::getCheckItems, reqVO.getCheckItems())
+                .eqIfPresent(DmsCheckPlanDO::getTemplateClassifyId, reqVO.getTemplateClassifyId())
+                .likeIfPresent(DmsCheckPlanDO::getTemplateClassifyName, reqVO.getTemplateClassifyName())
+                .eqIfPresent(DmsCheckPlanDO::getTemplateClassifyCode, reqVO.getTemplateClassifyCode())
+                .eqIfPresent(DmsCheckPlanDO::getDeviceClassifyId, reqVO.getDeviceClassifyId())
+                .likeIfPresent(DmsCheckPlanDO::getDeviceClassifyName, reqVO.getDeviceClassifyName())
+                .eqIfPresent(DmsCheckPlanDO::getDeviceClassifyCode, reqVO.getDeviceClassifyCode())
+                .betweenIfPresent(DmsCheckPlanDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(DmsCheckPlanDO::getEndTime, reqVO.getEndTime())
+                .eqIfPresent(DmsCheckPlanDO::getCreatorId, reqVO.getCreatorId())
+                .likeIfPresent(DmsCheckPlanDO::getCreatorName, reqVO.getCreatorName())
+                .eqIfPresent(DmsCheckPlanDO::getExecutorId, reqVO.getExecutorId())
+                .likeIfPresent(DmsCheckPlanDO::getExecutorName, reqVO.getExecutorName())
+                .eqIfPresent(DmsCheckPlanDO::getCheckPeriodType, reqVO.getCheckPeriodType())
+                .betweenIfPresent(DmsCheckPlanDO::getCheckPeriodTime, reqVO.getCheckPeriodTime())
+                .eqIfPresent(DmsCheckPlanDO::getCheckPeriodInterval, reqVO.getCheckPeriodInterval())
+                .eqIfPresent(DmsCheckPlanDO::getNote, reqVO.getNote())
+                .betweenIfPresent(DmsCheckPlanDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckPlanDO::getTaskNum, reqVO.getTaskNum())
+                .eqIfPresent(DmsCheckPlanDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsCheckPlanDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckPlanDO::getId));
+    }
+
+}

+ 51 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktask/DmsCheckTaskMapper.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checktask;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 点巡检任务 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTaskMapper extends BaseMapperX<DmsCheckTaskDO> {
+
+    default PageResult<DmsCheckTaskDO> selectPage(DmsCheckTaskPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsCheckTaskDO>()
+                .eqIfPresent(DmsCheckTaskDO::getDeviceId, reqVO.getDeviceId())
+                .likeIfPresent(DmsCheckTaskDO::getDeviceName, reqVO.getDeviceName())
+                .eqIfPresent(DmsCheckTaskDO::getDeviceCode, reqVO.getDeviceCode())
+                .eqIfPresent(DmsCheckTaskDO::getCheckTemplateId, reqVO.getCheckTemplateId())
+                .likeIfPresent(DmsCheckTaskDO::getCheckTemplateName, reqVO.getCheckTemplateName())
+                .eqIfPresent(DmsCheckTaskDO::getCheckItems, reqVO.getCheckItems())
+                .eqIfPresent(DmsCheckTaskDO::getTemplateClassifyId, reqVO.getTemplateClassifyId())
+                .likeIfPresent(DmsCheckTaskDO::getTemplateClassifyName, reqVO.getTemplateClassifyName())
+                .eqIfPresent(DmsCheckTaskDO::getTemplateClassifyCode, reqVO.getTemplateClassifyCode())
+                .eqIfPresent(DmsCheckTaskDO::getDeviceClassifyId, reqVO.getDeviceClassifyId())
+                .likeIfPresent(DmsCheckTaskDO::getDeviceClassifyName, reqVO.getDeviceClassifyName())
+                .eqIfPresent(DmsCheckTaskDO::getDeviceClassifyCode, reqVO.getDeviceClassifyCode())
+                .betweenIfPresent(DmsCheckTaskDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(DmsCheckTaskDO::getEndTime, reqVO.getEndTime())
+                .betweenIfPresent(DmsCheckTaskDO::getExecutorTime, reqVO.getExecutorTime())
+                .eqIfPresent(DmsCheckTaskDO::getCreatorId, reqVO.getCreatorId())
+                .likeIfPresent(DmsCheckTaskDO::getCreatorName, reqVO.getCreatorName())
+                .eqIfPresent(DmsCheckTaskDO::getExecutorId, reqVO.getExecutorId())
+                .likeIfPresent(DmsCheckTaskDO::getExecutorName, reqVO.getExecutorName())
+                .eqIfPresent(DmsCheckTaskDO::getCheckPeriodType, reqVO.getCheckPeriodType())
+                .eqIfPresent(DmsCheckTaskDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(DmsCheckTaskDO::getEndFlag, reqVO.getEndFlag())
+                .eqIfPresent(DmsCheckTaskDO::getNote, reqVO.getNote())
+                .betweenIfPresent(DmsCheckTaskDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTaskDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsCheckTaskDO::getCheckPlanId, reqVO.getCheckPlanId())
+                .likeIfPresent(DmsCheckTaskDO::getCheckPlanName, reqVO.getCheckPlanName())
+                .eqIfPresent(DmsCheckTaskDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTaskDO::getStartTime));
+    }
+
+}

+ 54 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktaskitem/DmsCheckTaskItemMapper.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checktaskitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 点巡检任务检查项 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTaskItemMapper extends BaseMapperX<DmsCheckTaskItemDO> {
+
+    default PageResult<DmsCheckTaskItemDO> selectPage(DmsCheckTaskItemPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsCheckTaskItemDO>()
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTemplateId, reqVO.getCheckTemplateId())
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTaskId, reqVO.getCheckTaskId())
+                .eqIfPresent(DmsCheckTaskItemDO::getUuid, reqVO.getUuid())
+                .likeIfPresent(DmsCheckTaskItemDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTaskItemDO::getContent, reqVO.getContent())
+                .eqIfPresent(DmsCheckTaskItemDO::getImgs, reqVO.getImgs())
+                .eqIfPresent(DmsCheckTaskItemDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTemplateItemId, reqVO.getCheckTemplateItemId())
+                .likeIfPresent(DmsCheckTaskItemDO::getCheckTemplateItemName, reqVO.getCheckTemplateItemName())
+                .eqIfPresent(DmsCheckTaskItemDO::getOrderNum, reqVO.getOrderNum())
+                .betweenIfPresent(DmsCheckTaskItemDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTaskItemDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTaskItemDO::getId));
+    }
+
+    default List<DmsCheckTaskItemDO> selectList(DmsCheckTaskItemPageReqVO reqVO) {
+        return selectList( new LambdaQueryWrapperX<DmsCheckTaskItemDO>()
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTemplateId, reqVO.getCheckTemplateId())
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTaskId, reqVO.getCheckTaskId())
+                .eqIfPresent(DmsCheckTaskItemDO::getUuid, reqVO.getUuid())
+                .likeIfPresent(DmsCheckTaskItemDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTaskItemDO::getContent, reqVO.getContent())
+                .eqIfPresent(DmsCheckTaskItemDO::getImgs, reqVO.getImgs())
+                .eqIfPresent(DmsCheckTaskItemDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsCheckTaskItemDO::getCheckTemplateItemId, reqVO.getCheckTemplateItemId())
+                .likeIfPresent(DmsCheckTaskItemDO::getCheckTemplateItemName, reqVO.getCheckTemplateItemName())
+                .eqIfPresent(DmsCheckTaskItemDO::getOrderNum, reqVO.getOrderNum())
+                .betweenIfPresent(DmsCheckTaskItemDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTaskItemDO::getUseFlag, reqVO.getUseFlag())
+                .orderByAsc(DmsCheckTaskItemDO::getOrderNum));
+    }
+
+}

+ 52 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplate/DmsCheckTemplateMapper.java

@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checktemplate;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplatePageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 点巡检模板 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTemplateMapper extends BaseMapperX<DmsCheckTemplateDO> {
+
+    default PageResult<DmsCheckTemplateDO> selectPage(DmsCheckTemplatePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsCheckTemplateDO>()
+                .likeIfPresent(DmsCheckTemplateDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTemplateDO::getCheckItems, reqVO.getCheckItems())
+                .eqIfPresent(DmsCheckTemplateDO::getClassifyId, reqVO.getClassifyId())
+                .likeIfPresent(DmsCheckTemplateDO::getClassifyName, reqVO.getClassifyName())
+                .eqIfPresent(DmsCheckTemplateDO::getDeviceClassifyId, reqVO.getDeviceClassifyId())
+                .likeIfPresent(DmsCheckTemplateDO::getDeviceClassifyName, reqVO.getDeviceClassifyName())
+                .eqIfPresent(DmsCheckTemplateDO::getCheckTemplateType, reqVO.getCheckTemplateType())
+                .eqIfPresent(DmsCheckTemplateDO::getNote, reqVO.getNote())
+                .betweenIfPresent(DmsCheckTemplateDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTemplateDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsCheckTemplateDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTemplateDO::getId));
+    }
+
+    default List<DmsCheckTemplateDO> selectList(DmsCheckTemplatePageReqVO reqVO) {
+        return selectList( new LambdaQueryWrapperX<DmsCheckTemplateDO>()
+                .likeIfPresent(DmsCheckTemplateDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTemplateDO::getCheckItems, reqVO.getCheckItems())
+                .eqIfPresent(DmsCheckTemplateDO::getClassifyId, reqVO.getClassifyId())
+                .likeIfPresent(DmsCheckTemplateDO::getClassifyName, reqVO.getClassifyName())
+                .eqIfPresent(DmsCheckTemplateDO::getDeviceClassifyId, reqVO.getDeviceClassifyId())
+                .likeIfPresent(DmsCheckTemplateDO::getDeviceClassifyName, reqVO.getDeviceClassifyName())
+                .eqIfPresent(DmsCheckTemplateDO::getCheckTemplateType, reqVO.getCheckTemplateType())
+                .eqIfPresent(DmsCheckTemplateDO::getNote, reqVO.getNote())
+                .betweenIfPresent(DmsCheckTemplateDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTemplateDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsCheckTemplateDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTemplateDO::getId));
+    }
+
+}

+ 57 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplateclassify/DmsCheckTemplateClassifyMapper.java

@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateclassify;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify.DmsCheckTemplateClassifyDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 点巡检模板分类 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTemplateClassifyMapper extends BaseMapperX<DmsCheckTemplateClassifyDO> {
+
+    default List<DmsCheckTemplateClassifyDO> selectList(DmsCheckTemplateClassifyListReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<DmsCheckTemplateClassifyDO>()
+                .likeIfPresent(DmsCheckTemplateClassifyDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getParentId, reqVO.getParentId())
+                .likeIfPresent(DmsCheckTemplateClassifyDO::getParentName, reqVO.getParentName())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getPcode, reqVO.getPcode())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getLevel, reqVO.getLevel())
+                .betweenIfPresent(DmsCheckTemplateClassifyDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getOrderNum, reqVO.getOrderNum())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTemplateClassifyDO::getId));
+    }
+
+    default DmsCheckTemplateClassifyDO selectByParentIdAndName(Long parentId, String name) {
+        return selectOne(DmsCheckTemplateClassifyDO::getParentId, parentId, DmsCheckTemplateClassifyDO::getName, name);
+    }
+
+    default Long selectCountByParentId(Long parentId) {
+        return selectCount(DmsCheckTemplateClassifyDO::getParentId, parentId);
+    }
+
+    /**
+     * 获得点巡检模板分类精简列表
+     *
+     * @return 点巡检模板分类列表
+     */
+    default List<DmsCheckTemplateClassifyDO> selectSimpleList() {
+        return selectList(new LambdaQueryWrapperX<DmsCheckTemplateClassifyDO>()
+                .eqIfPresent(DmsCheckTemplateClassifyDO::getUseFlag, 1) // TODO 暂时写死,等待确认枚举
+                .orderByDesc(DmsCheckTemplateClassifyDO::getId)
+                .select(DmsCheckTemplateClassifyDO::getId,
+                        DmsCheckTemplateClassifyDO::getName,
+                        DmsCheckTemplateClassifyDO::getParentId
+                )
+        );
+    }
+}

+ 33 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/checktemplateitem/DmsCheckTemplateItemMapper.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 点巡检模板检查项 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsCheckTemplateItemMapper extends BaseMapperX<DmsCheckTemplateItemDO> {
+
+    default PageResult<DmsCheckTemplateItemDO> selectPage(DmsCheckTemplateItemPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsCheckTemplateItemDO>()
+                .eqIfPresent(DmsCheckTemplateItemDO::getCheckTemplateId, reqVO.getCheckTemplateId())
+                .eqIfPresent(DmsCheckTemplateItemDO::getUuid, reqVO.getUuid())
+                .likeIfPresent(DmsCheckTemplateItemDO::getName, reqVO.getName())
+                .eqIfPresent(DmsCheckTemplateItemDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsCheckTemplateItemDO::getOrderNum, reqVO.getOrderNum())
+                .betweenIfPresent(DmsCheckTemplateItemDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsCheckTemplateItemDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsCheckTemplateItemDO::getId));
+    }
+
+    default void deleteByCheckTemplateId(Long checkTemplateId) {
+        delete(DmsCheckTemplateItemDO::getCheckTemplateId, checkTemplateId);
+    }
+}

+ 76 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/device/DmsDeviceMapper.java

@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.device;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDevicePageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 设备管理 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface DmsDeviceMapper extends BaseMapperX<DmsDeviceDO> {
+
+    default PageResult<DmsDeviceDO> selectPage(DmsDevicePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsDeviceDO>()
+                .eqIfPresent(DmsDeviceDO::getUuid, reqVO.getUuid())
+                .likeIfPresent(DmsDeviceDO::getName, reqVO.getName())
+                .eqIfPresent(DmsDeviceDO::getDdesc, reqVO.getDdesc())
+                .eqIfPresent(DmsDeviceDO::getCid, reqVO.getCid())
+                .likeIfPresent(DmsDeviceDO::getCname, reqVO.getCname())
+                .eqIfPresent(DmsDeviceDO::getPcode, reqVO.getPcode())
+                .eqIfPresent(DmsDeviceDO::getQrCode, reqVO.getQrCode())
+                .eqIfPresent(DmsDeviceDO::getWorkPlaceId, reqVO.getWorkPlaceId())
+                .likeIfPresent(DmsDeviceDO::getWorkPlaceName, reqVO.getWorkPlaceName())
+                .eqIfPresent(DmsDeviceDO::getPartId, reqVO.getPartId())
+                .likeIfPresent(DmsDeviceDO::getPartName, reqVO.getPartName())
+                .betweenIfPresent(DmsDeviceDO::getStartDate, reqVO.getStartDate())
+                .betweenIfPresent(DmsDeviceDO::getEndDate, reqVO.getEndDate())
+                .eqIfPresent(DmsDeviceDO::getImgs, reqVO.getImgs())
+                .eqIfPresent(DmsDeviceDO::getDeviceModel, reqVO.getDeviceModel())
+                .eqIfPresent(DmsDeviceDO::getSpecialFlag, reqVO.getSpecialFlag())
+                .eqIfPresent(DmsDeviceDO::getFactoryNo, reqVO.getFactoryNo())
+                .eqIfPresent(DmsDeviceDO::getManufactureCompany, reqVO.getManufactureCompany())
+                .eqIfPresent(DmsDeviceDO::getInstallCompany, reqVO.getInstallCompany())
+                .likeIfPresent(DmsDeviceDO::getManagerName, reqVO.getManagerName())
+                .eqIfPresent(DmsDeviceDO::getRunStatus, reqVO.getRunStatus())
+                .eqIfPresent(DmsDeviceDO::getRegisterFlag, reqVO.getRegisterFlag())
+                .eqIfPresent(DmsDeviceDO::getRegisterNo, reqVO.getRegisterNo())
+                .eqIfPresent(DmsDeviceDO::getDatums, reqVO.getDatums())
+                .eqIfPresent(DmsDeviceDO::getFiles, reqVO.getFiles())
+                .eqIfPresent(DmsDeviceDO::getRiskNo, reqVO.getRiskNo())
+                .betweenIfPresent(DmsDeviceDO::getCheckoutDate, reqVO.getCheckoutDate())
+                .eqIfPresent(DmsDeviceDO::getCheckoutCompany, reqVO.getCheckoutCompany())
+                .eqIfPresent(DmsDeviceDO::getCheckoutNo, reqVO.getCheckoutNo())
+                .eqIfPresent(DmsDeviceDO::getCheckoutFiles, reqVO.getCheckoutFiles())
+                .eqIfPresent(DmsDeviceDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsDeviceDO::getLng, reqVO.getLng())
+                .eqIfPresent(DmsDeviceDO::getLat, reqVO.getLat())
+                .eqIfPresent(DmsDeviceDO::getDeviceSpecification, reqVO.getDeviceSpecification())
+                .eqIfPresent(DmsDeviceDO::getManagerId, reqVO.getManagerId())
+                .eqIfPresent(DmsDeviceDO::getInstallCompanyId, reqVO.getInstallCompanyId())
+                .eqIfPresent(DmsDeviceDO::getManufactureCompanyId, reqVO.getManufactureCompanyId())
+                .betweenIfPresent(DmsDeviceDO::getUseDate, reqVO.getUseDate())
+                .eqIfPresent(DmsDeviceDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(DmsDeviceDO::getClassifyCode, reqVO.getClassifyCode())
+                .eqIfPresent(DmsDeviceDO::getStoreStatus, reqVO.getStoreStatus())
+                .likeIfPresent(DmsDeviceDO::getPositionName, reqVO.getPositionName())
+                .eqIfPresent(DmsDeviceDO::getPositionId, reqVO.getPositionId())
+                .eqIfPresent(DmsDeviceDO::getEndFlag, reqVO.getEndFlag())
+                .eqIfPresent(DmsDeviceDO::getDcDesc, reqVO.getDcDesc())
+                .eqIfPresent(DmsDeviceDO::getClassifyId, reqVO.getClassifyId())
+                .eqIfPresent(DmsDeviceDO::getManager, reqVO.getManager())
+                .eqIfPresent(DmsDeviceDO::getFixedAssetsCode, reqVO.getFixedAssetsCode())
+                .eqIfPresent(DmsDeviceDO::getDeviceCode, reqVO.getDeviceCode())
+                .eqIfPresent(DmsDeviceDO::getManuals, reqVO.getManuals())
+                .eqIfPresent(DmsDeviceDO::getCertificates, reqVO.getCertificates())
+                .betweenIfPresent(DmsDeviceDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsDeviceDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsDeviceDO::getId));
+    }
+
+}

+ 31 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/deviceattribute/DmsDeviceAttributeMapper.java

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.deviceattribute;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributePageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute.DmsDeviceAttributeDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 设备属性 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsDeviceAttributeMapper extends BaseMapperX<DmsDeviceAttributeDO> {
+
+    default PageResult<DmsDeviceAttributeDO> selectPage(DmsDeviceAttributePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsDeviceAttributeDO>()
+                .eqIfPresent(DmsDeviceAttributeDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsDeviceAttributeDO::getDid, reqVO.getDid())
+                .likeIfPresent(DmsDeviceAttributeDO::getName, reqVO.getName())
+                .eqIfPresent(DmsDeviceAttributeDO::getValue, reqVO.getValue())
+                .eqIfPresent(DmsDeviceAttributeDO::getAdesc, reqVO.getAdesc())
+                .eqIfPresent(DmsDeviceAttributeDO::getOrderNum, reqVO.getOrderNum())
+                .betweenIfPresent(DmsDeviceAttributeDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsDeviceAttributeDO::getUseFlag, reqVO.getUseFlag())
+                .orderByDesc(DmsDeviceAttributeDO::getId));
+    }
+
+}

+ 63 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/deviceclassify/DmsDeviceClassifyMapper.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.deviceclassify;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify.DmsDeviceClassifyDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 设备分类 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsDeviceClassifyMapper extends BaseMapperX<DmsDeviceClassifyDO> {
+
+    default List<DmsDeviceClassifyDO> selectList(DmsDeviceClassifyListReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<DmsDeviceClassifyDO>()
+                .likeIfPresent(DmsDeviceClassifyDO::getName, reqVO.getName())
+                .eqIfPresent(DmsDeviceClassifyDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsDeviceClassifyDO::getParentId, reqVO.getParentId())
+                .likeIfPresent(DmsDeviceClassifyDO::getParentName, reqVO.getParentName())
+                .eqIfPresent(DmsDeviceClassifyDO::getUuid, reqVO.getUuid())
+                .orderByAsc(DmsDeviceClassifyDO::getOrderNum)
+                .select(DmsDeviceClassifyDO::getId,
+                        DmsDeviceClassifyDO::getName,
+                        DmsDeviceClassifyDO::getNote,
+                        DmsDeviceClassifyDO::getParentId,
+                        DmsDeviceClassifyDO::getParentName,
+                        DmsDeviceClassifyDO::getMaintainFlag,
+                        DmsDeviceClassifyDO::getStaticFlag,
+                        DmsDeviceClassifyDO::getOrderNum,
+                        DmsDeviceClassifyDO::getCreateTime,
+                        DmsDeviceClassifyDO::getUseFlag
+                ));
+    }
+
+    default DmsDeviceClassifyDO selectByParentIdAndName(Long parentId, String name) {
+        return selectOne(DmsDeviceClassifyDO::getParentId, parentId, DmsDeviceClassifyDO::getName, name);
+    }
+
+    default Long selectCountByParentId(Long parentId) {
+        return selectCount(DmsDeviceClassifyDO::getParentId, parentId);
+    }
+
+    /**
+     * 查询设备分类精简列表
+     *
+     * @return 设备分类精简列表
+     */
+    default List<DmsDeviceClassifyDO> selectSimpleList() {
+        return selectList(new LambdaQueryWrapperX<DmsDeviceClassifyDO>()
+                .eqIfPresent(DmsDeviceClassifyDO::getUseFlag, 1) // TODO 暂时写死,等待确认枚举
+                .orderByAsc(DmsDeviceClassifyDO::getOrderNum)
+                .select(DmsDeviceClassifyDO::getId,
+                        DmsDeviceClassifyDO::getName,
+                        DmsDeviceClassifyDO::getParentId,
+                        DmsDeviceClassifyDO::getParentName
+                ));
+    }
+}

+ 90 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/devicerepair/DmsDeviceRepairMapper.java

@@ -0,0 +1,90 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.devicerepair;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.devicerepair.DmsDeviceRepairDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 设备报修 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsDeviceRepairMapper extends BaseMapperX<DmsDeviceRepairDO> {
+
+    default PageResult<DmsDeviceRepairDO> selectPage(DmsDeviceRepairPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsDeviceRepairDO>()
+                .eqIfPresent(DmsDeviceRepairDO::getTitle, reqVO.getTitle())
+                .eqIfPresent(DmsDeviceRepairDO::getContent, reqVO.getContent())
+                .eqIfPresent(DmsDeviceRepairDO::getImgs, reqVO.getImgs())
+                .eqIfPresent(DmsDeviceRepairDO::getUuid, reqVO.getUuid())
+                .eqIfPresent(DmsDeviceRepairDO::getCheckTaskId, reqVO.getCheckTaskId())
+                .eqIfPresent(DmsDeviceRepairDO::getCheckTaskItemId, reqVO.getCheckTaskItemId())
+                .eqIfPresent(DmsDeviceRepairDO::getDeviceId, reqVO.getDeviceId())
+                .likeIfPresent(DmsDeviceRepairDO::getDeviceName, reqVO.getDeviceName())
+                .eqIfPresent(DmsDeviceRepairDO::getDeviceCode, reqVO.getDeviceCode())
+                .eqIfPresent(DmsDeviceRepairDO::getReportorId, reqVO.getReportorId())
+                .likeIfPresent(DmsDeviceRepairDO::getReportorName, reqVO.getReportorName())
+                .eqIfPresent(DmsDeviceRepairDO::getReportContent, reqVO.getReportContent())
+                .eqIfPresent(DmsDeviceRepairDO::getReportImgs, reqVO.getReportImgs())
+                .betweenIfPresent(DmsDeviceRepairDO::getReportStartTime, reqVO.getReportStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getReportEndTime, reqVO.getReportEndTime())
+                .eqIfPresent(DmsDeviceRepairDO::getDeciderId, reqVO.getDeciderId())
+                .likeIfPresent(DmsDeviceRepairDO::getDeciderName, reqVO.getDeciderName())
+                .eqIfPresent(DmsDeviceRepairDO::getDecideContent, reqVO.getDecideContent())
+                .eqIfPresent(DmsDeviceRepairDO::getDecideImgs, reqVO.getDecideImgs())
+                .betweenIfPresent(DmsDeviceRepairDO::getDecideStartTime, reqVO.getDecideStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getDecideEndTime, reqVO.getDecideEndTime())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainOrgId, reqVO.getMaintainOrgId())
+                .likeIfPresent(DmsDeviceRepairDO::getMaintainOrgName, reqVO.getMaintainOrgName())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainOrgCode, reqVO.getMaintainOrgCode())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainerId, reqVO.getMaintainerId())
+                .likeIfPresent(DmsDeviceRepairDO::getMaintainerName, reqVO.getMaintainerName())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainContent, reqVO.getMaintainContent())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainImgs, reqVO.getMaintainImgs())
+                .betweenIfPresent(DmsDeviceRepairDO::getMaintainStartTime, reqVO.getMaintainStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getMaintainEndTime, reqVO.getMaintainEndTime())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainFlow, reqVO.getMaintainFlow())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainNum, reqVO.getMaintainNum())
+                .eqIfPresent(DmsDeviceRepairDO::getAffirmantId, reqVO.getAffirmantId())
+                .likeIfPresent(DmsDeviceRepairDO::getAffirmantName, reqVO.getAffirmantName())
+                .eqIfPresent(DmsDeviceRepairDO::getAffirmContent, reqVO.getAffirmContent())
+                .eqIfPresent(DmsDeviceRepairDO::getAffirmImgs, reqVO.getAffirmImgs())
+                .betweenIfPresent(DmsDeviceRepairDO::getAffirmStartTime, reqVO.getAffirmStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getAffirmEndTime, reqVO.getAffirmEndTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getEndTime, reqVO.getEndTime())
+                .eqIfPresent(DmsDeviceRepairDO::getNote, reqVO.getNote())
+                .eqIfPresent(DmsDeviceRepairDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(DmsDeviceRepairDO::getTransferId, reqVO.getTransferId())
+                .likeIfPresent(DmsDeviceRepairDO::getTransferName, reqVO.getTransferName())
+                .eqIfPresent(DmsDeviceRepairDO::getTransferContent, reqVO.getTransferContent())
+                .eqIfPresent(DmsDeviceRepairDO::getTransferImgs, reqVO.getTransferImgs())
+                .betweenIfPresent(DmsDeviceRepairDO::getTransferStartTime, reqVO.getTransferStartTime())
+                .betweenIfPresent(DmsDeviceRepairDO::getTransferEndTime, reqVO.getTransferEndTime())
+                .eqIfPresent(DmsDeviceRepairDO::getReportorTel, reqVO.getReportorTel())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairPress, reqVO.getRepairPress())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairReason, reqVO.getRepairReason())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairCode, reqVO.getRepairCode())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairRecords, reqVO.getRepairRecords())
+                .eqIfPresent(DmsDeviceRepairDO::getMainRepairHistory, reqVO.getMainRepairHistory())
+                .eqIfPresent(DmsDeviceRepairDO::getFlowRecords, reqVO.getFlowRecords())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairFee, reqVO.getRepairFee())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairLevel, reqVO.getRepairLevel())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairType, reqVO.getRepairType())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairPosition, reqVO.getRepairPosition())
+                .eqIfPresent(DmsDeviceRepairDO::getRepairCausation, reqVO.getRepairCausation())
+                .betweenIfPresent(DmsDeviceRepairDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsDeviceRepairDO::getEndFlag, reqVO.getEndFlag())
+                .eqIfPresent(DmsDeviceRepairDO::getStopFlag, reqVO.getStopFlag())
+                .eqIfPresent(DmsDeviceRepairDO::getMaintainStopFlag, reqVO.getMaintainStopFlag())
+                .eqIfPresent(DmsDeviceRepairDO::getPartsFlag, reqVO.getPartsFlag())
+                .eqIfPresent(DmsDeviceRepairDO::getUseFlag, reqVO.getUseFlag())
+                .eqIfPresent(DmsDeviceRepairDO::getDeptId, reqVO.getDeptId())
+                .orderByDesc(DmsDeviceRepairDO::getId));
+    }
+
+}

+ 28 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/relationorg/DmsRelationContractMapper.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.relationorg;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationContractDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 往来单位联系人 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsRelationContractMapper extends BaseMapperX<DmsRelationContractDO> {
+
+    default PageResult<DmsRelationContractDO> selectPage(PageParam reqVO, Long orgId) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsRelationContractDO>()
+                .eq(DmsRelationContractDO::getOrgId, orgId)
+                .orderByDesc(DmsRelationContractDO::getId));
+    }
+
+    default int deleteByOrgId(Long orgId) {
+        return delete(DmsRelationContractDO::getOrgId, orgId);
+    }
+
+}

+ 50 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/dal/pgsql/relationorg/DmsRelationOrgMapper.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.dms.dal.pgsql.relationorg;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsRelationOrgPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationOrgDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 往来单位 Mapper
+ *
+ * @author dzx
+ */
+@Mapper
+public interface DmsRelationOrgMapper extends BaseMapperX<DmsRelationOrgDO> {
+
+    default PageResult<DmsRelationOrgDO> selectPage(DmsRelationOrgPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DmsRelationOrgDO>()
+                .eqIfPresent(DmsRelationOrgDO::getUuid, reqVO.getUuid())
+                .likeIfPresent(DmsRelationOrgDO::getName, reqVO.getName())
+                .likeIfPresent(DmsRelationOrgDO::getSortName, reqVO.getSortName())
+                .eqIfPresent(DmsRelationOrgDO::getRtype, reqVO.getRtype())
+                .eqIfPresent(DmsRelationOrgDO::getAddress, reqVO.getAddress())
+                .eqIfPresent(DmsRelationOrgDO::getPostCode, reqVO.getPostCode())
+                .eqIfPresent(DmsRelationOrgDO::getPhone, reqVO.getPhone())
+                .eqIfPresent(DmsRelationOrgDO::getEmail, reqVO.getEmail())
+                .eqIfPresent(DmsRelationOrgDO::getSite, reqVO.getSite())
+                .eqIfPresent(DmsRelationOrgDO::getUniCode, reqVO.getUniCode())
+                .likeIfPresent(DmsRelationOrgDO::getBankName, reqVO.getBankName())
+                .eqIfPresent(DmsRelationOrgDO::getBankAccount, reqVO.getBankAccount())
+                .eqIfPresent(DmsRelationOrgDO::getInvoiceInfo, reqVO.getInvoiceInfo())
+                .likeIfPresent(DmsRelationOrgDO::getInvoiceName, reqVO.getInvoiceName())
+                .eqIfPresent(DmsRelationOrgDO::getCredit, reqVO.getCredit())
+                .eqIfPresent(DmsRelationOrgDO::getCreditLevel, reqVO.getCreditLevel())
+                .eqIfPresent(DmsRelationOrgDO::getNote, reqVO.getNote())
+                .betweenIfPresent(DmsRelationOrgDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(DmsRelationOrgDO::getUseFlag, reqVO.getUseFlag())
+                .eqIfPresent(DmsRelationOrgDO::getDeptId, reqVO.getDeptId())
+                .orderByDesc(DmsRelationOrgDO::getId));
+    }
+
+    default List<DmsRelationOrgDO> selectSimpleRelationOrgList() {
+        return selectList(new LambdaQueryWrapperX<DmsRelationOrgDO>()
+                .select(DmsRelationOrgDO::getId, DmsRelationOrgDO::getName)
+                .eq(DmsRelationOrgDO::getUseFlag, 1)); // TODO
+    }
+}

+ 15 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/framework/datapermission/config/DataPermissionConfiguration.java

@@ -1,6 +1,13 @@
 package cn.iocoder.yudao.module.dms.framework.datapermission.config;
 
 import cn.iocoder.yudao.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checkplan.DmsCheckPlanDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify.DmsCheckTemplateClassifyDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute.DmsDeviceAttributeDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify.DmsDeviceClassifyDO;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -16,6 +23,14 @@ public class DataPermissionConfiguration {
     public DeptDataPermissionRuleCustomizer smDeptDataPermissionRuleCustomizer() {
 
         return rule -> {
+            // dept
+            rule.addDeptColumn(DmsCheckPlanDO.class, "dept_id");
+            rule.addDeptColumn(DmsCheckTaskDO.class, "dept_id");
+            rule.addDeptColumn(DmsCheckTemplateDO.class, "dept_id");
+            rule.addDeptColumn(DmsCheckTemplateClassifyDO.class, "dept_id");
+            rule.addDeptColumn(DmsDeviceDO.class, "dept_id");
+            rule.addDeptColumn(DmsDeviceAttributeDO.class, "dept_id");
+            rule.addDeptColumn(DmsDeviceClassifyDO.class, "dept_id");
         };
     }
 

+ 55 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checkplan/DmsCheckPlanService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.dms.service.checkplan;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checkplan.DmsCheckPlanDO;
+
+import javax.validation.Valid;
+
+/**
+ * 点巡检计划 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckPlanService {
+
+    /**
+     * 创建点巡检计划
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckPlan(@Valid DmsCheckPlanSaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检计划
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckPlan(@Valid DmsCheckPlanSaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检计划
+     *
+     * @param id 编号
+     */
+    void deleteCheckPlan(Long id);
+
+    /**
+     * 获得点巡检计划
+     *
+     * @param id 编号
+     * @return 点巡检计划
+     */
+    DmsCheckPlanDO getCheckPlan(Long id);
+
+    /**
+     * 获得点巡检计划分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检计划分页
+     */
+    PageResult<DmsCheckPlanDO> getCheckPlanPage(DmsCheckPlanPageReqVO pageReqVO);
+
+}

+ 198 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checkplan/DmsCheckPlanServiceImpl.java

@@ -0,0 +1,198 @@
+package cn.iocoder.yudao.module.dms.service.checkplan;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checkplan.vo.DmsCheckPlanSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checkplan.DmsCheckPlanDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checkplan.DmsCheckPlanMapper;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktask.DmsCheckTaskMapper;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateitem.DmsCheckTemplateItemMapper;
+import cn.iocoder.yudao.module.dms.dal.pgsql.device.DmsDeviceMapper;
+import cn.iocoder.yudao.module.dms.service.checktaskitem.DmsCheckTaskItemService;
+import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_PLAN_NOT_EXISTS;
+
+/**
+ * 点巡检计划 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckPlanServiceImpl implements DmsCheckPlanService {
+
+    @Resource
+    private DmsCheckPlanMapper checkPlanMapper;
+    @Resource
+    private DmsCheckTaskMapper checkTaskMapper;
+    @Resource
+    private DmsDeviceMapper dmsDeviceMapper;
+    @Resource
+    private DictDataApi dictDataApi;
+    @Resource
+    private DmsCheckTemplateItemMapper dmsCheckTemplateItemMapper;
+    @Resource
+    private DmsCheckTaskItemService dmsCheckTaskItemService;
+
+
+
+    @Override
+
+    public Long createCheckPlan(DmsCheckPlanSaveReqVO createReqVO) {
+        // 插入
+        DmsCheckPlanDO checkPlan = BeanUtils.toBean(createReqVO, DmsCheckPlanDO.class);
+        checkPlan.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        DmsDeviceDO dmsDeviceDO = this.dmsDeviceMapper.selectById(createReqVO.getDeviceId());
+        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+        checkPlan.setDeviceCode(dmsDeviceDO.getDeviceCode()).setDeviceName(dmsDeviceDO.getName())
+                .setDeviceClassifyId(dmsDeviceDO.getCid()).setDeviceClassifyName(dmsDeviceDO.getCname())
+                .setDeviceClassifyCode(dmsDeviceDO.getClassifyCode()).setCreatorId(loginUser.getId())
+                .setCreatorName(loginUser.getInfo().get(LoginUser.INFO_KEY_NICKNAME));
+        checkPlanMapper.insert(checkPlan);
+        // 返回
+        return checkPlan.getId();
+    }
+
+    @Override
+    public void updateCheckPlan(DmsCheckPlanSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckPlanExists(updateReqVO.getId());
+        // 更新
+        DmsCheckPlanDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckPlanDO.class);
+        DmsCheckPlanDO dmsCheckPlanDO = this.checkPlanMapper.selectById(updateObj.getId());
+        if (!Objects.equals(dmsCheckPlanDO.getDeviceId(), updateObj.getDeviceId())) {
+            DmsDeviceDO dmsDeviceDO = this.dmsDeviceMapper.selectById(updateReqVO.getDeviceId());
+
+            updateObj.setDeviceCode(dmsDeviceDO.getDeviceCode()).setDeviceName(dmsDeviceDO.getName())
+                    .setDeviceClassifyId(dmsDeviceDO.getCid()).setDeviceClassifyName(dmsDeviceDO.getCname())
+                    .setDeviceClassifyCode(dmsDeviceDO.getClassifyCode());
+        }
+        checkPlanMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCheckPlan(Long id) {
+        // 校验存在
+        validateCheckPlanExists(id);
+        // 删除
+        checkPlanMapper.deleteById(id);
+    }
+
+    private void validateCheckPlanExists(Long id) {
+        if (checkPlanMapper.selectById(id) == null) {
+            throw exception(CHECK_PLAN_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsCheckPlanDO getCheckPlan(Long id) {
+        return checkPlanMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsCheckPlanDO> getCheckPlanPage(DmsCheckPlanPageReqVO pageReqVO) {
+        return checkPlanMapper.selectPage(pageReqVO);
+    }
+
+    @Scheduled(cron = "0 */1 * * * ?")
+    @TenantIgnore
+    public void genTasks() {
+            System.out.println("Scheduled......");
+        LocalDateTime now = LocalDateTime.now();
+
+        //待生成任务的计划列表
+        List<DmsCheckPlanDO> checkPlans = this.checkPlanMapper.selectList(new QueryWrapper<DmsCheckPlanDO>().lambda()
+                .eq(DmsCheckPlanDO::getUseFlag, 1).ge(DmsCheckPlanDO::getEndTime, now));
+        if (CollectionUtils.isNotEmpty(checkPlans)) {
+//            List<Long> ctIds = checkPlans.stream().map(i -> i.getCheckTemplateId()).collect(Collectors.toList());
+//            List<CheckTemplate> checkTemplates = this.checkTemplateMapper.selectList(new LambdaQueryWrapper<CheckTemplate>().in(CheckTemplate::getId, ctIds));
+//            Map<Long, CheckTemplate> ctMap = checkTemplates.stream().collect(Collectors.toMap(i -> i.getId(), i -> i));
+//            Map<Long, List<CheckTemplateItem>> itemMap = Maps.newHashMap();
+            checkPlans.forEach(cp -> {
+
+                TenantUtils.execute(cp.getTenantId(), new Runnable() {
+                    @Override
+                    public void run() {
+                        Long dbTasNum = checkTaskMapper.selectCount(new LambdaQueryWrapper<DmsCheckTaskDO>()
+                                .ge(DmsCheckTaskDO::getStartTime, now)
+                                .eq(DmsCheckTaskDO::getDeviceId, cp.getDeviceId()).eq(DmsCheckTaskDO::getCheckPlanId, cp.getId()));
+                        if (Objects.equals(cp.getTaskNum(), new Integer(0))) {
+                            //下次生产任务数量为零 只在任务提前十二个小时生产任务
+                            if (now.isAfter(cp.getStartTime())  && Objects.equals(new Integer(0), dbTasNum)){
+                                DmsCheckTaskDO checkTask = cp.buildTask().setStatus(0).setStartTime(LocalDateTime.now());
+                                checkTask.setEndTime(checkTask.getStartTime().plusHours(cp.oneTotal() + cp.executeTotal()));
+                                checkTaskMapper.insert(checkTask);
+                                dmsCheckTaskItemService.saveBatch(genCheckTaskItems(checkTask));
+                            }
+
+                        } else if (dbTasNum < cp.getTaskNum()) {
+                            LambdaQueryWrapper<DmsCheckTaskDO> checkTaskLambdaQueryWrapper = new LambdaQueryWrapper<DmsCheckTaskDO>()
+                                    .eq(DmsCheckTaskDO::getUseFlag, 1)
+                                    .eq(DmsCheckTaskDO::getDeviceId, cp.getDeviceId()).eq(DmsCheckTaskDO::getCheckPlanId, cp.getId())
+                                    .ge(DmsCheckTaskDO::getStartTime, cp.getStartTime()).orderByDesc(DmsCheckTaskDO::getEndTime);
+                            checkTaskLambdaQueryWrapper.last(" LIMIT 1");
+                            DmsCheckTaskDO lastCheckTask = checkTaskMapper.selectOne(checkTaskLambdaQueryWrapper);
+                            if (Objects.isNull(lastCheckTask)) {
+                                //首次生成任务
+                                for (int i = 0; i < cp.getTaskNum(); i++) {
+                                    DmsCheckTaskDO checkTask = cp.buildTask().setStatus(0)
+                                            .setStartTime(cp.getStartTime().plusHours(i * cp.oneTotal()))
+                                            .setEndTime(cp.getStartTime().plusHours(i * cp.oneTotal() + cp.executeTotal()));
+                                    checkTaskMapper.insert(checkTask);
+                                    dmsCheckTaskItemService.saveBatch(genCheckTaskItems(checkTask));
+                                }
+                            } else {
+                                //非首次生成任务
+                                for (int i = 1; i <= cp.getTaskNum() - dbTasNum; i++) {
+                                    DmsCheckTaskDO checkTask = cp.buildTask().setStatus(0)
+                                            .setStartTime(lastCheckTask.getStartTime().plusHours(i * cp.oneTotal()) )
+                                            .setEndTime( lastCheckTask.getStartTime().plusHours(i * cp.oneTotal() + cp.executeTotal()));
+                                    checkTaskMapper.insert(checkTask);
+                                    dmsCheckTaskItemService.saveBatch(genCheckTaskItems(checkTask));
+
+                                }
+                            }
+                        }
+                    }
+                });
+
+            });
+        }
+
+    }
+
+    private List<DmsCheckTaskItemDO> genCheckTaskItems(DmsCheckTaskDO checkTask) {
+        List<DmsCheckTemplateItemDO> checkTemplateItems = this.dmsCheckTemplateItemMapper.selectList(new LambdaQueryWrapper<DmsCheckTemplateItemDO>()
+                .eq(DmsCheckTemplateItemDO::getCheckTemplateId, checkTask.getCheckTemplateId()).
+                eq(DmsCheckTemplateItemDO::getUseFlag, 1).orderByAsc(DmsCheckTemplateItemDO::getOrderNum));
+        LocalDateTime now = LocalDateTime.now();
+//        List<DmsCheckTaskItemDO> adds = checkTemplateItems.stream().map(item -> item.buildCheckTaskItem().setCheckTaskId(checkTask.getId()).setCreateTime(now)).collect(Collectors.toList());
+        List<DmsCheckTaskItemDO> list =
+                checkTemplateItems.stream().map(item ->item.buildCheckTaskItem().setCheckTaskId(checkTask.getId())).collect(Collectors.toList());
+        return list;
+    }
+
+}

+ 91 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktask/DmsCheckTaskService.java

@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.dms.service.checktask;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * 点巡检任务 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckTaskService {
+
+    /**
+     * 创建点巡检任务
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckTask(@Valid DmsCheckTaskSaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检任务
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckTask(@Valid DmsCheckTaskSaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检任务
+     *
+     * @param id 编号
+     */
+    void deleteCheckTask(Long id);
+
+    /**
+     * 获得点巡检任务
+     *
+     * @param id 编号
+     * @return 点巡检任务
+     */
+    DmsCheckTaskDO getCheckTask(Long id);
+
+    /**
+     * 获得点巡检任务分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检任务分页
+     */
+    PageResult<DmsCheckTaskDO> getCheckTaskPage(DmsCheckTaskPageReqVO pageReqVO);
+
+    /**
+     * 统计任务数量
+     *
+     * @return
+     */
+    Map<String, Object> tasks();
+
+    /**
+     * 任务暂存
+     * @param checkTask
+     * @return
+     */
+    String tmpSave(DmsCheckTaskDO checkTask);
+
+    /**
+     * 任务提交
+     * @param checkTask
+     * @return
+     */
+    String commit(DmsCheckTaskDO checkTask);
+
+    /**
+     * 统计当前用户未完成任务数量
+     * @param checkTask
+     * @return
+     */
+    Long countCur(DmsCheckTaskDO checkTask);
+
+    /**
+     * 获取第一个(最早的)任务
+     * @param pageReqVO
+     * @return
+     */
+    DmsCheckTaskDO getFirst(DmsCheckTaskPageReqVO pageReqVO);
+
+}

+ 169 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktask/DmsCheckTaskServiceImpl.java

@@ -0,0 +1,169 @@
+package cn.iocoder.yudao.module.dms.service.checktask;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktask.vo.DmsCheckTaskSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktask.DmsCheckTaskDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktask.DmsCheckTaskMapper;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktaskitem.DmsCheckTaskItemMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.google.common.collect.Maps;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_TASK_NOT_EXISTS;
+
+/**
+ * 点巡检任务 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckTaskServiceImpl implements DmsCheckTaskService {
+
+    @Resource
+    private DmsCheckTaskMapper checkTaskMapper;
+    @Resource
+    private DmsCheckTaskItemMapper checkTaskItemMapper;
+
+    @Override
+    public Long createCheckTask(DmsCheckTaskSaveReqVO createReqVO) {
+        // 插入
+        DmsCheckTaskDO checkTask = BeanUtils.toBean(createReqVO, DmsCheckTaskDO.class);
+        checkTask.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        checkTaskMapper.insert(checkTask);
+        // 返回
+        return checkTask.getId();
+    }
+
+    @Override
+    public void updateCheckTask(DmsCheckTaskSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckTaskExists(updateReqVO.getId());
+        // 更新
+        DmsCheckTaskDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckTaskDO.class);
+        checkTaskMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCheckTask(Long id) {
+        // 校验存在
+        validateCheckTaskExists(id);
+        // 删除
+        checkTaskMapper.deleteById(id);
+    }
+
+    private void validateCheckTaskExists(Long id) {
+        if (checkTaskMapper.selectById(id) == null) {
+            throw exception(CHECK_TASK_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsCheckTaskDO getCheckTask(Long id) {
+        return checkTaskMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsCheckTaskDO> getCheckTaskPage(DmsCheckTaskPageReqVO pageReqVO) {
+        return checkTaskMapper.selectPage(pageReqVO);
+    }
+
+
+    @Override
+    public Map<String, Object> tasks() {
+//        User user = this.userMapper.selectById(Convert.toLong(StpUtil.getLoginId()));
+        Long userId = SecurityFrameworkUtils.getLoginUserId();
+        LocalDateTime now  = LocalDateTime.now();
+        Long total = this.checkTaskMapper.selectCount(new LambdaQueryWrapper<DmsCheckTaskDO>()
+                .eq(DmsCheckTaskDO::getExecutorId,userId).le(DmsCheckTaskDO::getStartTime,now)
+                .eq(DmsCheckTaskDO::getUseFlag, 1));
+        Long end = this.checkTaskMapper.selectCount(new LambdaQueryWrapper<DmsCheckTaskDO>()
+                .eq(DmsCheckTaskDO::getExecutorId,userId).le(DmsCheckTaskDO::getStartTime,now)
+                .eq(DmsCheckTaskDO::getUseFlag, 1).eq(DmsCheckTaskDO::getEndFlag,1));
+
+        List<DmsCheckTaskDO> checkTasks = this.checkTaskMapper.selectList(new LambdaQueryWrapper<DmsCheckTaskDO>()
+                .eq(DmsCheckTaskDO::getExecutorId, userId).eq(DmsCheckTaskDO::getUseFlag, 1)
+                .eq(DmsCheckTaskDO::getEndFlag, 0).orderByAsc(DmsCheckTaskDO::getStartTime));
+
+        LambdaQueryWrapper endListWrapper = new LambdaQueryWrapper<DmsCheckTaskDO>()
+                .eq(DmsCheckTaskDO::getExecutorId, userId).eq(DmsCheckTaskDO::getUseFlag, 1)
+                .eq(DmsCheckTaskDO::getEndFlag, 1).orderByDesc(DmsCheckTaskDO::getStartTime);
+        endListWrapper.last("limit 10");
+        List endList = this.checkTaskMapper.selectList(endListWrapper);
+
+        Map<String, Object> map = Maps.newHashMap();
+        map.put("total", total);
+        map.put("end", end);
+        map.put("nodoTasks", checkTasks.stream().filter(item -> item.getStartTime().isBefore(now)).collect(Collectors.toList()));
+        map.put("todoTasks", checkTasks.stream().filter(item -> item.getStartTime().isAfter(now)).collect(Collectors.toList()));
+        map.put("endTasks", endList);
+        return map;
+    }
+    @Override
+    public String tmpSave(DmsCheckTaskDO checkTask) {
+        LocalDateTime now = LocalDateTime.now();
+        this.checkTaskMapper.update(null, new LambdaUpdateWrapper<DmsCheckTaskDO>().set(DmsCheckTaskDO::getNote,checkTask.getNote())
+                .set(DmsCheckTaskDO::getUpdateTime,now).set(DmsCheckTaskDO::getStatus,2).
+                eq(DmsCheckTaskDO::getId,checkTask.getId()));
+
+        Map<Long, DmsCheckTaskItemDO> itemMap = checkTask.getCheckTaskItems().stream().collect(Collectors.toMap(item -> item.getId(), item -> item));
+        List<DmsCheckTaskItemDO> taskItems = this.checkTaskItemMapper.selectList(new LambdaQueryWrapper<DmsCheckTaskItemDO>()
+                .eq(DmsCheckTaskItemDO::getCheckTaskId, checkTask.getId()).eq(DmsCheckTaskItemDO::getUseFlag, 1));
+        taskItems.stream().forEach(item->{item.setContent(itemMap.get(item.getId()).getContent())
+                .setImgs(itemMap.get(item.getId()).getImgs()).setUpdateTime(now);});
+        this.checkTaskItemMapper.updateBatch(taskItems);
+        return"任务暂存成功!";
+    }
+
+    @Override
+    public String commit(DmsCheckTaskDO checkTask) {
+        LocalDateTime now = LocalDateTime.now();
+        this.checkTaskMapper.update(null, new LambdaUpdateWrapper<DmsCheckTaskDO>().set(DmsCheckTaskDO::getNote,checkTask.getNote())
+                .set(DmsCheckTaskDO::getStatus,3)
+                .set(DmsCheckTaskDO::getExecutorTime,now).set(DmsCheckTaskDO::getUpdateTime,now)
+                .set(DmsCheckTaskDO::getEndFlag,1).eq(DmsCheckTaskDO::getId,checkTask.getId()));
+
+        Map<Long, DmsCheckTaskItemDO> itemMap = checkTask.getCheckTaskItems().stream().collect(Collectors.toMap(item -> item.getId(), item -> item));
+        LambdaQueryWrapper<DmsCheckTaskItemDO> eq = new LambdaQueryWrapper<DmsCheckTaskItemDO>().eq(DmsCheckTaskItemDO::getUseFlag, 1)
+                .eq(DmsCheckTaskItemDO::getCheckTaskId, checkTask.getId());
+        List<DmsCheckTaskItemDO> taskItems = this.checkTaskItemMapper.selectList(eq);
+        taskItems.stream().forEach(item->{item.setContent(itemMap.get(item.getId()).getContent())
+                .setImgs(itemMap.get(item.getId()).getImgs()).setUpdateTime(now);});
+        this.checkTaskItemMapper.updateBatch(taskItems);
+
+        return "任务暂存成功!";
+    }
+
+    @Override
+    public Long countCur(DmsCheckTaskDO checkTask) {
+
+        LambdaQueryWrapper<DmsCheckTaskDO> wrapper = new LambdaQueryWrapper<DmsCheckTaskDO>()
+                .eq(DmsCheckTaskDO::getEndFlag, 0);
+        if(Objects.nonNull(checkTask.getExecutorId())){
+            wrapper.eq(DmsCheckTaskDO::getExecutorId, checkTask.getExecutorId());
+        }
+        return this.checkTaskMapper.selectCount(wrapper);
+    }
+
+    @Override
+    public DmsCheckTaskDO getFirst(DmsCheckTaskPageReqVO pageReqVO) {
+        LambdaQueryWrapper<DmsCheckTaskDO> wrapper = new LambdaQueryWrapper<DmsCheckTaskDO>().eq(DmsCheckTaskDO::getExecutorId, pageReqVO.getExecutorId())
+                .eq(DmsCheckTaskDO::getEndFlag, 0).orderByAsc(DmsCheckTaskDO::getStartTime).last("limit 1");
+        return this.checkTaskMapper.selectOne(wrapper);
+    }
+
+}

+ 65 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktaskitem/DmsCheckTaskItemService.java

@@ -0,0 +1,65 @@
+package cn.iocoder.yudao.module.dms.service.checktaskitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 点巡检任务检查项 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckTaskItemService extends IService<DmsCheckTaskItemDO> {
+
+    /**
+     * 创建点巡检任务检查项
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckTaskItem(@Valid DmsCheckTaskItemSaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检任务检查项
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckTaskItem(@Valid DmsCheckTaskItemSaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检任务检查项
+     *
+     * @param id 编号
+     */
+    void deleteCheckTaskItem(Long id);
+
+    /**
+     * 获得点巡检任务检查项
+     *
+     * @param id 编号
+     * @return 点巡检任务检查项
+     */
+    DmsCheckTaskItemDO getCheckTaskItem(Long id);
+
+    /**
+     * 获得点巡检任务检查项分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检任务检查项分页
+     */
+    PageResult<DmsCheckTaskItemDO> getCheckTaskItemPage(DmsCheckTaskItemPageReqVO pageReqVO);
+    /**
+     * 获得点巡检任务检查项列表
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检任务检查项分页
+     */
+    List<DmsCheckTaskItemDO> getCheckTaskItemList(DmsCheckTaskItemPageReqVO pageReqVO);
+
+
+}

+ 78 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktaskitem/DmsCheckTaskItemServiceImpl.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.dms.service.checktaskitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktaskitem.vo.DmsCheckTaskItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktaskitem.DmsCheckTaskItemDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktaskitem.DmsCheckTaskItemMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_TASK_ITEM_NOT_EXISTS;
+
+/**
+ * 点巡检任务检查项 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckTaskItemServiceImpl extends ServiceImpl<DmsCheckTaskItemMapper, DmsCheckTaskItemDO> implements DmsCheckTaskItemService {
+
+    @Resource
+    private DmsCheckTaskItemMapper checkTaskItemMapper;
+
+    @Override
+    public Long createCheckTaskItem(DmsCheckTaskItemSaveReqVO createReqVO) {
+        // 插入
+        DmsCheckTaskItemDO checkTaskItem = BeanUtils.toBean(createReqVO, DmsCheckTaskItemDO.class);
+        checkTaskItemMapper.insert(checkTaskItem);
+        // 返回
+        return checkTaskItem.getId();
+    }
+
+    @Override
+    public void updateCheckTaskItem(DmsCheckTaskItemSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckTaskItemExists(updateReqVO.getId());
+        // 更新
+        DmsCheckTaskItemDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckTaskItemDO.class);
+        checkTaskItemMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCheckTaskItem(Long id) {
+        // 校验存在
+        validateCheckTaskItemExists(id);
+        // 删除
+        checkTaskItemMapper.deleteById(id);
+    }
+
+    private void validateCheckTaskItemExists(Long id) {
+        if (checkTaskItemMapper.selectById(id) == null) {
+            throw exception(CHECK_TASK_ITEM_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsCheckTaskItemDO getCheckTaskItem(Long id) {
+        return checkTaskItemMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsCheckTaskItemDO> getCheckTaskItemPage(DmsCheckTaskItemPageReqVO pageReqVO) {
+        return checkTaskItemMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<DmsCheckTaskItemDO> getCheckTaskItemList(DmsCheckTaskItemPageReqVO pageReqVO) {
+        return checkTaskItemMapper.selectList(pageReqVO);
+    }
+
+}

+ 105 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplate/DmsCheckTemplateService.java

@@ -0,0 +1,105 @@
+package cn.iocoder.yudao.module.dms.service.checktemplate;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplatePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplateSaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 点巡检模板 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckTemplateService {
+
+    /**
+     * 创建点巡检模板
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckTemplate(@Valid DmsCheckTemplateSaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检模板
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckTemplate(@Valid DmsCheckTemplateSaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检模板
+     *
+     * @param id 编号
+     */
+    void deleteCheckTemplate(Long id);
+
+    /**
+     * 获得点巡检模板
+     *
+     * @param id 编号
+     * @return 点巡检模板
+     */
+    DmsCheckTemplateDO getCheckTemplate(Long id);
+
+    /**
+     * 获得点巡检模板分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检模板分页
+     */
+    PageResult<DmsCheckTemplateDO> getCheckTemplatePage(DmsCheckTemplatePageReqVO pageReqVO);
+
+    /**
+     * 获取巡检模板列表
+     * @param pageReqVO
+     * @return
+     */
+    List<DmsCheckTemplateDO> getCheckTemplateList(DmsCheckTemplatePageReqVO pageReqVO);
+
+    // ==================== 子表(点巡检模板检查项) ====================
+
+    /**
+     * 获得点巡检模板检查项分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检模板检查项分页
+     */
+    PageResult<DmsCheckTemplateItemDO> getCheckTemplateItemPage(DmsCheckTemplateItemPageReqVO pageReqVO);
+
+    /**
+     * 创建点巡检模板检查项
+     *
+     * @param checkTemplateItem 创建信息
+     * @return 编号
+     */
+    Long createCheckTemplateItem(@Valid DmsCheckTemplateItemDO checkTemplateItem);
+
+    /**
+     * 更新点巡检模板检查项
+     *
+     * @param checkTemplateItem 更新信息
+     */
+    void updateCheckTemplateItem(@Valid DmsCheckTemplateItemDO checkTemplateItem);
+
+    /**
+     * 删除点巡检模板检查项
+     *
+     * @param id 编号
+     */
+    void deleteCheckTemplateItem(Long id);
+
+    /**
+     * 获得点巡检模板检查项
+     *
+     * @param id 编号
+     * @return 点巡检模板检查项
+     */
+    DmsCheckTemplateItemDO getCheckTemplateItem(Long id);
+
+}

+ 134 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplate/DmsCheckTemplateServiceImpl.java

@@ -0,0 +1,134 @@
+package cn.iocoder.yudao.module.dms.service.checktemplate;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplatePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplate.vo.DmsCheckTemplateSaveReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplate.DmsCheckTemplateDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktemplate.DmsCheckTemplateMapper;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateitem.DmsCheckTemplateItemMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_TEMPLATE_ITEM_NOT_EXISTS;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_TEMPLATE_NOT_EXISTS;
+
+/**
+ * 点巡检模板 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckTemplateServiceImpl implements DmsCheckTemplateService {
+
+    @Resource
+    private DmsCheckTemplateMapper dmsCheckTemplateMapper;
+    @Resource
+    private DmsCheckTemplateItemMapper dmsCheckTemplateItemMapper;
+
+    @Override
+    public Long createCheckTemplate(DmsCheckTemplateSaveReqVO createReqVO) {
+        // 插入
+        DmsCheckTemplateDO checkTemplate = BeanUtils.toBean(createReqVO, DmsCheckTemplateDO.class);
+        checkTemplate.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        dmsCheckTemplateMapper.insert(checkTemplate);
+        // 返回
+        return checkTemplate.getId();
+    }
+
+    @Override
+    public void updateCheckTemplate(DmsCheckTemplateSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckTemplateExists(updateReqVO.getId());
+        // 更新
+        DmsCheckTemplateDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckTemplateDO.class);
+        dmsCheckTemplateMapper.updateById(updateObj);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteCheckTemplate(Long id) {
+        // 校验存在
+        validateCheckTemplateExists(id);
+        // 删除
+        dmsCheckTemplateMapper.deleteById(id);
+
+        // 删除子表
+        deleteCheckTemplateItemByCheckTemplateId(id);
+    }
+
+    private void validateCheckTemplateExists(Long id) {
+        if (dmsCheckTemplateMapper.selectById(id) == null) {
+            throw exception(CHECK_TEMPLATE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsCheckTemplateDO getCheckTemplate(Long id) {
+        return dmsCheckTemplateMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsCheckTemplateDO> getCheckTemplatePage(DmsCheckTemplatePageReqVO pageReqVO) {
+        return dmsCheckTemplateMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<DmsCheckTemplateDO> getCheckTemplateList(DmsCheckTemplatePageReqVO pageReqVO) {
+        return dmsCheckTemplateMapper.selectList(pageReqVO);
+    }
+
+    // ==================== 子表(点巡检模板检查项) ====================
+
+    @Override
+    public PageResult<DmsCheckTemplateItemDO> getCheckTemplateItemPage(DmsCheckTemplateItemPageReqVO pageReqVO) {
+        return dmsCheckTemplateItemMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public Long createCheckTemplateItem(DmsCheckTemplateItemDO checkTemplateItem) {
+        dmsCheckTemplateItemMapper.insert(checkTemplateItem);
+        return checkTemplateItem.getId();
+    }
+
+    @Override
+    public void updateCheckTemplateItem(DmsCheckTemplateItemDO checkTemplateItem) {
+        // 校验存在
+        validateCheckTemplateItemExists(checkTemplateItem.getId());
+        // 更新
+        dmsCheckTemplateItemMapper.updateById(checkTemplateItem);
+    }
+
+    @Override
+    public void deleteCheckTemplateItem(Long id) {
+        // 校验存在
+        validateCheckTemplateItemExists(id);
+        // 删除
+        dmsCheckTemplateItemMapper.deleteById(id);
+    }
+
+    @Override
+    public DmsCheckTemplateItemDO getCheckTemplateItem(Long id) {
+        return dmsCheckTemplateItemMapper.selectById(id);
+    }
+
+    private void validateCheckTemplateItemExists(Long id) {
+        if (dmsCheckTemplateItemMapper.selectById(id) == null) {
+            throw exception(CHECK_TEMPLATE_ITEM_NOT_EXISTS);
+        }
+    }
+
+    private void deleteCheckTemplateItemByCheckTemplateId(Long checkTemplateId) {
+        dmsCheckTemplateItemMapper.deleteByCheckTemplateId(checkTemplateId);
+    }
+
+}

+ 61 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateclassify/DmsCheckTemplateClassifyService.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.dms.service.checktemplateclassify;
+
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify.DmsCheckTemplateClassifyDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 点巡检模板分类 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckTemplateClassifyService {
+
+    /**
+     * 创建点巡检模板分类
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckTemplateClassify(@Valid DmsCheckTemplateClassifySaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检模板分类
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckTemplateClassify(@Valid DmsCheckTemplateClassifySaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检模板分类
+     *
+     * @param id 编号
+     */
+    void deleteCheckTemplateClassify(Long id);
+
+    /**
+     * 获得点巡检模板分类
+     *
+     * @param id 编号
+     * @return 点巡检模板分类
+     */
+    DmsCheckTemplateClassifyDO getCheckTemplateClassify(Long id);
+
+    /**
+     * 获得点巡检模板分类列表
+     *
+     * @param listReqVO 查询条件
+     * @return 点巡检模板分类列表
+     */
+    List<DmsCheckTemplateClassifyDO> getCheckTemplateClassifyList(DmsCheckTemplateClassifyListReqVO listReqVO);
+
+    /**
+     * 获得点巡检模板分类精简列表
+     *
+     * @return 点巡检模板分类列表
+     */
+    List<DmsCheckTemplateClassifyDO> getSimpleCheckTemplateClassifyList();
+}

+ 146 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateclassify/DmsCheckTemplateClassifyServiceImpl.java

@@ -0,0 +1,146 @@
+package cn.iocoder.yudao.module.dms.service.checktemplateclassify;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateclassify.vo.DmsCheckTemplateClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateclassify.DmsCheckTemplateClassifyDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateclassify.DmsCheckTemplateClassifyMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.*;
+
+/**
+ * 点巡检模板分类 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckTemplateClassifyServiceImpl implements DmsCheckTemplateClassifyService {
+
+    @Resource
+    private DmsCheckTemplateClassifyMapper checkTemplateClassifyMapper;
+
+    @Override
+    public Long createCheckTemplateClassify(DmsCheckTemplateClassifySaveReqVO createReqVO) {
+        // 校验父设备设施分类ID的有效性
+        validateParentCheckTemplateClassify(null, createReqVO.getParentId());
+        // 校验设备设施分类名称的唯一性
+        validateCheckTemplateClassifyNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
+
+        // 插入
+        DmsCheckTemplateClassifyDO checkTemplateClassify = BeanUtils.toBean(createReqVO, DmsCheckTemplateClassifyDO.class);
+        checkTemplateClassify.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        checkTemplateClassifyMapper.insert(checkTemplateClassify);
+        // 返回
+        return checkTemplateClassify.getId();
+    }
+
+    @Override
+    public void updateCheckTemplateClassify(DmsCheckTemplateClassifySaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckTemplateClassifyExists(updateReqVO.getId());
+        // 校验父设备设施分类ID的有效性
+        validateParentCheckTemplateClassify(updateReqVO.getId(), updateReqVO.getParentId());
+        // 校验设备设施分类名称的唯一性
+        validateCheckTemplateClassifyNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
+
+        // 更新
+        DmsCheckTemplateClassifyDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckTemplateClassifyDO.class);
+        checkTemplateClassifyMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCheckTemplateClassify(Long id) {
+        // 校验存在
+        validateCheckTemplateClassifyExists(id);
+        // 校验是否有子点巡检模板分类
+        if (checkTemplateClassifyMapper.selectCountByParentId(id) > 0) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_EXITS_CHILDREN);
+        }
+        // 删除
+        checkTemplateClassifyMapper.deleteById(id);
+    }
+
+    private void validateCheckTemplateClassifyExists(Long id) {
+        if (checkTemplateClassifyMapper.selectById(id) == null) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_NOT_EXISTS);
+        }
+    }
+
+    private void validateParentCheckTemplateClassify(Long id, Long parentId) {
+        if (parentId == null || DmsCheckTemplateClassifyDO.PARENT_ID_ROOT.equals(parentId)) {
+            return;
+        }
+        // 1. 不能设置自己为父点巡检模板分类
+        if (Objects.equals(id, parentId)) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_PARENT_ERROR);
+        }
+        // 2. 父点巡检模板分类不存在
+        DmsCheckTemplateClassifyDO parentCheckTemplateClassify = checkTemplateClassifyMapper.selectById(parentId);
+        if (parentCheckTemplateClassify == null) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_PARENT_NOT_EXITS);
+        }
+        // 3. 递归校验父点巡检模板分类,如果父点巡检模板分类是自己的子点巡检模板分类,则报错,避免形成环路
+        if (id == null) { // id 为空,说明新增,不需要考虑环路
+            return;
+        }
+        for (int i = 0; i < Short.MAX_VALUE; i++) {
+            // 3.1 校验环路
+            parentId = parentCheckTemplateClassify.getParentId();
+            if (Objects.equals(id, parentId)) {
+                throw exception(CHECK_TEMPLATE_CLASSIFY_PARENT_IS_CHILD);
+            }
+            // 3.2 继续递归下一级父点巡检模板分类
+            if (parentId == null || DmsCheckTemplateClassifyDO.PARENT_ID_ROOT.equals(parentId)) {
+                break;
+            }
+            parentCheckTemplateClassify = checkTemplateClassifyMapper.selectById(parentId);
+            if (parentCheckTemplateClassify == null) {
+                break;
+            }
+        }
+    }
+
+    private void validateCheckTemplateClassifyNameUnique(Long id, Long parentId, String name) {
+        DmsCheckTemplateClassifyDO checkTemplateClassify = checkTemplateClassifyMapper.selectByParentIdAndName(parentId, name);
+        if (checkTemplateClassify == null) {
+            return;
+        }
+        // 如果 id 为空,说明不用比较是否为相同 id 的点巡检模板分类
+        if (id == null) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_NAME_DUPLICATE);
+        }
+        if (!Objects.equals(checkTemplateClassify.getId(), id)) {
+            throw exception(CHECK_TEMPLATE_CLASSIFY_NAME_DUPLICATE);
+        }
+    }
+
+    @Override
+    public DmsCheckTemplateClassifyDO getCheckTemplateClassify(Long id) {
+        return checkTemplateClassifyMapper.selectById(id);
+    }
+
+    @Override
+    public List<DmsCheckTemplateClassifyDO> getCheckTemplateClassifyList(DmsCheckTemplateClassifyListReqVO listReqVO) {
+        return checkTemplateClassifyMapper.selectList(listReqVO);
+    }
+
+    /**
+     * 获得点巡检模板分类精简列表
+     *
+     * @return 点巡检模板分类列表
+     */
+    @Override
+    public List<DmsCheckTemplateClassifyDO> getSimpleCheckTemplateClassifyList() {
+        return checkTemplateClassifyMapper.selectSimpleList();
+    }
+
+}

+ 55 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateitem/DmsCheckTemplateItemService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.dms.service.checktemplateitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+
+import javax.validation.Valid;
+
+/**
+ * 点巡检模板检查项 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsCheckTemplateItemService {
+
+    /**
+     * 创建点巡检模板检查项
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCheckTemplateItem(@Valid DmsCheckTemplateItemSaveReqVO createReqVO);
+
+    /**
+     * 更新点巡检模板检查项
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCheckTemplateItem(@Valid DmsCheckTemplateItemSaveReqVO updateReqVO);
+
+    /**
+     * 删除点巡检模板检查项
+     *
+     * @param id 编号
+     */
+    void deleteCheckTemplateItem(Long id);
+
+    /**
+     * 获得点巡检模板检查项
+     *
+     * @param id 编号
+     * @return 点巡检模板检查项
+     */
+    DmsCheckTemplateItemDO getCheckTemplateItem(Long id);
+
+    /**
+     * 获得点巡检模板检查项分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 点巡检模板检查项分页
+     */
+    PageResult<DmsCheckTemplateItemDO> getCheckTemplateItemPage(DmsCheckTemplateItemPageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/checktemplateitem/DmsCheckTemplateItemServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.dms.service.checktemplateitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.checktemplateitem.vo.DmsCheckTemplateItemSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.checktemplateitem.DmsCheckTemplateItemDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.checktemplateitem.DmsCheckTemplateItemMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.CHECK_TEMPLATE_ITEM_NOT_EXISTS;
+
+/**
+ * 点巡检模板检查项 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsCheckTemplateItemServiceImpl implements DmsCheckTemplateItemService {
+
+    @Resource
+    private DmsCheckTemplateItemMapper dmsCheckTemplateItemMapper;
+
+    @Override
+    public Long createCheckTemplateItem(DmsCheckTemplateItemSaveReqVO createReqVO) {
+        // 插入
+        DmsCheckTemplateItemDO checkTemplateItem = BeanUtils.toBean(createReqVO, DmsCheckTemplateItemDO.class);
+        dmsCheckTemplateItemMapper.insert(checkTemplateItem);
+        // 返回
+        return checkTemplateItem.getId();
+    }
+
+    @Override
+    public void updateCheckTemplateItem(DmsCheckTemplateItemSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCheckTemplateItemExists(updateReqVO.getId());
+        // 更新
+        DmsCheckTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, DmsCheckTemplateItemDO.class);
+        dmsCheckTemplateItemMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCheckTemplateItem(Long id) {
+        // 校验存在
+        validateCheckTemplateItemExists(id);
+        // 删除
+        dmsCheckTemplateItemMapper.deleteById(id);
+    }
+
+    private void validateCheckTemplateItemExists(Long id) {
+        if (dmsCheckTemplateItemMapper.selectById(id) == null) {
+            throw exception(CHECK_TEMPLATE_ITEM_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsCheckTemplateItemDO getCheckTemplateItem(Long id) {
+        return dmsCheckTemplateItemMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsCheckTemplateItemDO> getCheckTemplateItemPage(DmsCheckTemplateItemPageReqVO pageReqVO) {
+        return dmsCheckTemplateItemMapper.selectPage(pageReqVO);
+    }
+
+}

+ 69 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/device/DmsDeviceService.java

@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.dms.service.device;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDevicePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDeviceSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+
+import javax.validation.Valid;
+
+/**
+ * 设备管理 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface DmsDeviceService {
+
+    /**
+     * 创建设备管理
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDevice(@Valid DmsDeviceSaveReqVO createReqVO);
+
+    /**
+     * 更新设备管理
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDevice(@Valid DmsDeviceSaveReqVO updateReqVO);
+
+    /**
+     * 删除设备管理
+     *
+     * @param id 编号
+     */
+    void deleteDevice(Long id);
+
+    /**
+     * 获得设备管理
+     *
+     * @param id 编号
+     * @return 设备管理
+     */
+    DmsDeviceDO getDevice(Long id);
+
+    /**
+     * 获得设备管理分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 设备管理分页
+     */
+    PageResult<DmsDeviceDO> getDevicePage(DmsDevicePageReqVO pageReqVO);
+
+    /**
+     * 设备定位
+     * @param saveReqVO
+     * @return
+     */
+    Long location( DmsDeviceSaveReqVO saveReqVO);
+    /**
+     * 统计设备未定数量
+     * @param device
+     * @return
+     */
+    Long locationCount(DmsDeviceSaveReqVO device);
+
+
+}

+ 92 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/device/DmsDeviceServiceImpl.java

@@ -0,0 +1,92 @@
+package cn.iocoder.yudao.module.dms.service.device;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDevicePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.device.vo.DmsDeviceSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.device.DmsDeviceDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.device.DmsDeviceMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Objects;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.DEVICE_NOT_EXISTS;
+
+/**
+ * 设备管理 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class DmsDeviceServiceImpl implements DmsDeviceService {
+
+    @Resource
+    private DmsDeviceMapper dmsDeviceMapper;
+
+    @Override
+    public Long createDevice(DmsDeviceSaveReqVO createReqVO) {
+        // 插入
+        DmsDeviceDO device = BeanUtils.toBean(createReqVO, DmsDeviceDO.class);
+        device.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        dmsDeviceMapper.insert(device);
+        // 返回
+        return device.getId();
+    }
+
+    @Override
+    public void updateDevice(DmsDeviceSaveReqVO updateReqVO) {
+        // 校验存在
+        validateDeviceExists(updateReqVO.getId());
+        // 更新
+        DmsDeviceDO updateObj = BeanUtils.toBean(updateReqVO, DmsDeviceDO.class);
+        dmsDeviceMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDevice(Long id) {
+        // 校验存在
+        validateDeviceExists(id);
+        // 删除
+        dmsDeviceMapper.deleteById(id);
+    }
+
+    private void validateDeviceExists(Long id) {
+        if (dmsDeviceMapper.selectById(id) == null) {
+            throw exception(DEVICE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsDeviceDO getDevice(Long id) {
+        return dmsDeviceMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsDeviceDO> getDevicePage(DmsDevicePageReqVO pageReqVO) {
+        return dmsDeviceMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public Long location(DmsDeviceSaveReqVO saveReqVO) {
+        DmsDeviceDO dbDevice = this.dmsDeviceMapper.selectById(saveReqVO.getId());
+        dbDevice.setLat(saveReqVO.getLat()).setLng(saveReqVO.getLng());
+        this.dmsDeviceMapper.updateById(dbDevice);
+        return dbDevice.getId();
+    }
+
+    @Override
+    public Long locationCount(DmsDeviceSaveReqVO device) {
+        LambdaQueryWrapper<DmsDeviceDO> queryWrapper = new LambdaQueryWrapper<DmsDeviceDO>().isNull(DmsDeviceDO::getLng);
+        if(Objects.nonNull(device.getManagerId())){
+            queryWrapper.eq(DmsDeviceDO::getManagerId, device.getManagerId());
+        }
+        return   this.dmsDeviceMapper.selectCount(queryWrapper);
+    }
+
+}

+ 55 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceattribute/DmsDeviceAttributeService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.dms.service.deviceattribute;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributeSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute.DmsDeviceAttributeDO;
+
+import javax.validation.Valid;
+
+/**
+ * 设备属性 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsDeviceAttributeService {
+
+    /**
+     * 创建设备属性
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDeviceAttribute(@Valid DmsDeviceAttributeSaveReqVO createReqVO);
+
+    /**
+     * 更新设备属性
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDeviceAttribute(@Valid DmsDeviceAttributeSaveReqVO updateReqVO);
+
+    /**
+     * 删除设备属性
+     *
+     * @param id 编号
+     */
+    void deleteDeviceAttribute(Long id);
+
+    /**
+     * 获得设备属性
+     *
+     * @param id 编号
+     * @return 设备属性
+     */
+    DmsDeviceAttributeDO getDeviceAttribute(Long id);
+
+    /**
+     * 获得设备属性分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 设备属性分页
+     */
+    PageResult<DmsDeviceAttributeDO> getDeviceAttributePage(DmsDeviceAttributePageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceattribute/DmsDeviceAttributeServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.dms.service.deviceattribute;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributePageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceattribute.vo.DmsDeviceAttributeSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceattribute.DmsDeviceAttributeDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.deviceattribute.DmsDeviceAttributeMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_NOT_EXISTS;
+
+/**
+ * 设备属性 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsDeviceAttributeServiceImpl implements DmsDeviceAttributeService {
+
+    @Resource
+    private DmsDeviceAttributeMapper deviceAttributeMapper;
+
+    @Override
+    public Long createDeviceAttribute(DmsDeviceAttributeSaveReqVO createReqVO) {
+        // 插入
+        DmsDeviceAttributeDO deviceAttribute = BeanUtils.toBean(createReqVO, DmsDeviceAttributeDO.class);
+        deviceAttributeMapper.insert(deviceAttribute);
+        // 返回
+        return deviceAttribute.getId();
+    }
+
+    @Override
+    public void updateDeviceAttribute(DmsDeviceAttributeSaveReqVO updateReqVO) {
+        // 校验存在
+        validateDeviceAttributeExists(updateReqVO.getId());
+        // 更新
+        DmsDeviceAttributeDO updateObj = BeanUtils.toBean(updateReqVO, DmsDeviceAttributeDO.class);
+        deviceAttributeMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDeviceAttribute(Long id) {
+        // 校验存在
+        validateDeviceAttributeExists(id);
+        // 删除
+        deviceAttributeMapper.deleteById(id);
+    }
+
+    private void validateDeviceAttributeExists(Long id) {
+        if (deviceAttributeMapper.selectById(id) == null) {
+            throw exception(DEVICE_ATTRIBUTE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsDeviceAttributeDO getDeviceAttribute(Long id) {
+        return deviceAttributeMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsDeviceAttributeDO> getDeviceAttributePage(DmsDeviceAttributePageReqVO pageReqVO) {
+        return deviceAttributeMapper.selectPage(pageReqVO);
+    }
+
+}

+ 61 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceclassify/DmsDeviceClassifyService.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.dms.service.deviceclassify;
+
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify.DmsDeviceClassifyDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 设备分类 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsDeviceClassifyService {
+
+    /**
+     * 创建设备分类
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDeviceClassify(@Valid DmsDeviceClassifySaveReqVO createReqVO);
+
+    /**
+     * 更新设备分类
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDeviceClassify(@Valid DmsDeviceClassifySaveReqVO updateReqVO);
+
+    /**
+     * 删除设备分类
+     *
+     * @param id 编号
+     */
+    void deleteDeviceClassify(Long id);
+
+    /**
+     * 获得设备分类
+     *
+     * @param id 编号
+     * @return 设备分类
+     */
+    DmsDeviceClassifyDO getDeviceClassify(Long id);
+
+    /**
+     * 获得设备分类列表
+     *
+     * @param listReqVO 查询条件
+     * @return 设备分类列表
+     */
+    List<DmsDeviceClassifyDO> getDeviceClassifyList(DmsDeviceClassifyListReqVO listReqVO);
+
+    /**
+     * 获得设备分类精简列表
+     *
+     * @return 设备分类列表
+     */
+    List<DmsDeviceClassifyDO> getSimpleDeviceClassifyList();
+}

+ 146 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/deviceclassify/DmsDeviceClassifyServiceImpl.java

@@ -0,0 +1,146 @@
+package cn.iocoder.yudao.module.dms.service.deviceclassify;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifyListReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.deviceclassify.vo.DmsDeviceClassifySaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.deviceclassify.DmsDeviceClassifyDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.deviceclassify.DmsDeviceClassifyMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.*;
+
+/**
+ * 设备分类 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsDeviceClassifyServiceImpl implements DmsDeviceClassifyService {
+
+    @Resource
+    private DmsDeviceClassifyMapper dmsDeviceClassifyMapper;
+
+    @Override
+    public Long createDeviceClassify(DmsDeviceClassifySaveReqVO createReqVO) {
+        // 校验父分类ID的有效性
+        validateParentDeviceClassify(null, createReqVO.getParentId());
+        // 校验设备设施分类名称的唯一性
+        validateDeviceClassifyNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
+
+        // 插入
+        DmsDeviceClassifyDO deviceClassify = BeanUtils.toBean(createReqVO, DmsDeviceClassifyDO.class);
+        deviceClassify.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
+        dmsDeviceClassifyMapper.insert(deviceClassify);
+        // 返回
+        return deviceClassify.getId();
+    }
+
+    @Override
+    public void updateDeviceClassify(DmsDeviceClassifySaveReqVO updateReqVO) {
+        // 校验存在
+        validateDeviceClassifyExists(updateReqVO.getId());
+        // 校验父分类ID的有效性
+        validateParentDeviceClassify(updateReqVO.getId(), updateReqVO.getParentId());
+        // 校验设备设施分类名称的唯一性
+        validateDeviceClassifyNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
+
+        // 更新
+        DmsDeviceClassifyDO updateObj = BeanUtils.toBean(updateReqVO, DmsDeviceClassifyDO.class);
+        dmsDeviceClassifyMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDeviceClassify(Long id) {
+        // 校验存在
+        validateDeviceClassifyExists(id);
+        // 校验是否有子设备分类
+        if (dmsDeviceClassifyMapper.selectCountByParentId(id) > 0) {
+            throw exception(DEVICE_CLASSIFY_EXITS_CHILDREN);
+        }
+        // 删除
+        dmsDeviceClassifyMapper.deleteById(id);
+    }
+
+    private void validateDeviceClassifyExists(Long id) {
+        if (dmsDeviceClassifyMapper.selectById(id) == null) {
+            throw exception(DEVICE_CLASSIFY_NOT_EXISTS);
+        }
+    }
+
+    private void validateParentDeviceClassify(Long id, Long parentId) {
+        if (parentId == null || DmsDeviceClassifyDO.PARENT_ID_ROOT.equals(parentId)) {
+            return;
+        }
+        // 1. 不能设置自己为父设备分类
+        if (Objects.equals(id, parentId)) {
+            throw exception(DEVICE_CLASSIFY_PARENT_ERROR);
+        }
+        // 2. 父设备分类不存在
+        DmsDeviceClassifyDO parentDeviceClassify = dmsDeviceClassifyMapper.selectById(parentId);
+        if (parentDeviceClassify == null) {
+            throw exception(DEVICE_CLASSIFY_PARENT_NOT_EXITS);
+        }
+        // 3. 递归校验父设备分类,如果父设备分类是自己的子设备分类,则报错,避免形成环路
+        if (id == null) { // id 为空,说明新增,不需要考虑环路
+            return;
+        }
+        for (int i = 0; i < Short.MAX_VALUE; i++) {
+            // 3.1 校验环路
+            parentId = parentDeviceClassify.getParentId();
+            if (Objects.equals(id, parentId)) {
+                throw exception(DEVICE_CLASSIFY_PARENT_IS_CHILD);
+            }
+            // 3.2 继续递归下一级父设备分类
+            if (parentId == null || DmsDeviceClassifyDO.PARENT_ID_ROOT.equals(parentId)) {
+                break;
+            }
+            parentDeviceClassify = dmsDeviceClassifyMapper.selectById(parentId);
+            if (parentDeviceClassify == null) {
+                break;
+            }
+        }
+    }
+
+    private void validateDeviceClassifyNameUnique(Long id, Long parentId, String name) {
+        DmsDeviceClassifyDO deviceClassify = dmsDeviceClassifyMapper.selectByParentIdAndName(parentId, name);
+        if (deviceClassify == null) {
+            return;
+        }
+        // 如果 id 为空,说明不用比较是否为相同 id 的设备分类
+        if (id == null) {
+            throw exception(DEVICE_CLASSIFY_NAME_DUPLICATE);
+        }
+        if (!Objects.equals(deviceClassify.getId(), id)) {
+            throw exception(DEVICE_CLASSIFY_NAME_DUPLICATE);
+        }
+    }
+
+    @Override
+    public DmsDeviceClassifyDO getDeviceClassify(Long id) {
+        return dmsDeviceClassifyMapper.selectById(id);
+    }
+
+    @Override
+    public List<DmsDeviceClassifyDO> getDeviceClassifyList(DmsDeviceClassifyListReqVO listReqVO) {
+        return dmsDeviceClassifyMapper.selectList(listReqVO);
+    }
+
+    /**
+     * 获得设备分类精简列表
+     *
+     * @return 设备分类精简列表
+     */
+    @Override
+    public List<DmsDeviceClassifyDO> getSimpleDeviceClassifyList() {
+        return dmsDeviceClassifyMapper.selectSimpleList();
+    }
+
+}

+ 55 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/devicerepair/DmsDeviceRepairService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.dms.service.devicerepair;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.devicerepair.DmsDeviceRepairDO;
+
+import javax.validation.Valid;
+
+/**
+ * 设备报修 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsDeviceRepairService {
+
+    /**
+     * 创建设备报修
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDeviceRepair(@Valid DmsDeviceRepairSaveReqVO createReqVO);
+
+    /**
+     * 更新设备报修
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDeviceRepair(@Valid DmsDeviceRepairSaveReqVO updateReqVO);
+
+    /**
+     * 删除设备报修
+     *
+     * @param id 编号
+     */
+    void deleteDeviceRepair(Long id);
+
+    /**
+     * 获得设备报修
+     *
+     * @param id 编号
+     * @return 设备报修
+     */
+    DmsDeviceRepairDO getDeviceRepair(Long id);
+
+    /**
+     * 获得设备报修分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 设备报修分页
+     */
+    PageResult<DmsDeviceRepairDO> getDeviceRepairPage(DmsDeviceRepairPageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/devicerepair/DmsDeviceRepairServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.dms.service.devicerepair;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.devicerepair.vo.DmsDeviceRepairSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.devicerepair.DmsDeviceRepairDO;
+import cn.iocoder.yudao.module.dms.dal.pgsql.devicerepair.DmsDeviceRepairMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.dms.enums.ErrorCodeConstants.DEVICE_REPAIR_NOT_EXISTS;
+
+/**
+ * 设备报修 Service 实现类
+ *
+ * @author dzx
+ */
+@Service
+@Validated
+public class DmsDeviceRepairServiceImpl implements DmsDeviceRepairService {
+
+    @Resource
+    private DmsDeviceRepairMapper deviceRepairMapper;
+
+    @Override
+    public Long createDeviceRepair(DmsDeviceRepairSaveReqVO createReqVO) {
+        // 插入
+        DmsDeviceRepairDO deviceRepair = BeanUtils.toBean(createReqVO, DmsDeviceRepairDO.class);
+        deviceRepairMapper.insert(deviceRepair);
+        // 返回
+        return deviceRepair.getId();
+    }
+
+    @Override
+    public void updateDeviceRepair(DmsDeviceRepairSaveReqVO updateReqVO) {
+        // 校验存在
+        validateDeviceRepairExists(updateReqVO.getId());
+        // 更新
+        DmsDeviceRepairDO updateObj = BeanUtils.toBean(updateReqVO, DmsDeviceRepairDO.class);
+        deviceRepairMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDeviceRepair(Long id) {
+        // 校验存在
+        validateDeviceRepairExists(id);
+        // 删除
+        deviceRepairMapper.deleteById(id);
+    }
+
+    private void validateDeviceRepairExists(Long id) {
+        if (deviceRepairMapper.selectById(id) == null) {
+            throw exception(DEVICE_REPAIR_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DmsDeviceRepairDO getDeviceRepair(Long id) {
+        return deviceRepairMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DmsDeviceRepairDO> getDeviceRepairPage(DmsDeviceRepairPageReqVO pageReqVO) {
+        return deviceRepairMapper.selectPage(pageReqVO);
+    }
+
+}

+ 105 - 0
yudao-module-dms-biz/src/main/java/cn/iocoder/yudao/module/dms/service/relationorg/DmsRelationOrgService.java

@@ -0,0 +1,105 @@
+package cn.iocoder.yudao.module.dms.service.relationorg;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsRelationOrgPageReqVO;
+import cn.iocoder.yudao.module.dms.controller.admin.relationorg.vo.DmsRelationOrgSaveReqVO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationContractDO;
+import cn.iocoder.yudao.module.dms.dal.dataobject.relationorg.DmsRelationOrgDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 往来单位 Service 接口
+ *
+ * @author dzx
+ */
+public interface DmsRelationOrgService {
+
+    /**
+     * 创建往来单位
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRelationOrg(@Valid DmsRelationOrgSaveReqVO createReqVO);
+
+    /**
+     * 更新往来单位
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRelationOrg(@Valid DmsRelationOrgSaveReqVO updateReqVO);
+
+    /**
+     * 删除往来单位
+     *
+     * @param id 编号
+     */
+    void deleteRelationOrg(Long id);
+
+    /**
+     * 获得往来单位
+     *
+     * @param id 编号
+     * @return 往来单位
+     */
+    DmsRelationOrgDO getRelationOrg(Long id);
+
+    /**
+     * 获得往来单位分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 往来单位分页
+     */
+    PageResult<DmsRelationOrgDO> getRelationOrgPage(DmsRelationOrgPageReqVO pageReqVO);
+
+    /**
+     * 获得往来单位精简列表
+     *
+     * @return 列表
+     */
+    List<DmsRelationOrgDO> getSimpleRelationOrgList();
+
+    // ==================== 子表(往来单位联系人) ====================
+
+    /**
+     * 获得往来单位联系人分页
+     *
+     * @param pageReqVO 分页查询
+     * @param orgId     来往单位ID
+     * @return 往来单位联系人分页
+     */
+    PageResult<DmsRelationContractDO> getRelationContractPage(PageParam pageReqVO, Long orgId);
+
+    /**
+     * 创建往来单位联系人
+     *
+     * @param relationContract 创建信息
+     * @return 编号
+     */
+    Long createRelationContract(@Valid DmsRelationContractDO relationContract);
+
+    /**
+     * 更新往来单位联系人
+     *
+     * @param relationContract 更新信息
+     */
+    void updateRelationContract(@Valid DmsRelationContractDO relationContract);
+
+    /**
+     * 删除往来单位联系人
+     *
+     * @param id 编号
+     */
+    void deleteRelationContract(Long id);
+
+    /**
+     * 获得往来单位联系人
+     *
+     * @param id 编号
+     * @return 往来单位联系人
+     */
+    DmsRelationContractDO getRelationContract(Long id);
+}

Some files were not shown because too many files changed in this diff