yq 2 vuotta sitten
vanhempi
commit
b778a0ac07
15 muutettua tiedostoa jossa 326 lisäystä ja 205 poistoa
  1. 108 108
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java
  2. 14 7
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java
  3. 5 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataOverview.java
  4. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDataOverviewMapper.java
  5. 19 8
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  6. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataOverviewService.java
  7. 0 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceStatusService.java
  8. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java
  9. 0 6
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceStatusServiceImpl.java
  10. 1 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java
  11. 13 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareUpgradeServiceImpl.java
  12. 90 50
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java
  13. 33 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDataOverviewVO.java
  14. 4 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpProductInfoRequest.java
  15. 36 15
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

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

@@ -1,108 +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();
-    }
-}
+//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();
+//    }
+//}

+ 14 - 7
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java

@@ -1,21 +1,28 @@
 package com.usky.iot.controller.web;
 
 
+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.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
- * <p>
- * 数据概览 前端控制器
- * </p>
+ * 数据概览
  *
  * @author ya
- * @since 2022-10-13
+ * @since 2022-10-14
  */
-@Controller
+@RestController
 @RequestMapping("/dmpDataOverview")
 public class DmpDataOverviewController {
 
+    @Autowired
+    private DmpDataOverviewJob dmpDataOverviewJob;
+
+    @GetMapping
+    public void get(){
+        dmpDataOverviewJob.execute();
+    }
 }
 

+ 5 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/DmpDataOverview.java

@@ -2,18 +2,19 @@ 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;
 
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * <p>
  * 数据概览
  * </p>
  *
  * @author ya
- * @since 2022-10-13
+ * @since 2022-10-14
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -75,7 +76,7 @@ public class DmpDataOverview implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createdTime;
+    private Date createdTime;
 
     /**
      * 租户号

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

@@ -9,7 +9,7 @@ import com.usky.common.mybatis.core.CrudMapper;
  * </p>
  *
  * @author ya
- * @since 2022-10-13
+ * @since 2022-10-14
  */
 public interface DmpDataOverviewMapper extends CrudMapper<DmpDataOverview> {
 

+ 19 - 8
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java

@@ -2,11 +2,12 @@ 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;
-import java.util.Map;
 
 
 /**
@@ -17,19 +18,29 @@ import java.util.Map;
  * @author ya
  * @since 2022-10-08
  */
+@Repository
 public interface DmpDeviceStatusMapper extends CrudMapper<DmpDeviceStatus> {
 
 
-    List<Map<String, Object>> getDeviceStatusCollect(@Param("productId") Integer productId,
-                                                     @Param("startTime") Date startTime,
-                                                     @Param("endTime") Date endTime);
+    List<DmpDataOverviewVO> getDeviceStatusCollect(@Param("productId") Integer productId,
+                                                   @Param("startTime") Date startTime,
+                                                   @Param("endTime") Date endTime);
 
 
-    List<Map<String,Object>> getMonthCollect(@Param("productId") Integer productId,
+    DmpDataOverviewVO getAllCollect(@Param("productId") Integer productId,
                                              @Param("startTime") Date startTime,
                                              @Param("endTime") Date endTime);
 
-    String getDayHyList(@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);
+
+
+
+
 }

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

@@ -9,7 +9,7 @@ import com.usky.common.mybatis.core.CrudService;
  * </p>
  *
  * @author ya
- * @since 2022-10-13
+ * @since 2022-10-14
  */
 public interface DmpDataOverviewService extends CrudService<DmpDataOverview> {
 

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

@@ -3,7 +3,6 @@ package com.usky.iot.service;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.iot.domain.DmpDeviceStatus;
 
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -21,6 +20,4 @@ public interface DmpDeviceStatusService extends CrudService<DmpDeviceStatus> {
 
     List<Map<String,Object>> getCollectByProduct(List<Integer> productIds);
 
-
-    List<Map<String,Object>> getDeviceStatusCollect(Integer productId, Date startTime,Date endTime);
 }

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

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author ya
- * @since 2022-10-13
+ * @since 2022-10-14
  */
 @Service
 public class DmpDataOverviewServiceImpl extends AbstractCrudService<DmpDataOverviewMapper, DmpDataOverview> implements DmpDataOverviewService {

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

@@ -9,7 +9,6 @@ import com.usky.iot.mapper.DmpDeviceStatusMapper;
 import com.usky.iot.service.DmpDeviceStatusService;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -32,9 +31,4 @@ public class DmpDeviceStatusServiceImpl extends AbstractCrudService<DmpDeviceSta
                 .groupBy("product_id");
         return this.listMaps(query);
     }
-
-    @Override
-    public List<Map<String, Object>> getDeviceStatusCollect(Integer productId, Date startTime, Date endTime) {
-        return null;
-    }
 }

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

@@ -72,6 +72,7 @@ public class DmpProductInfoServiceImpl extends AbstractCrudService<DmpProductInf
         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());

+ 13 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpSoftwareUpgradeServiceImpl.java

@@ -73,7 +73,7 @@ public class DmpSoftwareUpgradeServiceImpl extends AbstractCrudService<DmpSoftwa
             byte[] b = new byte[num];
             int len = 0;
             //name为以后的小文件命名做准备
-            int name = 1;
+            int name = 0;
             //遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
             while ((len = inputStream.read(b)) != -1) {
                 int chk = 0x0000;
@@ -84,6 +84,9 @@ public class DmpSoftwareUpgradeServiceImpl extends AbstractCrudService<DmpSoftwa
                 dmpSoftwareSubpackage.setUpgradeId(dmpSoftwareUpgrade.getId());
                 dmpSoftwareSubpackage.setSubpackageNumber(name);
                 dmpSoftwareSubpackage.setApplyPackage(b);
+                if (len < 1024){
+                    dmpSoftwareSubpackage.setApplyPackage(subBytes(b,0,len));
+                }
                 dmpSoftwareSubpackage.setSubpackageLength(String.valueOf(len));
                 dmpSoftwareSubpackage.setCheckCode(String.format("%04x", chk& 0x0000ffff));
                 list.add(dmpSoftwareSubpackage);
@@ -102,4 +105,13 @@ public class DmpSoftwareUpgradeServiceImpl extends AbstractCrudService<DmpSoftwa
         }
         return list;
     }
+
+
+    public static byte[] subBytes(byte[]src,int begin,int count){
+        byte[]bs=new byte[count];
+        for(int i=begin;i<begin+count;i++){
+            bs[i-begin]=src[i];
+        }
+        return bs;
+    }
 }

+ 90 - 50
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java

@@ -1,86 +1,126 @@
 package com.usky.iot.service.job;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.iot.domain.DmpDeviceInfo;
-import com.usky.iot.domain.DmpDeviceStatus;
+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.DmpDeviceInfoService;
-import com.usky.iot.service.DmpDeviceStatusService;
+import com.usky.iot.service.vo.DmpDataOverviewVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class DmpDataOverviewJob {
 
 
     @Autowired
-    private DmpDeviceInfoService dmpDeviceInfoService;
-
-    @Autowired
-    private DmpDeviceStatusService dmpDeviceStatusService;
+    private DmpDeviceStatusMapper dmpDeviceStatusMapper;
 
     @Autowired
     private DmpDataOverviewService dmpDataOverviewService;
 
     public void execute(){
-
+        deviceCount();
     }
 
     /**
      * 设备量分析
      */
     public void deviceCount(){
-        //月活跃
-
-        List<Map<String, Object>> maps = deviceCount(null, null, null, "DATE(created_time)");
-        List<Map<String, Object>> maps1 = deviceStatusCount(null, null, null);
-        maps.forEach(s -> {
-            s.put("dayCount",0);
-            s.put("serviceCount",0);
-            maps1.stream()
-                    .filter(s1 -> s1.get("productId").toString().equals(s.get("productId").toString()))
+        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, 0);
+        //产品日
+        List<DmpDataOverview> dmpDataOverviews = new ArrayList<>();
+        List<DmpDataOverviewVO> list = getListMap(null, dayStartTime, dayEndTime);
+        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<DmpDataOverview> listByTimeAndIds = getListByTimeAndIds(monthList, date4);
+        for (DmpDataOverviewVO dmpDataOverviewVO : monthList) {
+            listByTimeAndIds.stream()
+                    .filter(dm -> dmpDataOverviewVO.getProductId().equals(dm.getProductId()) && dm.getCreatedTime().equals(date4))
                     .findAny()
-                    .ifPresent(s2 -> {
-                        s.putAll(s2);
+                    .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);
+                        listByTimeAndIds.add(dmpDataOverview);
+                        return dmpDataOverview;
                     });
-        });
+        }
+        dmpDataOverviewService.saveOrUpdateBatch(listByTimeAndIds);
     }
 
+
     /**
-     * 设备总数
-     * @param productId
-     * @param startTime
-     * @param endTime
+     * 获取月统计信息
+     * @param productIds
+     * @param date
      * @return
      */
-    public List<Map<String, Object>> deviceCount(Integer productId, Date startTime, Date endTime,String reportDate){
-        QueryWrapper<DmpDeviceInfo> query = Wrappers.query();
-        query.select(reportDate + " as time","product_id as productId","count(*) as deviceCount")
-                .eq(null != productId,"product_id",productId)
-                .between(null != startTime && null != endTime,"created_time",startTime,endTime)
-                .groupBy("productId","time");
-        return dmpDeviceInfoService.listMaps(query);
+    public List<DmpDataOverview> getListByTimeAndIds(List<DmpDataOverviewVO> productIds,Date date){
+        List<Integer> productId = productIds.stream()
+                .map(DmpDataOverviewVO::getProductId)
+                .collect(Collectors.toList());
+        LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.in(CollectionUtils.isNotEmpty(productId),DmpDataOverview::getProductId,productId)
+                .eq(DmpDataOverview::getCreatedTime,date);
+        return dmpDataOverviewService.list(queryWrapper);
     }
 
-    /**
-     * 统计产品日活跃数
-     * @param productId
-     * @param startTime
-     * @param endTime
-     * @return
-     */
-    public List<Map<String, Object>> deviceStatusCount(Integer productId, Date startTime, Date endTime){
-        QueryWrapper<DmpDeviceStatus> query = Wrappers.query();
-        query.select("product_id as productId","COUNT(to_days(last_online_time) = to_days(now())) as dayCount","count(service_status = 3 or null) as serviceCount")
-                .eq(null != productId,"product_id",productId)
-                .between(null != startTime && null != endTime,"last_online_time",startTime,endTime)
-                .groupBy("productId");
-        return dmpDeviceStatusService.listMaps(query);
+    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);
+    }
+
+
 }

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

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

+ 4 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpProductInfoRequest.java

@@ -22,4 +22,8 @@ public class DmpProductInfoRequest {
      * 设备型号
      */
     private String deviceModel;
+    /**
+     * id
+     */
+    private Integer id;
 }

+ 36 - 15
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

@@ -12,11 +12,14 @@
         <result column="last_online_time" property="lastOnlineTime" />
         <result column="last_offline_time" property="lastOfflineTime" />
     </resultMap>
-    <select id="getDeviceStatusCollect" resultType="java.util.Map">
-        select product_id as productId,DATE(created_time) as createTime
-               COUNT(to_days(last_online_time) = to_days(now()) or null) as dayCount,
-               count(service_status = 3 or null) as jhCount,
-        count(service_status = 1 or null) as zcCount
+
+    <select id="getAllCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
+        select ddi.product_id as productId,
+        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
@@ -29,29 +32,27 @@
                 and ddi.product_id = #{productId}
             </if>
         </where>
-        group by productId,createTime
     </select>
-    <select id="getMonthCollect" resultType="java.util.Map">
-        select product_id as productId,YEAR(created_time) as createTime
-        count(service_status = 3 or null) as jhCount,
-        count(service_status = 1 or null) as zcCount
+    <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  ddi.created_time between #{startTime}
+                and  dds.last_online_time between #{startTime}
                 and #{endTime}
             </if>
             <if test="productId != null">
                 and ddi.product_id = #{productId}
             </if>
         </where>
-        group by productId,createTime
+        group by productId
     </select>
-    <select id="getDayHyList" resultType="java.lang.String">
-        select
-        count(*)
+    <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
@@ -64,6 +65,26 @@
                 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(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>