Browse Source

Merge branch 'yq-iot-2022-09-28' of uskycloud/usky-modules into master

gez 2 years ago
parent
commit
2f0104e6b8
93 changed files with 4531 additions and 4 deletions
  1. 1 0
      pom.xml
  2. 20 0
      service-iot/pom.xml
  3. 27 0
      service-iot/service-iot-api/pom.xml
  4. 28 0
      service-iot/service-iot-api/src/main/java/com/usky/iot/RemoteUserService.java
  5. 105 0
      service-iot/service-iot-api/src/main/java/com/usky/iot/domain/SysUserVO.java
  6. 48 0
      service-iot/service-iot-api/src/main/java/com/usky/iot/factory/RemoteUserFallbackFactory.java
  7. 76 0
      service-iot/service-iot-biz/pom.xml
  8. 37 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/RuoYiSystemApplication.java
  9. 108 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java
  10. 60 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/api/SysUserControllerApi.java
  11. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataEventController.java
  12. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataInfoController.java
  13. 54 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java
  14. 98 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java
  15. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceStatusController.java
  16. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductAttributeAttachController.java
  17. 85 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductAttributeController.java
  18. 91 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java
  19. 38 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareInfoController.java
  20. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareSubpackageController.java
  21. 75 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareUpgradeController.java
  22. 92 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/FileController.java
  23. 56 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataEvent.java
  24. 51 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataInfo.java
  25. 89 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataOverview.java
  26. 124 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceInfo.java
  27. 66 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceStatus.java
  28. 142 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductAttribute.java
  29. 45 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductAttributeAttach.java
  30. 156 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductInfo.java
  31. 66 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareInfo.java
  32. 62 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareSubpackage.java
  33. 99 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareUpgrade.java
  34. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataEventMapper.java
  35. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataInfoMapper.java
  36. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataOverviewMapper.java
  37. 24 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceInfoMapper.java
  38. 46 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  39. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeAttachMapper.java
  40. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeMapper.java
  41. 23 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductInfoMapper.java
  42. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareInfoMapper.java
  43. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareSubpackageMapper.java
  44. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareUpgradeMapper.java
  45. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataEventService.java
  46. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataInfoService.java
  47. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataOverviewService.java
  48. 54 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java
  49. 23 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java
  50. 26 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductAttributeAttachService.java
  51. 32 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductAttributeService.java
  52. 33 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java
  53. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareInfoService.java
  54. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareSubpackageService.java
  55. 25 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareUpgradeService.java
  56. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/DateStringConvert.java
  57. 29 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/FormatterConfiguration.java
  58. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/StringDateConverter.java
  59. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataEventServiceImpl.java
  60. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataInfoServiceImpl.java
  61. 85 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java
  62. 216 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java
  63. 34 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java
  64. 48 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductAttributeAttachServiceImpl.java
  65. 116 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductAttributeServiceImpl.java
  66. 122 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java
  67. 32 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareInfoServiceImpl.java
  68. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareSubpackageServiceImpl.java
  69. 107 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareUpgradeServiceImpl.java
  70. 152 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java
  71. 46 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDataOverviewVO.java
  72. 113 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceExcelVO.java
  73. 42 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceExportVO.java
  74. 44 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceInfoRequest.java
  75. 25 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpProductAttributeRequest.java
  76. 29 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpProductInfoRequest.java
  77. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpSoftwareUpgradeRequest.java
  78. 25 0
      service-iot/service-iot-biz/src/main/resources/bootstrap.yml
  79. 108 0
      service-iot/service-iot-biz/src/main/resources/doc/index.adoc
  80. 74 0
      service-iot/service-iot-biz/src/main/resources/logback.xml
  81. 15 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataEventMapper.xml
  82. 14 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataInfoMapper.xml
  83. 21 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataOverviewMapper.xml
  84. 55 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml
  85. 93 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml
  86. 13 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductAttributeAttachMapper.xml
  87. 31 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductAttributeMapper.xml
  88. 39 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductInfoMapper.xml
  89. 17 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareInfoMapper.xml
  90. 16 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareSubpackageMapper.xml
  91. 23 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareUpgradeMapper.xml
  92. 15 0
      service-iot/service-iot-biz/src/main/resources/smart-doc.json
  93. 4 4
      usky-module-demo/usky-module-demo-biz/src/main/java/com/usky/demo/MybatisGenerator.java

+ 1 - 0
pom.xml

@@ -18,6 +18,7 @@
     <module>usky-module-demo</module>
     <module>service-backend</module>
     <module>service-website</module>
+    <module>service-iot</module>
     <module>service-fire</module>
   </modules>
 

+ 20 - 0
service-iot/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-iot/service-iot-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-iot/service-iot-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-iot/service-iot-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-iot/service-iot-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());
+            }
+        };
+    }
+}

+ 76 - 0
service-iot/service-iot-biz/pom.xml

@@ -0,0 +1,76 @@
+<?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>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- Pagehelper -->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <!-- excel工具 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</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>

+ 37 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/RuoYiSystemApplication.java

@@ -0,0 +1,37 @@
+package com.usky.iot;
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * 系统模块
+ * 
+ * @author ruoyi
+ */
+
+
+@EnableFeignClients(basePackages = "com.usky")
+@MapperScan(value = "com.usky.iot.mapper")
+@ComponentScan("com.usky")
+@SpringBootApplication
+public class RuoYiSystemApplication
+{
+    public static void main(String[] args)
+    {
+        SpringApplication.run(RuoYiSystemApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  永天测试模块启动成功   ლ(´ڡ`ლ)゙  \n" +
+                " .-------.       ____     __        \n" +
+                " |  _ _   \\      \\   \\   /  /    \n" +
+                " | ( ' )  |       \\  _. /  '       \n" +
+                " |(_ o _) /        _( )_ .'         \n" +
+                " | (_,_).' __  ___(_ o _)'          \n" +
+                " |  |\\ \\  |  ||   |(_,_)'         \n" +
+                " |  | \\ `'   /|   `-'  /           \n" +
+                " |  |  \\    /  \\      /           \n" +
+                " ''-'   `'-'    `-..-'              ");
+    }
+}

+ 108 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/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("ya"); //设置作者
+//        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://101.133.214.75: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("dmp_data_overview");  // 逆向工程使用的表   如果要生成多个,这里可以传入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-iot/service-iot-biz/src/main/java/com/usky/iot/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);
+//    }
+//}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataEventController.java

@@ -0,0 +1,20 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 事件数据 前端控制器
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpDataEvent")
+public class DmpDataEventController {
+
+}
+

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataInfoController.java

@@ -0,0 +1,20 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 数据信息 前端控制器
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpDataInfo")
+public class DmpDataInfoController {
+
+}
+

+ 54 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java

@@ -0,0 +1,54 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.DmpDataOverview;
+import com.usky.iot.service.DmpDataOverviewService;
+import com.usky.iot.service.job.DmpDataOverviewJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 数据概览
+ *
+ * @author ya
+ * @since 2022-10-14
+ */
+@RestController
+@RequestMapping("/dmpDataOverview")
+public class DmpDataOverviewController {
+
+    @Autowired
+    private DmpDataOverviewJob dmpDataOverviewJob;
+
+    @Autowired
+    private DmpDataOverviewService dmpDataOverviewService;
+
+    @GetMapping
+    public void get(){
+        dmpDataOverviewJob.execute();
+    }
+
+    /**
+     * 集合
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @param productId 产品id
+     * @param type 类型1日2月
+     * @return
+     */
+    @GetMapping("/list")
+    public ApiResult<List<DmpDataOverview>> list(@RequestParam(required = false) Date startTime,
+                                      @RequestParam(required = false) Date endTime,
+                                      @RequestParam(required = false) Integer productId,
+                                      @RequestParam(required = false) Integer type){
+        return ApiResult.success(dmpDataOverviewService.list(startTime, endTime, productId, type));
+    }
+}
+

+ 98 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java

@@ -0,0 +1,98 @@
+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.DmpDeviceInfo;
+import com.usky.iot.service.DmpDeviceInfoService;
+import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 设备信息表
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpDeviceInfo")
+public class DmpDeviceInfoController {
+
+    @Autowired
+    private DmpDeviceInfoService dmpDeviceInfoService;
+
+    /**
+     * 新增
+     * @param dmpDeviceInfo
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody DmpDeviceInfo dmpDeviceInfo){
+        dmpDeviceInfoService.add(dmpDeviceInfo);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param dmpDeviceInfo
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> edit(@RequestBody DmpDeviceInfo dmpDeviceInfo){
+        dmpDeviceInfoService.update(dmpDeviceInfo);
+        return ApiResult.success();
+    }
+
+
+    /**
+     * 分页
+     * @param dmpDeviceInfoRequest
+     * @return
+     */
+    @PostMapping("/page")
+    public ApiResult<CommonPage<DmpDeviceInfo>> page(@RequestBody DmpDeviceInfoRequest dmpDeviceInfoRequest)
+    {
+        return ApiResult.success(dmpDeviceInfoService.page(dmpDeviceInfoRequest));
+    }
+
+
+
+    /**
+     * 删除记录
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id)
+    {
+        dmpDeviceInfoService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 批量导入
+     * @param multipartFiles
+     * @param productId
+     * @return
+     */
+    @PostMapping("/addByFile")
+    public ApiResult<Void> addByFile(@RequestParam(value = "file") MultipartFile multipartFiles,
+                                     @RequestParam("productId") Integer productId){
+        dmpDeviceInfoService.addByFile(productId,multipartFiles);
+        return ApiResult.success();
+    }
+
+    /**
+     * 导出
+     * @param dmpDeviceInfoRequest
+     * @param response
+     * @return
+     */
+    @PostMapping("/export")
+    public void export(@RequestBody DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response){
+        dmpDeviceInfoService.export(dmpDeviceInfoRequest,response);
+    }
+}
+

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceStatusController.java

@@ -0,0 +1,20 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 设备状态表 前端控制器
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpDeviceStatus")
+public class DmpDeviceStatusController {
+
+}
+

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductAttributeAttachController.java

@@ -0,0 +1,20 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 产品属性附表 前端控制器
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpProductAttributeAttach")
+public class DmpProductAttributeAttachController {
+
+}
+

+ 85 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductAttributeController.java

@@ -0,0 +1,85 @@
+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.DmpProductAttribute;
+import com.usky.iot.service.DmpProductAttributeService;
+import com.usky.iot.service.vo.DmpProductAttributeRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 产品属性表
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpProductAttribute")
+public class DmpProductAttributeController {
+
+
+    @Autowired
+    private DmpProductAttributeService dmpProductAttributeService;
+
+    /**
+     * 新增
+     * @param dmpProductAttribute
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody DmpProductAttribute dmpProductAttribute){
+        dmpProductAttributeService.add(dmpProductAttribute);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param dmpProductAttribute
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> edit(@RequestBody DmpProductAttribute dmpProductAttribute){
+        dmpProductAttributeService.update(dmpProductAttribute);
+        return ApiResult.success();
+    }
+
+
+    /**
+     * 分页
+     * @param dmpProductAttributeRequest
+     * @return
+     */
+    @PostMapping("/page")
+    public ApiResult<CommonPage<DmpProductAttribute>> page(@RequestBody DmpProductAttributeRequest dmpProductAttributeRequest)
+    {
+        return ApiResult.success(dmpProductAttributeService.page(dmpProductAttributeRequest));
+    }
+
+
+
+    /**
+     * 删除记录
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id)
+    {
+        dmpProductAttributeService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 批量设置属性绑定状态
+     * @param ids
+     * @return
+     */
+    @PostMapping("updateBatchBind")
+    public ApiResult<Void> updateBatchBind(@RequestParam("ids[]") List<Integer> ids){
+        dmpProductAttributeService.updateBatchBind(ids);
+        return ApiResult.success();
+    }
+}
+

+ 91 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java

@@ -0,0 +1,91 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.service.DmpProductInfoService;
+import com.usky.iot.service.vo.DmpProductInfoRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 产品信息表
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpProductInfo")
+public class DmpProductInfoController {
+
+
+    @Autowired
+    private DmpProductInfoService dmpProductInfoService;
+
+    /**
+     * 新增
+     * @param dmpProductInfo
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody DmpProductInfo dmpProductInfo){
+        dmpProductInfoService.add(dmpProductInfo);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param dmpProductInfo
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> edit(@RequestBody DmpProductInfo dmpProductInfo){
+        dmpProductInfoService.update(dmpProductInfo);
+        return ApiResult.success();
+    }
+
+
+    /**
+     * 分页
+     * @param dmpProductInfoRequest
+     * @return
+     */
+    @Log(title = "分页", businessType = BusinessType.OTHER)
+    @PostMapping("/page")
+    public ApiResult<CommonPage<DmpProductInfo>> page(@RequestBody DmpProductInfoRequest dmpProductInfoRequest)
+    {
+        return ApiResult.success(dmpProductInfoService.page(dmpProductInfoRequest));
+    }
+
+
+
+    /**
+     * 删除记录
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id)
+    {
+        dmpProductInfoService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 汇总
+     * @return
+     */
+    @GetMapping("/collect")
+    public ApiResult<List<Map<String,Object>>> collect(){
+        return ApiResult.success(dmpProductInfoService.collect());
+    }
+
+
+
+
+}
+

+ 38 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareInfoController.java

@@ -0,0 +1,38 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.DmpSoftwareInfo;
+import com.usky.iot.service.DmpSoftwareInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 软件信息表
+ *
+ * @author ya
+ * @since 2022-10-11
+ */
+@RestController
+@RequestMapping("/dmpSoftwareInfo")
+public class DmpSoftwareInfoController {
+
+    @Autowired
+    private DmpSoftwareInfoService dmpSoftwareInfoService;
+
+    /**
+     * 集合
+     * @param name
+     * @return
+     */
+    @GetMapping("/list")
+    public ApiResult<List<DmpSoftwareInfo>> list(@RequestParam(required = false) String name){
+        return ApiResult.success(dmpSoftwareInfoService.list(name));
+    }
+}
+

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareSubpackageController.java

@@ -0,0 +1,20 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 软件分包信息表 前端控制器
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpSoftwareSubpackage")
+public class DmpSoftwareSubpackageController {
+
+}
+

+ 75 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpSoftwareUpgradeController.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.DmpSoftwareSubpackage;
+import com.usky.iot.domain.DmpSoftwareUpgrade;
+import com.usky.iot.service.DmpSoftwareSubpackageService;
+import com.usky.iot.service.DmpSoftwareUpgradeService;
+import com.usky.iot.service.vo.DmpSoftwareUpgradeRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 软件升级信息表
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@RestController
+@RequestMapping("/dmpSoftwareUpgrade")
+public class DmpSoftwareUpgradeController {
+
+    @Autowired
+    private DmpSoftwareUpgradeService dmpSoftwareUpgradeService;
+
+    /**
+     * 新增
+     * @param dmpProductInfo
+     * @param file
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestPart DmpSoftwareUpgrade dmpProductInfo, @RequestPart MultipartFile file){
+        dmpSoftwareUpgradeService.add(dmpProductInfo,file);
+        return ApiResult.success();
+    }
+
+
+
+    /**
+     * 分页
+     * @param dmpSoftwareUpgradeRequest
+     * @return
+     */
+    @PostMapping("/page")
+    public ApiResult<CommonPage<DmpSoftwareUpgrade>> page(@RequestBody DmpSoftwareUpgradeRequest dmpSoftwareUpgradeRequest)
+    {
+        return ApiResult.success(dmpSoftwareUpgradeService.page(dmpSoftwareUpgradeRequest));
+    }
+
+    @Autowired
+    private DmpSoftwareSubpackageService dmpSoftwareSubpackageService;
+
+
+    @GetMapping("test")
+    public void test(){
+        DmpSoftwareSubpackage byId = dmpSoftwareSubpackageService.getById(15524);
+        byte[] b = byId.getApplyPackage();
+        int crc = 0;
+        for(int i=0;i<b.length;i++) {
+            String str = Integer.toHexString(b[i]&0x00ff);
+            if(str.length()==1) {
+                str = "0"+str;
+            }
+//                    System.out.print(b[i]+" ");
+//            System.out.print(str+" ");
+            crc = (crc + (b[i]&0x00ff))&0xffff;
+        }
+        System.out.println(crc);
+
+    }
+}
+

+ 92 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/FileController.java

@@ -0,0 +1,92 @@
+package com.usky.iot.controller.web;
+
+import com.alibaba.nacos.common.utils.MD5Utils;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.core.util.FileUtils;
+import com.usky.common.core.util.GlobalUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Optional;
+
+/**
+ * 文件系统
+ * @author yq
+ * @date 2022/1/25 13:42
+ */
+@RestController
+@RequestMapping("file")
+@Slf4j
+public class FileController {
+
+
+    /**
+     * 上传文件
+     * @param multipartFile
+     * @param request
+     * @return
+     */
+    @RequestMapping("/upload")
+    public ApiResult<Void> upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request){
+        Optional.ofNullable(multipartFile).orElseThrow(() ->  new BusinessException("文件为空"));
+        System.out.println(multipartFile.getSize());
+        cutFile(multipartFile,1024);
+        return ApiResult.success();
+    }
+
+
+    private static void cutFile(MultipartFile multipartFile, int num) {
+
+        InputStream inputStream = null;
+        try {
+            byte [] byteArr=multipartFile.getBytes();
+            inputStream = new ByteArrayInputStream(byteArr);
+            //创建规定大小的byte数组
+            byte[] b = new byte[num];
+            int len = 0;
+            //name为以后的小文件命名做准备
+            int name = 1;
+            //遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
+            while ((len = inputStream.read(b)) != -1) {
+                int chk = 0x0000;
+                for(int i=0;i<len;i++){
+                    chk += b[i]&0x00ff;
+                }
+                System.out.println(String.format("%04x", chk& 0x0000ffff));
+                name++;
+            }
+            String s = MD5Utils.md5Hex(byteArr);
+            System.out.println(s);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != inputStream) {
+                    inputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 删除文件
+     * @param fileName
+     * @return
+     */
+    @RequestMapping("/delete")
+    public ApiResult<Boolean> delete(@RequestParam String fileName){
+        File file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), fileName);
+        return ApiResult.success(file.delete());
+    }
+}

+ 56 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataEvent.java

@@ -0,0 +1,56 @@
+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 ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpDataEvent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID;设备注册时系统自动生成一个唯一编号
+     */
+    private String deviceId;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 事件类型
+     */
+    private Integer eventType;
+
+    /**
+     * 事件内容
+     */
+    private String eventContent;
+
+    /**
+     * 上报时间
+     */
+    private LocalDateTime reportTime;
+
+
+}

+ 51 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataInfo.java

@@ -0,0 +1,51 @@
+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 ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpDataInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID;设备注册时系统自动生成一个唯一编号
+     */
+    private String deviceId;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 数据内容
+     */
+    private String dataContent;
+
+    /**
+     * 上报时间
+     */
+    private LocalDateTime reportTime;
+
+
+}

+ 89 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataOverview.java

@@ -0,0 +1,89 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 数据概览
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpDataOverview implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备量分析
+     */
+    private String deviceNumber;
+
+    /**
+     * 设备趋势分析
+     */
+    private String deviceTrend;
+
+    /**
+     * 设备日活跃分析
+     */
+    private String deviceDailyActive;
+
+    /**
+     * 中间区域数据统计
+     */
+    private String middleStatistic;
+
+    /**
+     * 设备数据上报量分析
+     */
+    private String dataReport;
+
+    /**
+     * 产品设备量分析
+     */
+    private String productDevice;
+
+    private Integer cycleType;
+
+    /**
+     * 设备月活跃分析
+     */
+    private String deviceMonthlyActive;
+
+    /**
+     * 产品ID;当为全产品时id为0,其他情况对应产品表ID
+     */
+    private Integer productId;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+
+}

+ 124 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDeviceInfo.java

@@ -0,0 +1,124 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 设备信息表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("dmp_device")
+public class DmpDeviceInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID;设备注册时系统自动生成一个唯一编号
+     */
+    private String deviceId;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 物联网卡号
+     */
+    private String simCode;
+
+    /**
+     * 国际移动用户识别码
+     */
+    private String imsiCode;
+
+    /**
+     * 节点类型
+     */
+    private Integer nodeType;
+
+    /**
+     * 分组id
+     */
+    private Integer groupId;
+
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updatedTime;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+    /**
+     * 产品名称
+     */
+    @TableField(exist = false)
+    private String productName;
+    /**
+     * 设备状态
+     */
+    @TableField(exist = false)
+    private Integer deviceStatus;
+
+    /**
+     * 是否自动订阅
+     */
+    private Integer subscribeFlag;
+}

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

@@ -0,0 +1,66 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备状态表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpDeviceStatus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID;设备注册时系统自动生成一个唯一编号
+     */
+    private String deviceId;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 设备状态;1:正常,2:故障,3:告警,4:离线
+     */
+    private Integer deviceStatus;
+    /**
+     * 业务状态1:已注册,2:待激活,3:已激活
+     */
+    private Integer serviceStatus;
+
+    /**
+     * 最后上线时间
+     */
+    private LocalDateTime lastOnlineTime;
+
+    /**
+     * 最后离线时间
+     */
+    private LocalDateTime lastOfflineTime;
+
+
+}

+ 142 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductAttribute.java

@@ -0,0 +1,142 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 产品属性表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpProductAttribute implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 属性名称
+     */
+    private String attributeName;
+
+    /**
+     * 属性标识
+     */
+    private String attributeCode;
+
+    /**
+     * 对应端口/属性ID
+     */
+    private Integer attributePort;
+
+    /**
+     * 属性类型;1:必选,2:可选
+     */
+    private Integer attributeType;
+
+    /**
+     * 数据类型
+     */
+    private Integer dataType;
+
+    /**
+     * 绑定状态;1:已绑定,2:未绑定
+     */
+    private Integer bindStatus;
+
+    /**
+     * 长度
+     */
+    private Integer attributeLength;
+
+    /**
+     * 单位
+     */
+    private Integer attributeUnit;
+
+    /**
+     * 最大值
+     */
+    private BigDecimal maximum;
+
+    /**
+     * 最小值
+     */
+    private BigDecimal minimum;
+
+    /**
+     * 时间格式
+     */
+    private String timeFormat;
+
+    /**
+     * 布尔值false
+     */
+    private String boolFalse;
+
+    /**
+     * 布尔值true
+     */
+    private String boolTrue;
+
+    /**
+     * 删除标识;0:未删除,1:已删除
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 描述
+     */
+    private String attributeDescribe;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updatedTime;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+
+    @TableField(exist = false)
+    private List<DmpProductAttributeAttach> dmpProductAttributeAttachList;
+}

+ 45 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductAttributeAttach.java

@@ -0,0 +1,45 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 产品属性附表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpProductAttributeAttach implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 属性id
+     */
+    private Integer attributeId;
+
+    /**
+     * 参数值
+     */
+    private Integer parameterValue;
+
+    /**
+     * 参数描述
+     */
+    private String parameterDescribe;
+
+
+}

+ 156 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpProductInfo.java

@@ -0,0 +1,156 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 产品信息表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("dmp_product")
+public class DmpProductInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 接入方式
+     */
+    private Integer accessMode;
+
+    /**
+     * 网络类型
+     */
+    private Integer networkType;
+
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+
+    /**
+     * 通信协议
+     */
+    private Integer comProtocol;
+
+    /**
+     * 认证方式
+     */
+    private String authMode;
+
+    /**
+     * 设备型号
+     */
+    private String deviceModel;
+
+    /**
+     * 产品描述
+     */
+    private String productDescribe;
+
+    /**
+     * 厂家名称
+     */
+    private String factoryName;
+
+    /**
+     * 厂家联系人
+     */
+    private String factoryPerson;
+
+    /**
+     * 厂家联系电话
+     */
+    private String factoryPhone;
+
+    /**
+     * 资质证书1
+     */
+    private String certificateUrl1;
+
+    /**
+     * 资质证书2
+     */
+    private String certificateUrl2;
+
+    /**
+     * 资质证书3
+     */
+    private String certificateUrl3;
+
+    /**
+     * 协议文档
+     */
+    private String agreementUrl;
+
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updatedTime;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+
+    /**
+     * 设备总数
+     */
+    @TableField(exist = false)
+    private Integer deviceCount;
+    /**
+     * 在线设备
+     */
+    @TableField(exist = false)
+    private Integer deviceStatusCount;
+
+    /**
+     * 注册设备
+     */
+    @TableField(exist = false)
+    private Integer serviceStatusCount;
+}

+ 66 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareInfo.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 ya
+ * @since 2022-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpSoftwareInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 软件ID
+     */
+    private String softwareId;
+
+    /**
+     * 生效状态
+     */
+    private Integer effectStatus;
+
+    /**
+     * 软件名称
+     */
+    private String softwareName;
+
+    /**
+     * 软件说明
+     */
+    private String softwareExplain;
+
+    /**
+     * 序号
+     */
+    private Integer orderNumber;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updatedTime;
+
+
+}

+ 62 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareSubpackage.java

@@ -0,0 +1,62 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * <p>
+ * 软件分包信息表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpSoftwareSubpackage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 主升级信息id
+     */
+    private Integer upgradeId;
+
+    /**
+     * 分包序号
+     */
+    private Integer subpackageNumber;
+
+    /**
+     * 应用程序数据包
+     */
+    private byte[] applyPackage;
+
+    /**
+     * 分包大小
+     */
+    private String subpackageLength;
+
+    /**
+     * 从第一个数据包到当前的总校验值
+     */
+    private String checkCode;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+
+}

+ 99 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpSoftwareUpgrade.java

@@ -0,0 +1,99 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 软件升级信息表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DmpSoftwareUpgrade implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 版本名称
+     */
+    private String versionName;
+
+    private String majorVersion;
+
+    /**
+     * 版本号
+     */
+    private String minorVersion;
+
+    /**
+     * 升级包大小(byte)
+     */
+    private Integer packageLength;
+
+    /**
+     * softwareId
+     */
+    private String softwareId;
+
+    /**
+     * 校验码
+     */
+    private String checkCode;
+
+    /**
+     * 版本描述
+     */
+    private String versionDescribe;
+
+    /**
+     * 执行时间
+     */
+    private Date implementTime;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updatedTime;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataEventMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpDataEvent;
+
+
+/**
+ * <p>
+ * 事件数据 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDataEventMapper extends CrudMapper<DmpDataEvent> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataInfoMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpDataInfo;
+
+
+/**
+ * <p>
+ * 数据信息 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDataInfoMapper extends CrudMapper<DmpDataInfo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.DmpDataOverview;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 数据概览 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-14
+ */
+public interface DmpDataOverviewMapper extends CrudMapper<DmpDataOverview> {
+
+}

+ 24 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceInfoMapper.java

@@ -0,0 +1,24 @@
+package com.usky.iot.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpDeviceInfo;
+import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 设备信息表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDeviceInfoMapper extends CrudMapper<DmpDeviceInfo> {
+
+
+
+    Page<DmpDeviceInfo> page(IPage<DmpDeviceInfo> page, @Param("ar")DmpDeviceInfoRequest dmpDeviceInfoRequest);
+}

+ 46 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java

@@ -0,0 +1,46 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpDeviceStatus;
+import com.usky.iot.service.vo.DmpDataOverviewVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 设备状态表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Repository
+public interface DmpDeviceStatusMapper extends CrudMapper<DmpDeviceStatus> {
+
+
+    List<DmpDataOverviewVO> getDeviceStatusCollect(@Param("productId") Integer productId,
+                                                   @Param("startTime") Date startTime,
+                                                   @Param("endTime") Date endTime);
+
+
+    DmpDataOverviewVO getAllCollect(@Param("productId") Integer productId,
+                                             @Param("startTime") Date startTime,
+                                             @Param("endTime") Date endTime);
+
+
+    List<DmpDataOverviewVO> getMonthHyCollect(@Param("productId") Integer productId,
+                                               @Param("startTime") Date startTime,
+                                               @Param("endTime") Date endTime);
+
+    DmpDataOverviewVO getAllMonthHyCollect(@Param("productId") Integer productId,
+                                            @Param("startTime") Date startTime,
+                                            @Param("endTime") Date endTime);
+
+
+
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeAttachMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpProductAttributeAttach;
+
+
+/**
+ * <p>
+ * 产品属性附表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductAttributeAttachMapper extends CrudMapper<DmpProductAttributeAttach> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpProductAttribute;
+
+
+/**
+ * <p>
+ * 产品属性表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductAttributeMapper extends CrudMapper<DmpProductAttribute> {
+
+}

+ 23 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductInfoMapper.java

@@ -0,0 +1,23 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpProductInfo;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 产品信息表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductInfoMapper extends CrudMapper<DmpProductInfo> {
+
+
+
+    List<Map<String,Object>> selectCollect();
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareInfoMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpSoftwareInfo;
+
+
+/**
+ * <p>
+ * 软件信息表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-11
+ */
+public interface DmpSoftwareInfoMapper extends CrudMapper<DmpSoftwareInfo> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareSubpackageMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpSoftwareSubpackage;
+
+
+/**
+ * <p>
+ * 软件分包信息表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpSoftwareSubpackageMapper extends CrudMapper<DmpSoftwareSubpackage> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpSoftwareUpgradeMapper.java

@@ -0,0 +1,17 @@
+package com.usky.iot.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpSoftwareUpgrade;
+
+
+/**
+ * <p>
+ * 软件升级信息表 Mapper 接口
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpSoftwareUpgradeMapper extends CrudMapper<DmpSoftwareUpgrade> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataEventService.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpDataEvent;
+
+
+/**
+ * <p>
+ * 事件数据 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDataEventService extends CrudService<DmpDataEvent> {
+
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataInfoService.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpDataInfo;
+
+
+/**
+ * <p>
+ * 数据信息 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDataInfoService extends CrudService<DmpDataInfo> {
+
+}

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataOverviewService.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.DmpDataOverview;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 数据概览 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-14
+ */
+public interface DmpDataOverviewService extends CrudService<DmpDataOverview> {
+
+    List<DmpDataOverview> list(Date startTime,Date endTime,Integer productId,Integer type);
+
+}

+ 54 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java

@@ -0,0 +1,54 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpDeviceInfo;
+import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 设备信息表
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDeviceInfoService extends CrudService<DmpDeviceInfo> {
+
+    boolean add(DmpDeviceInfo dmpDeviceInfo);
+
+    void update(DmpDeviceInfo dmpDeviceInfo);
+
+    boolean checkNameUnique(DmpDeviceInfo dmpDeviceInfo);
+
+    CommonPage<DmpDeviceInfo> page(DmpDeviceInfoRequest dmpDeviceInfoRequest);
+
+    boolean remove(Integer id);
+
+    /**
+     * 设备状态统计
+     * @return
+     */
+    List<Map<String,Object>> deviceCollect(List<Integer> productIds);
+
+    /**
+     * 设备总数
+     * @param productId
+     * @return
+     */
+    int deviceCountByProductId(Integer productId);
+
+    void addByFile(Integer productId, MultipartFile multipartFiles);
+
+    /**
+     * 导出
+     * @param dmpDeviceInfoRequest
+     */
+    void export(DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response);
+}

+ 23 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java

@@ -0,0 +1,23 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpDeviceStatus;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 设备状态表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpDeviceStatusService extends CrudService<DmpDeviceStatus> {
+
+
+    List<Map<String,Object>> getCollectByProduct(List<Integer> productIds);
+
+}

+ 26 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductAttributeAttachService.java

@@ -0,0 +1,26 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpProductAttribute;
+import com.usky.iot.domain.DmpProductAttributeAttach;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 产品属性附表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductAttributeAttachService extends CrudService<DmpProductAttributeAttach> {
+
+
+    void addBatch(DmpProductAttribute dmpProductAttribute);
+
+    void deleteBatch(DmpProductAttribute dmpProductAttribute);
+
+    List<DmpProductAttributeAttach> listByAttributeIds(List<Integer> attributeIds);
+}

+ 32 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductAttributeService.java

@@ -0,0 +1,32 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpProductAttribute;
+import com.usky.iot.service.vo.DmpProductAttributeRequest;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 产品属性表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductAttributeService extends CrudService<DmpProductAttribute> {
+
+    boolean add(DmpProductAttribute dmpProductAttribute);
+
+    void update(DmpProductAttribute dmpProductAttribute);
+
+    boolean checkNameUnique(DmpProductAttribute dmpProductAttribute);
+
+    CommonPage<DmpProductAttribute> page(DmpProductAttributeRequest dmpProductAttributeRequest);
+
+    boolean remove(Integer id);
+
+    void updateBatchBind(List<Integer> ids);
+}

+ 33 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java

@@ -0,0 +1,33 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.service.vo.DmpProductInfoRequest;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 产品信息表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpProductInfoService extends CrudService<DmpProductInfo> {
+
+
+    boolean add(DmpProductInfo dmpProductInfo);
+
+    void update(DmpProductInfo dmpProductInfo);
+
+    boolean checkNameUnique(DmpProductInfo dmpProductInfo);
+
+    CommonPage<DmpProductInfo> page(DmpProductInfoRequest dmpProductInfoRequest);
+
+    boolean remove(Integer id);
+
+    List<Map<String,Object>> collect();
+}

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareInfoService.java

@@ -0,0 +1,21 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpSoftwareInfo;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 软件信息表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-11
+ */
+public interface DmpSoftwareInfoService extends CrudService<DmpSoftwareInfo> {
+
+
+    List<DmpSoftwareInfo> list(String name);
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareSubpackageService.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service;
+
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpSoftwareSubpackage;
+
+
+/**
+ * <p>
+ * 软件分包信息表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpSoftwareSubpackageService extends CrudService<DmpSoftwareSubpackage> {
+
+}

+ 25 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpSoftwareUpgradeService.java

@@ -0,0 +1,25 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpSoftwareUpgrade;
+import com.usky.iot.service.vo.DmpSoftwareUpgradeRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * <p>
+ * 软件升级信息表 服务类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+public interface DmpSoftwareUpgradeService extends CrudService<DmpSoftwareUpgrade> {
+
+
+    void add(DmpSoftwareUpgrade dmpSoftwareUpgrade,MultipartFile file);
+
+
+    CommonPage<DmpSoftwareUpgrade> page(DmpSoftwareUpgradeRequest dmpSoftwareUpgradeRequest);
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/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-iot/service-iot-biz/src/main/java/com/usky/iot/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-iot/service-iot-biz/src/main/java/com/usky/iot/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);
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpDataEvent;
+import com.usky.iot.mapper.DmpDataEventMapper;
+import com.usky.iot.service.DmpDataEventService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 事件数据 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpDataEventServiceImpl extends AbstractCrudService<DmpDataEventMapper, DmpDataEvent> implements DmpDataEventService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpDataInfo;
+import com.usky.iot.mapper.DmpDataInfoMapper;
+import com.usky.iot.service.DmpDataInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 数据信息 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpDataInfoServiceImpl extends AbstractCrudService<DmpDataInfoMapper, DmpDataInfo> implements DmpDataInfoService {
+
+}

+ 85 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java

@@ -0,0 +1,85 @@
+package com.usky.iot.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.util.DateUtils;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpDataOverview;
+import com.usky.iot.mapper.DmpDataOverviewMapper;
+import com.usky.iot.service.DmpDataOverviewService;
+import com.usky.iot.service.vo.DmpDataOverviewVO;
+import org.springframework.stereotype.Service;
+
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 数据概览
+ *
+ * @author ya
+ * @since 2022-10-14
+ */
+@Service
+public class DmpDataOverviewServiceImpl extends AbstractCrudService<DmpDataOverviewMapper, DmpDataOverview> implements DmpDataOverviewService {
+
+
+    @Override
+    public List<DmpDataOverview> list(Date startTime, Date endTime, Integer productId, Integer type) {
+        LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.between(null != startTime && null != endTime, DmpDataOverview::getCreatedTime, startTime, endTime)
+                .eq(null != productId, DmpDataOverview::getProductId, productId)
+                .eq(null != type, DmpDataOverview::getCycleType, type);
+        List<DmpDataOverview> list = this.list(queryWrapper);
+        Optional.ofNullable(type)
+                .ifPresent(t ->{
+                    if (1 == type && null != endTime){
+                        prefectMonth(list, startTime, endTime, "yyyy-MM-dd", date -> DateUtils.addDays(date, 1));
+                    }else if (2 == type && null != endTime){
+                        prefectMonth(list, startTime, endTime, "yyyy-MM", date -> DateUtils.addMonths(date, 1));
+                    }
+                });
+        return list.stream().
+                sorted(Comparator.comparing(DmpDataOverview::getCreatedTime)).
+                collect(Collectors.toList());
+    }
+
+
+    /**
+     * 完善数据
+     * @param list
+     * @param startTime
+     * @param endTime
+     * @param format
+     * @param function
+     */
+    public void prefectMonth(List<DmpDataOverview> list, Date startTime, Date endTime, String format, Function<Date, Date> function) {
+        do {
+            String dates = DateUtils.format(startTime, format);
+            Date finalStartTime = startTime;
+            list.stream().filter(dv -> DateUtils.format(dv.getCreatedTime(), format).equals(dates))
+                    .findAny()
+                    .orElseGet(() -> {
+                        DmpDataOverview dmpDataOverview = new DmpDataOverview();
+                        dmpDataOverview.setCreatedTime(finalStartTime);
+                        DmpDataOverviewVO dmpDataOverviewVO = new DmpDataOverviewVO();
+                        dmpDataOverviewVO.setDeviceCount(0);
+                        dmpDataOverviewVO.setHyCount(0);
+                        dmpDataOverviewVO.setJhCount(0);
+                        dmpDataOverviewVO.setZcCount(0);
+                        dmpDataOverviewVO.setDzcCount(0);
+                        dmpDataOverviewVO.setDlxCount(0);
+                        dmpDataOverviewVO.setJhRadioCount(0.0D);
+                        dmpDataOverviewVO.setHyRadioCount(0.0D);
+                        dmpDataOverview.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
+                        list.add(dmpDataOverview);
+                        return dmpDataOverview;
+                    });
+            startTime = function.apply(startTime);
+        } while ((startTime.getTime() - endTime.getTime()) <= 0);
+    }
+}

+ 216 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java

@@ -0,0 +1,216 @@
+package com.usky.iot.service.impl;
+
+
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+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.core.util.BeanMapperUtils;
+import com.usky.common.core.util.UUIDUtils;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpDeviceInfo;
+import com.usky.iot.mapper.DmpDeviceInfoMapper;
+import com.usky.iot.service.DmpDeviceInfoService;
+import com.usky.iot.service.vo.DmpDeviceExcelVO;
+import com.usky.iot.service.vo.DmpDeviceExportVO;
+import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 设备信息表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoMapper, DmpDeviceInfo> implements DmpDeviceInfoService {
+
+    @Override
+    public boolean add(DmpDeviceInfo dmpDeviceInfo) {
+        dmpDeviceInfo.setDeviceId(UUIDUtils.uuid());
+        if (checkNameUnique(dmpDeviceInfo)){
+            throw new BusinessException("新增设备信息'" + dmpDeviceInfo.getDeviceName() + "'失败,设备信息已存在");
+        }
+        return this.save(dmpDeviceInfo);
+    }
+
+    @Override
+    public void update(DmpDeviceInfo dmpDeviceInfo) {
+        dmpDeviceInfo.setUpdatedTime(new Date());
+        if (checkNameUnique(dmpDeviceInfo)){
+            throw new BusinessException("修改设备信息'" + dmpDeviceInfo.getDeviceName() + "'失败,设备信息已存在");
+        }
+        this.updateById(dmpDeviceInfo);
+    }
+
+    @Override
+    public boolean checkNameUnique(DmpDeviceInfo dmpDeviceInfo) {
+        Integer id = null == dmpDeviceInfo.getId() ? -1 : dmpDeviceInfo.getId();
+        LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper
+                .eq(DmpDeviceInfo::getDeviceName,dmpDeviceInfo.getDeviceName())
+                .eq(DmpDeviceInfo::getProductId,dmpDeviceInfo.getProductId())
+                .eq(DmpDeviceInfo::getDeleteFlag,0);
+        DmpDeviceInfo one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(), id);
+    }
+
+    @Override
+    public CommonPage<DmpDeviceInfo> page(DmpDeviceInfoRequest diRequest) {
+        IPage<DmpDeviceInfo> page = new Page<>(diRequest.getCurrent(), diRequest.getSize());
+        page = baseMapper.page(page,diRequest);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public boolean remove(Integer id) {
+        DmpDeviceInfo dmpDeviceInfo = this.getById(id);
+        Optional.ofNullable(dmpDeviceInfo).orElseThrow(() -> new BusinessException("设备不存在"));
+        dmpDeviceInfo.setDeleteFlag(1);
+        return this.updateById(dmpDeviceInfo);
+    }
+
+    @Override
+    public List<Map<String, Object>> deviceCollect(List<Integer> productIds) {
+        QueryWrapper<DmpDeviceInfo> query = Wrappers.query();
+        query.select("product_id as productId","count(*) as count")
+                .in(CollectionUtil.isNotEmpty(productIds),"product_id",productIds)
+                .groupBy("product_id");
+        return this.listMaps(query);
+    }
+
+    @Override
+    public int deviceCountByProductId(Integer productId) {
+        LambdaQueryWrapper<DmpDeviceInfo> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(DmpDeviceInfo::getProductId,productId)
+                .eq(DmpDeviceInfo::getDeleteFlag,0);
+        return this.count(lambdaQuery);
+    }
+
+    @Override
+    public void addByFile(Integer productId, MultipartFile multipartFiles) {
+        List<DmpDeviceInfo> deviceByFile = getDeviceByFile(productId, multipartFiles);
+        this.saveBatch(deviceByFile);
+    }
+
+    @Override
+    public void export(DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response) {
+        Workbook workbook = null;
+        try {
+            ExportParams params = new ExportParams(null, "设备列表");
+            workbook = ExcelExportUtil.exportBigExcel(params, DmpDeviceExcelVO.class,
+                    (o, i) -> {
+                        dmpDeviceInfoRequest.setCurrent(i);
+                        dmpDeviceInfoRequest.setSize(30);
+                        CommonPage<DmpDeviceInfo> list = this.page(dmpDeviceInfoRequest);
+                        return new ArrayList<>(BeanMapperUtils.mapList(list.getRecords(),DmpDeviceInfo.class,DmpDeviceExcelVO.class));
+                    },null);
+            if (null != workbook) {
+                exportExcel(workbook,response);
+            } else {
+                throw new BusinessException("表格数据为空");
+            }
+        } catch (Exception e) {
+            log.error("导出文件失败", e);
+            throw new BusinessException("导出文件失败"+e.getMessage());
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    log.error("===export spec=== 关闭workbook失败", e);
+                }
+            }
+        }
+    }
+
+    public void exportExcel(Workbook workbook, HttpServletResponse response){
+        //定义一个流,用作流式输出
+        ServletOutputStream outputStream = null;
+        try {
+            //使用流的形式传输
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            //防止中文乱码
+            response.setCharacterEncoding("utf-8");
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if(null!=outputStream){
+                try {
+                    //关闭流
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 获取表格数据
+     * @param multipartFile
+     * @return
+     */
+    public List<DmpDeviceInfo> getDeviceByFile(Integer productId,MultipartFile multipartFile){
+        ImportParams importParams = new ImportParams();
+        importParams.setHeadRows(1);
+        try {
+            List<DmpDeviceExportVO> dmpDeviceExportVOS = ExcelImportUtil.importExcel(
+                    multipartFile.getInputStream(),
+                    DmpDeviceExportVO.class,
+                    importParams
+            );
+            if (CollectionUtils.isEmpty(dmpDeviceExportVOS)){
+                throw new BusinessException("表格数据为空");
+            }
+            List<DmpDeviceInfo> deviceInfos = BeanMapperUtils.mapList(dmpDeviceExportVOS, DmpDeviceExportVO.class, DmpDeviceInfo.class);
+            long count = deviceInfos.stream()
+                    .peek(device -> {device.setProductId(productId);
+                    device.setDeviceId(UUIDUtils.uuid());})
+                    .filter(device -> StringUtils.isBlank(device.getDeviceName()) ||
+                    StringUtils.isBlank(device.getDeviceName())
+                    || StringUtils.isBlank(device.getDeviceCode())
+                    || StringUtils.isBlank(device.getSimCode())
+                    || null == device.getSubscribeFlag()
+            ).count();
+            long count1 = deviceInfos.stream()
+                    .collect(Collectors.toMap(DmpDeviceInfo::getDeviceName, s -> 1, Integer::sum))
+                    .entrySet()
+                    .stream()
+                    .filter(entry -> entry.getValue() > 1)
+                    .count();
+            if (count > 0){
+                throw new BusinessException("表格字段不能为空");
+            }
+            if (count1 > 0){
+                throw new BusinessException("设备名称不能重复");
+            }
+            return deviceInfos;
+        }catch (Exception e){
+            throw new BusinessException("解析表格异常,检查表格格式"+e.getMessage());
+        }
+    }
+}

+ 34 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java

@@ -0,0 +1,34 @@
+package com.usky.iot.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpDeviceStatus;
+import com.usky.iot.mapper.DmpDeviceStatusMapper;
+import com.usky.iot.service.DmpDeviceStatusService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 设备状态表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpDeviceStatusServiceImpl extends AbstractCrudService<DmpDeviceStatusMapper, DmpDeviceStatus> implements DmpDeviceStatusService {
+
+    @Override
+    public List<Map<String, Object>> getCollectByProduct(List<Integer> productIds) {
+        QueryWrapper<DmpDeviceStatus> query = Wrappers.query();
+        query.select("product_id as productId","count(device_status != 4 or null) as deviceCount","count(service_status = 3 or null) as serviceCount")
+                .in(CollectionUtil.isNotEmpty(productIds),"product_id",productIds)
+                .groupBy("product_id");
+        return this.listMaps(query);
+    }
+}

+ 48 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductAttributeAttachServiceImpl.java

@@ -0,0 +1,48 @@
+package com.usky.iot.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpProductAttribute;
+import com.usky.iot.domain.DmpProductAttributeAttach;
+import com.usky.iot.mapper.DmpProductAttributeAttachMapper;
+import com.usky.iot.service.DmpProductAttributeAttachService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 产品属性附表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpProductAttributeAttachServiceImpl extends AbstractCrudService<DmpProductAttributeAttachMapper, DmpProductAttributeAttach> implements DmpProductAttributeAttachService {
+
+    @Override
+    public void addBatch(DmpProductAttribute dmpProductAttribute) {
+        List<DmpProductAttributeAttach> dmpProductAttributeAttachList = dmpProductAttribute.getDmpProductAttributeAttachList();
+        if (CollectionUtil.isNotEmpty(dmpProductAttributeAttachList)){
+            dmpProductAttributeAttachList.forEach(s -> s.setAttributeId(dmpProductAttribute.getId()));
+            this.saveBatch(dmpProductAttributeAttachList);
+        }
+    }
+
+    @Override
+    public void deleteBatch(DmpProductAttribute dmpProductAttribute) {
+        LambdaQueryWrapper<DmpProductAttributeAttach> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(DmpProductAttributeAttach::getAttributeId,dmpProductAttribute.getId());
+        this.remove(lambdaQuery);
+    }
+
+    @Override
+    public List<DmpProductAttributeAttach> listByAttributeIds(List<Integer> attributeIds) {
+        LambdaQueryWrapper<DmpProductAttributeAttach> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.in(CollectionUtil.isNotEmpty(attributeIds),DmpProductAttributeAttach::getAttributeId,attributeIds);
+        return this.list(lambdaQuery);
+    }
+}

+ 116 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductAttributeServiceImpl.java

@@ -0,0 +1,116 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpProductAttribute;
+import com.usky.iot.domain.DmpProductAttributeAttach;
+import com.usky.iot.mapper.DmpProductAttributeMapper;
+import com.usky.iot.service.DmpProductAttributeAttachService;
+import com.usky.iot.service.DmpProductAttributeService;
+import com.usky.iot.service.vo.DmpProductAttributeRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 产品属性表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpProductAttributeServiceImpl extends AbstractCrudService<DmpProductAttributeMapper, DmpProductAttribute> implements DmpProductAttributeService {
+
+
+    @Autowired
+    private DmpProductAttributeAttachService dmpProductAttributeAttachService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean add(DmpProductAttribute dmpProductAttribute) {
+        if (checkNameUnique(dmpProductAttribute)){
+            throw new BusinessException("新增产品属性信息'" + dmpProductAttribute.getAttributeName() + "'失败,产品信息已存在");
+        }
+        this.save(dmpProductAttribute);
+        dmpProductAttributeAttachService.addBatch(dmpProductAttribute);
+        return true;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void update(DmpProductAttribute dmpProductAttribute) {
+        dmpProductAttribute.setUpdatedTime(new Date());
+        if (checkNameUnique(dmpProductAttribute)){
+            throw new BusinessException("新增产品属性信息'" + dmpProductAttribute.getAttributeName() + "'失败,产品信息已存在");
+        }
+        this.updateById(dmpProductAttribute);
+        dmpProductAttributeAttachService.deleteBatch(dmpProductAttribute);
+        dmpProductAttributeAttachService.addBatch(dmpProductAttribute);
+    }
+
+    @Override
+    public boolean checkNameUnique(DmpProductAttribute dmpProductAttribute) {
+        Integer id = null == dmpProductAttribute.getId() ? -1 : dmpProductAttribute.getId();
+        LambdaQueryWrapper<DmpProductAttribute> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(DmpProductAttribute::getAttributeName,dmpProductAttribute.getAttributeName())
+                .eq(DmpProductAttribute::getDeleteFlag,0);
+        DmpProductAttribute one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(), id);
+    }
+
+    @Override
+    public CommonPage<DmpProductAttribute> page(DmpProductAttributeRequest paRequest) {
+        IPage<DmpProductAttribute> page = new Page<>(paRequest.getCurrent(), paRequest.getSize());
+        LambdaQueryWrapper<DmpProductAttribute> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery
+                .eq(StringUtils.isNotBlank(paRequest.getAttributeName()),DmpProductAttribute::getAttributeName,paRequest.getAttributeName())
+                .eq(null != paRequest.getProductId(),DmpProductAttribute::getProductId,paRequest.getProductId())
+                .eq(DmpProductAttribute::getDeleteFlag,0);
+        page = this.page(page,lambdaQuery);
+        List<DmpProductAttribute> records = page.getRecords();
+        List<DmpProductAttributeAttach> dmpProductAttributeAttaches = dmpProductAttributeAttachService.listByAttributeIds(records.stream().map(DmpProductAttribute::getId).collect(Collectors.toList()));
+        page.getRecords().forEach(s ->
+            enhanceDmpProductAttribute(s,dmpProductAttributeAttaches));
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    public void enhanceDmpProductAttribute(DmpProductAttribute dmpProductAttribute, List<DmpProductAttributeAttach> dmpProductAttributeAttachList){
+        List<DmpProductAttributeAttach> collect = dmpProductAttributeAttachList
+                .stream()
+                .filter(s -> s.getAttributeId().equals(dmpProductAttribute.getProductId()))
+                .collect(Collectors.toList());
+        dmpProductAttribute.setDmpProductAttributeAttachList(collect);
+    }
+
+    @Override
+    public boolean remove(Integer id) {
+        DmpProductAttribute dmpProductAttribute = this.getById(id);
+        Optional.ofNullable(dmpProductAttribute).orElseThrow(() -> new BusinessException("产品不存在"));
+        dmpProductAttribute.setDeleteFlag(1);
+        return this.updateById(dmpProductAttribute);
+    }
+
+    @Override
+    public void  updateBatchBind(List<Integer> ids) {
+        LambdaUpdateWrapper<DmpProductAttribute> updateWrapper = Wrappers.lambdaUpdate();
+        updateWrapper
+                .set(DmpProductAttribute::getBindStatus,2)
+                .in(DmpProductAttribute::getId,ids);
+        this.update(updateWrapper);
+    }
+}

+ 122 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java

@@ -0,0 +1,122 @@
+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.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.mapper.DmpProductInfoMapper;
+import com.usky.iot.service.DmpDeviceInfoService;
+import com.usky.iot.service.DmpDeviceStatusService;
+import com.usky.iot.service.DmpProductInfoService;
+import com.usky.iot.service.vo.DmpProductInfoRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 产品信息表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpProductInfoServiceImpl extends AbstractCrudService<DmpProductInfoMapper, DmpProductInfo> implements DmpProductInfoService {
+
+
+    @Autowired
+    private DmpDeviceInfoService dmpDeviceInfoService;
+
+    @Autowired
+    private DmpDeviceStatusService dmpDeviceStatusService;
+    @Override
+    public boolean add(DmpProductInfo dmpProductInfo) {
+        if (checkNameUnique(dmpProductInfo)){
+            throw new BusinessException("新增产品信息'" + dmpProductInfo.getProductName() + "'失败,产品信息已存在");
+        }
+        return this.save(dmpProductInfo);
+    }
+
+    @Override
+    public void update(DmpProductInfo dmpProductInfo) {
+        dmpProductInfo.setUpdatedTime(new Date());
+        if (checkNameUnique(dmpProductInfo)){
+            throw new BusinessException("修改产品信息'" + dmpProductInfo.getProductName() + "'失败,产品信息已存在");
+        }
+        this.updateById(dmpProductInfo);
+    }
+
+    @Override
+    public boolean checkNameUnique(DmpProductInfo dmpProductInfo) {
+        Integer id = null == dmpProductInfo.getId() ? -1 : dmpProductInfo.getId();
+        LambdaQueryWrapper<DmpProductInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(DmpProductInfo::getProductName,dmpProductInfo.getProductName())
+                .eq(DmpProductInfo::getDeleteFlag,0);
+        DmpProductInfo one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(), id);
+    }
+
+
+    @Override
+    public CommonPage<DmpProductInfo> page(DmpProductInfoRequest piRequest) {
+        IPage<DmpProductInfo> page = new Page<>(piRequest.getCurrent(), piRequest.getSize());
+        LambdaQueryWrapper<DmpProductInfo> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery
+                .like(StringUtils.isNotBlank(piRequest.getProductName()),DmpProductInfo::getProductName,piRequest.getProductName())
+                .eq(StringUtils.isNotBlank(piRequest.getDeviceModel()),DmpProductInfo::getDeviceModel,piRequest.getDeviceModel())
+                .eq(null != piRequest.getId(),DmpProductInfo::getId,piRequest.getId())
+                .eq(DmpProductInfo::getDeleteFlag,0);
+        List<DmpProductInfo> records = page.getRecords();
+        List<Integer> productIds = records.stream().map(DmpProductInfo::getId).collect(Collectors.toList());
+        List<Map<String, Object>> maps = dmpDeviceInfoService.deviceCollect(productIds);
+        List<Map<String, Object>> collectByProduct = dmpDeviceStatusService.getCollectByProduct(productIds);
+        records.forEach(s -> {enhanceByDevice(s,maps);
+            enhanceByDeviceStatus(s,collectByProduct);
+        });
+        page = this.page(page,lambdaQuery);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    public void enhanceByDevice(DmpProductInfo dmpProductInfo, List<Map<String,Object>> list){
+        list.stream()
+                .filter(s -> dmpProductInfo.getId().toString().equals(s.get("productId")))
+                .findAny()
+                .ifPresent(s -> dmpProductInfo.setDeviceCount(Integer.getInteger(s.get("count").toString())));
+    }
+
+    public void enhanceByDeviceStatus(DmpProductInfo dmpProductInfo, List<Map<String,Object>> list){
+        list.stream()
+                .filter(s -> dmpProductInfo.getId().toString().equals(s.get("productId")))
+                .findAny()
+                .ifPresent(s -> {
+                    dmpProductInfo.setDeviceStatusCount(Integer.getInteger(s.get("deviceCount").toString()));
+                            dmpProductInfo.setServiceStatusCount(Integer.getInteger(s.get("serviceCount").toString()));
+                }
+                );
+    }
+
+    @Override
+    public boolean remove(Integer id) {
+        int deviceCount = dmpDeviceInfoService.deviceCountByProductId(id);
+        if (deviceCount > 0){
+            throw new BusinessException("产品下存在设备,请先删除设备,再删除产品");
+        }
+        DmpProductInfo dmpProductInfo = this.getById(id);
+        Optional.ofNullable(dmpProductInfo).orElseThrow(() -> new BusinessException("产品不存在"));
+        dmpProductInfo.setDeleteFlag(1);
+        return this.updateById(dmpProductInfo);
+    }
+
+    @Override
+    public List<Map<String, Object>> collect() {
+        return baseMapper.selectCollect();
+    }
+}

+ 32 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareInfoServiceImpl.java

@@ -0,0 +1,32 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpSoftwareInfo;
+import com.usky.iot.mapper.DmpSoftwareInfoMapper;
+import com.usky.iot.service.DmpSoftwareInfoService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 软件信息表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-11
+ */
+@Service
+public class DmpSoftwareInfoServiceImpl extends AbstractCrudService<DmpSoftwareInfoMapper, DmpSoftwareInfo> implements DmpSoftwareInfoService {
+
+
+    @Override
+    public List<DmpSoftwareInfo> list(String name) {
+        LambdaQueryWrapper<DmpSoftwareInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(name),DmpSoftwareInfo::getSoftwareName,name);
+        return this.list(queryWrapper);
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpSoftwareSubpackage;
+import com.usky.iot.mapper.DmpSoftwareSubpackageMapper;
+import com.usky.iot.service.DmpSoftwareSubpackageService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 软件分包信息表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpSoftwareSubpackageServiceImpl extends AbstractCrudService<DmpSoftwareSubpackageMapper, DmpSoftwareSubpackage> implements DmpSoftwareSubpackageService {
+
+}

+ 107 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareUpgradeServiceImpl.java

@@ -0,0 +1,107 @@
+package com.usky.iot.service.impl;
+
+import com.alibaba.nacos.common.utils.MD5Utils;
+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.mybatis.core.AbstractCrudService;
+import com.usky.iot.domain.DmpSoftwareSubpackage;
+import com.usky.iot.domain.DmpSoftwareUpgrade;
+import com.usky.iot.mapper.DmpSoftwareUpgradeMapper;
+import com.usky.iot.service.DmpSoftwareSubpackageService;
+import com.usky.iot.service.DmpSoftwareUpgradeService;
+import com.usky.iot.service.vo.DmpSoftwareUpgradeRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ * 软件升级信息表 服务实现类
+ * </p>
+ *
+ * @author ya
+ * @since 2022-10-08
+ */
+@Service
+public class DmpSoftwareUpgradeServiceImpl extends AbstractCrudService<DmpSoftwareUpgradeMapper, DmpSoftwareUpgrade> implements DmpSoftwareUpgradeService {
+
+    @Autowired
+    private DmpSoftwareSubpackageService dmpSoftwareSubpackageService;
+
+    @Override
+    public void add(DmpSoftwareUpgrade dmpProductInfo, MultipartFile file) {
+        dmpProductInfo.setPackageLength((int)file.getSize());
+        try {
+            dmpProductInfo.setCheckCode(MD5Utils.md5Hex(file.getBytes()));
+        } catch (Exception e) {
+            throw new BusinessException("获取文件失败");
+        }
+        this.save(dmpProductInfo);
+        List<DmpSoftwareSubpackage> dmpSoftwareSubpackages = cutFile(dmpProductInfo, file, 1024);
+        dmpSoftwareSubpackageService.saveBatch(dmpSoftwareSubpackages);
+    }
+
+    @Override
+    public CommonPage<DmpSoftwareUpgrade> page(DmpSoftwareUpgradeRequest dsRequest) {
+        IPage<DmpSoftwareUpgrade> page = new Page<>(dsRequest.getCurrent(), dsRequest.getSize());
+        LambdaQueryWrapper<DmpSoftwareUpgrade> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery
+                .like(StringUtils.isNotBlank(dsRequest.getName()),DmpSoftwareUpgrade::getVersionName,dsRequest.getName())
+                .orderByDesc(DmpSoftwareUpgrade::getId);
+
+        page = this.page(page,lambdaQuery);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+
+    private static List<DmpSoftwareSubpackage> cutFile(DmpSoftwareUpgrade dmpSoftwareUpgrade,MultipartFile multipartFile, int num) {
+        InputStream inputStream = null;
+        List<DmpSoftwareSubpackage> list = new ArrayList<>();
+        try {
+            inputStream = new BufferedInputStream(multipartFile.getInputStream());
+            //创建规定大小的byte数组
+            byte[] b = new byte[num];
+            //name为以后的小文件命名做准备
+            int name = 0;
+            //遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
+            int len = 0;
+            while ((len = inputStream.read(b)) != -1) {
+                int chk = 0x0000;
+                for(int i=0;i<len;i++){
+                    chk += b[i]&0x00ff;
+                }
+                DmpSoftwareSubpackage dmpSoftwareSubpackage = new DmpSoftwareSubpackage();
+                dmpSoftwareSubpackage.setUpgradeId(dmpSoftwareUpgrade.getId());
+                dmpSoftwareSubpackage.setSubpackageNumber(name);
+                dmpSoftwareSubpackage.setApplyPackage(Arrays.copyOf(b, len));
+                dmpSoftwareSubpackage.setSubpackageLength(String.valueOf(len));
+                dmpSoftwareSubpackage.setCheckCode(String.format("%04x", chk& 0x0000ffff));
+                list.add(dmpSoftwareSubpackage);
+                name++;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != inputStream) {
+                    inputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return list;
+    }
+}

+ 152 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java

@@ -0,0 +1,152 @@
+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.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);
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllMonthHyCollect(productId, startTime, endTime);
+        joinList(list,map);
+        return list;
+    }
+
+    public List<DmpDataOverviewVO> getListMap(Integer productId,Date startTime,Date endTime){
+        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getDeviceStatusCollect(productId, startTime, endTime);
+        //全部产品日
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllCollect(productId, startTime, endTime);
+        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()));
+        });
+    }
+
+
+}

+ 46 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/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-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceExcelVO.java

@@ -0,0 +1,113 @@
+package com.usky.iot.service.vo;
+
+import cn.afterturn.easypoi.excel.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-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceExportVO.java

@@ -0,0 +1,42 @@
+package com.usky.iot.service.vo;
+
+import cn.afterturn.easypoi.excel.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;
+
+}

+ 44 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDeviceInfoRequest.java

@@ -0,0 +1,44 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DmpDeviceInfoRequest {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+    /**
+     * 产品id
+      */
+    private Integer productId;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 设备状态
+      */
+    private Integer deviceStatus;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+}

+ 25 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/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-iot/service-iot-biz/src/main/java/com/usky/iot/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-iot/service-iot-biz/src/main/java/com/usky/iot/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;
+}

+ 25 - 0
service-iot/service-iot-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: 172.16.120.165:8848
+      config:
+        # 配置中心地址
+        server-addr: 172.16.120.165:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 108 - 0
service-iot/service-iot-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;
+

+ 74 - 0
service-iot/service-iot-biz/src/main/resources/logback.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+	<property name="log.path" value="/var/log/uskycloud/usky-demo" />
+   <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+    <!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<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>60</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" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+</configuration>

+ 15 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataEventMapper.xml

@@ -0,0 +1,15 @@
+<?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.DmpDataEventMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpDataEvent">
+        <id column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="device_code" property="deviceCode" />
+        <result column="event_type" property="eventType" />
+        <result column="event_content" property="eventContent" />
+        <result column="report_time" property="reportTime" />
+    </resultMap>
+
+</mapper>

+ 14 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataInfoMapper.xml

@@ -0,0 +1,14 @@
+<?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.DmpDataInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpDataInfo">
+        <id column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="device_code" property="deviceCode" />
+        <result column="data_content" property="dataContent" />
+        <result column="report_time" property="reportTime" />
+    </resultMap>
+
+</mapper>

+ 21 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDataOverviewMapper.xml

@@ -0,0 +1,21 @@
+<?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.DmpDataOverviewMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpDataOverview">
+        <id column="id" property="id" />
+        <result column="device_number" property="deviceNumber" />
+        <result column="device_trend" property="deviceTrend" />
+        <result column="device_daily_active" property="deviceDailyActive" />
+        <result column="middle_statistic" property="middleStatistic" />
+        <result column="data_report" property="dataReport" />
+        <result column="product_device" property="productDevice" />
+        <result column="device_monthly_active" property="deviceMonthlyActive" />
+        <result column="product_id" property="productId" />
+        <result column="created_by" property="createdBy" />
+        <result column="created_time" property="createdTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 55 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml

@@ -0,0 +1,55 @@
+<?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.DmpDeviceInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpDeviceInfo">
+        <id column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="device_code" property="deviceCode" />
+        <result column="device_name" property="deviceName" />
+        <result column="device_type" property="deviceType" />
+        <result column="product_id" property="productId" />
+        <result column="sim_code" property="simCode" />
+        <result column="imsi_code" property="imsiCode" />
+        <result column="node_type" property="nodeType" />
+        <result column="group_id" property="groupId" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="created_by" property="createdBy" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_by" property="updatedBy" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+    <select id="page" resultType="com.usky.iot.domain.DmpDeviceInfo">
+        select ddi.*,dpi.product_name as productName, dds.device_status as deviceStatus
+        from dmp_product dpi
+        inner join dmp_device ddi
+        on dpi.id = ddi.product_id
+        left join dmp_device_status dds
+        on dpi.id  = dds.product_id
+        <where>
+            <if test="ar.startTime != null and ar.endTime != null">
+                and  dds.last_online_time between #{ar.startTime}
+                and #{ar.endTime}
+            </if>
+            <if test="ar.deviceName != null">
+                and ddi.device_name like CONCAT('%',#{ar.deviceName},'%')
+            </if>
+            <if test="ar.productId != null">
+                and dpi.id = #{ar.productId}
+            </if>
+            <if test="ar.productName != null">
+                and dpi.product_name like CONCAT('%',#{ar.productName},'%')
+            </if>
+            <if test="ar.deviceStatus != null">
+                and dds.device_status = #{ar.deviceStatus}
+            </if>
+            <if test="1 == 1">
+                and ddi.delete_flag = 0
+            </if>
+        </where>
+        order by ddi.id desc
+    </select>
+
+</mapper>

+ 93 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

@@ -0,0 +1,93 @@
+<?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.DmpDeviceStatusMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpDeviceStatus">
+        <id column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="device_code" property="deviceCode" />
+        <result column="product_id" property="productId" />
+        <result column="device_status" property="deviceStatus" />
+        <result column="last_online_time" property="lastOnlineTime" />
+        <result column="last_offline_time" property="lastOfflineTime" />
+    </resultMap>
+
+    <select id="getAllCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
+        select ddi.product_id as productId,
+        count(*) as deviceCount,
+        COUNT(to_days(last_online_time) = to_days(now()) or null) as hyCount,
+        count(service_status = 3 or null) as jhCount,
+        count(service_status = 1 or null) as zcCount,
+        count(device_status = 1 or null) as dzcCount,
+        count(device_status = 4 or null) as dlxCount
+        from dmp_device ddi
+        left join dmp_device_status dds
+        on ddi.device_id  = dds.device_id
+        <where>
+            <if test="startTime != null and endTime != null">
+                and  ddi.created_time between #{startTime}
+                and #{endTime}
+            </if>
+            <if test="productId != null">
+                and ddi.product_id = #{productId}
+            </if>
+        </where>
+    </select>
+    <select id="getMonthHyCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
+        select ddi.product_id as productId,
+        count(*) hyCount
+        from dmp_device ddi
+        left join dmp_device_status dds
+        on ddi.device_id  = dds.device_id
+        <where>
+            <if test="startTime != null and endTime != null">
+                and  dds.last_online_time between #{startTime}
+                and #{endTime}
+            </if>
+            <if test="productId != null">
+                and ddi.product_id = #{productId}
+            </if>
+        </where>
+        group by productId
+    </select>
+    <select id="getAllMonthHyCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
+        select ddi.product_id as productId,
+        count(*) hyCount
+        from dmp_device ddi
+        left join dmp_device_status dds
+        on ddi.device_id  = dds.device_id
+        <where>
+            <if test="startTime != null and endTime != null">
+                and  dds.last_online_time between #{startTime}
+                and #{endTime}
+            </if>
+            <if test="productId != null">
+                and ddi.product_id = #{productId}
+            </if>
+        </where>
+    </select>
+    <select id="getDeviceStatusCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
+        select ddi.product_id as productId,
+        count(*) as deviceCount,
+        COUNT(to_days(last_online_time) = to_days(now()) or null) as hyCount,
+        count(service_status = 3 or null) as jhCount,
+        count(service_status = 1 or null) as zcCount,
+        count(device_status = 1 or null) as dzcCount,
+        count(device_status = 4 or null) as dlxCount
+        from dmp_device ddi
+        left join dmp_device_status dds
+        on ddi.device_id  = dds.device_id
+        <where>
+            <if test="startTime != null and endTime != null">
+                and  ddi.created_time between #{startTime}
+                and #{endTime}
+            </if>
+            <if test="productId != null">
+                and ddi.product_id = #{productId}
+            </if>
+        </where>
+        group by productId
+    </select>
+
+</mapper>

+ 13 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductAttributeAttachMapper.xml

@@ -0,0 +1,13 @@
+<?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.DmpProductAttributeAttachMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpProductAttributeAttach">
+        <id column="id" property="id" />
+        <result column="attribute_id" property="attributeId" />
+        <result column="parameter_value" property="parameterValue" />
+        <result column="parameter_describe" property="parameterDescribe" />
+    </resultMap>
+
+</mapper>

+ 31 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductAttributeMapper.xml

@@ -0,0 +1,31 @@
+<?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.DmpProductAttributeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpProductAttribute">
+        <id column="id" property="id" />
+        <result column="product_id" property="productId" />
+        <result column="attribute_name" property="attributeName" />
+        <result column="attribute_code" property="attributeCode" />
+        <result column="attribute_port" property="attributePort" />
+        <result column="attribute_type" property="attributeType" />
+        <result column="data_type" property="dataType" />
+        <result column="bind_status" property="bindStatus" />
+        <result column="attribute_length" property="attributeLength" />
+        <result column="attribute_unit" property="attributeUnit" />
+        <result column="maximum" property="maximum" />
+        <result column="minimum" property="minimum" />
+        <result column="time_format" property="timeFormat" />
+        <result column="bool_false" property="boolFalse" />
+        <result column="bool_true" property="boolTrue" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="attribute_describe" property="attributeDescribe" />
+        <result column="created_by" property="createdBy" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_by" property="updatedBy" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 39 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductInfoMapper.xml

@@ -0,0 +1,39 @@
+<?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.DmpProductInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpProductInfo">
+        <id column="id" property="id" />
+        <result column="product_name" property="productName" />
+        <result column="access_mode" property="accessMode" />
+        <result column="network_type" property="networkType" />
+        <result column="device_type" property="deviceType" />
+        <result column="com_protocol" property="comProtocol" />
+        <result column="auth_mode" property="authMode" />
+        <result column="device_model" property="deviceModel" />
+        <result column="product_describe" property="productDescribe" />
+        <result column="factory_name" property="factoryName" />
+        <result column="factory_person" property="factoryPerson" />
+        <result column="factory_phone" property="factoryPhone" />
+        <result column="certificate_url1" property="certificateUrl1" />
+        <result column="certificate_url2" property="certificateUrl2" />
+        <result column="certificate_url3" property="certificateUrl3" />
+        <result column="agreement_url" property="agreementUrl" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="created_by" property="createdBy" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_by" property="updatedBy" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+    <select id="selectCollect" resultType="java.util.Map">
+        select product_name as productName,count(*) as totalCount
+        from dmp_product as dp
+        inner join dmp_device as dd
+        on dp.id = dd.product_id
+        where dp.delete_flag = 0
+        group by product_name
+    </select>
+
+</mapper>

+ 17 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareInfoMapper.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.DmpSoftwareInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpSoftwareInfo">
+        <id column="id" property="id" />
+        <result column="software_id" property="softwareId" />
+        <result column="effect_status" property="effectStatus" />
+        <result column="software_name" property="softwareName" />
+        <result column="software_explain" property="softwareExplain" />
+        <result column="order_number" property="orderNumber" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+    </resultMap>
+
+</mapper>

+ 16 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareSubpackageMapper.xml

@@ -0,0 +1,16 @@
+<?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.DmpSoftwareSubpackageMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpSoftwareSubpackage">
+        <result column="id" property="id" />
+        <result column="upgrade_id" property="upgradeId" />
+        <result column="subpackage_number" property="subpackageNumber" />
+        <result column="apply_package" property="applyPackage" />
+        <result column="subpackage_length" property="subpackageLength" />
+        <result column="check_code" property="checkCode" />
+        <result column="created_time" property="createdTime" />
+    </resultMap>
+
+</mapper>

+ 23 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpSoftwareUpgradeMapper.xml

@@ -0,0 +1,23 @@
+<?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.DmpSoftwareUpgradeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.DmpSoftwareUpgrade">
+        <id column="id" property="id" />
+        <result column="product_id" property="productId" />
+        <result column="version_name" property="versionName" />
+        <result column="major_version" property="majorVersion" />
+        <result column="minor_version" property="minorVersion" />
+        <result column="package_length" property="packageLength" />
+        <result column="check_code" property="checkCode" />
+        <result column="version_describe" property="versionDescribe" />
+        <result column="implement_time" property="implementTime" />
+        <result column="created_by" property="createdBy" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_by" property="updatedBy" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 15 - 0
service-iot/service-iot-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"
+}

+ 4 - 4
usky-module-demo/usky-module-demo-biz/src/main/java/com/usky/demo/MybatisGenerator.java

@@ -65,9 +65,9 @@ public class MybatisGenerator {
         StrategyConfig strategy = new StrategyConfig();
         strategy.setNaming(NamingStrategy.underline_to_camel);
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);
-        strategy.setSuperMapperClass("com.usky.common.mvc.base.CrudMapper");
-        strategy.setSuperServiceClass("com.usky.common.mvc.base.CrudService");
-        strategy.setSuperServiceImplClass("com.usky.common.mvc.base.AbstractCrudService");
+        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
         //修改自己想要生成的表
@@ -94,7 +94,7 @@ public class MybatisGenerator {
             @Override
             public String outputFile(TableInfo tableInfo) {
                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
-                return finalProjectPath + "/src/main/resources/mapper.demo" + "/"
+                return finalProjectPath + "/src/main/resources/mapper/demo" + "/"
                         + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
             }
         });