Selaa lähdekoodia

Merge branch 'han' of uskycloud/usky-modules into server-165

hanzhengyi 1 vuosi sitten
vanhempi
commit
142eb7a3fc
80 muutettua tiedostoa jossa 3774 lisäystä ja 1 poistoa
  1. 20 0
      service-alarm/pom.xml
  2. 27 0
      service-alarm/service-alarm-api/pom.xml
  3. 28 0
      service-alarm/service-alarm-api/src/main/java/com/usky/alarm/RemoteUserService.java
  4. 105 0
      service-alarm/service-alarm-api/src/main/java/com/usky/alarm/domain/SysUserVO.java
  5. 48 0
      service-alarm/service-alarm-api/src/main/java/com/usky/alarm/factory/RemoteUserFallbackFactory.java
  6. 28 0
      service-alarm/service-alarm-api/src/main/java/com/usky/iot/RemoteUserService.java
  7. 105 0
      service-alarm/service-alarm-api/src/main/java/com/usky/iot/domain/SysUserVO.java
  8. 48 0
      service-alarm/service-alarm-api/src/main/java/com/usky/iot/factory/RemoteUserFallbackFactory.java
  9. 91 0
      service-alarm/service-alarm-biz/pom.xml
  10. 45 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/RuoYiSystemApplication.java
  11. 108 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/MybatisGeneratorUtils.java
  12. 60 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/api/SysUserControllerApi.java
  13. 131 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseBuildController.java
  14. 44 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/TaskController.java
  15. 17 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/DateStringConvert.java
  16. 29 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/FormatterConfiguration.java
  17. 17 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/StringDateConverter.java
  18. 50 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/mqtt/MqttBaseConfig.java
  19. 84 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/mqtt/MqttOutConfig.java
  20. 2 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/voice/VoiceNotice.java
  21. 75 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/websocket/WebSocket.java
  22. 16 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/websocket/WebSocketConfig.java
  23. 86 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/enums/TopListener.java
  24. 153 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/job/DmpDataOverviewJob.java
  25. 25 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/mqtt/MqttStrategy.java
  26. 51 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmListVO.java
  27. 20 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmRequestVO.java
  28. 62 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmResponeVO.java
  29. 25 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmTypeRequestVO.java
  30. 48 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityRequestVO.java
  31. 25 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityTypeRequestVO.java
  32. 23 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityVO.java
  33. 16 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseFacilityDeviceVO.java
  34. 94 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityExportVo.java
  35. 23 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityInfoVO.java
  36. 24 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityListVO.java
  37. 33 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityRequest.java
  38. 40 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityTypeNumVO.java
  39. 23 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityTypeVO.java
  40. 24 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityVO.java
  41. 35 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRelateRequestVO.java
  42. 42 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRelateResponeVO.java
  43. 30 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRequestVO.java
  44. 36 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityResponeVO.java
  45. 21 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityStatusVO.java
  46. 99 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmCustomInfoExportVO.java
  47. 40 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmCustomInfoRequestVO.java
  48. 96 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoExportVO.java
  49. 41 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoRequest.java
  50. 69 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoVO.java
  51. 41 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DeviceDataInfoVO.java
  52. 46 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DeviceImportVo.java
  53. 46 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDataOverviewVO.java
  54. 113 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceExcelVO.java
  55. 42 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceExportVO.java
  56. 40 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceInfoRequest.java
  57. 25 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpProductAttributeRequest.java
  58. 29 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpProductInfoRequest.java
  59. 21 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpSoftwareUpgradeRequest.java
  60. 21 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/FacilityDeviceStatusVO.java
  61. 64 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/FacilityImportVo.java
  62. 21 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/MqttBaseVO.java
  63. 35 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/MqttDataVO.java
  64. 25 0
      service-alarm/service-alarm-biz/src/main/resources/bootstrap.yml
  65. 108 0
      service-alarm/service-alarm-biz/src/main/resources/doc/index.adoc
  66. 94 0
      service-alarm/service-alarm-biz/src/main/resources/logback.xml
  67. 15 0
      service-alarm/service-alarm-biz/src/main/resources/smart-doc.json
  68. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java
  69. 75 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmNoticeController.java
  70. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmNoticeResultController.java
  71. 106 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmNotice.java
  72. 66 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmNoticeResult.java
  73. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmNoticeMapper.java
  74. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmNoticeResultMapper.java
  75. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmNoticeResultService.java
  76. 30 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmNoticeService.java
  77. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmNoticeResultServiceImpl.java
  78. 97 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmNoticeServiceImpl.java
  79. 25 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmNoticeMapper.xml
  80. 17 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmNoticeResultMapper.xml

+ 20 - 0
service-alarm/pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>usky-modules</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-iot</artifactId>
+
+    <packaging>pom</packaging>
+    <version>0.0.1</version>
+
+    <modules>
+        <module>service-iot-biz</module>
+        <module>service-iot-api</module>
+    </modules>
+</project>

+ 27 - 0
service-alarm/service-alarm-api/pom.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service-iot</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-iot-api</artifactId>
+    <!-- SpringCloud Openfeign -->
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>usky-common-core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 28 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/alarm/RemoteUserService.java

@@ -0,0 +1,28 @@
+package com.usky.iot;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.SysUserVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@FeignClient(contextId = "remoteUserService", value = "usky-demo")
+public interface RemoteUserService {
+
+
+
+    @GetMapping("/byUserName")
+    ApiResult<List<SysUserVO>> getByUserName(@RequestParam("userName") String userName);
+
+
+    @PostMapping("/byUserName")
+    ApiResult<List<SysUserVO>> add(@RequestBody SysUserVO sysUserVO);
+
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    ApiResult<String> upload(@RequestPart(value = "file") MultipartFile file);
+}

+ 105 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/alarm/domain/SysUserVO.java

@@ -0,0 +1,105 @@
+package com.usky.iot.domain;
+
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SysUserVO {
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+
+    /**
+     * 用户类型(00系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户邮箱
+     */
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 用户性别(0男 1女 2未知)
+     */
+    private String sex;
+
+    /**
+     * 头像地址
+     */
+    private String avatar;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private LocalDateTime loginDate;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 48 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/alarm/factory/RemoteUserFallbackFactory.java

@@ -0,0 +1,48 @@
+package com.usky.iot.factory;
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.iot.RemoteUserService;
+import com.usky.iot.domain.SysUserVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+
+/**
+ * 用户服务降级处理
+ *
+ * @author ruoyi
+ */
+@Component
+public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
+{
+    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
+
+    @Override
+    public RemoteUserService create(Throwable throwable)
+    {
+        log.error("用户服务调用失败:{}", throwable.getMessage());
+        return new RemoteUserService() {
+            @Override
+            public ApiResult<List<SysUserVO>> getByUserName(String userName) {
+                throw new BusinessException(throwable.getMessage());
+            }
+
+            @Override
+            public ApiResult<List<SysUserVO>> add(SysUserVO sysUserVO) {
+                throw new BusinessException(throwable.getMessage());
+            }
+
+            @Override
+            public ApiResult<String> upload(MultipartFile file) {
+                throw new BusinessException(throwable.getMessage());
+            }
+        };
+    }
+}

+ 28 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/iot/RemoteUserService.java

@@ -0,0 +1,28 @@
+package com.usky.iot;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.SysUserVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@FeignClient(contextId = "remoteUserService", value = "usky-demo")
+public interface RemoteUserService {
+
+
+
+    @GetMapping("/byUserName")
+    ApiResult<List<SysUserVO>> getByUserName(@RequestParam("userName") String userName);
+
+
+    @PostMapping("/byUserName")
+    ApiResult<List<SysUserVO>> add(@RequestBody SysUserVO sysUserVO);
+
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    ApiResult<String> upload(@RequestPart(value = "file") MultipartFile file);
+}

+ 105 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/iot/domain/SysUserVO.java

@@ -0,0 +1,105 @@
+package com.usky.iot.domain;
+
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SysUserVO {
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+
+    /**
+     * 用户类型(00系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户邮箱
+     */
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 用户性别(0男 1女 2未知)
+     */
+    private String sex;
+
+    /**
+     * 头像地址
+     */
+    private String avatar;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private LocalDateTime loginDate;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 48 - 0
service-alarm/service-alarm-api/src/main/java/com/usky/iot/factory/RemoteUserFallbackFactory.java

@@ -0,0 +1,48 @@
+package com.usky.iot.factory;
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.iot.RemoteUserService;
+import com.usky.iot.domain.SysUserVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+
+/**
+ * 用户服务降级处理
+ *
+ * @author ruoyi
+ */
+@Component
+public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
+{
+    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
+
+    @Override
+    public RemoteUserService create(Throwable throwable)
+    {
+        log.error("用户服务调用失败:{}", throwable.getMessage());
+        return new RemoteUserService() {
+            @Override
+            public ApiResult<List<SysUserVO>> getByUserName(String userName) {
+                throw new BusinessException(throwable.getMessage());
+            }
+
+            @Override
+            public ApiResult<List<SysUserVO>> add(SysUserVO sysUserVO) {
+                throw new BusinessException(throwable.getMessage());
+            }
+
+            @Override
+            public ApiResult<String> upload(MultipartFile file) {
+                throw new BusinessException(throwable.getMessage());
+            }
+        };
+    }
+}

+ 91 - 0
service-alarm/service-alarm-biz/pom.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service-iot</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-iot-biz</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>common-cloud-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-backend-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.5.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <!--MQTT依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+        </dependency>
+        <!--websocket依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.shalousun</groupId>
+                <artifactId>smart-doc-maven-plugin</artifactId>
+                <version>2.1.1</version>
+                <configuration>
+                    <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
+                    <configFile>./src/main/resources/smart-doc.json</configFile>
+                    <!--指定项目名称-->
+                    <projectName>test</projectName>
+                    <!--                    <excludes>-->
+                    <!--                        <exclude>com.bizmatics:product-service-provider</exclude>-->
+                    <!--                        <exclude>cn.afterturn:easypoi-web</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 45 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/RuoYiSystemApplication.java

@@ -0,0 +1,45 @@
+package com.usky.iot;
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 系统模块
+ * 
+ * @author ruoyi
+ */
+
+
+@EnableFeignClients(basePackages = "com.usky")
+@MapperScan(value = "com.usky.iot.mapper")
+@ComponentScan("com.usky")
+@SpringBootApplication
+public class RuoYiSystemApplication
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
+
+    public static void main(String[] args) throws UnknownHostException {
+        ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
+        Environment env = application.getEnvironment();
+        String ip = InetAddress.getLocalHost().getHostAddress();
+        String port = env.getProperty("server.port");
+        String path = env.getProperty("server.servlet.context-path");
+        LOGGER.info("\n----------------------------------------------------------\n\t" +
+                "Application is running! Access URLs:\n\t" +
+                "Local: \t\thttp://localhost:" + port + (null==path?"":path) + "/\n\t" +
+                "External: \thttp://" + ip + ":" + port + (null==path?"":path) + "/\n\t" +
+                "Api: \t\thttp://" + ip + ":" + port + (null==path?"":path) + "/swagger-ui/index.html\n\t" +
+                "----------------------------------------------------------");
+    }
+}

+ 108 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/MybatisGeneratorUtils.java

@@ -0,0 +1,108 @@
+package com.usky.iot.controller;//package com.usky.iot.controller;//package com.usky.dm.controller.web.business;//package com.usky.dm.controller.web;
+
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/7/6 11:42
+ */
+public class MybatisGeneratorUtils {
+    public static void main(String[] args) {
+
+            shell("service-iot","service-iot-biz");
+    }
+
+    private static void shell(String parentName,String model) {
+
+        AutoGenerator mpg = new AutoGenerator();
+        //1、全局配置
+        GlobalConfig gc = new GlobalConfig();
+//        File file = new File(model);
+//        String path = file.getAbsolutePath();
+        String projectPath = System.getProperty("user.dir");
+        projectPath+="/"+parentName;
+        projectPath+="/"+model;
+        gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
+        //修改为自己的名字
+        gc.setAuthor("han"); //设置作者
+        gc.setOpen(false);
+        gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
+        gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
+        gc.setBaseResultMap(true); //生成resultMap
+        mpg.setGlobalConfig(gc);
+
+        //2、数据源配置
+        //修改数据源
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-cloud?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setDriverName("com.mysql.jdbc.Driver");
+        dsc.setUsername("usky");
+        dsc.setPassword("Yt#75Usky");
+        mpg.setDataSource(dsc);
+
+        // 3、包配置
+        PackageConfig pc = new PackageConfig();
+        pc.setParent("com.usky.iot");
+        pc.setController("controller.web");
+        pc.setEntity("domain");
+        pc.setMapper("mapper");
+        pc.setService("service");
+        pc.setServiceImpl("service.impl");
+//        pc.setXml("mapper.demo");
+        //pc.setModuleName("test");
+        mpg.setPackageInfo(pc);
+
+        // 4、策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setSuperMapperClass("com.usky.common.mybatis.core.CrudMapper");
+        strategy.setSuperServiceClass("com.usky.common.mybatis.core.CrudService");
+        strategy.setSuperServiceImplClass("com.usky.common.mybatis.core.AbstractCrudService");
+        // strategy.setTablePrefix("t_"); // 表名前缀
+        strategy.setEntityLombokModel(true); //使用lombok
+        //修改自己想要生成的表
+        strategy.setInclude("base_build");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        mpg.setStrategy(strategy);
+
+        // 关闭默认 xml 生成,调整生成 至 根目录
+        //修改对应的模块名称
+        TemplateConfig tc = new TemplateConfig();
+        // 自定义配置
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+        //如果模板引擎是 velocity
+        String templatePath = "/templates/mapper.xml.vm";
+        // 自定义输出配置
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+        String finalProjectPath = projectPath;
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+                return finalProjectPath + "/src/main/resources/mapper/iot" + "/"
+                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+        tc.setXml(null);
+        mpg.setTemplate(tc);
+        //5、执行
+        mpg.execute();
+    }
+}

+ 60 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/api/SysUserControllerApi.java

@@ -0,0 +1,60 @@
+//package com.usky.iot.controller.api;
+//
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import com.usky.common.core.bean.ApiResult;
+//import com.usky.common.core.exception.BusinessException;
+//import com.usky.common.core.util.BeanMapperUtils;
+//import com.usky.common.core.util.FileUtils;
+//import com.usky.common.core.util.GlobalUtils;
+//import com.usky.iot.domain.SysUser;
+//import com.usky.iot.service.SysUserService;
+//import com.usky.system.RemoteUserService;
+//import com.usky.system.domain.SysUserVO;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.RestController;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.io.File;
+//import java.io.IOException;
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Optional;
+//
+//@RestController
+//public class SysUserControllerApi implements RemoteUserService {
+//
+//    @Autowired
+//    private SysUserService sysUserService;
+//    @Override
+//    public ApiResult<List<SysUserVO>> getByUserName(String userName) {
+//        LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
+//        queryWrapper.eq(SysUser::getUserName,userName);
+//        return ApiResult.success(BeanMapperUtils.mapList(sysUserService.list(queryWrapper),SysUser.class,SysUserVO.class));
+//    }
+//
+//    @Override
+//    public ApiResult<List<SysUserVO>> add(SysUserVO sysUserVO) {
+//        sysUserService.save(BeanMapperUtils.map(sysUserVO, SysUser.class));
+//        return ApiResult.success(new ArrayList<>());
+//    }
+//
+//    @Override
+//    public ApiResult<String> upload(MultipartFile multipartFile) {
+//        Optional.ofNullable(multipartFile).orElseThrow(() ->  new BusinessException("文件为空"));
+//        String originalFilename = multipartFile.getOriginalFilename();
+//        String newFileName = System.currentTimeMillis() + originalFilename;
+//        File file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), newFileName);
+//        String urlPath = "";
+//        try {
+//            try {
+//                multipartFile.transferTo(file);
+//            } catch (IOException e) {
+//                throw new BusinessException("文件上传失败");
+//            }
+//        } catch (Exception e) {
+//
+//        }
+//        return ApiResult.success(urlPath);
+//    }
+//}

+ 131 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseBuildController.java

@@ -0,0 +1,131 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.BaseBuildFacility;
+import com.usky.iot.domain.BaseBuildFacilityType;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.service.BaseBuildService;
+import com.usky.iot.service.vo.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 建筑信息 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-06-07
+ */
+@RestController
+@RequestMapping("/baseBuild")
+public class BaseBuildController {
+    @Autowired
+    private BaseBuildService baseBuildService;
+
+    /**
+     * 新增
+     * @param baseBuild
+     * @return
+     */
+    @PostMapping
+    ApiResult<Void> add(@RequestBody BaseBuild baseBuild){
+        baseBuildService.add(baseBuild);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param baseBuild
+     * @return
+     */
+    @PutMapping
+    ApiResult<Void> update(@RequestBody BaseBuild baseBuild){
+        baseBuildService.update(baseBuild);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    ApiResult<Void> remove(@PathVariable("id") Integer id){
+        baseBuildService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 列表
+     * @param id
+     * @return
+     */
+    @GetMapping("dataList")
+    ApiResult<List<BaseBuild>> dataList(@RequestParam(value = "id",required = false) Integer id){
+        return ApiResult.success(baseBuildService.dataList(id));
+    }
+
+    /**
+     * 关联设施信息列表
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("buildFacilityRelateList")
+    ApiResult<CommonPage<BuildFacilityRelateResponeVO>> buildFacilityRelateList(@RequestBody BuildFacilityRelateRequestVO requestVO){
+        return ApiResult.success(baseBuildService.buildFacilityRelateList(requestVO));
+    }
+
+    /**
+     * 建筑设施绑定
+     * @param statusVO
+     * @return
+     */
+    @PostMapping("setBuildFacilityStatus")
+    ApiResult<Void> setBuildFacilityStatus(@RequestBody BuildFacilityStatusVO statusVO){
+        baseBuildService.setBuildFacilityStatus(statusVO);
+        return ApiResult.success();
+    }
+
+    /**
+     * 建筑设施关联查询
+     *
+     * @param baseBuildFacilityVO
+     * @return
+     */
+    @PostMapping("buildFacilityInfo")
+    public ApiResult<List<Object>> buildFacilityInfo(@RequestBody BaseBuildFacilityVO baseBuildFacilityVO) {
+        return ApiResult.success(baseBuildService.buildFacilityInfo(baseBuildFacilityVO));
+    }
+
+    /**
+     * 类型设施关联查询
+     *
+     * @param baseBuildFacilityVO
+     * @return
+     */
+    @PostMapping("typeFacilityInfo")
+    public ApiResult<List<BaseBuildFacility>> typeFacilityInfo(@RequestBody BaseBuildFacilityVO baseBuildFacilityVO) {
+        return ApiResult.success(baseBuildService.typeFacilityInfo(baseBuildFacilityVO));
+    }
+
+    /**
+     * 建筑关联类型查询
+     * @param id  主键ID
+     * @return
+     */
+    @GetMapping("buildTypeInfo")
+    public ApiResult<List<BaseBuildFacilityType>> buildTypeInfo(@RequestParam(value = "id") Integer id) {
+        return ApiResult.success(baseBuildService.buildTypeInfo(id));
+    }
+}
+
+
+
+
+

+ 44 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/TaskController.java

@@ -0,0 +1,44 @@
+package com.usky.iot.controller.web;
+
+import com.usky.iot.service.CrmCustomInfoService;
+import com.usky.iot.service.DmpDeviceStatusService;
+import com.usky.iot.service.job.DmpDataOverviewJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zyj
+ * @since 2023-06-05
+ */
+@EnableScheduling
+@Component
+public class TaskController {
+    @Autowired
+    private DmpDataOverviewJob dmpDataOverviewJob;
+
+    @Autowired
+    private DmpDeviceStatusService dmpDeviceStatusService;
+
+    @Autowired
+    private CrmCustomInfoService crmCustomInfoService;
+
+    @Scheduled(cron = "0 0 1 * * ? ") //每天凌晨1点执行
+    public void task() {
+        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
+        dmpDataOverviewJob.execute();
+    }
+//    @Scheduled(cron = "0 0/1 * * * ? ") //每天凌晨1点执行
+//    public void task1() {
+//        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
+//        dmpDeviceStatusService.status();
+//    }
+
+    @Scheduled(cron = "0 30 * * * ? ") //每天凌晨0点30分执行
+    public void task2() {
+        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
+        crmCustomInfoService.updateStatus();
+    }
+
+}

+ 17 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/DateStringConvert.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service.config;
+
+
+import com.usky.common.core.util.DateUtils;
+import org.springframework.core.convert.converter.Converter;
+
+import java.util.Date;
+
+/**
+ * @author yq
+ */
+public class DateStringConvert implements Converter<Date, String> {
+    @Override
+    public String convert(Date source) {
+        return DateUtils.format(source);
+    }
+}

+ 29 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/FormatterConfiguration.java

@@ -0,0 +1,29 @@
+package com.usky.iot.service.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.format.support.FormattingConversionService;
+import org.springframework.http.converter.ObjectToStringHttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author yq
+ */
+@Configuration
+public class FormatterConfiguration implements WebMvcConfigurer {
+
+    @Override
+    public void addFormatters(FormatterRegistry registry) {
+        registry.addConverter(new StringDateConverter());
+    }
+
+    @Bean
+    public ObjectToStringHttpMessageConverter objectToStringHttpMessageConverter() {
+        FormattingConversionService conversionService = new FormattingConversionService();
+        conversionService.addConverter(new StringDateConverter());
+        conversionService.addConverter(new DateStringConvert());
+        ObjectToStringHttpMessageConverter httpMessageconverter = new ObjectToStringHttpMessageConverter(conversionService);
+        return httpMessageconverter;
+    }
+}

+ 17 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/StringDateConverter.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service.config;
+
+
+import com.usky.common.core.util.DateUtils;
+import org.springframework.core.convert.converter.Converter;
+
+import java.util.Date;
+
+/**
+ * @author yq
+ */
+public class StringDateConverter implements Converter<String, Date> {
+    @Override
+    public Date convert(String source) {
+        return DateUtils.parseDate(source);
+    }
+}

+ 50 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/mqtt/MqttBaseConfig.java

@@ -0,0 +1,50 @@
+package com.usky.iot.service.config.mqtt;
+
+import lombok.Data;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
+import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
+import org.springframework.stereotype.Component;
+
+@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
+@Data
+@Component
+@ConfigurationProperties(prefix = "mqtt")
+public class MqttBaseConfig {
+
+	@Value("${mqtt.username}")
+	private String username;
+
+	@Value("${mqtt.password}")
+	private String password;
+
+	@Value("${mqtt.url}")
+	private String hostUrl;
+
+	@Value("${mqtt.sub-topics}")
+	private String msgTopic;
+
+	@Value("${mqtt.keep-alive-interval}")
+	//心跳间隔
+	private int keepAliveInterval;
+	@Value("${mqtt.completionTimeout}")
+	//心跳间隔
+	private int completionTimeout;
+
+
+	@Bean
+	public MqttPahoClientFactory mqttClientFactory() {
+		DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
+		MqttConnectOptions options = new MqttConnectOptions();
+		options.setServerURIs(new String[]{this.getHostUrl()});
+		options.setUserName(this.getUsername());
+		options.setPassword(this.getPassword().toCharArray());
+		factory.setConnectionOptions(options);
+		return factory;
+	}
+
+}

+ 84 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/mqtt/MqttOutConfig.java

@@ -0,0 +1,84 @@
+package com.usky.iot.service.config.mqtt;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.integration.annotation.MessagingGateway;
+import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.integration.channel.DirectChannel;
+import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
+import org.springframework.integration.mqtt.support.MqttHeaders;
+import org.springframework.messaging.MessageChannel;
+import org.springframework.messaging.MessageHandler;
+import org.springframework.messaging.handler.annotation.Header;
+
+@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
+@Configuration
+public class MqttOutConfig {
+
+    @Autowired
+    public MqttBaseConfig mqttBaseConfig;
+
+    public static final String CHANNEL_NAME_OUT = "mqttOutboundChannel";
+
+    public static final String MESSAGE_NAME = "messageOut";
+
+    public static final String DEFAULT_TOPIC = "testTopic";
+
+    /**
+     * 连接通道
+     *
+     * @return
+     */
+    @Bean(name = CHANNEL_NAME_OUT)
+    public MessageChannel mqttOutboundChannel() {
+        return new DirectChannel();
+    }
+
+    /**
+     * 发送消息和消费消息Channel可以使用相同MqttPahoClientFactory
+     *
+     * @return
+     */
+    @Bean(name = MESSAGE_NAME)
+    @ServiceActivator(inputChannel = CHANNEL_NAME_OUT)
+    public MessageHandler outbound() {
+        // 在这里进行mqttOutboundChannel的相关设置
+        String clientId = "h-backend-mqtt-out-" + System.currentTimeMillis();
+        MqttPahoMessageHandler messageHandler =
+                new MqttPahoMessageHandler(clientId, mqttBaseConfig.mqttClientFactory());
+        //如果设置成true,发送消息时将不会阻塞。
+        messageHandler.setAsync(true);
+        messageHandler.setDefaultTopic(DEFAULT_TOPIC);
+        return messageHandler;
+    }
+
+    @MessagingGateway(defaultRequestChannel = CHANNEL_NAME_OUT)
+    public interface MqttGateway {
+        /**
+         * 发送消息
+         *
+         * @param payload
+         */
+        void sendToMqtt(String payload);
+
+        /**
+         * 指定top发送消息
+         *
+         * @param topic
+         * @param payload
+         */
+        void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, String payload);
+
+        /**
+         * 指定队列和qos
+         *
+         * @param topic
+         * @param qos
+         * @param payload
+         */
+        void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);
+    }
+}

+ 2 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/voice/VoiceNotice.java

@@ -0,0 +1,2 @@
+package com.usky.alarm.service.config.voice;public class VoiceNotice {
+}

+ 75 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/websocket/WebSocket.java

@@ -0,0 +1,75 @@
+package com.usky.iot.service.config.websocket;
+
+import cn.hutool.json.JSONUtil;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint(value = "/websocket/{userId}")
+@Component
+public class WebSocket {
+    private static ConcurrentHashMap<String, WebSocket> webSocketMap = new ConcurrentHashMap<>();
+    //实例一个session,这个session是websocket的session
+    private Session session;
+
+    //新增一个方法用于主动向客户端发送消息
+    public void sendMessage(Object message, String userId) {
+        Iterator<Map.Entry<String, WebSocket>> iterator = webSocketMap.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, WebSocket> entry = iterator.next();
+            int index = entry.getKey().indexOf(",");
+            String result = entry.getKey().substring(0, index);
+            if (result.equals(userId)){
+                if (entry.getValue() != null) {
+                    try {
+                        entry.getValue().session.getBasicRemote().sendText(JSONUtil.toJsonStr(message));
+                        System.out.println("【websocket消息】发送消息成功,用户=" + userId + ",消息内容" + message.toString());
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
+    public static ConcurrentHashMap<String, WebSocket> getWebSocketMap() {
+        return webSocketMap;
+    }
+
+    public static void setWebSocketMap(ConcurrentHashMap<String, WebSocket> webSocketMap) {
+        WebSocket.webSocketMap = webSocketMap;
+    }
+
+    //前端请求时一个websocket时
+    @OnOpen
+    public void onOpen(Session session, @PathParam("userId") String userId) {
+        this.session = session;
+        webSocketMap.put(userId, this);
+        sendMessage("CONNECT_SUCCESS", userId);
+        System.out.println("【websocket消息】有新的连接,连接id" + userId);
+    }
+
+    //前端关闭时一个websocket时
+    @OnClose
+    public void onClose(@PathParam("userId") String userId) {
+        webSocketMap.remove(userId);
+        System.out.println("【websocket消息】连接断开,总数:" + webSocketMap.size());
+    }
+
+    //前端向后端发送消息
+    @OnMessage
+    public void onMessage(String message) {
+        if (!message.equals("ping")) {
+            System.out.println("【websocket消息】收到客户端发来的消息:" + message);
+        }
+    }
+}

+ 16 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/websocket/WebSocketConfig.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service.config.websocket;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+//开启WebSocket的支持,并把该类注入到spring容器中
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+
+}

+ 86 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/enums/TopListener.java

@@ -0,0 +1,86 @@
+package com.usky.iot.service.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/12/31 11:11
+ */
+public enum TopListener {
+
+    /**
+     * 城运对接
+     */
+    MH_WATER_INFO("fireInfo","mh/water/info",1),
+    MH_WATER_ALERT("fireInfo","mh/water/alert",1),
+    MH_WATER_STATISTICS("fireInfo","mh/water/statistics",1),
+    DEVICE_INFO("fireInfo","device/info",1),
+    DEVICE_ALERT("fireInfo","device/alert",1),
+    DEVICE_DETAIL("fireInfo","device/detail",1),
+    DEVICE_AJ("fireInfo","device/aj",1),
+
+    /**
+     * 全部设备对接
+     */
+    FIRE_INFO("fireInfo","/usky/ytDP0001/+/+/info",1),
+    FIRE_ALERT("fireAlarm","/usky/ytDP0001/+/+/alarm",1),
+    WATER_INFO("waterInfo","/usky/ytDP0002/+/+/info",1),
+    WATER_ALERT("waterAlert","/usky/ytDP0002/+/+/alarm",1),
+    SMOKE_INFO("smokeInfo","/usky/ytDP0003/+/+/info",1),
+    SMOKE_ALERT("smokeAlarm","/usky/ytDP0003/+/+/alarm",1),
+    LIQUID_INFO("waterInfo","/usky/ytDP0005/+/+/info",1),
+    LIQUID_ALERT("waterAlert","/usky/ytDP0005/+/+/alarm",1),
+    RTU_INFO("rtuinfo","/usky/ytDP0006/+/+/info",1),
+    RTU_ALERT("rtuAlert","/usky/ytDP0006/+/+/alarm",1),
+    ELECTRICAL_INFO("electricalInfo","/usky/ytDP0007/+/+/info",1),
+    ELECTRICAL_ALERT("electricalAlarm","/usky/ytDP0007/+/+/alarm",1),
+    MH_COVER_INFO("waterInfo","/usky/ytDP0008/+/+/info",1),
+    MH_COVER_ALERT("waterAlert","/usky/ytDP0008/+/+/alarm",1),
+    VIDEO_ALERT("videoAlert","/usky/ytCamCore/+/+/alarm",1),
+    LR_SMOKE_INFO("smokeInfo","/usky/ytDP00033/+/+/info",1),
+    LR_SMOKE_ALERT("smokeAlarm","/usky/ytDP00033/+/+/alarm",1);
+
+
+
+
+    private String name;
+    private String code;
+    //0发送队列,1监听队列2都是
+    private Integer type;
+
+    TopListener(String name, String code, Integer type){
+        this.name = name;
+        this.code = code;
+        this.type = type;
+    }
+
+    public static TopListener parse(String code){
+        TopListener topListener = null;
+        for (TopListener t:TopListener.values()) {
+            if (t.getCode().equals(code)){
+                topListener = t;
+                break;
+            }
+        }
+        return topListener;
+    }
+    public static List<TopListener> parse(Integer type){
+        List<TopListener> listeners = new ArrayList<>();
+        for (TopListener t:TopListener.values()) {
+            if (t.getType().equals(type)){
+                listeners.add(t);
+            }
+        }
+        return listeners;
+    }
+    public String getCode(){
+        return code;
+    }
+    public String getName(){
+        return name;
+    }
+    public Integer getType(){
+        return type;
+    }
+}

+ 153 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/job/DmpDataOverviewJob.java

@@ -0,0 +1,153 @@
+package com.usky.iot.service.job;
+
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.util.Arith;
+import com.usky.common.core.util.DateUtils;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.DmpDataOverview;
+import com.usky.iot.mapper.DmpDeviceStatusMapper;
+import com.usky.iot.service.DmpDataOverviewService;
+import com.usky.iot.service.vo.DmpDataOverviewVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class DmpDataOverviewJob {
+
+
+    @Autowired
+    private DmpDeviceStatusMapper dmpDeviceStatusMapper;
+
+    @Autowired
+    private DmpDataOverviewService dmpDataOverviewService;
+
+    public void execute(){
+        deviceCount();
+    }
+
+    /**
+     * 设备量分析
+     */
+    public void deviceCount(){
+        Date date = new Date();
+        Date dayStartTime = DateUtils.getDayStartTime(date);
+        Date dayEndTime = DateUtils.getDayEndTime(date);
+        Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date);
+        Date lastDayOfMonth = DateUtils.getLastDayOfMonth(date);
+
+        Date date1 = DateUtils.setHours(date, 0);
+        Date date2 = DateUtils.setMinutes(date1, 0);
+        Date date3 = DateUtils.setSeconds(date2, 0);
+        Date date4 = DateUtils.setDays(date3, 1);
+        //产品日
+        List<DmpDataOverview> dmpDataOverviews = new ArrayList<>();
+        List<DmpDataOverviewVO> list = getListMap(null, dayStartTime, dayEndTime);
+        //计算产品活跃占比
+        checkRadio(list);
+        for (DmpDataOverviewVO dvo : list) {
+            DmpDataOverview dmpDataOverview = new DmpDataOverview();
+            dmpDataOverview.setCreatedTime(date3);
+            dmpDataOverview.setProductId(dvo.getProductId());
+            dmpDataOverview.setDeviceNumber(JSON.toJSONString(dvo));
+            dmpDataOverviews.add(dmpDataOverview);
+        }
+        dmpDataOverviewService.saveBatch(dmpDataOverviews);
+        //产品月
+        List<DmpDataOverviewVO> monthList = getListMap(null, firstDayOfMonth, lastDayOfMonth);
+        //活跃产品月
+        List<DmpDataOverviewVO> hyList = getHyListMap(null, firstDayOfMonth, lastDayOfMonth);
+        for (DmpDataOverviewVO dmpDataOverviewVO : monthList) {
+            hyList.stream().filter(hy -> Objects.equals(hy.getProductId(), dmpDataOverviewVO.getProductId()))
+                    .findFirst()
+                    .ifPresent(hy -> dmpDataOverviewVO.setHyCount(hy.getHyCount()));
+        }
+        //统计全部时间数据
+        List<DmpDataOverviewVO> allList = getListMap(null, null, null);
+        //计算占比
+        checkRadio(monthList);
+        //查看对应月份数据是否存在
+        List<DmpDataOverview> listByTimeAndIds = getListByTimeAndIds(monthList, firstDayOfMonth,lastDayOfMonth);
+        for (DmpDataOverviewVO dmpDataOverviewVO : monthList) {
+            DmpDataOverview dd = listByTimeAndIds.stream()
+                    .filter(dm -> dmpDataOverviewVO.getProductId().equals(dm.getProductId()) && DateUtils.isSameDay(dm.getCreatedTime(),date4))
+                    .findAny()
+                    .map(dm -> {
+                        dm.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
+                        return dm;
+                    })
+                    .orElseGet(() -> {
+                        DmpDataOverview dmpDataOverview = new DmpDataOverview();
+                        dmpDataOverview.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
+                        dmpDataOverview.setProductId(dmpDataOverviewVO.getProductId());
+                        dmpDataOverview.setCreatedTime(date4);
+                        dmpDataOverview.setCycleType(2);
+                        listByTimeAndIds.add(dmpDataOverview);
+                        return dmpDataOverview;
+                    });
+            allList.stream()
+                    .filter(dvo -> dvo.getProductId().equals(dd.getProductId()))
+                    .findAny()
+                    .ifPresent(dvo -> dd.setMiddleStatistic(JSON.toJSONString(dvo)));
+        }
+        dmpDataOverviewService.saveOrUpdateBatch(listByTimeAndIds);
+    }
+
+    /**
+     * 统计月信息
+     * @param productIds
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    public List<DmpDataOverview> getListByTimeAndIds(List<DmpDataOverviewVO> productIds,Date startTime,Date endTime){
+        if (CollectionUtils.isNotEmpty(productIds)){
+            List<Integer> productId = productIds.stream()
+                    .map(DmpDataOverviewVO::getProductId)
+                    .collect(Collectors.toList());
+            LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.in(DmpDataOverview::getProductId,productId)
+                    .between(DmpDataOverview::getCreatedTime,startTime,endTime)
+                    .eq(DmpDataOverview::getCycleType,2);
+            return dmpDataOverviewService.list(queryWrapper);
+        }else {
+            return new ArrayList<>();
+        }
+    }
+
+    public List<DmpDataOverviewVO> getHyListMap(Integer productId,Date startTime,Date endTime){
+        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getMonthHyCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllMonthHyCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+        joinList(list,map);
+        return list;
+    }
+
+    public List<DmpDataOverviewVO> getListMap(Integer productId,Date startTime,Date endTime){
+        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getDeviceStatusCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+        //全部产品日
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+        joinList(list,map);
+        return list;
+    }
+
+    public void joinList(List<DmpDataOverviewVO> list,DmpDataOverviewVO map){
+        Optional.ofNullable(map).ifPresent(map1 -> map.setProductId(0));
+        list.add(map);
+    }
+
+
+    public void checkRadio(List<DmpDataOverviewVO> list){
+        list.forEach(dmpDataOverviewVO -> {
+            dmpDataOverviewVO.setJhRadioCount((null == dmpDataOverviewVO.getDeviceCount() || 0 == dmpDataOverviewVO.getDeviceCount())?0.00: Arith.div(dmpDataOverviewVO.getJhCount(),dmpDataOverviewVO.getDeviceCount()));
+            dmpDataOverviewVO.setHyRadioCount((null == dmpDataOverviewVO.getDeviceCount() || 0 == dmpDataOverviewVO.getDeviceCount())?0.00:Arith.div(dmpDataOverviewVO.getHyCount(),dmpDataOverviewVO.getDeviceCount()));
+        });
+    }
+
+
+}

+ 25 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/mqtt/MqttStrategy.java

@@ -0,0 +1,25 @@
+package com.usky.iot.service.mqtt;
+
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.usky.iot.service.vo.MqttBaseVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 策略类
+ *
+ * @author yq
+ * @date 2021/11/3 8:27
+ */
+public interface MqttStrategy {
+    /**
+     * 处理消息(策略模式由子类实现)
+     *
+     * @param mqttBaseVO
+     * @return
+     */
+    String disposeMessage(MqttBaseVO mqttBaseVO);
+
+}

+ 51 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmListVO.java

@@ -0,0 +1,51 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseAlarmListVO {
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 告警类型
+     */
+    private String alarmType;
+
+    /**
+     * 处理状态;0 未处理,1 已处理
+     */
+    private Integer handleStatus;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+}

+ 20 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmRequestVO.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseAlarmRequestVO {
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+}

+ 62 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmResponeVO.java

@@ -0,0 +1,62 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseAlarmResponeVO {
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 设备类型编码
+     */
+    private Integer deviceType;
+
+    /**
+     * 告警总数
+     */
+    private Integer total;
+
+    /**
+     * 待处理
+     */
+    private Integer untreated;
+
+    /**
+     * 已处理
+     */
+    private Integer processed;
+
+    /**
+     * 处置率
+     */
+    private float processRate;
+
+    /**
+     * 设备数
+     */
+    private Integer deviceCount;
+
+    /**
+     * 离线告警待处理
+     */
+    private Integer offLineUntreated;
+
+    /**
+     * 离线告警已处理
+     */
+    private Integer offLineProcessed;
+
+    /**
+     * 离线告警处置率
+     */
+    private float offLineProcessRate;
+}

+ 25 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseAlarmTypeRequestVO.java

@@ -0,0 +1,25 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseAlarmTypeRequestVO {
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 类型编码
+     */
+    private String typeCode;
+
+    /**
+     * 类型名称
+     */
+    private String typeName;
+}

+ 48 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityRequestVO.java

@@ -0,0 +1,48 @@
+package com.usky.iot.service.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+@Data
+public class BaseBuildFacilityRequestVO {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 建筑Id
+     */
+    private Integer buildId;
+
+    /**
+     * 建筑名称
+     */
+    private String buildName;
+
+    /**
+     * 建筑设施编号
+     */
+    private String facilityNum;
+
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+
+    /**
+     * 设施类型编码
+     */
+    private String facilityType;
+}

+ 25 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityTypeRequestVO.java

@@ -0,0 +1,25 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseBuildFacilityTypeRequestVO {
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 类型编码
+     */
+    private String typeCode;
+
+    /**
+     * 类型名称
+     */
+    private String typeName;
+}

+ 23 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseBuildFacilityVO.java

@@ -0,0 +1,23 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-08-07
+ */
+@Data
+public class BaseBuildFacilityVO {
+
+        private Integer id;
+
+        private List<String> facilityType;
+
+        private String floor;
+}

+ 16 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseFacilityDeviceVO.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseFacilityDeviceVO {
+    private Integer facilityId;
+    private String facilityName;
+    private String address;
+
+    public BaseFacilityDeviceVO(Integer id,String name,String addr){
+        this.facilityId = id;
+        this.facilityName = name;
+        this.address = addr;
+    }
+}

+ 94 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityExportVo.java

@@ -0,0 +1,94 @@
+package com.usky.iot.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 地理设施表
+ * </p>
+ *
+ * @author han
+ * @since 2023-06-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class BaseGgpFacilityExportVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 序号
+     */
+    @Excel(name = "序号")
+    private Integer xh;
+
+    /**
+     * 设施编号
+     */
+    @Excel(name = "设施编号")
+    private String facilityNum;
+
+    /**
+     * 设施类型
+     */
+    @Excel(name = "设施类型")
+    private String facilityType;
+
+    /**
+     * 设施名称
+     */
+    @Excel(name = "设施名称")
+    private String facilityName;
+
+    /**
+     * 设施地址
+     */
+    @Excel(name = "设施地址")
+    private String address;
+
+    /**
+     * 图片地址URL
+     */
+    @Excel(name = "设施图片")
+    private String imagesUrl;
+
+    /**
+     * 联系人
+     */
+    @Excel(name = "联系人")
+    private String contact;
+
+    /**
+     * 联系方式
+     */
+    @Excel(name = "联系方式")
+    private String contactPhone;
+
+    /**
+     * 设施状态
+     */
+    @Excel(name = "设施状态", readConverterExp = "0=正常,1=维修,2=关闭")
+    private Integer status;
+
+    /**
+     * 开始时间
+     */
+    @Excel(name = "创建时间")
+    private String createTime;
+
+
+}

+ 23 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityInfoVO.java

@@ -0,0 +1,23 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BaseGgpFacilityInfoVO {
+
+    /**
+     * 设施类型数
+     */
+    private Integer typeNum;
+    /**
+     * 设施总数
+     */
+    private Integer facilityNum;
+
+    /**
+     * 设施类型集合
+     */
+    private List<BaseGgpFacilityTypeNumVO> baseGgpFacilityTypeNumVO;
+}

+ 24 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityListVO.java

@@ -0,0 +1,24 @@
+package com.usky.iot.service.vo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.usky.iot.domain.BaseGgpFacility;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-02-22
+ */
+@Data
+public class BaseGgpFacilityListVO {
+
+        private BaseGgpFacility baseGgpFacility;
+
+        private JSONObject extendData;
+
+}

+ 33 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityRequest.java

@@ -0,0 +1,33 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseGgpFacilityRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+    /**
+     * 设施编号
+     */
+    private String facilityNum;
+    /**
+     * 设施类型
+     */
+    private Integer facilityType;
+    /**
+     * id
+     */
+    private Integer id;
+}

+ 40 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityTypeNumVO.java

@@ -0,0 +1,40 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BaseGgpFacilityTypeNumVO {
+
+    /**
+     * 设施类型名称
+     */
+    private String typeName;
+    /**
+     * 设施类型编码
+     */
+    private String typeCode;
+    /**
+     * 设施类型图片
+     */
+    private String typeImg;
+    /**
+     * 设施类型对应设施数量
+     */
+    private Integer typeFacilityNum;
+    /**
+     * 设施类型对应正常设施数量
+     */
+    private Integer normalFacilityNum;
+    /**
+     * 设施类型对应维修设施数量
+     */
+    private Integer upkeepFacilityNum;
+    /**
+     * 设施类型对应关闭设施数量
+     */
+    private Integer closeFacilityNum;
+    /**
+     * id
+     */
+    private Integer id;
+}

+ 23 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityTypeVO.java

@@ -0,0 +1,23 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BaseGgpFacilityTypeVO {
+
+    /**
+     * 设施类型数
+     */
+    private Integer typeNum;
+    /**
+     * 设施总数
+     */
+    private Integer facilityNum;
+
+    /**
+     * 设施类型集合
+     */
+    private List<BaseGgpFacilityTypeNumVO> baseGgpFacilityTypeNumVO;
+}

+ 24 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BaseGgpFacilityVO.java

@@ -0,0 +1,24 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-04-06
+ */
+@Data
+public class BaseGgpFacilityVO {
+
+        private Integer id;
+
+        private String streetTown;
+
+        private List<Integer> facilityType;
+
+}

+ 35 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRelateRequestVO.java

@@ -0,0 +1,35 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BuildFacilityRelateRequestVO {
+    /**
+     * 建筑id
+     */
+    private Integer buildId;
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 设施编号
+     */
+    private String facilityNum;
+
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+
+    /**
+     * 设施类型编码
+     */
+    private String facilityType;
+}

+ 42 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRelateResponeVO.java

@@ -0,0 +1,42 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BuildFacilityRelateResponeVO {
+
+    /**
+     * 建筑id
+     */
+    private Integer buildId;
+
+    /**
+     * 设施Id
+     */
+    private Integer facilityId;
+
+    /**
+     * 设施编号
+     */
+    private String facilityNum;
+
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+
+    /**
+     * 设施类型名称
+     */
+    private String facilityType;
+
+    /**
+     * 设施地址
+     */
+    private String address;
+
+    /**
+     * 绑定状态(0 解绑,1 绑定)
+     */
+    private Integer status;
+}

+ 30 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityRequestVO.java

@@ -0,0 +1,30 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BuildFacilityRequestVO {
+    /**
+     * 建筑设施表-id
+     */
+    private Integer baseBuildFacilityId;
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 设备信息表-设备ID
+     */
+    private String deviceId;
+
+    /**
+     * 设备类型编码
+     */
+    private Integer deviceType;
+}

+ 36 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityResponeVO.java

@@ -0,0 +1,36 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BuildFacilityResponeVO {
+    /**
+     * 建筑设施表-id
+     */
+    private Integer baseBuildFacilityId;
+
+    /**
+     * 设备Id
+     */
+    private String deviceId;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 设备类型名称
+     */
+    private String deviceTypeName;
+
+    /**
+     * 设备地址
+     */
+    private String installAddress;
+
+    /**
+     * 绑定状态(0 解绑,1 绑定)
+     */
+    private Integer status;
+}

+ 21 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/BuildFacilityStatusVO.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class BuildFacilityStatusVO {
+    /**
+     * 建筑id
+     */
+    private Integer buildId;
+
+    /**
+     * 设施Id
+     */
+    private Integer facilityId;
+
+    /**
+     * 绑定状态(0 解绑,1 绑定)
+     */
+    private Integer status;
+}

+ 99 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmCustomInfoExportVO.java

@@ -0,0 +1,99 @@
+package com.usky.iot.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 客户管理信息表-导出
+ * </p>
+ *
+ * @author han
+ * @since 2023-06-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CrmCustomInfoExportVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 项目编号
+     */
+    @Excel(name = "项目编号")
+    private String projectId;
+
+    /**
+     * 项目名称
+     */
+    @Excel(name = "项目名称")
+    private String projectName;
+
+    /**
+     * 单位名称
+     */
+    @Excel(name = "单位名称")
+    private String companyName;
+
+    /**
+     * 客户负责人
+     */
+    @Excel(name = "客户负责人")
+    private String customPerson;
+
+    /**
+     * 客户电话
+     */
+    @Excel(name = "客户电话")
+    private String phone;
+
+    /**
+     * 维保费
+     */
+    @Excel(name = "维保费")
+    private Double maintainAmount;
+
+    /**
+     * 客户邮箱
+     */
+    @Excel(name = "客户邮箱")
+    private String email;
+
+    /**
+     * 销售负责人
+     */
+    @Excel(name = "销售负责人")
+    private String salePerson;
+
+    /**
+     * 状态;1:使用中,2:已到期
+     */
+    @Excel(name = "状态", readConverterExp = "1=使用中,2=已到期")
+    private Integer maintainStatus;
+
+    /**
+     * 到期时间
+     */
+    @Excel(name = "到期时间")
+    private String expireTime;
+
+    /**
+     * 客户地址
+     */
+    @Excel(name = "客户地址")
+    private String customAddress;
+}

+ 40 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmCustomInfoRequestVO.java

@@ -0,0 +1,40 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class CrmCustomInfoRequestVO {
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+
+    /**
+     * 状态;1:使用中,2:已到期
+     */
+    private Integer maintainStatus;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+}

+ 96 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoExportVO.java

@@ -0,0 +1,96 @@
+package com.usky.iot.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CrmInvoiceInfoExportVO  implements Serializable {
+
+    /**
+     * 项目编号
+     */
+    @Excel(name = "项目编号")
+    private String projectId;
+
+    /**
+     * 发票抬头
+     */
+    @Excel(name = "发票抬头")
+    private String invoiceTitle;
+
+    /**
+     * 税号
+     */
+    @Excel(name = "税号")
+    private String dutyId;
+
+    /**
+     * 发票性质;1:电子发票,2:纸质发票
+     */
+    @Excel(name = "发票性质", readConverterExp = "1=电子发票,2=纸质发票")
+    private Integer invoiceAttribute;
+
+    /**
+     * 发票类型;1:普票,2:专票
+     */
+    @Excel(name = "发票类型", readConverterExp = "1=普票,2=专票")
+    private Integer invoiceType;
+
+    /**
+     * 金额
+     */
+    @Excel(name = "金额")
+    private String amount;
+
+    /**
+     * 开票状态;1:未开票,2:已开票
+     */
+    @Excel(name = "开票状态", readConverterExp = "1=未开票,2=已开票")
+    private Integer invoiceStatus;
+
+    /**
+     * 申请人
+     */
+    @Excel(name = "申请人")
+    private String applicant;
+
+    /**
+     * 联系方式
+     */
+    @Excel(name = "联系方式")
+    private String phone;
+
+    /**
+     * 邮箱
+     */
+    @Excel(name = "邮箱")
+    private String email;
+
+    /**
+     * 邮寄地址
+     */
+    @Excel(name = "邮寄地址")
+    private String sendAddress;
+
+    /**
+     * 付款回执
+     */
+    @Excel(name = "付款回执")
+    private String paymentReceipt;
+
+    /**
+     * 提交时间
+     */
+    @Excel(name = "提交时间")
+    private String createTime;
+
+}

+ 41 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoRequest.java

@@ -0,0 +1,41 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class CrmInvoiceInfoRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 项目编号
+     */
+    private String projectId;
+
+    /**
+     * 发票抬头
+     */
+    private String invoiceTitle;
+
+    /**
+     * 开票状态;1:未开票,2:已开票
+     */
+    private Integer invoiceStatus;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+}

+ 69 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/CrmInvoiceInfoVO.java

@@ -0,0 +1,69 @@
+package com.usky.iot.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+@Data
+public class CrmInvoiceInfoVO {
+
+    /**
+     * 项目编号
+     */
+    private String projectId;
+
+    /**
+     * 发票抬头
+     */
+    private String invoiceTitle;
+
+    /**
+     * 税号
+     */
+    private String dutyId;
+
+    /**
+     * 电子邮箱
+     */
+    private String email;
+
+    /**
+     * 申请人
+     */
+    private String applicant;
+
+    /**
+     * 手机号码
+     */
+    private String phone;
+
+    /**
+     * 金额
+     */
+    private Double amount;
+
+    /**
+     * 发票类型;1:普票,2:专票
+     */
+    private Integer invoiceType;
+
+    /**
+     * 发票性质;1:电子发票,2:纸质发票
+     */
+    private Integer invoiceAttribute;
+
+    /**
+     * 邮寄地址
+     */
+    private String sendAddress;
+
+    /**
+     * 付款回执
+     */
+    private String paymentReceipt;
+
+    /**
+     * 提交时间
+     */
+    private String createTime;
+}

+ 41 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DeviceDataInfoVO.java

@@ -0,0 +1,41 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DeviceDataInfoVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 属性值集合
+     */
+    private Map<String,Object> metrics;
+
+    /**
+     * 设备编号
+     */
+    private String device_id;
+
+    /**
+     * 产品Id
+     */
+    private String product_id;
+
+    /**
+     * 数据上报时间
+     */
+    private long timestamp;
+
+    /**
+     * 设备类型
+     */
+    private String device_type;
+}

+ 46 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DeviceImportVo.java

@@ -0,0 +1,46 @@
+package com.usky.iot.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+@Data
+public class DeviceImportVo{
+    /**
+     * 系统编号(必填)
+     */
+    @Excel(name = "系统编号(必填)")
+    private String productCode;
+
+    /**
+     * 设备id(必填)
+     */
+    @Excel(name = "设备id(必填)")
+    private String deviceId;
+
+    /**
+     * 设备名称(必填)
+     */
+    @Excel(name = "设备名称(必填)")
+    private String deviceName;
+    /**
+     * SIM
+     */
+    @Excel(name = "SIM")
+    private String simCode;
+
+    /**
+     * 安装位置描述(必填)
+     */
+    @Excel(name = "安装位置描述(必填)")
+    private String installAddress;
+
+}

+ 46 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDataOverviewVO.java

@@ -0,0 +1,46 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class DmpDataOverviewVO {
+
+    /**
+     * 设备编号
+     */
+    private Integer productId;
+
+    /**
+     * 设备总数
+     */
+    private Integer deviceCount;
+    /**
+     * 活跃数
+     */
+    private Integer hyCount;
+    /**
+     * 激活数
+      */
+    private Integer jhCount;
+    /**
+     *注册数
+     */
+    private Integer zcCount;
+
+    /**
+     * 正常数据
+     */
+    private Integer dzcCount;
+    /**
+     * 离线数据
+     */
+    private Integer dlxCount;
+    /**
+     * 激活率
+     */
+    private Double jhRadioCount;
+    /**
+     * 活跃率
+     */
+    private Double hyRadioCount;
+}

+ 113 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceExcelVO.java

@@ -0,0 +1,113 @@
+package com.usky.iot.service.vo;
+
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DmpDeviceExcelVO {
+
+    /**
+     * 主键id
+     */
+    @Excel(name = "id", height = 6, width = 20)
+    private Integer id;
+
+    /**
+     * 设备ID;设备注册时系统自动生成一个唯一编号
+     */
+    @Excel(name = "设备id", height = 6, width = 20)
+    private String deviceId;
+
+    /**
+     * 设备编号
+     */
+    @Excel(name = "设备编号", height = 6, width = 20)
+    private String deviceCode;
+
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称", height = 6, width = 20)
+    private String deviceName;
+
+    /**
+     * 设备类型
+     */
+    @Excel(name = "设备类型", height = 6, width = 20)
+    private Integer deviceType;
+
+    /**
+     * 产品ID
+     */
+    @Excel(name = "产品ID", height = 6, width = 20)
+    private Integer productId;
+
+    /**
+     * 物联网卡号
+     */
+    @Excel(name = "物联网卡号", height = 6, width = 20)
+    private String simCode;
+
+    /**
+     * 国际移动用户识别码
+     */
+    @Excel(name = "国际移动用户识别码", height = 6, width = 20)
+    private String imsiCode;
+
+    /**
+     * 节点类型
+     */
+    @Excel(name = "节点类型", height = 6, width = 20)
+    private Integer nodeType;
+
+    /**
+     * 分组id
+     */
+    @Excel(name = "分组id", height = 6, width = 20)
+    private Integer groupId;
+
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", height = 6, width = 20)
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", height = 6, width = 20)
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    @Excel(name = "更新人", height = 6, width = 20)
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", height = 6, width = 20)
+    private Date updatedTime;
+
+
+    /**
+     * 产品名称
+     */
+    @Excel(name = "产品名称", height = 6, width = 20)
+    private String productName;
+    /**
+     * 设备状态
+     */
+    @Excel(name = "设备状态", height = 6, width = 20)
+    private Integer deviceStatus;
+
+    /**
+     * 是否自动订阅
+     */
+    @Excel(name = "是否自动订阅", height = 6, width = 20)
+    private Integer subscribeFlag;
+}

+ 42 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceExportVO.java

@@ -0,0 +1,42 @@
+package com.usky.iot.service.vo;
+
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class DmpDeviceExportVO {
+
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称",width = 14)
+    private String deviceName;
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 设备编号
+     */
+    @Excel(name = "IMEI",width = 14)
+    private String deviceCode;
+    /**
+     * 物联网卡号
+     */
+    @Excel(name = "SIM",width = 14)
+    private String simCode;
+
+    /**
+     * 国际移动用户识别码
+     */
+    @Excel(name = "IMSI",width = 14)
+    private String imsiCode;
+
+    /**
+     * 是否自动订阅
+     */
+    @Excel(name = "是否开启订阅",width = 14)
+    private Integer subscribeFlag;
+
+}

+ 40 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpDeviceInfoRequest.java

@@ -0,0 +1,40 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DmpDeviceInfoRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 业务状态(1:未激活,2:已激活,3:禁用)
+      */
+    private Integer serviceStatus;
+
+    /**
+     * 设备状态;1:在线,2:离线
+     */
+    private Integer deviceStatus;
+
+
+}

+ 25 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpProductAttributeRequest.java

@@ -0,0 +1,25 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class DmpProductAttributeRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 产品名称
+     */
+    private String attributeName;
+    /**
+     * 产品编号
+     */
+    private Integer productId;
+}

+ 29 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpProductInfoRequest.java

@@ -0,0 +1,29 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class DmpProductInfoRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 设备型号
+     */
+    private String deviceModel;
+    /**
+     * id
+     */
+    private Integer id;
+}

+ 21 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/DmpSoftwareUpgradeRequest.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class DmpSoftwareUpgradeRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 21 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/FacilityDeviceStatusVO.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class FacilityDeviceStatusVO {
+    /**
+     * 建筑设施表-id
+     */
+    private Integer baseBuildFacilityId;
+
+    /**
+     * 设备Id
+     */
+    private String deviceId;
+
+    /**
+     * 绑定状态(0 解绑,1 绑定)
+     */
+    private Integer status;
+}

+ 64 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/FacilityImportVo.java

@@ -0,0 +1,64 @@
+package com.usky.iot.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+@Data
+public class FacilityImportVo{
+    /**
+     * 设施类型(必填)
+     */
+    @Excel(name = "设施类型(必填)")
+    private String facilityType;
+
+    /**
+     * 设施名称(必填)
+     */
+    @Excel(name = "设施名称(必填)")
+    private String facilityName;
+
+    /**
+     * 设施地址(必填)
+     */
+    @Excel(name = "设施地址(必填)")
+    private String address;
+    /**
+     * 联系人
+     */
+    @Excel(name = "联系人")
+    private String contact;
+
+    /**
+     * 联系电话
+     */
+    @Excel(name = "联系电话")
+    private String contactPhone;
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    private String facilityDesc;
+
+    /**
+     * 经度(必填)
+     */
+    @Excel(name = "经度(必填)")
+    private String longitude;
+
+    /**
+     * 维度(必填)
+     */
+    @Excel(name = "维度(必填)")
+    private String latitude;
+
+}

+ 21 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/MqttBaseVO.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+/**
+ * @author yq
+ * @date 2021/11/3 8:32
+ */
+@Data
+public class MqttBaseVO {
+    /**
+     * 接口描述
+     */
+    private String describe;
+
+    private String topic;
+    /**
+     * 数据内容
+      */
+    private Object data;
+}

+ 35 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/vo/MqttDataVO.java

@@ -0,0 +1,35 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+/**
+ * @author zyj
+ * @date 2023-01-11
+ */
+@Data
+public class MqttDataVO {
+    /**
+     * 设备编号
+     */
+    private String devId;
+
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+
+    /**
+     * 单位编号
+     */
+    private String companyId;
+
+    /**
+     * 系统类型 (1.火灾自动报警系统 2.自动喷水灭火系统 3.消防给水及消火栓系统 4.防排烟系统 5.电气火灾系统 6.消防视频监控系统)
+     */
+    private Integer systemType;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+}

+ 25 - 0
service-alarm/service-alarm-biz/src/main/resources/bootstrap.yml

@@ -0,0 +1,25 @@
+# Tomcat
+server:
+  port: 9887
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: service-iot
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: usky-cloud-nacos:8848
+      config:
+        # 配置中心地址
+        server-addr: usky-cloud-nacos:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 108 - 0
service-alarm/service-alarm-biz/src/main/resources/doc/index.adoc

@@ -0,0 +1,108 @@
+= 安防项目
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Version |  Update Time  | Status | Author |  Description
+|v2022-04-21 16:57:08|2022-04-21 16:57:08|auto|@yq|Created by smart-doc
+|====================
+
+
+== &lt;p&gt;参数配置表 前端控制器&lt;/p&gt;
+== &lt;p&gt;部门信息&lt;/p&gt;
+=== 查看部门信息
+*URL:* http:10.23.39.1:8082/sysDept/list
+
+*Type:* POST
+
+*Author:* ya
+
+*Content-Type:* application/json; charset=utf-8
+
+
+
+
+*Body-parameters:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Parameter | Type|Description|Required|Since
+|deptId|int64|部门id|false|-
+|parentId|int64|父部门id|false|-
+|ancestors|string|祖级列表|false|-
+|deptName|string|部门名称|false|-
+|orderNum|int32|显示顺序|false|-
+|leader|string|负责人|false|-
+|phone|string|联系电话|false|-
+|email|string|邮箱|false|-
+|status|string|部门状态(0正常 1停用)|false|-
+|delFlag|string|删除标志(0代表存在 2代表删除)|false|-
+|createBy|string|创建者|false|-
+|createTime|string|创建时间|false|-
+|updateBy|string|更新者|false|-
+|updateTime|string|更新时间|false|-
+|bId|int64|建筑id|false|-
+|====================
+
+*Response-fields:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Field | Type|Description|Since
+|status|object|No comments found.|-
+|code|string|No comments found.|-
+|msg|string|No comments found.|-
+|data|object|No comments found.|-
+|└─deptId|int64|部门id|-
+|└─parentId|int64|父部门id|-
+|└─ancestors|string|祖级列表|-
+|└─deptName|string|部门名称|-
+|└─orderNum|int32|显示顺序|-
+|└─leader|string|负责人|-
+|└─phone|string|联系电话|-
+|└─email|string|邮箱|-
+|└─status|string|部门状态(0正常 1停用)|-
+|└─delFlag|string|删除标志(0代表存在 2代表删除)|-
+|└─createBy|string|创建者|-
+|└─createTime|string|创建时间|-
+|└─updateBy|string|更新者|-
+|└─updateTime|string|更新时间|-
+|└─bId|int64|建筑id|-
+|exception|string|No comments found.|-
+|====================
+
+*Response-example:*
+----
+{
+	"status": {
+		
+	},
+	"code": "97564",
+	"msg": "wnr5qt",
+	"data": [
+		{
+			"deptId": 540,
+			"parentId": 858,
+			"ancestors": "o5lg60",
+			"deptName": "文.沈",
+			"orderNum": 260,
+			"leader": "ufz93p",
+			"phone": "17852835049",
+			"email": "智渊.徐@yahoo.com",
+			"status": "nu6cnp",
+			"delFlag": "72oiji",
+			"createBy": "5fxr6j",
+			"createTime": "2022-04-21 16:57:10",
+			"updateBy": "4kcs4e",
+			"updateTime": "2022-04-21 16:57:10",
+			"bId": 977
+		}
+	],
+	"exception": "53u6bg"
+}
+----
+
+== &lt;p&gt;用户信息表 前端控制器&lt;/p&gt;
+

+ 94 - 0
service-alarm/service-alarm-biz/src/main/resources/logback.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+    <property name="log.path" value="/var/log/uskycloud/service-iot" />
+    <!-- 日志输出格式 -->
+    <property name="log.pattern" value="%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26}:%line: %msg%n" />
+    <!--    	<property name="log.pattern" value="%gray(%d{MM-dd HH:mm:ss.SSS}) %highlight(%-5level) &#45;&#45; [%gray(%thread)] %cyan(%logger{26}:%line): %msg%n" />-->
+
+
+    <property name="SQL_PACKAGE" value="com.usky.iot.mapper"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="file_sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sql.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <!--	<logger name="com.usky" level="info" />-->
+    <!-- Spring日志级别控制  -->
+    <!--	<logger name="org.springframework" level="warn" />-->
+
+    <logger name="${SQL_PACKAGE}" additivity="false" level="debug">
+        <appender-ref ref="console"/>
+        <appender-ref ref="file_sql"/>
+    </logger>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+        <appender-ref ref="console" />
+    </root>
+</configuration>

+ 15 - 0
service-alarm/service-alarm-biz/src/main/resources/smart-doc.json

@@ -0,0 +1,15 @@
+{
+  "outPath":"./src/main/resources/doc",
+  "serverUrl": "http:10.23.39.1:9887/",
+  "isStrict": false,
+  "coverOld": true,
+  "allInOne": true,
+  "packageFilters": "com.usky.iot.controller.web",
+  "requestExample":"false",
+  "responseExample":"true",
+  "projectName": "iot项目",
+  "appKey": "20211216921084883495813120",
+  "appToken":"967031b0cc6f474aaf73616cbf2b25c2",
+  "secret": "N@Pd,KXAHki*BW3=zK.XPNykf!=CM79J",
+  "openUrl": "http://101.133.214.75:7700/api"
+}

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java

@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("base_build");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("base_alarm_notice_result");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 75 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmNoticeController.java

@@ -0,0 +1,75 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.BaseAlarmNotice;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.iot.service.BaseAlarmNoticeService;
+import com.usky.iot.service.BaseAlarmTypeService;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 告警通知配置 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@RestController
+@RequestMapping("/baseAlarmNotice")
+public class BaseAlarmNoticeController {
+
+    @Autowired
+    private BaseAlarmNoticeService baseAlarmNoticeService;
+
+    /**
+     * 新增
+     * @param baseAlarmNotice
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody BaseAlarmNotice baseAlarmNotice){
+        baseAlarmNoticeService.add(baseAlarmNotice);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param baseAlarmNotice
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> update(@RequestBody BaseAlarmNotice baseAlarmNotice){
+        baseAlarmNoticeService.update(baseAlarmNotice);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id){
+        baseAlarmNoticeService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 分页
+     * @param baseAlarmListVO
+     * @return
+     */
+    @PostMapping("/page")
+    public ApiResult<CommonPage<BaseAlarmNotice>> page(@RequestBody BaseAlarmListVO baseAlarmListVO){
+        return ApiResult.success(baseAlarmNoticeService.page(baseAlarmListVO));
+    }
+}
+

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmNoticeResultController.java

@@ -0,0 +1,21 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 告警通知结果 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@Controller
+@RequestMapping("/baseAlarmNoticeResult")
+public class BaseAlarmNoticeResultController {
+
+}
+

+ 106 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmNotice.java

@@ -0,0 +1,106 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 告警通知配置
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseAlarmNotice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 系统编码
+     */
+    private String productCode;
+
+    /**
+     * 告警类型编码
+     */
+    private String typeCode;
+
+    /**
+     * 第一次接收人
+     */
+    private String receiver1;
+
+    /**
+     * 第二次接收人
+     */
+    private String receiver2;
+
+    /**
+     * 第三次接收人
+     */
+    private String receiver3;
+
+    /**
+     * 第一次超时时间
+     */
+    private Integer timeOut1;
+
+    /**
+     * 第二次超时时间
+     */
+    private Integer timeOut2;
+
+    /**
+     * 通知方式
+     */
+    private String noticeMethod;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 66 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmNoticeResult.java

@@ -0,0 +1,66 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 告警通知结果
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseAlarmNoticeResult implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 接收人
+     */
+    private String receiver;
+
+    /**
+     * 通知结果
+     */
+    private Integer noticeResult;
+
+    /**
+     * 告警ID
+     */
+    private Integer alarmId;
+
+    /**
+     * 通知时间
+     */
+    private LocalDateTime noticeTime;
+
+    /**
+     * 是否已读
+     */
+    private Integer isRead;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmNoticeMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseAlarmNotice;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 告警通知配置 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+public interface BaseAlarmNoticeMapper extends CrudMapper<BaseAlarmNotice> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmNoticeResultMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseAlarmNoticeResult;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 告警通知结果 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+public interface BaseAlarmNoticeResultMapper extends CrudMapper<BaseAlarmNoticeResult> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmNoticeResultService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.BaseAlarmNoticeResult;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 告警通知结果 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+public interface BaseAlarmNoticeResultService extends CrudService<BaseAlarmNoticeResult> {
+
+}

+ 30 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmNoticeService.java

@@ -0,0 +1,30 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarmNotice;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import com.usky.iot.service.vo.BaseAlarmTypeRequestVO;
+
+/**
+ * <p>
+ * 告警通知配置 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+public interface BaseAlarmNoticeService extends CrudService<BaseAlarmNotice> {
+
+    void add(BaseAlarmNotice baseAlarmNotice);
+
+    void update(BaseAlarmNotice baseAlarmNotice);
+
+    void remove(Integer id);
+
+    CommonPage<BaseAlarmNotice> page(BaseAlarmListVO baseAlarmListVO);
+
+    boolean checkTypeUnique(BaseAlarmNotice baseAlarmNotice);
+
+}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmNoticeResultServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.BaseAlarmNoticeResult;
+import com.usky.iot.mapper.BaseAlarmNoticeResultMapper;
+import com.usky.iot.service.BaseAlarmNoticeResultService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 告警通知结果 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@Service
+public class BaseAlarmNoticeResultServiceImpl extends AbstractCrudService<BaseAlarmNoticeResultMapper, BaseAlarmNoticeResult> implements BaseAlarmNoticeResultService {
+
+}

+ 97 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmNoticeServiceImpl.java

@@ -0,0 +1,97 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.BaseAlarmNotice;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.iot.mapper.BaseAlarmNoticeMapper;
+import com.usky.iot.service.BaseAlarmNoticeService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import com.usky.iot.service.vo.BaseAlarmTypeRequestVO;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * <p>
+ * 告警通知配置 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-09-19
+ */
+@Service
+public class BaseAlarmNoticeServiceImpl extends AbstractCrudService<BaseAlarmNoticeMapper, BaseAlarmNotice> implements BaseAlarmNoticeService {
+
+
+    @Override
+    public void add(BaseAlarmNotice baseAlarmNotice){
+        if(checkTypeUnique(baseAlarmNotice)){
+            throw new BusinessException("新增告警通知失败,该告警类型已经存在通知配置");
+        }
+        baseAlarmNotice.setCreateBy(SecurityUtils.getUsername());
+        baseAlarmNotice.setCreateTime(LocalDateTime.now());
+        if (Objects.nonNull(SecurityUtils.getLoginUser())){
+            baseAlarmNotice.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId().intValue());
+        }
+        baseAlarmNotice.setTenantId(SecurityUtils.getTenantId());
+        this.save(baseAlarmNotice);
+    }
+
+    @Override
+    public void update(BaseAlarmNotice baseAlarmNotice){
+        if(checkTypeUnique(baseAlarmNotice)){
+            throw new BusinessException("修改告警通知失败,该通知配置已经存在");
+        }
+        baseAlarmNotice.setUpdateBy(SecurityUtils.getUsername());
+        baseAlarmNotice.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseAlarmNotice);
+    }
+
+    @Override
+    public void remove(Integer id){
+        BaseAlarmNotice baseAlarmNotice = this.getById(id);
+        Optional.ofNullable(baseAlarmNotice).orElseThrow(() -> new BusinessException("通知配置不存在"));
+        baseAlarmNotice.setDeleteFlag(1);
+        this.updateById(baseAlarmNotice);
+    }
+
+    @Override
+    public CommonPage<BaseAlarmNotice> page(BaseAlarmListVO baseAlarmListVO){
+        IPage<BaseAlarmNotice> page = new Page<>(baseAlarmListVO.getCurrent(),baseAlarmListVO.getSize());
+        LambdaQueryWrapper<BaseAlarmNotice> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(StringUtils.isNotBlank(baseAlarmListVO.getAlarmType()),BaseAlarmNotice::getTypeCode,
+                baseAlarmListVO.getAlarmType())
+                .eq(StringUtils.isNotBlank(baseAlarmListVO.getProductCode()),BaseAlarmNotice::getProductCode,
+                        baseAlarmListVO.getProductCode())
+                .eq(BaseAlarmNotice::getDeleteFlag,0)
+//                .eq(BaseAlarmNotice::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseAlarmNotice::getId);
+        page  = this.page(page,queryWrapper);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getSize(),page.getCurrent());
+
+    }
+
+    @Override
+    public boolean checkTypeUnique(BaseAlarmNotice baseAlarmNotice) { //根据告警类型判断唯一
+        Integer id = null == baseAlarmNotice.getId() ? -1 : baseAlarmNotice.getId();
+        LambdaQueryWrapper<BaseAlarmNotice> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseAlarmNotice::getTypeCode,baseAlarmNotice.getTypeCode())
+                .eq(BaseAlarmNotice::getDeleteFlag,0)
+                .eq(BaseAlarmNotice::getTenantId,SecurityUtils.getTenantId());
+        BaseAlarmNotice one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(), id);
+    }
+}

+ 25 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmNoticeMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.iot.mapper.BaseAlarmNoticeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.BaseAlarmNotice">
+        <id column="id" property="id" />
+        <result column="product_code" property="productCode" />
+        <result column="type_code" property="typeCode" />
+        <result column="receiver1" property="receiver1" />
+        <result column="receiver2" property="receiver2" />
+        <result column="receiver3" property="receiver3" />
+        <result column="time_out1" property="timeOut1" />
+        <result column="time_out2" property="timeOut2" />
+        <result column="notice_method" property="noticeMethod" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 17 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/BaseAlarmNoticeResultMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.iot.mapper.BaseAlarmNoticeResultMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.BaseAlarmNoticeResult">
+        <id column="id" property="id" />
+        <result column="receiver" property="receiver" />
+        <result column="notice_result" property="noticeResult" />
+        <result column="alarm_id" property="alarmId" />
+        <result column="notice_time" property="noticeTime" />
+        <result column="is_read" property="isRead" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>