Browse Source

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

gez 1 year ago
parent
commit
fe624f28cb
100 changed files with 5257 additions and 311 deletions
  1. 10 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/client/DeviceDataClient.java
  2. 0 2
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/StatusVO.java
  3. 40 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/DmpDeviceDataRequestVO.java
  4. 2 2
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/HistoryQueryVo.java
  5. 1 1
      service-backend/service-backend-biz/src/main/java/com/usky/backend/MybatisGeneratorUtils.java
  6. 3 3
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java
  7. 2 2
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataRealTimeController.java
  8. 26 0
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DeviceDataApi.java
  9. 8 0
      service-backend/service-backend-biz/src/main/java/com/usky/backend/mapper/DataRealTimeMapper.java
  10. 1 1
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java
  11. 3 1
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataRealTimeService.java
  12. 172 160
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java
  13. 42 0
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataRealTimeServiceImpl.java
  14. 0 17
      service-backend/service-backend-biz/src/main/resources/mapper.backend/DataRealTimeMapper.xml
  15. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEgHistoryMapper.xml
  16. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEvHistoryMapper.xml
  17. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataGrHistoryMapper.xml
  18. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLcHistoryMapper.xml
  19. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLgHistoryMapper.xml
  20. 39 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml
  21. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataVdHistoryMapper.xml
  22. 20 20
      service-backend/service-backend-biz/src/main/resources/mapper/backend/SysConfigMapper.xml
  23. 25 25
      service-backend/service-backend-biz/src/main/resources/mapper/backend/SysTenantMapper.xml
  24. 0 0
      service-backend/service-backend-biz/src/main/resources/mapper/backend/SysUserMapper.xml
  25. 74 3
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportConfigController.java
  26. 24 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportIndexConfigController.java
  27. 37 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportIndexResultController.java
  28. 20 4
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportResultController.java
  29. 5 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/ReportConfig.java
  30. 7 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/ReportConfigMapper.java
  31. 37 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportConfigService.java
  32. 7 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportIndexConfigService.java
  33. 24 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportIndexResultService.java
  34. 10 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportResultService.java
  35. 345 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportConfigServiceImpl.java
  36. 7 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportIndexConfigServiceImpl.java
  37. 826 3
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportIndexResultServiceImpl.java
  38. 39 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportResultServiceImpl.java
  39. 0 4
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/BaseGgpFacilityVO.java
  40. 26 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/DemReportDataVo.java
  41. 37 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportConfigVO.java
  42. 62 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex1Vo.java
  43. 63 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex2Vo.java
  44. 58 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex3Vo.java
  45. 43 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndexVo.java
  46. 20 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportResultVO.java
  47. 34 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ResultStatisticsVO.java
  48. 30 1
      service-fire/service-fire-biz/src/main/resources/mapper/fire/ReportConfigMapper.xml
  49. 24 1
      service-iot/service-iot-biz/pom.xml
  50. 73 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmController.java
  51. 85 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmTypeController.java
  52. 106 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildController.java
  53. 94 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildFacilityController.java
  54. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildFacilityRelateController.java
  55. 82 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildFacilityTypeController.java
  56. 30 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseGgpFacilityController.java
  57. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/CrmCustomRemindController.java
  58. 17 9
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java
  59. 15 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java
  60. 9 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceTypeController.java
  61. 165 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarm.java
  62. 91 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmType.java
  63. 24 13
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuild.java
  64. 154 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacility.java
  65. 51 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityRelate.java
  66. 91 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityType.java
  67. 3 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseGgpFacility.java
  68. 19 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmMapper.java
  69. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmTypeMapper.java
  70. 19 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityMapper.java
  71. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityRelateMapper.java
  72. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityTypeMapper.java
  73. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseFacilityTypeMapper.java
  74. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceInfoMapper.java
  75. 8 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  76. 5 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceTypeMapper.java
  77. 29 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java
  78. 36 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmTypeService.java
  79. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildFacilityRelateService.java
  80. 33 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildFacilityService.java
  81. 27 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildFacilityTypeService.java
  82. 38 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildService.java
  83. 11 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseGgpFacilityService.java
  84. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/CrmCustomRemindService.java
  85. 3 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataInfoService.java
  86. 5 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java
  87. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceTypeService.java
  88. 50 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/mqtt/MqttBaseConfig.java
  89. 84 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/mqtt/MqttOutConfig.java
  90. 75 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/websocket/WebSocket.java
  91. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/websocket/WebSocketConfig.java
  92. 86 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/enums/TopListener.java
  93. 280 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  94. 124 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmTypeServiceImpl.java
  95. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildFacilityRelateServiceImpl.java
  96. 233 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildFacilityServiceImpl.java
  97. 98 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildFacilityTypeServiceImpl.java
  98. 294 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildServiceImpl.java
  99. 220 7
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseGgpFacilityServiceImpl.java
  100. 4 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/CrmCustomInfoServiceImpl.java

+ 10 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/client/DeviceDataClient.java

@@ -0,0 +1,10 @@
+package com.usky.backend.client;
+
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(contextId = "deviceDataClient", value = "usky-backend")
+public interface DeviceDataClient {
+//
+//    @RequestMapping(value = "data")
+//    void data(@RequestBody List<DeviceDataInfoVO> list);
+}

+ 0 - 2
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/StatusVO.java

@@ -15,8 +15,6 @@ import java.time.LocalDateTime;
 @EqualsAndHashCode(callSuper = false)
 public class StatusVO implements Serializable {
 
-    private static final long serialVersionUID = 1L;
-
     private String  deviceId;
 
     private LocalDateTime time;

+ 40 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/DmpDeviceDataRequestVO.java

@@ -0,0 +1,40 @@
+package com.usky.backend.domain.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ */
+@Data
+public class DmpDeviceDataRequestVO{
+
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 设备编号
+     */
+    private String deviceId;
+
+    /**
+     * 数据上报时间
+     */
+    private long timestamp;
+
+    /**
+     * 属性值集合
+     */
+    private Map<String,Float> metrics;
+
+
+
+}
+

+ 2 - 2
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/request/HistoryQueryVo.java

@@ -32,9 +32,9 @@ public class HistoryQueryVo implements Serializable {
     private String  deviceId;
 
     /**
-     * 设备类型
+     * 设备类型简称
      */
-    private Integer deviceType;
+    private String typeAbbrevia;
 
     /**
      * 指标名

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

@@ -95,7 +95,7 @@ public class MybatisGeneratorUtils {
             @Override
             public String outputFile(TableInfo tableInfo) {
                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
-                return finalProjectPath + "/src/main/resources/mapper.backend" + "/"
+                return finalProjectPath + "/src/main/resources/mapper/backend" + "/"
                         + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
             }
         });

+ 3 - 3
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java

@@ -36,7 +36,7 @@ public class DataQueryController {
      * @param endTime 结束时间
      * @param deviceId 设备Id
      * @param metric 属性
-     * @param deviceType 设备类型编码(501、监控系统  502、门禁系统  503、梯控系统  504、机房系统  509、环境系统  510、照明系统)
+     * @param typeAbbrevia 设备类型简称
      * @return
      */
     @GetMapping("/historyMetric")
@@ -45,8 +45,8 @@ public class DataQueryController {
                                               @RequestParam("endTime") String endTime,
                                               @RequestParam("deviceId") String deviceId,
                                               @RequestParam("metric") String metric,
-                                              @RequestParam("deviceType") Integer deviceType) {
-        return ApiResult.success(dataQueryService.historyMetric(deviceId,metric,startTime,endTime,deviceType));
+                                              @RequestParam("typeAbbrevia") String typeAbbrevia) {
+        return ApiResult.success(dataQueryService.historyMetric(deviceId,metric,startTime,endTime,typeAbbrevia));
     }
 
     @PostMapping("/historyMetrics")

+ 2 - 2
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataRealTimeController.java

@@ -1,9 +1,8 @@
 package com.usky.backend.controller;
 
-
+import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -15,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-06-07
  */
 @RestController
+@Api(tags = "数据统一存储")
 @RequestMapping("/dataRealTime")
 public class DataRealTimeController {
 

+ 26 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DeviceDataApi.java

@@ -0,0 +1,26 @@
+package com.usky.backend.controller.api;
+
+import com.usky.backend.client.DeviceDataClient;
+//import com.usky.backend.domain.request.DeviceDataInfoVO;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  数据统一存储 前端控制器
+ * </p>
+ *
+ */
+@RestController
+@Api(tags = "数据统一存储RPC")
+public class DeviceDataApi implements DeviceDataClient {
+
+//    @Autowired
+//    private DataRealTimeService dataRealTimeService;
+//
+//    @Override
+//    public void data(@RequestBody List<DeviceDataInfoVO> list){
+//        dataRealTimeService.data(list);
+//    }
+
+}

+ 8 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/mapper/DataRealTimeMapper.java

@@ -1,9 +1,14 @@
 package com.usky.backend.mapper;
 
 import com.usky.backend.domain.DataRealTime;
+//import com.usky.backend.domain.request.DeviceDataInfoVO;
+import com.usky.backend.domain.MetricItemVo;
 import com.usky.common.mybatis.core.CrudMapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  * 实时数据表 Mapper 接口
@@ -15,4 +20,7 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface DataRealTimeMapper extends CrudMapper<DataRealTime> {
 
+//    int insertHistoryTable(@Param("dataInfo") DeviceDataInfoVO dataInfo, @Param("tableName") String tableName, @Param("curTime") LocalDateTime curTime);
+    List<MetricItemVo> QueryHistoryData(@Param("deviceId") String deviceId,@Param("metric") String metric,@Param("startTime") String startTime,@Param("endTime") String endTime, @Param("tableName") String tableName);
+
 }

+ 1 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import java.util.List;
 
 public interface DataQueryService {
-    HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,Integer deviceType);
+    HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,String typeAbbrevia);
 
     List<HistoryResultVo> historyMetrics(HistoryQueryVo historyQueryVo);
 

+ 3 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataRealTimeService.java

@@ -1,6 +1,7 @@
 package com.usky.backend.service;
 
 import com.usky.backend.domain.DataRealTime;
+//import com.usky.backend.domain.request.DeviceDataInfoVO;
 import com.usky.common.mybatis.core.CrudService;
 
 /**
@@ -12,5 +13,6 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2023-06-07
  */
 public interface DataRealTimeService extends CrudService<DataRealTime> {
-
+//
+//    void data(List<DeviceDataInfoVO> list);
 }

+ 172 - 160
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.db.meta.Table;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,6 +13,7 @@ import com.usky.backend.domain.request.HistoryQueryVo;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.HistoryResultVo;
 import com.usky.backend.domain.response.LastResultVo;
+import com.usky.backend.mapper.DataRealTimeMapper;
 import com.usky.backend.service.*;
 import net.sf.ehcache.search.expression.IsNull;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,89 +48,96 @@ public class DataQueryServiceImpl implements DataQueryService {
     @Autowired
     private DataLcHistoryService dataLcHistoryService;
 
+    @Autowired
+    private DataRealTimeMapper dataRealTimeMapper;
+
     @Override
-    public HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,Integer deviceType){
+    public HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,String typeAbbrevia){
 
         List<MetricItemVo> items = new ArrayList<>();
-        if(deviceType == 501){
-            LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
-            vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
-                    .eq(DataVdHistory::getDeviceId,deviceId)
-                    .eq(DataVdHistory::getAttributeName,metric)
-                    .between(DataVdHistory::getDataTime,startTime,endTime);
-            List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }else if(deviceType == 502){
-            LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
-            egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
-                    .eq(DataEgHistory::getDeviceId,deviceId)
-                    .eq(DataEgHistory::getAttributeName,metric)
-                    .between(DataEgHistory::getDataTime,startTime,endTime);
-            List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }else if(deviceType == 503){
-            LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
-            lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
-                    .eq(DataLgHistory::getDeviceId,deviceId)
-                    .eq(DataLgHistory::getAttributeName,metric)
-                    .between(DataLgHistory::getDataTime,startTime,endTime);
-            List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }else if(deviceType == 504){
-            LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
-            grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
-                    .eq(DataGrHistory::getDeviceId,deviceId)
-                    .eq(DataGrHistory::getAttributeName,metric)
-                    .between(DataGrHistory::getDataTime,startTime,endTime);
-            List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }else if(deviceType == 509){
-            LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
-            evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
-                    .eq(DataEvHistory::getDeviceId,deviceId)
-                    .eq(DataEvHistory::getAttributeName,metric)
-                    .between(DataEvHistory::getDataTime,startTime,endTime);
-            List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }else if(deviceType == 510){
-            LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
-            lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
-                    .eq(DataLcHistory::getDeviceId,deviceId)
-                    .eq(DataLcHistory::getAttributeName,metric)
-                    .between(DataLcHistory::getDataTime,startTime,endTime);
-            List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
-
-            if(CollectionUtils.isNotEmpty(list)){
-                for(int i=0;i<list.size();i++){
-                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
-                }
-            }
-        }
+        String tableName = "data_"+typeAbbrevia+"_history";
+
+        items = dataRealTimeMapper.QueryHistoryData(deviceId, metric, startTime, endTime,tableName);
+
+//        if(deviceType == 501){
+//            LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
+//            vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
+//                    .eq(DataVdHistory::getDeviceId,deviceId)
+//                    .eq(DataVdHistory::getAttributeName,metric)
+//                    .between(DataVdHistory::getDataTime,startTime,endTime);
+//            List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }else if(deviceType == 502){
+//            LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
+//            egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
+//                    .eq(DataEgHistory::getDeviceId,deviceId)
+//                    .eq(DataEgHistory::getAttributeName,metric)
+//                    .between(DataEgHistory::getDataTime,startTime,endTime);
+//            List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }else if(deviceType == 503){
+//            LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
+//            lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
+//                    .eq(DataLgHistory::getDeviceId,deviceId)
+//                    .eq(DataLgHistory::getAttributeName,metric)
+//                    .between(DataLgHistory::getDataTime,startTime,endTime);
+//            List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }else if(deviceType == 504){
+//            LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
+//            grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
+//                    .eq(DataGrHistory::getDeviceId,deviceId)
+//                    .eq(DataGrHistory::getAttributeName,metric)
+//                    .between(DataGrHistory::getDataTime,startTime,endTime);
+//            List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }else if(deviceType == 509){
+//            LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
+//            evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
+//                    .eq(DataEvHistory::getDeviceId,deviceId)
+//                    .eq(DataEvHistory::getAttributeName,metric)
+//                    .between(DataEvHistory::getDataTime,startTime,endTime);
+//            List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }else if(deviceType == 510){
+//            LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
+//            lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
+//                    .eq(DataLcHistory::getDeviceId,deviceId)
+//                    .eq(DataLcHistory::getAttributeName,metric)
+//                    .between(DataLcHistory::getDataTime,startTime,endTime);
+//            List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
+//
+//            if(CollectionUtils.isNotEmpty(list)){
+//                for(int i=0;i<list.size();i++){
+//                    items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
+//                }
+//            }
+//        }
 
         HistoryResultVo historyResultVo = new HistoryResultVo(deviceId,metric,items);
 
@@ -141,90 +150,93 @@ public class DataQueryServiceImpl implements DataQueryService {
         String deviceId = historyQueryVo.getDeviceId();
         String startTime = historyQueryVo.getStartTime();
         String endTime = historyQueryVo.getEndTime();
-        Integer deviceType = historyQueryVo.getDeviceType();
+        String typeAbbrevia = historyQueryVo.getTypeAbbrevia();
         List<String> metrics = historyQueryVo.getMetrics();
         if(CollectionUtils.isNotEmpty(metrics)){
             for(int i=0;i<metrics.size();i++){
                 List<MetricItemVo> items = new ArrayList<>();
-                if(deviceType == 501){
-                    LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
-                    vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
-                            .eq(DataVdHistory::getDeviceId,deviceId)
-                            .eq(DataVdHistory::getAttributeName,metrics.get(i))
-                            .between(DataVdHistory::getDataTime,startTime,endTime);
-                    List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }else if(deviceType == 502){
-                    LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
-                    egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
-                            .eq(DataEgHistory::getDeviceId,deviceId)
-                            .eq(DataEgHistory::getAttributeName,metrics.get(i))
-                            .between(DataEgHistory::getDataTime,startTime,endTime);
-                    List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }else if(deviceType == 503){
-                    LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
-                    lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
-                            .eq(DataLgHistory::getDeviceId,deviceId)
-                            .eq(DataLgHistory::getAttributeName,metrics.get(i))
-                            .between(DataLgHistory::getDataTime,startTime,endTime);
-                    List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }else if(deviceType == 504){
-                    LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
-                    grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
-                            .eq(DataGrHistory::getDeviceId,deviceId)
-                            .eq(DataGrHistory::getAttributeName,metrics.get(i))
-                            .between(DataGrHistory::getDataTime,startTime,endTime);
-                    List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }else if(deviceType == 509){
-                    LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
-                    evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
-                            .eq(DataEvHistory::getDeviceId,deviceId)
-                            .eq(DataEvHistory::getAttributeName,metrics.get(i))
-                            .between(DataEvHistory::getDataTime,startTime,endTime);
-                    List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }else if(deviceType == 510){
-                    LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
-                    lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
-                            .eq(DataLcHistory::getDeviceId,deviceId)
-                            .eq(DataLcHistory::getAttributeName,metrics.get(i))
-                            .between(DataLcHistory::getDataTime,startTime,endTime);
-                    List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
-
-                    if(CollectionUtils.isNotEmpty(list)){
-                        for(int j=0;j<list.size();j++){
-                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
-                        }
-                    }
-                }
+                String tableName = "data_"+typeAbbrevia+"_history";
+
+                items = dataRealTimeMapper.QueryHistoryData(deviceId, metrics.get(i), startTime, endTime,tableName);
+//                if(deviceType == 501){
+//                    LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
+//                    vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
+//                            .eq(DataVdHistory::getDeviceId,deviceId)
+//                            .eq(DataVdHistory::getAttributeName,metrics.get(i))
+//                            .between(DataVdHistory::getDataTime,startTime,endTime);
+//                    List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }else if(deviceType == 502){
+//                    LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
+//                    egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
+//                            .eq(DataEgHistory::getDeviceId,deviceId)
+//                            .eq(DataEgHistory::getAttributeName,metrics.get(i))
+//                            .between(DataEgHistory::getDataTime,startTime,endTime);
+//                    List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }else if(deviceType == 503){
+//                    LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
+//                    lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
+//                            .eq(DataLgHistory::getDeviceId,deviceId)
+//                            .eq(DataLgHistory::getAttributeName,metrics.get(i))
+//                            .between(DataLgHistory::getDataTime,startTime,endTime);
+//                    List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }else if(deviceType == 504){
+//                    LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
+//                    grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
+//                            .eq(DataGrHistory::getDeviceId,deviceId)
+//                            .eq(DataGrHistory::getAttributeName,metrics.get(i))
+//                            .between(DataGrHistory::getDataTime,startTime,endTime);
+//                    List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }else if(deviceType == 509){
+//                    LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
+//                    evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
+//                            .eq(DataEvHistory::getDeviceId,deviceId)
+//                            .eq(DataEvHistory::getAttributeName,metrics.get(i))
+//                            .between(DataEvHistory::getDataTime,startTime,endTime);
+//                    List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }else if(deviceType == 510){
+//                    LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
+//                    lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
+//                            .eq(DataLcHistory::getDeviceId,deviceId)
+//                            .eq(DataLcHistory::getAttributeName,metrics.get(i))
+//                            .between(DataLcHistory::getDataTime,startTime,endTime);
+//                    List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
+//
+//                    if(CollectionUtils.isNotEmpty(list)){
+//                        for(int j=0;j<list.size();j++){
+//                            items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
+//                        }
+//                    }
+//                }
 
                 HistoryResultVo historyResultVo = new HistoryResultVo(deviceId,metrics.get(i),items);
                 result.add(historyResultVo);

+ 42 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataRealTimeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usky.backend.service.impl;
 
 import com.usky.backend.domain.DataRealTime;
+//import com.usky.backend.domain.request.DeviceDataInfoVO;
 import com.usky.backend.mapper.DataRealTimeMapper;
 import com.usky.backend.service.DataRealTimeService;
 import com.usky.common.mybatis.core.AbstractCrudService;
@@ -16,5 +17,46 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class DataRealTimeServiceImpl extends AbstractCrudService<DataRealTimeMapper, DataRealTime> implements DataRealTimeService {
+//    @Autowired
+//    private DataRealTimeMapper dataRealTimeMapper;
+//
+//    @Override
+//    public void data(List<DeviceDataInfoVO> list){
+//
+//        if(CollectionUtils.isNotEmpty(list)){
+//            for(int i=0;i<list.size();i++){
+//
+//                //操作实时数据表,当表中有这个设备的数据时,更新这条属性记录,否则插入
+//                LambdaQueryWrapper<DataRealTime> queryWrapper = Wrappers.lambdaQuery();
+//                queryWrapper.eq(DataRealTime::getDeviceId,list.get(i).getDeviceId())
+//                        .eq(DataRealTime::getAttributeName,list.get(i).getName());
+//                DataRealTime one = this.getOne(queryWrapper);
+//                if(one != null){
+//                    one.setAttributeData(String.valueOf(list.get(i).getValue()));
+//                    one.setDataTime(list.get(i).getTimestamp());
+//                    one.setInsertTime(LocalDateTime.now());
+//                    this.updateById(one);
+//                }else{
+//                    DataRealTime data = new DataRealTime();
+//                    data.setDeviceId(list.get(i).getDeviceId());
+//                    data.setDeviceType(list.get(i).getDeviceType());
+//                    data.setAttributeName(list.get(i).getName());
+//                    data.setAttributeData(String.valueOf(list.get(i).getValue()));
+//                    data.setDataTime(list.get(i).getTimestamp());
+//                    data.setInsertTime(LocalDateTime.now());
+//                    this.save(data);
+//                }
+//
+//                String tableName = "data_"+list.get(i).getTypeAbbrevia()+"_history";
+//                //操作各个设备历史数据表(通用方法)
+//                int res = dataRealTimeMapper.insertHistoryTable(list.get(i),tableName,LocalDateTime.now());
+//                if(res > 0){
+//
+//                }
+//            }
+//        }
+//
+//    }
+
 
 }

+ 0 - 17
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataRealTimeMapper.xml

@@ -1,17 +0,0 @@
-<?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.backend.mapper.DataRealTimeMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataRealTime">
-        <id column="id" property="id" />
-        <result column="device_id" property="deviceId" />
-        <result column="device_code" property="deviceCode" />
-        <result column="device_type" property="deviceType" />
-        <result column="attribute_name" property="attributeName" />
-        <result column="attribute_data" property="attributeData" />
-        <result column="data_time" property="dataTime" />
-        <result column="insert_time" property="insertTime" />
-    </resultMap>
-
-</mapper>

+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataEgHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEgHistoryMapper.xml


+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataEvHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataEvHistoryMapper.xml


+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataGrHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataGrHistoryMapper.xml


+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataLcHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLcHistoryMapper.xml


+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataLgHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataLgHistoryMapper.xml


+ 39 - 0
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.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.backend.mapper.DataRealTimeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.backend.domain.DataRealTime">
+        <id column="id" property="id" />
+        <result column="device_id" property="deviceId" />
+        <result column="device_code" property="deviceCode" />
+        <result column="device_type" property="deviceType" />
+        <result column="attribute_name" property="attributeName" />
+        <result column="attribute_data" property="attributeData" />
+        <result column="data_time" property="dataTime" />
+        <result column="insert_time" property="insertTime" />
+    </resultMap>
+<!--    <insert id="insertHistoryTable" >-->
+<!--        insert into ${tableName}   ( device_id, device_type,  attribute_name, attribute_data, data_time, insert_time)-->
+<!--        values (#{dataInfo.deviceId}, #{dataInfo.deviceType},  #{dataInfo.name},  #{dataInfo.value},  #{dataInfo.timestamp},  #{curTime})-->
+<!--    </insert>-->
+    <select id="QueryHistoryData" resultType="com.usky.backend.domain.MetricItemVo">
+        SELECT
+        attribute_data as value,data_time as timestamp
+        FROM
+        ${tableName}
+        <where>
+            <if test="deviceId != null">
+                and device_id = #{deviceId}
+            </if>
+            <if test="metric != null">
+                and attribute_name = #{metric}
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and  data_time BETWEEN  #{startTime} AND  #{endTime}
+            </if>
+        </where>
+    </select>
+
+
+</mapper>

+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/DataVdHistoryMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/DataVdHistoryMapper.xml


+ 20 - 20
service-backend/service-backend-biz/src/main/resources/mapper.backend/SysConfigMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/SysConfigMapper.xml

@@ -1,20 +1,20 @@
-<?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.backend.mapper.SysConfigMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.usky.backend.domain.SysConfig">
-        <id column="config_id" property="configId" />
-        <result column="config_name" property="configName" />
-        <result column="config_key" property="configKey" />
-        <result column="config_value" property="configValue" />
-        <result column="config_type" property="configType" />
-        <result column="create_by" property="createBy" />
-        <result column="create_time" property="createTime" />
-        <result column="update_by" property="updateBy" />
-        <result column="update_time" property="updateTime" />
-        <result column="remark" property="remark" />
-        <result column="tenant_id" property="tenantId" />
-    </resultMap>
-
-</mapper>
+<?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.backend.mapper.SysConfigMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.backend.domain.SysConfig">
+        <id column="config_id" property="configId" />
+        <result column="config_name" property="configName" />
+        <result column="config_key" property="configKey" />
+        <result column="config_value" property="configValue" />
+        <result column="config_type" property="configType" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="remark" property="remark" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 25 - 25
service-backend/service-backend-biz/src/main/resources/mapper.backend/SysTenantMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/SysTenantMapper.xml

@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.usky.backend.mapper.SysTenantMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.usky.backend.domain.SysTenant">
-        <id column="id" property="id" />
-        <result column="tenant_code" property="tenantCode" />
-        <result column="tenant_name" property="tenantName" />
-        <result column="tenant_manager" property="tenantManager" />
-        <result column="tenant_type" property="tenantType" />
-        <result column="domain" property="domain" />
-        <result column="email" property="email" />
-        <result column="phone_number" property="phoneNumber" />
-        <result column="address" property="address" />
-        <result column="tenant_term" property="tenantTerm" />
-        <result column="remark" property="remark" />
-        <result column="status" property="status" />
-        <result column="create_by" property="createBy" />
-        <result column="create_time" property="createTime" />
-        <result column="update_by" property="updateBy" />
-        <result column="update_time" property="updateTime" />
-    </resultMap>
-
-</mapper>
+<?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.backend.mapper.SysTenantMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.backend.domain.SysTenant">
+        <id column="id" property="id" />
+        <result column="tenant_code" property="tenantCode" />
+        <result column="tenant_name" property="tenantName" />
+        <result column="tenant_manager" property="tenantManager" />
+        <result column="tenant_type" property="tenantType" />
+        <result column="domain" property="domain" />
+        <result column="email" property="email" />
+        <result column="phone_number" property="phoneNumber" />
+        <result column="address" property="address" />
+        <result column="tenant_term" property="tenantTerm" />
+        <result column="remark" property="remark" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 0 - 0
service-backend/service-backend-biz/src/main/resources/mapper.backend/SysUserMapper.xml → service-backend/service-backend-biz/src/main/resources/mapper/backend/SysUserMapper.xml


+ 74 - 3
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportConfigController.java

@@ -1,9 +1,17 @@
 package com.usky.fire.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.fire.service.ReportConfigService;
+import com.usky.fire.service.vo.ReportConfigVO;
+import com.usky.fire.service.vo.ReportIndexVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.stereotype.Controller;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,9 +21,72 @@ import org.springframework.stereotype.Controller;
  * @author han
  * @since 2023-06-27
  */
-@Controller
+@RestController
 @RequestMapping("/reportConfig")
 public class ReportConfigController {
 
+    @Autowired
+    private ReportConfigService reportConfigService;
+
+    /**
+     * 报告模型查看查询
+     *
+     * @return
+     */
+    @PostMapping("/configInfo")
+    public ApiResult<List<ReportConfigVO>> configInfo() {
+        return ApiResult.success(reportConfigService.configInfo());
+    }
+
+    /**
+     * 报告指数-查询
+     *
+     * @param id   主键ID
+     * @return
+     */
+    @GetMapping("/reportIndexSelect")
+    public ApiResult<List<ReportIndexVo>> reportIndexSelect(@RequestParam(value = "id") Integer id) {
+        return ApiResult.success(reportConfigService.reportIndexSelect(id));
+    }
+
+    /**
+     * 报告模型-删除
+     *
+     * @param id 主键ID
+     * @return
+     */
+    @Log(title = "报告模型-删除", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delReportConfig")
+    public ApiResult<Void> delReportConfig(@RequestParam(value = "id") Integer id) {
+        reportConfigService.delReportConfig(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 报告模型-新增
+     *
+     * @param reportIndexVo
+     * @return
+     */
+    @Log(title = "报告模型-新增", businessType = BusinessType.INSERT)
+    @PostMapping("/addReportConfig")
+    public ApiResult<Void> addReportConfig(@RequestBody ReportIndexVo reportIndexVo) {
+        reportConfigService.addReportConfig(reportIndexVo);
+        return ApiResult.success();
+    }
+
+    /**
+     * 报告模型-修改
+     *
+     * @param reportIndexVo
+     * @return
+     */
+    @Log(title = "报告模型-修改", businessType = BusinessType.UPDATE)
+    @PutMapping("/updateReportConfig")
+    public ApiResult<Void> updateReportConfig(@RequestBody ReportIndexVo reportIndexVo) {
+        reportConfigService.updateReportConfig(reportIndexVo);
+        return ApiResult.success();
+    }
+
 }
 

+ 24 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportIndexConfigController.java

@@ -1,9 +1,18 @@
 package com.usky.fire.controller.web;
 
 
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.fire.service.ReportConfigService;
+import com.usky.fire.service.ReportIndexConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -13,9 +22,23 @@ import org.springframework.stereotype.Controller;
  * @author han
  * @since 2023-06-27
  */
-@Controller
+@RestController
 @RequestMapping("/reportIndexConfig")
 public class ReportIndexConfigController {
+    @Autowired
+    private ReportIndexConfigService reportIndexConfigService;
 
+    /**
+     * 报告模型指数-删除
+     *
+     * @param id 主键ID
+     * @return
+     */
+    @Log(title = "报告模型指数-删除", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delReportIndexConfig")
+    public ApiResult<Void> delReportIndexConfig(@RequestParam(value = "id") Integer id) {
+        reportIndexConfigService.delReportIndexConfig(id);
+        return ApiResult.success();
+    }
 }
 

+ 37 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportIndexResultController.java

@@ -4,9 +4,12 @@ package com.usky.fire.controller.web;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
+import com.usky.fire.domain.BaseGgpFacility;
 import com.usky.fire.service.ReportIndexResultService;
 import com.usky.fire.service.vo.CompanyDataVo;
 import com.usky.fire.service.vo.IndexResultVo;
+import com.usky.fire.service.vo.ReportResultVO;
+import com.usky.fire.service.vo.ResultStatisticsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -48,5 +51,39 @@ public class ReportIndexResultController {
                                                             @RequestParam(value = "createDate", required = false) String createDate) {
         return ApiResult.success(reportIndexResultService.indexResultSelect(id,createDate));
     }
+
+    /**
+     * 报告对比
+     *
+     * @param reportResultVO
+     * @return
+     */
+    @PostMapping("/reportContrast")
+    public ApiResult<List<Object>> reportContrast(@RequestBody ReportResultVO reportResultVO) {
+        return ApiResult.success(reportIndexResultService.reportContrast(reportResultVO));
+    }
+
+    /**
+     * 企业自主管理大屏-企业自主情况查询
+     *
+     * @param id   对象ID
+     * @param createDate   生成日期
+     * @return
+     */
+    @GetMapping("/resultStatistic")
+    public ApiResult<List<ResultStatisticsVO>> resultStatistic(@RequestParam(value = "id", required = false) Integer id,
+                                                               @RequestParam(value = "createDate", required = false) String createDate) {
+        return ApiResult.success(reportIndexResultService.resultStatistic(id,createDate));
+    }
+
+    /**
+     * 企业自主管理大屏-四色分级撒点
+     * @param riskGrade   风险等级
+     * @return
+     */
+    @GetMapping("/riskGradeScatter")
+    public ApiResult<List<Object>> riskGradeScatter(@RequestParam(value = "riskGrade") Integer riskGrade) {
+        return ApiResult.success(reportIndexResultService.riskGradeScatter(riskGrade));
+    }
 }
 

+ 20 - 4
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/ReportResultController.java

@@ -3,17 +3,19 @@ package com.usky.fire.controller.web;
 
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
+import com.usky.fire.domain.BaseGgpFacility;
 import com.usky.fire.domain.DemReportInfo;
 import com.usky.fire.domain.ReportResult;
 import com.usky.fire.service.DemReportInfoService;
 import com.usky.fire.service.ReportResultService;
+import com.usky.fire.service.vo.BaseGgpFacilityVO;
+import com.usky.fire.service.vo.ReportResultVO;
 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.*;
 
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 /**
  * <p>
@@ -45,5 +47,19 @@ public class ReportResultController {
                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
         return ApiResult.success(reportResultService.reportResultList(companyId,sourceType,pageNum, pageSize));
     }
+    /**
+     * 报告结果-查询
+     *
+     * @param reportObject  报告对象
+     * @param pageNum      当前页
+     * @param pageSize     每页条数
+     * @return
+     */
+    @GetMapping("newReportResultList")
+    public ApiResult<CommonPage<Object>> newReportResultList(@RequestParam(value = "reportObject", required = false) String reportObject,
+                                                     @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                     @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+        return ApiResult.success(reportResultService.newReportResultList(reportObject,pageNum, pageSize));
+    }
 }
 

+ 5 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/ReportConfig.java

@@ -32,6 +32,11 @@ public class ReportConfig implements Serializable {
      */
     private String reportName;
 
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
     /**
      * 创建人
      */

+ 7 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/ReportConfigMapper.java

@@ -2,6 +2,10 @@ package com.usky.fire.mapper;
 
 import com.usky.fire.domain.ReportConfig;
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.fire.service.vo.ReportConfigVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,7 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @since 2023-06-27
  */
 public interface ReportConfigMapper extends CrudMapper<ReportConfig> {
-
+    List<ReportConfigVO> configNumList1(@Param("tenantId") Integer tenantId);
+    List<ReportConfigVO> configNumList(@Param("tenantId") Integer tenantId,
+                                       @Param("indexGrade") Integer indexGrade);
 }

+ 37 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportConfigService.java

@@ -2,6 +2,9 @@ package com.usky.fire.service;
 
 import com.usky.fire.domain.ReportConfig;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.fire.service.vo.*;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +15,39 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2023-06-27
  */
 public interface ReportConfigService extends CrudService<ReportConfig> {
+    /**
+     * 报告模型查看查询
+     *
+     * @return
+     */
+    List<ReportConfigVO> configInfo();
+
+    /**
+     * 报告指数-查询
+     *
+     * @param id   主键ID
+     * @return
+     */
+    List<ReportIndexVo> reportIndexSelect(Integer id);
+
+    /**
+     * 报告模型-删除
+     *
+     * @param id 主键ID
+     */
+    void delReportConfig(Integer id);
+
+    /**
+     * 报告模型-新增
+     *
+     * @param reportIndexVo 采集报告模型
+     */
+    void addReportConfig(ReportIndexVo reportIndexVo);
 
+    /**
+     * 报告模型-修改
+     *
+     * @param reportIndexVo
+     */
+    void updateReportConfig(ReportIndexVo reportIndexVo);
 }

+ 7 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportIndexConfigService.java

@@ -21,4 +21,11 @@ public interface ReportIndexConfigService extends CrudService<ReportIndexConfig>
      * @param indexGrade 上级指数
      */
     List<ReportIndexConfig> indexConfigList(Integer reportId,Integer indexGrade);
+
+    /**
+     * 报告模型-删除
+     *
+     * @param id 主键ID
+     */
+    boolean delReportIndexConfig(Integer id);
 }

+ 24 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportIndexResultService.java

@@ -4,6 +4,8 @@ import com.usky.fire.domain.ReportIndexResult;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.fire.service.vo.CompanyDataVo;
 import com.usky.fire.service.vo.IndexResultVo;
+import com.usky.fire.service.vo.ReportResultVO;
+import com.usky.fire.service.vo.ResultStatisticsVO;
 
 import java.util.List;
 
@@ -28,4 +30,26 @@ public interface ReportIndexResultService extends CrudService<ReportIndexResult>
      * @param createDate   生成日期
      */
     List<IndexResultVo> indexResultSelect(Integer id, String createDate);
+
+    /**
+     * 企业自主管理大屏-企业自主情况查询
+     *
+     * @param id   对象ID
+     * @param createDate   生成日期
+     */
+    List<ResultStatisticsVO> resultStatistic(Integer id, String createDate);
+
+    /**
+     * 企业自主管理大屏-企业自主情况查询
+     *
+     * @param riskGrade   风险等级
+     */
+    List<Object> riskGradeScatter(Integer riskGrade);
+
+    /**
+     * 报告对比
+     *
+     * @param reportResultVO
+     */
+    List<Object> reportContrast(ReportResultVO reportResultVO);
 }

+ 10 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/ReportResultService.java

@@ -24,4 +24,14 @@ public interface ReportResultService extends CrudService<ReportResult> {
      * @return
      */
     CommonPage<ReportResult> reportResultList(Integer companyId, String sourceType, Integer pageNum, Integer pageSize);
+
+    /**
+     * 报告结果-查询
+     *
+     * @param reportObject  报告对象
+     * @param pageNum      当前页
+     * @param pageSize     每页条数
+     * @return
+     */
+    CommonPage<Object> newReportResultList(String reportObject,Integer pageNum, Integer pageSize);
 }

+ 345 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportConfigServiceImpl.java

@@ -1,10 +1,22 @@
 package com.usky.fire.service.impl;
 
-import com.usky.fire.domain.ReportConfig;
+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.security.utils.SecurityUtils;
+import com.usky.fire.domain.*;
 import com.usky.fire.mapper.ReportConfigMapper;
 import com.usky.fire.service.ReportConfigService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.fire.service.ReportIndexConfigService;
+import com.usky.fire.service.vo.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +28,337 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class ReportConfigServiceImpl extends AbstractCrudService<ReportConfigMapper, ReportConfig> implements ReportConfigService {
+    @Autowired
+    private ReportIndexConfigService reportIndexConfigService;
+
+    @Override
+    public List<ReportConfigVO> configInfo() {
+        List<ReportConfigVO> list = new ArrayList<>();
+        LambdaQueryWrapper<ReportConfig> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ReportConfig::getDeleteFlag, 0)
+                    .eq(ReportConfig::getTenantId, SecurityUtils.getTenantId());
+        List<ReportConfig> list1 = this.list(queryWrapper);
+        if (CollectionUtils.isNotEmpty(list1)) {
+            List<ReportConfigVO> list2 = new ArrayList<>();
+            List<ReportConfigVO> list3 = new ArrayList<>();
+            List<ReportConfigVO> list4 = new ArrayList<>();
+            List<ReportConfigVO> list5 = new ArrayList<>();
+            list2 = baseMapper.configNumList1(SecurityUtils.getTenantId());
+            list3 = baseMapper.configNumList(SecurityUtils.getTenantId(),1);
+            list4 = baseMapper.configNumList(SecurityUtils.getTenantId(),2);
+            list5 = baseMapper.configNumList(SecurityUtils.getTenantId(),3);
+            if (CollectionUtils.isNotEmpty(list2)) {
+                for (int i = 0; i < list2.size(); i++) {
+                    for (int j = 0; j < list3.size(); j++) {
+                        if (list2.get(i).getId().equals(list3.get(j).getId())){
+                            list2.get(i).setIndexNum1(list3.get(j).getIndexNum1());
+                        }
+                    }
+                    for (int k = 0; k < list4.size(); k++) {
+                        if (list2.get(i).getId().equals(list4.get(k).getId())){
+                            list2.get(i).setIndexNum2(list4.get(k).getIndexNum1());
+                        }
+                    }
+                    for (int g = 0; g < list5.size(); g++) {
+                        if (list2.get(i).getId().equals(list5.get(g).getId())){
+                            list2.get(i).setIndexNum3(list5.get(g).getIndexNum1());
+                        }
+                    }
+                    list.add(list2.get(i));
+                }
+            }
+        }
+        return list;
+    }
+    @Override
+    public List<ReportIndexVo> reportIndexSelect(Integer id) {
+        List<ReportIndexVo> list = new ArrayList<>();
+        List<ReportIndex1Vo> list2 = new ArrayList<>();
+        LambdaQueryWrapper<ReportConfig> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ReportConfig::getId,id);
+        List<ReportConfig> list1 = this.list(queryWrapper);
+        ReportIndexVo reportIndexVo = new ReportIndexVo();
+        if (CollectionUtils.isNotEmpty(list1)) {
+            reportIndexVo.setId(list1.get(0).getId());
+            reportIndexVo.setReportName(list1.get(0).getReportName());
+            LambdaQueryWrapper<ReportIndexConfig> queryWrapper1 = Wrappers.lambdaQuery();
+            queryWrapper1
+                    .eq(ReportIndexConfig::getReportId,list1.get(0).getId())
+                    .eq(ReportIndexConfig::getIndexGrade,1);
+            List<ReportIndexConfig> list3 = reportIndexConfigService.list(queryWrapper1);
+            if (CollectionUtils.isNotEmpty(list3)) {
+                List<Integer> indexIdList1 = new ArrayList<>();
+                for (int i = 0; i < list3.size(); i++) {
+                    indexIdList1.add(list3.get(i).getId());
+                }
+                LambdaQueryWrapper<ReportIndexConfig> queryWrapper2 = Wrappers.lambdaQuery();
+                queryWrapper2
+                        .in(ReportIndexConfig::getSeniorIndex,indexIdList1);
+                List<ReportIndexConfig> list4 = reportIndexConfigService.list(queryWrapper2);
+                if (CollectionUtils.isNotEmpty(list4)) {
+                    List<Integer> indexIdList2 = new ArrayList<>();
+                    for (int j = 0; j < list4.size(); j++) {
+                        indexIdList2.add(list4.get(j).getId());
+                    }
+                    LambdaQueryWrapper<ReportIndexConfig> queryWrapper3 = Wrappers.lambdaQuery();
+                    queryWrapper3
+                            .in(ReportIndexConfig::getSeniorIndex,indexIdList2);
+                    List<ReportIndexConfig> list5 = reportIndexConfigService.list(queryWrapper3);
+                    for (int k = 0; k < list3.size(); k++) {
+                        ReportIndex1Vo reportIndex1Vo = new ReportIndex1Vo();
+                        reportIndex1Vo.setId(list3.get(k).getId());
+                        reportIndex1Vo.setIndexCode(list3.get(k).getIndexCode());
+                        reportIndex1Vo.setIndexGrade(list3.get(k).getIndexGrade());
+                        reportIndex1Vo.setIndexName(list3.get(k).getIndexName());
+                        reportIndex1Vo.setIndexWeight(list3.get(k).getIndexWeight());
+                        reportIndex1Vo.setIndexDesc(list3.get(k).getIndexDesc());
+                        List<ReportIndex2Vo> list6 = new ArrayList<>();
+                        for (int l = 0; l < list4.size(); l++) {
+                            List<ReportIndex3Vo> list7 = new ArrayList<>();
+                            if (list4.get(l).getSeniorIndex().equals(list3.get(k).getId())){
+                                ReportIndex2Vo reportIndex2Vo = new ReportIndex2Vo();
+                                reportIndex2Vo.setId(list4.get(l).getId());
+                                reportIndex2Vo.setIndexCode(list4.get(l).getIndexCode());
+                                reportIndex2Vo.setIndexGrade(list4.get(l).getIndexGrade());
+                                reportIndex2Vo.setIndexName(list4.get(l).getIndexName());
+                                reportIndex2Vo.setIndexWeight(list4.get(l).getIndexWeight());
+                                reportIndex2Vo.setIndexDesc(list4.get(l).getIndexDesc());
+                                for (int m = 0; m < list5.size(); m++) {
+                                    if (list5.get(m).getSeniorIndex().equals(list4.get(l).getId())){
+                                        ReportIndex3Vo reportIndex3Vo = new ReportIndex3Vo();
+                                        reportIndex3Vo.setId(list5.get(m).getId());
+                                        reportIndex3Vo.setIndexCode(list5.get(m).getIndexCode());
+                                        reportIndex3Vo.setIndexGrade(list5.get(m).getIndexGrade());
+                                        reportIndex3Vo.setIndexName(list5.get(m).getIndexName());
+                                        reportIndex3Vo.setIndexWeight(list5.get(m).getIndexWeight());
+                                        reportIndex3Vo.setIndexDesc(list5.get(m).getIndexDesc());
+                                        list7.add(reportIndex3Vo);
+                                    }
+                                }
+                                reportIndex2Vo.setChildren(list7);
+                                list6.add(reportIndex2Vo);
+                            }
+                        }
+                        reportIndex1Vo.setChildren(list6);
+                        list2.add(reportIndex1Vo);
+                    }
+                    reportIndexVo.setReportIndex(list2);
+                    list.add(reportIndexVo);
+                }
+            }
+        }
+        return list;
+    }
+    @Override
+    public void delReportConfig(Integer id) {
+        ReportConfig reportConfig = new ReportConfig();
+        reportConfig.setId(id);
+        reportConfig.setDeleteFlag(1);
+        reportConfig.setUpdateTime(LocalDateTime.now());
+        reportConfig.setUpdateBy(SecurityUtils.getUsername());
+        this.updateById(reportConfig);
+    }
+
+    @Transactional
+    @Override
+    public void addReportConfig(ReportIndexVo reportIndexVo) {
+        ReportConfig reportConfig = new ReportConfig();
+        reportConfig.setReportName(reportIndexVo.getReportName());
+        reportConfig.setCreateBy(SecurityUtils.getUsername());
+        reportConfig.setCreateTime(LocalDateTime.now());
+        reportConfig.setTenantId(SecurityUtils.getTenantId());
+        this.save(reportConfig);
+        Integer configId = reportConfig.getId();
+        List<ReportIndex1Vo> list = reportIndexVo.getReportIndex();
+        if (CollectionUtils.isNotEmpty(list)){
+            for (int i = 0; i < list.size(); i++) {
+                ReportIndexConfig reportIndexConfig = new ReportIndexConfig();
+                reportIndexConfig.setIndexCode(list.get(i).getIndexCode());
+                reportIndexConfig.setCreateBy(SecurityUtils.getUsername());
+                reportIndexConfig.setCreateTime(LocalDateTime.now());
+                reportIndexConfig.setTenantId(SecurityUtils.getTenantId());
+                reportIndexConfig.setIndexDesc(list.get(i).getIndexDesc());
+                reportIndexConfig.setIndexGrade(list.get(i).getIndexGrade());
+                reportIndexConfig.setIndexName(list.get(i).getIndexName());
+                reportIndexConfig.setIndexWeight(list.get(i).getIndexWeight());
+                reportIndexConfig.setReportId(configId);
+                reportIndexConfig.setSeniorIndex(0);
+                reportIndexConfigService.save(reportIndexConfig);
+                Integer indexConfigId1 = reportIndexConfig.getId();
+                List<ReportIndex2Vo> list1 = list.get(i).getChildren();
+                if (CollectionUtils.isNotEmpty(list1)){
+                    for (int j = 0; j < list1.size(); j++) {
+                        ReportIndexConfig reportIndexConfig2 = new ReportIndexConfig();
+                        reportIndexConfig2.setIndexCode(list1.get(j).getIndexCode());
+                        reportIndexConfig2.setCreateBy(SecurityUtils.getUsername());
+                        reportIndexConfig2.setCreateTime(LocalDateTime.now());
+                        reportIndexConfig2.setTenantId(SecurityUtils.getTenantId());
+                        reportIndexConfig2.setIndexDesc(list1.get(j).getIndexDesc());
+                        reportIndexConfig2.setIndexGrade(list1.get(j).getIndexGrade());
+                        reportIndexConfig2.setIndexName(list1.get(j).getIndexName());
+                        reportIndexConfig2.setIndexWeight(list1.get(j).getIndexWeight());
+                        reportIndexConfig2.setReportId(configId);
+                        reportIndexConfig2.setSeniorIndex(indexConfigId1);
+                        reportIndexConfigService.save(reportIndexConfig2);
+                        Integer indexConfigId2 = reportIndexConfig2.getId();
+                        List<ReportIndex3Vo> list2 = list1.get(j).getChildren();
+                        if (CollectionUtils.isNotEmpty(list2)) {
+                            for (int k = 0; k < list2.size(); k++) {
+                                ReportIndexConfig reportIndexConfig3 = new ReportIndexConfig();
+                                reportIndexConfig3.setIndexCode(list2.get(k).getIndexCode());
+                                reportIndexConfig3.setCreateBy(SecurityUtils.getUsername());
+                                reportIndexConfig3.setCreateTime(LocalDateTime.now());
+                                reportIndexConfig3.setTenantId(SecurityUtils.getTenantId());
+                                reportIndexConfig3.setIndexDesc(list2.get(k).getIndexDesc());
+                                reportIndexConfig3.setIndexGrade(list2.get(k).getIndexGrade());
+                                reportIndexConfig3.setIndexName(list2.get(k).getIndexName());
+                                reportIndexConfig3.setIndexWeight(list2.get(k).getIndexWeight());
+                                reportIndexConfig3.setReportId(configId);
+                                reportIndexConfig3.setSeniorIndex(indexConfigId2);
+                                reportIndexConfigService.save(reportIndexConfig3);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Transactional
+    @Override
+    public void updateReportConfig(ReportIndexVo reportIndexVo) {
+        ReportConfig reportConfig = new ReportConfig();
+        reportConfig.setReportName(reportIndexVo.getReportName());
+        reportConfig.setId(reportIndexVo.getId());
+        reportConfig.setUpdateBy(SecurityUtils.getUsername());
+        reportConfig.setUpdateTime(LocalDateTime.now());
+        this.updateById(reportConfig);
+        List<ReportIndex1Vo> list = reportIndexVo.getReportIndex();
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                ReportIndexConfig reportIndexConfig = new ReportIndexConfig();
+                reportIndexConfig.setIndexCode(list.get(i).getIndexCode());
+                reportIndexConfig.setIndexDesc(list.get(i).getIndexDesc());
+                reportIndexConfig.setIndexGrade(list.get(i).getIndexGrade());
+                reportIndexConfig.setIndexName(list.get(i).getIndexName());
+                reportIndexConfig.setIndexWeight(list.get(i).getIndexWeight());
+                if (list.get(i).getId()==null){
+                    reportIndexConfig.setCreateBy(SecurityUtils.getUsername());
+                    reportIndexConfig.setCreateTime(LocalDateTime.now());
+                    reportIndexConfig.setTenantId(SecurityUtils.getTenantId());
+                    reportIndexConfig.setReportId(reportIndexVo.getId());
+                    reportIndexConfig.setSeniorIndex(0);
+                    reportIndexConfigService.save(reportIndexConfig);
+                    Integer indexConfigId1 = reportIndexConfig.getId();
+                    List<ReportIndex2Vo> list1 = list.get(i).getChildren();
+                    if (CollectionUtils.isNotEmpty(list1)) {
+                        for (int j = 0; j < list1.size(); j++) {
+                            ReportIndexConfig reportIndexConfig2 = new ReportIndexConfig();
+                            reportIndexConfig2.setIndexCode(list1.get(j).getIndexCode());
+                            reportIndexConfig2.setCreateBy(SecurityUtils.getUsername());
+                            reportIndexConfig2.setCreateTime(LocalDateTime.now());
+                            reportIndexConfig2.setTenantId(SecurityUtils.getTenantId());
+                            reportIndexConfig2.setIndexDesc(list1.get(j).getIndexDesc());
+                            reportIndexConfig2.setIndexGrade(list1.get(j).getIndexGrade());
+                            reportIndexConfig2.setIndexName(list1.get(j).getIndexName());
+                            reportIndexConfig2.setIndexWeight(list1.get(j).getIndexWeight());
+                            reportIndexConfig2.setReportId(reportIndexVo.getId());
+                            reportIndexConfig2.setSeniorIndex(indexConfigId1);
+                            reportIndexConfigService.save(reportIndexConfig2);
+                            Integer indexConfigId2 = reportIndexConfig2.getId();
+                            List<ReportIndex3Vo> list2 = list1.get(j).getChildren();
+                            if (CollectionUtils.isNotEmpty(list2)) {
+                                for (int k = 0; k < list2.size(); k++) {
+                                    ReportIndexConfig reportIndexConfig3 = new ReportIndexConfig();
+                                    reportIndexConfig3.setIndexCode(list2.get(k).getIndexCode());
+                                    reportIndexConfig3.setCreateBy(SecurityUtils.getUsername());
+                                    reportIndexConfig3.setCreateTime(LocalDateTime.now());
+                                    reportIndexConfig3.setTenantId(SecurityUtils.getTenantId());
+                                    reportIndexConfig3.setIndexDesc(list2.get(k).getIndexDesc());
+                                    reportIndexConfig3.setIndexGrade(list2.get(k).getIndexGrade());
+                                    reportIndexConfig3.setIndexName(list2.get(k).getIndexName());
+                                    reportIndexConfig3.setIndexWeight(list2.get(k).getIndexWeight());
+                                    reportIndexConfig3.setReportId(reportIndexVo.getId());
+                                    reportIndexConfig3.setSeniorIndex(indexConfigId2);
+                                    reportIndexConfigService.save(reportIndexConfig3);
+                                }
+                            }
+                        }
+                    }
+                }else {
+                    reportIndexConfig.setId(list.get(i).getId());
+                    reportIndexConfig.setUpdateBy(SecurityUtils.getUsername());
+                    reportIndexConfig.setUpdateTime(LocalDateTime.now());
+                    reportIndexConfigService.updateById(reportIndexConfig);
+                    List<ReportIndex2Vo> list1 = list.get(i).getChildren();
+                    if (CollectionUtils.isNotEmpty(list1)) {
+                        for (int j = 0; j < list1.size(); j++) {
+                            ReportIndexConfig reportIndexConfig2 = new ReportIndexConfig();
+                            reportIndexConfig2.setIndexCode(list1.get(j).getIndexCode());
+                            reportIndexConfig2.setIndexDesc(list1.get(j).getIndexDesc());
+                            reportIndexConfig2.setIndexGrade(list1.get(j).getIndexGrade());
+                            reportIndexConfig2.setIndexName(list1.get(j).getIndexName());
+                            reportIndexConfig2.setIndexWeight(list1.get(j).getIndexWeight());
+                            if (list1.get(j).getId()==null){
+                                reportIndexConfig2.setCreateBy(SecurityUtils.getUsername());
+                                reportIndexConfig2.setCreateTime(LocalDateTime.now());
+                                reportIndexConfig2.setTenantId(SecurityUtils.getTenantId());
+                                reportIndexConfig2.setReportId(reportIndexVo.getId());
+                                reportIndexConfig2.setSeniorIndex(list.get(i).getId());
+                                reportIndexConfigService.save(reportIndexConfig2);
+                                Integer indexConfigId2 = reportIndexConfig2.getId();
+                                List<ReportIndex3Vo> list2 = list1.get(j).getChildren();
+                                if (CollectionUtils.isNotEmpty(list2)) {
+                                    for (int k = 0; k < list2.size(); k++) {
+                                        ReportIndexConfig reportIndexConfig3 = new ReportIndexConfig();
+                                        reportIndexConfig3.setIndexCode(list2.get(k).getIndexCode());
+                                        reportIndexConfig3.setCreateBy(SecurityUtils.getUsername());
+                                        reportIndexConfig3.setCreateTime(LocalDateTime.now());
+                                        reportIndexConfig3.setTenantId(SecurityUtils.getTenantId());
+                                        reportIndexConfig3.setIndexDesc(list2.get(k).getIndexDesc());
+                                        reportIndexConfig3.setIndexGrade(list2.get(k).getIndexGrade());
+                                        reportIndexConfig3.setIndexName(list2.get(k).getIndexName());
+                                        reportIndexConfig3.setIndexWeight(list2.get(k).getIndexWeight());
+                                        reportIndexConfig3.setReportId(reportIndexVo.getId());
+                                        reportIndexConfig3.setSeniorIndex(indexConfigId2);
+                                        reportIndexConfigService.save(reportIndexConfig3);
+                                    }
+                                }
+                            }else {
+                                reportIndexConfig2.setId(list1.get(j).getId());
+                                reportIndexConfig2.setUpdateBy(SecurityUtils.getUsername());
+                                reportIndexConfig2.setUpdateTime(LocalDateTime.now());
+                                reportIndexConfigService.updateById(reportIndexConfig2);
+                                List<ReportIndex3Vo> list2 = list1.get(j).getChildren();
+                                if (CollectionUtils.isNotEmpty(list2)) {
+                                    for (int k = 0; k < list2.size(); k++) {
+                                        ReportIndexConfig reportIndexConfig3 = new ReportIndexConfig();
+                                        reportIndexConfig3.setIndexCode(list2.get(k).getIndexCode());
+                                        reportIndexConfig3.setIndexDesc(list2.get(k).getIndexDesc());
+                                        reportIndexConfig3.setIndexGrade(list2.get(k).getIndexGrade());
+                                        reportIndexConfig3.setIndexName(list2.get(k).getIndexName());
+                                        reportIndexConfig3.setIndexWeight(list2.get(k).getIndexWeight());
+                                        if (list2.get(k).getId()==null){
+                                            reportIndexConfig3.setCreateBy(SecurityUtils.getUsername());
+                                            reportIndexConfig3.setCreateTime(LocalDateTime.now());
+                                            reportIndexConfig3.setTenantId(SecurityUtils.getTenantId());
+                                            reportIndexConfig3.setReportId(reportIndexVo.getId());
+                                            reportIndexConfig3.setSeniorIndex(list1.get(j).getId());
+                                            reportIndexConfigService.save(reportIndexConfig3);
+                                        }else {
+                                            reportIndexConfig3.setId(list2.get(k).getId());
+                                            reportIndexConfig3.setUpdateBy(SecurityUtils.getUsername());
+                                            reportIndexConfig3.setUpdateTime(LocalDateTime.now());
+                                            reportIndexConfigService.updateById(reportIndexConfig3);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
 
+            }
+        }
+    }
 }

+ 7 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportIndexConfigServiceImpl.java

@@ -2,7 +2,9 @@ package com.usky.fire.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.fire.domain.BaseBuild;
+import com.usky.fire.domain.ReportConfig;
 import com.usky.fire.domain.ReportIndexConfig;
 import com.usky.fire.mapper.ReportIndexConfigMapper;
 import com.usky.fire.service.ReportIndexConfigService;
@@ -10,6 +12,7 @@ import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.fire.service.vo.BaseBuildAddVO;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -30,4 +33,8 @@ public class ReportIndexConfigServiceImpl extends AbstractCrudService<ReportInde
         List<ReportIndexConfig> list1 = this.list(queryWrapper);
         return list1;
     }
+    @Override
+    public boolean delReportIndexConfig(Integer id) {
+        return this.removeById(id);
+    }
 }

+ 826 - 3
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportIndexResultServiceImpl.java

@@ -1,24 +1,35 @@
 package com.usky.fire.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.itextpdf.text.*;
+import com.itextpdf.text.pdf.BaseFont;
+import com.itextpdf.text.pdf.PdfPCell;
+import com.itextpdf.text.pdf.PdfPTable;
+import com.itextpdf.text.pdf.PdfWriter;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.fire.domain.*;
 import com.usky.fire.mapper.ReportIndexResultMapper;
 import com.usky.fire.service.*;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.fire.service.config.pdf.MyHeaderFooter;
+import com.usky.fire.service.util.OnlineMethod;
 import com.usky.fire.service.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Calendar;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -61,6 +72,8 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
     private DemFireStatisticsService demFireStatisticsService;
     @Autowired
     private ReportResultService reportResultService;
+    @Autowired
+    private BaseCompanyAttach1Service baseCompanyAttach1Service;
 
     @Override
     public void reportIndexResult() {
@@ -71,6 +84,24 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                 LocalDate date=LocalDate.now();
                 LocalDateTime dateTime=LocalDateTime.now();
                 for (int i = 0; i < baseCompanies.size(); i++) {
+                    // 1.新建document对象
+//                    Document document = new Document(PageSize.A4);// 建立一个Document对象
+//
+//// 2.建立一个书写器(Writer)与document对象关联
+////                    File file =
+////                            new File("/var/www/usky-file/"+now.get(Calendar.YEAR)+"0"+now.get(Calendar.MONTH+1)+"/"+now.get(Calendar.YEAR)+now.get(Calendar.MONTH)+baseCompanies.get(i).getCompanyId()+".pdf");
+//                    File file = new File("D:\\"+now.get(Calendar.YEAR)+now.get(Calendar.MONTH)+baseCompanies.get(i).getCompanyId()+".pdf");
+//                    file.createNewFile();
+//                    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
+////                    writer.setPageEvent(new Watermark("hello word"));// 水印
+//                    writer.setPageEvent(new MyHeaderFooter());// 页眉/页脚
+//                    // 3.打开文档
+//                    document.open();
+//                    document.addTitle("fire report");// 标题
+//                    document.addAuthor("mhzd");// 作者
+                    DemReportDataVo demReportDataVo = new DemReportDataVo();
+                    demReportDataVo.setCompanyName(baseCompanies.get(i).getCompanyName());
+                    demReportDataVo.setLastMonthEndTime(date.toString());
                     ReportResult reportResult = new ReportResult();
                     reportResult.setObjectId(baseCompanies.get(i).getId());
                     reportResult.setReportObject(baseCompanies.get(i).getCompanyName());
@@ -97,12 +128,15 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                     int fireAlarmOfflineNum = fireDeviceOfflineNum + smokeDeviceOfflineNum;
                     int fireAlarmHitchNum = fireDeviceHitchNum + smokeDeviceHitchNum;
                     int fireAlarmNum = fireDeviceNum + smokeDeviceNum;
+                    demReportDataVo.setFireDeviceNum(fireAlarmNum);
                     double fireOnlineRate = 0;
                     double fireFaultRate = 0;
                     if (fireAlarmNum > 0) {
                         fireOnlineRate = 1 - Math.round(fireAlarmOfflineNum / fireAlarmNum * 100) * 0.01;
                         fireFaultRate = Math.round(fireAlarmHitchNum / fireAlarmNum * 100) * 0.01;
                     }
+                    demReportDataVo.setFireOnlineRate(fireOnlineRate);
+                    demReportDataVo.setFireFaultRate(fireFaultRate);
                     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                     Calendar lastMonthFirstDateCal = Calendar.getInstance();
                     lastMonthFirstDateCal.add(Calendar.MONTH, -1);
@@ -115,6 +149,7 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                     String lastYearFirstTime2 = format.format(lastYearFirstDateCal2.getTime());
                     Integer fireAlarmWcl = alarmFireService.fireAlarmCount(baseCompanies.get(i).getCompanyId(), 0,
                             "101", lastYearFirstTime2, lastMonthFirstTime);
+                    demReportDataVo.setFireUnhandled(fireAlarmWcl);
                     LambdaQueryWrapper<AlarmFire> queryWrapper6 = Wrappers.lambdaQuery();
                     queryWrapper6.eq(AlarmFire::getCompanyId, baseCompanies.get(i).getCompanyId())
                             .eq(AlarmFire::getHandlingStatus, 1)
@@ -131,6 +166,7 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                             .in(BaseDevice::getDeviceType, 2, 5, 6)
                             .notLike(BaseDevice::getDeviceName, "风机");
                     List<BaseDevice> list2 = baseDeviceService.list(queryWrapper2);
+                    demReportDataVo.setWaterDeviceNum(list2.size());
                     double waterOnlineRate = 0;
                     double waterFaultRate = 0;
                     Integer waterAlarmWcl = 0;
@@ -168,12 +204,16 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                                     list7.get(0).getHandlingTime());
                         }
                     }
+                    demReportDataVo.setWaterOnlineRate(waterOnlineRate);
+                    demReportDataVo.setWaterFaultRate(waterFaultRate);
+                    demReportDataVo.setWaterUnhandled(waterAlarmWcl);
                     LambdaQueryWrapper<BaseDevice> queryWrapper4 = Wrappers.lambdaQuery();
                     queryWrapper4.select(BaseDevice::getId, BaseDevice::getDeviceCode)
                             .eq(BaseDevice::getCompanyId, baseCompanies.get(i).getCompanyId())
                             .eq(BaseDevice::getDeviceType, 6)
                             .like(BaseDevice::getDeviceName, "风机");
                     List<BaseDevice> list4 = baseDeviceService.list(queryWrapper4);
+                    demReportDataVo.setSmokeDeviceNum(list4.size());
                     double smokeOnlineRate = 0;
                     double smokeFaultRate = 0;
                     Integer smokeAlarmWcl = 0;
@@ -211,6 +251,9 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                                     list8.get(0).getHandlingTime());
                         }
                     }
+                    demReportDataVo.setSmokeOnlineRate(smokeOnlineRate);
+                    demReportDataVo.setSmokeFaultRate(smokeFaultRate);
+                    demReportDataVo.setSmokeUnhandled(smokeAlarmWcl);
                     LambdaQueryWrapper<BaseCompanyPerson> queryWrapperPerson = Wrappers.lambdaQuery();
                     queryWrapperPerson.select(BaseCompanyPerson::getFireManageName)
                             .eq(BaseCompanyPerson::getCompanyId, baseCompanies.get(i).getCompanyId());
@@ -222,15 +265,18 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                             .eq(DemEnforceInspectRecord::getInspectQualified, 0)
                             .between(DemEnforceInspectRecord::getInspectEndTime, lastYearFirstTime, date);
                     List<DemEnforceInspectRecord> list10 = demEnforceInspectRecordService.list(queryWrapper10);
+                    demReportDataVo.setDoubleRandomNum(list10.size());
                     Calendar lastYearFirstDateCal3 = Calendar.getInstance();
                     lastYearFirstDateCal3.add(Calendar.YEAR, -3);
                     String lastYearFirstTime3 = format.format(lastYearFirstDateCal3.getTime());
+                    demReportDataVo.setLastMonthFirstTime(lastYearFirstTime3);
                     LambdaQueryWrapper<DemLawSituation> queryWrapper11 = Wrappers.lambdaQuery();
                     queryWrapper11.select(DemLawSituation::getId)
                             .like(DemLawSituation::getPunishedPerson, baseCompanies.get(i).getCompanyName())
                             .eq(DemLawSituation::getEnable, 0)
                             .between(DemLawSituation::getPunishmentDecisionTime, lastYearFirstTime3, date);
                     List<DemLawSituation> list11 = demLawSituationService.list(queryWrapper11);
+                    demReportDataVo.setPunishNum(list11.size());
                     LambdaQueryWrapper<DemEnforceReportComplaint> queryWrapper12 = Wrappers.lambdaQuery();
                     queryWrapper12.select(DemEnforceReportComplaint::getId)
                             .like(DemEnforceReportComplaint::getReportAddress, baseCompanies.get(i).getAddress())
@@ -238,14 +284,28 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                             .in(DemEnforceReportComplaint::getFactFind, 1, 2)
                             .between(DemEnforceReportComplaint::getReportTime, lastYearFirstTime, date);
                     List<DemEnforceReportComplaint> list12 = demEnforceReportComplaintService.list(queryWrapper12);
+                    demReportDataVo.setReportComplaintNum(list12.size());
                     Calendar lastYearFirstDateCal1 = Calendar.getInstance();
                     lastYearFirstDateCal1.add(Calendar.YEAR, -1);
                     String lastYearFirstTime1 = format.format(lastYearFirstDateCal1.getTime());
                     LambdaQueryWrapper<DemFireStatistics> queryWrapper13 = Wrappers.lambdaQuery();
-                    queryWrapper13.select(DemFireStatistics::getId)
+                    queryWrapper13.select(DemFireStatistics::getId,DemFireStatistics::getDeathToll,
+                            DemFireStatistics::getDirectPropertyLoss)
                             .like(DemFireStatistics::getFireAddress, baseCompanies.get(i).getAddress())
                             .between(DemFireStatistics::getFireTime, lastYearFirstTime1, date);
                     List<DemFireStatistics> list13 = demFireStatisticsService.list(queryWrapper13);
+                    int deathToll=0;
+                    int directPropertyLoss=0;
+                    if (CollectionUtils.isNotEmpty(list13)){
+                        for (int h = 0; h < list13.size(); h++) {
+                            deathToll+=Integer.parseInt(list13.get(h).getDeathToll());
+                            directPropertyLoss+=Integer.parseInt(list13.get(h).getDirectPropertyLoss());
+                        }
+                    }
+                    demReportDataVo.setMajorFireNum(deathToll);
+                    demReportDataVo.setFireDisasterNum(directPropertyLoss);
+                    demReportDataVo.setGeneralFireNum(list13.size());
+                    demReportDataVo.setManagerStatus(0);
                     if (CollectionUtils.isNotEmpty(indexConfig1)) {
                         for (int l = 0; l < indexConfig1.size(); l++) {
                             ReportIndexResult reportIndexResult1 = new ReportIndexResult();
@@ -823,6 +883,7 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                                                                 }else {
                                                                     reportIndexResult2.setIndexScore(0 * indexConfig3.get(j).getIndexWeight()* indexConfig2.get(k).getIndexWeight());
                                                                 }
+                                                                demReportDataVo.setManagerStatus(0);
                                                             } else {
                                                                 reportIndexResult.setIndexScore(100 * indexConfig3.get(j).getIndexWeight());
                                                                 if (reportIndexResult2.getIndexScore()!=null){
@@ -830,6 +891,7 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                                                                 }else {
                                                                     reportIndexResult2.setIndexScore(100 * indexConfig3.get(j).getIndexWeight()* indexConfig2.get(k).getIndexWeight());
                                                                 }
+                                                                demReportDataVo.setManagerStatus(1);
                                                             }
                                                             reportIndexResult.setScoreType(1);
                                                         } else {
@@ -937,6 +999,19 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
                             }
                         }
                     }
+                    if (reportResult.getOverallScore()!=null){
+                        if (reportResult.getOverallScore()>=90){
+                            demReportDataVo.setOverallRating("低风险");
+                        }else if (reportResult.getOverallScore()>=80){
+                            demReportDataVo.setOverallRating("一般风险");
+                        }else if (reportResult.getOverallScore()>=60){
+                            demReportDataVo.setOverallRating("较高风险");
+                        }else {
+                            demReportDataVo.setOverallRating("高风险");
+                        }
+                    }
+//                    this.generatePDF(document,demReportDataVo);
+//                    document.close();
                     reportResultService.save(reportResult);
                 }
             }
@@ -945,6 +1020,506 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
         }
     }
 
+    // 定义全局的字体静态变量
+    private static Font titlefont;
+    private static Font headfont;
+    private static Font keyfont;
+    private static Font textfont;
+    // 最大宽度
+    private static int maxWidth = 520;
+    // 静态代码块
+    static {
+        try {
+// 不同字体(这里定义为同一种字体:包含不同字号、不同style)
+            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+            titlefont = new Font(bfChinese, 16, Font.BOLD);
+            headfont = new Font(bfChinese, 14, Font.BOLD);
+            keyfont = new Font(bfChinese, 10, Font.BOLD);
+            textfont = new Font(bfChinese, 10, Font.NORMAL);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    // 生成PDF文件
+    public void generatePDF(Document document,DemReportDataVo demReportDataVo) throws Exception {
+
+// 段落
+        Paragraph paragraph = new Paragraph(demReportDataVo.getCompanyName()+"消防安全数字化管理综合分析报告", titlefont);
+        paragraph.setAlignment(1); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph.setIndentationLeft(12); //设置左缩进
+        paragraph.setIndentationRight(12); //设置右缩进
+        paragraph.setFirstLineIndent(24); //设置首行缩进
+        paragraph.setLeading(20f); //行间距
+        paragraph.setSpacingBefore(5f); //设置段落上空白
+        paragraph.setSpacingAfter(20f); //设置段落下空白
+
+        Paragraph paragraph1 = new Paragraph(demReportDataVo.getCompanyName()+":", textfont);
+        paragraph1.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+
+        Paragraph paragraph2 =
+                new Paragraph("本次综合分析是通过贵单位在"+demReportDataVo.getLastMonthFirstTime()+"-"+demReportDataVo.getLastMonthEndTime()+
+                "日期间消防设施状况、消防自主管理状况、监督执法情况、火灾风险指数和建筑整体指数进行综合评估,现将综合分析报告如下:", textfont);
+        paragraph2.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph2.setFirstLineIndent(24); //设置首行缩进
+        paragraph2.setLeading(20f); //行间距
+        paragraph2.setSpacingBefore(5f); //设置段落上空白
+        paragraph2.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph3 = new Paragraph("一、整体评价", headfont);
+        paragraph3.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph3.setFirstLineIndent(24); //设置首行缩进
+
+        Paragraph paragraph4 = new Paragraph("贵单位在期间消防安全管理指数评价为:"+demReportDataVo.getOverallRating(), textfont);
+        paragraph4.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph4.setFirstLineIndent(24); //设置首行缩进
+        paragraph4.setLeading(20f); //行间距
+        paragraph4.setSpacingBefore(5f); //设置段落上空白
+        paragraph4.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph5 = new Paragraph("二、测评范围", headfont);
+        paragraph5.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph5.setFirstLineIndent(24); //设置首行缩进
+
+        Paragraph paragraph6 = new Paragraph("包含消防设施系统(火灾报警系统;消防水系统;防排烟系统;维保单位履职情况等  如实显示,没有的就不显示)、消防自主管理状况(组织制度落实情况;日常值班、巡检情况;预案、培训落实情况;微站实体化运行情况)、监督执法情况(双随机检查情况;处罚情况;投诉举报情况;重大隐患挂牌情况)和火灾风险指数(当年度火灾情况;上年度火灾情况)等项目进行综合测评。", textfont);
+        paragraph6.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph6.setFirstLineIndent(24); //设置首行缩进
+        paragraph6.setLeading(20f); //行间距
+        paragraph6.setSpacingBefore(5f); //设置段落上空白
+        paragraph6.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph7 = new Paragraph("三、主要风险及问题", headfont);
+        paragraph7.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph7.setFirstLineIndent(24); //设置首行缩进
+
+        Paragraph paragraph8 = new Paragraph("(一)消防设施问题", textfont);
+        paragraph8.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph8.setFirstLineIndent(24); //设置首行缩进
+        paragraph8.setLeading(20f); //行间距
+        paragraph8.setSpacingBefore(5f); //设置段落上空白
+        paragraph8.setSpacingAfter(10f); //设置段落下空白
+
+        String fireText = "暂无问题";
+        if (demReportDataVo.getFireDeviceNum().equals(0)){
+            fireText = "暂无数据";
+        }else {
+            if (demReportDataVo.getFireOnlineRate()<0.95 && demReportDataVo.getFireFaultRate()>0.05 && demReportDataVo.getFireUnhandled()>0){
+                fireText="在线率低于95%,故障率高于5%,存在未处理告警"+demReportDataVo.getFireUnhandled()+"条;";
+            }else if (demReportDataVo.getFireOnlineRate()<0.95 && demReportDataVo.getFireFaultRate()>0.05){
+                fireText="在线率低于95%,故障率高于5%;";
+            }else if (demReportDataVo.getFireOnlineRate()<0.95 && demReportDataVo.getFireUnhandled()>0){
+                fireText="在线率低于95%,存在未处理告警"+demReportDataVo.getFireUnhandled()+"条;";
+            }else if (demReportDataVo.getFireFaultRate()>0.05 && demReportDataVo.getFireUnhandled()>0){
+                fireText="故障率高于5%,存在未处理告警"+demReportDataVo.getFireUnhandled()+"条;";
+            }else if (demReportDataVo.getFireOnlineRate()<0.95){
+                fireText="在线率低于95%;";
+            }else if (demReportDataVo.getFireFaultRate()>0.05){
+                fireText="故障率高于5%;";
+            }else if (demReportDataVo.getFireUnhandled()>0){
+                fireText="存在未处理告警"+demReportDataVo.getFireUnhandled()+"条;";
+            }
+        }
+        Paragraph paragraph9 = new Paragraph("火灾报警系统:"+fireText, textfont);
+        paragraph9.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph9.setFirstLineIndent(24); //设置首行缩进
+        paragraph9.setLeading(20f); //行间距
+        paragraph9.setSpacingBefore(5f); //设置段落上空白
+        paragraph9.setSpacingAfter(10f); //设置段落下空白
+
+        String waterText = "暂无问题";
+        if (demReportDataVo.getWaterDeviceNum().equals(0)){
+            waterText = "暂无数据";
+        }else {
+            if (demReportDataVo.getWaterOnlineRate()<0.95 && demReportDataVo.getWaterFaultRate()>0.05 && demReportDataVo.getWaterUnhandled()>0){
+                waterText="在线率低于95%,故障率高于5%,存在未处理告警"+demReportDataVo.getWaterUnhandled()+"条;";
+            }else if (demReportDataVo.getWaterOnlineRate()<0.95 && demReportDataVo.getWaterFaultRate()>0.05){
+                waterText="在线率低于95%,故障率高于5%;";
+            }else if (demReportDataVo.getWaterOnlineRate()<0.95 && demReportDataVo.getWaterUnhandled()>0){
+                waterText="在线率低于95%,存在未处理告警"+demReportDataVo.getWaterUnhandled()+"条;";
+            }else if (demReportDataVo.getWaterFaultRate()>0.05 && demReportDataVo.getWaterUnhandled()>0){
+                waterText="故障率高于5%,存在未处理告警"+demReportDataVo.getWaterUnhandled()+"条;";
+            }else if (demReportDataVo.getWaterOnlineRate()<0.95){
+                waterText="在线率低于95%;";
+            }else if (demReportDataVo.getWaterFaultRate()>0.05){
+                waterText="故障率高于5%;";
+            }else if (demReportDataVo.getWaterUnhandled()>0){
+                waterText="存在未处理告警"+demReportDataVo.getWaterUnhandled()+"条;";
+            }
+        }
+
+        Paragraph paragraph26 = new Paragraph("消防水系统:"+waterText, textfont);
+        paragraph26.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph26.setFirstLineIndent(24); //设置首行缩进
+        paragraph26.setLeading(20f); //行间距
+        paragraph26.setSpacingBefore(5f); //设置段落上空白
+        paragraph26.setSpacingAfter(10f); //设置段落下空白
+
+        String smokeText = "暂无问题";
+        if (demReportDataVo.getSmokeDeviceNum().equals(0)){
+            smokeText="暂无数据";
+        }else {
+            if (demReportDataVo.getSmokeOnlineRate()<0.95 && demReportDataVo.getSmokeFaultRate()>0.05 && demReportDataVo.getSmokeUnhandled()>0){
+                smokeText="在线率低于95%,故障率高于5%,存在未处理告警"+demReportDataVo.getSmokeUnhandled()+"条;";
+            }else if (demReportDataVo.getSmokeOnlineRate()<0.95 && demReportDataVo.getSmokeFaultRate()>0.05){
+                smokeText="在线率低于95%,故障率高于5%;";
+            }else if (demReportDataVo.getSmokeOnlineRate()<0.95 && demReportDataVo.getSmokeUnhandled()>0){
+                smokeText="在线率低于95%,存在未处理告警"+demReportDataVo.getSmokeUnhandled()+"条;";
+            }else if (demReportDataVo.getSmokeFaultRate()>0.05 && demReportDataVo.getSmokeUnhandled()>0){
+                smokeText="故障率高于5%,存在未处理告警"+demReportDataVo.getSmokeUnhandled()+"条;";
+            }else if (demReportDataVo.getSmokeOnlineRate()<0.95){
+                smokeText="在线率低于95%;";
+            }else if (demReportDataVo.getSmokeFaultRate()>0.05){
+                smokeText="故障率高于5%;";
+            }else if (demReportDataVo.getSmokeUnhandled()>0){
+                smokeText="存在未处理告警"+demReportDataVo.getSmokeUnhandled()+"条;";
+            }
+        }
+
+        Paragraph paragraph10 = new Paragraph("防排烟系统:"+smokeText, textfont);
+        paragraph10.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph10.setFirstLineIndent(24); //设置首行缩进
+        paragraph10.setLeading(20f); //行间距
+        paragraph10.setSpacingBefore(5f); //设置段落上空白
+        paragraph10.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph11 = new Paragraph("维保单位履职情况:暂无数据。", textfont);
+        paragraph11.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph11.setFirstLineIndent(24); //设置首行缩进
+        paragraph11.setLeading(20f); //行间距
+        paragraph11.setSpacingBefore(5f); //设置段落上空白
+        paragraph11.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph12 = new Paragraph("(二)消防自主管理问题", textfont);
+        paragraph12.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph12.setFirstLineIndent(24); //设置首行缩进
+        paragraph12.setLeading(20f); //行间距
+        paragraph12.setSpacingBefore(5f); //设置段落上空白
+        paragraph12.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph13 = new Paragraph("组织制度落实情况:暂无数据;", textfont);
+        paragraph13.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph13.setFirstLineIndent(24); //设置首行缩进
+        paragraph13.setLeading(20f); //行间距
+        paragraph13.setSpacingBefore(5f); //设置段落上空白
+        paragraph13.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph14 = new Paragraph("消防档案:暂无数据;", textfont);
+        paragraph14.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph14.setFirstLineIndent(24); //设置首行缩进
+        paragraph14.setLeading(20f); //行间距
+        paragraph14.setSpacingBefore(5f); //设置段落上空白
+        paragraph14.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph15 = new Paragraph("消防重点部位:暂无数据。", textfont);
+        paragraph15.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph15.setFirstLineIndent(24); //设置首行缩进
+        paragraph15.setLeading(20f); //行间距
+        paragraph15.setSpacingBefore(5f); //设置段落上空白
+        paragraph15.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph16 = new Paragraph("(三)监督执法情况", textfont);
+        paragraph16.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph16.setFirstLineIndent(24); //设置首行缩进
+        paragraph16.setLeading(20f); //行间距
+        paragraph16.setSpacingBefore(5f); //设置段落上空白
+        paragraph16.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph17 =
+                new Paragraph("上述时间段内监督检查发现隐患"+demReportDataVo.getDoubleRandomNum()+"处,"+"发现处罚"+demReportDataVo.getPunishNum()+
+                        "起,"+"发现举报投诉"+demReportDataVo.getReportComplaintNum()+"起;",
+                textfont);
+        paragraph17.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph17.setFirstLineIndent(24); //设置首行缩进
+        paragraph17.setLeading(20f); //行间距
+        paragraph17.setSpacingBefore(5f); //设置段落上空白
+        paragraph17.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph18 = new Paragraph("(四)火灾情况", textfont);
+        paragraph18.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph18.setFirstLineIndent(24); //设置首行缩进
+        paragraph18.setLeading(20f); //行间距
+        paragraph18.setSpacingBefore(5f); //设置段落上空白
+        paragraph18.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph19 =
+                new Paragraph("上一年度发生"+demReportDataVo.getGeneralFireNum()+"起火灾,造成"+demReportDataVo.getMajorFireNum()+
+                "名人员伤亡,造成直接财产损失" +demReportDataVo.getFireDisasterNum()+
+                "万元。", textfont);
+        paragraph19.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph19.setFirstLineIndent(24); //设置首行缩进
+        paragraph19.setLeading(20f); //行间距
+        paragraph19.setSpacingBefore(5f); //设置段落上空白
+        paragraph19.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph20 = new Paragraph("四、防范对策及建议", headfont);
+        paragraph20.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph20.setFirstLineIndent(24); //设置首行缩进
+
+        Paragraph paragraph21 = new Paragraph("1、建议联系消防设施维保单位对本单位开展一次全面维护保养,对损坏、故障的设施要及时修复,确保消防设施完整好用;", textfont);
+        paragraph21.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph21.setFirstLineIndent(24); //设置首行缩进
+        paragraph21.setLeading(20f); //行间距
+        paragraph21.setSpacingBefore(5f); //设置段落上空白
+        paragraph21.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph22 = new Paragraph("2、建议对照重点单位消防档案管理办法,进一步完善员工安全培训记录、明确消防重点部位等内容;", textfont);
+        paragraph22.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph22.setFirstLineIndent(24); //设置首行缩进
+        paragraph22.setLeading(20f); //行间距
+        paragraph22.setSpacingBefore(5f); //设置段落上空白
+        paragraph22.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph23 = new Paragraph("3、建议对单位重点部位开展一轮全面自查,落实值班、巡查以及应急处置工作职责,确保“实名制”管理工作制度落实到位;", textfont);
+        paragraph23.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph23.setFirstLineIndent(24); //设置首行缩进
+        paragraph23.setLeading(20f); //行间距
+        paragraph23.setSpacingBefore(5f); //设置段落上空白
+        paragraph23.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph24 = new Paragraph("4、建议充分利用场所自身有利条件,在电子屏、明显位置循环播放宣传视频、张贴海报等形式加强消防安全提示。定期对单位员工开展消防安全教育和重点岗位专题培训,持续提高员工消防安全“一懂三会”基本能力。", textfont);
+        paragraph24.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph24.setFirstLineIndent(24); //设置首行缩进
+        paragraph24.setLeading(20f); //行间距
+        paragraph24.setSpacingBefore(5f); //设置段落上空白
+        paragraph24.setSpacingAfter(10f); //设置段落下空白
+
+        Paragraph paragraph25 = new Paragraph("五、具体问题清单", headfont);
+        paragraph25.setAlignment(0); //设置文字居中 0靠左 1,居中 2,靠右
+        paragraph25.setFirstLineIndent(24); //设置首行缩进
+
+// 直线
+//        Paragraph p1 = new Paragraph();
+//        p1.add(new Chunk(new LineSeparator()));
+
+// 点线
+//        Paragraph p2 = new Paragraph();
+//        p2.add(new Chunk(new DottedLineSeparator()));
+
+// 超链接
+//        Anchor anchor = new Anchor("baidu");
+//        anchor.setReference("www.baidu.com");
+
+// 定位
+//        Anchor gotoP = new Anchor("goto");
+//        gotoP.setReference("#top");
+
+// 添加图片
+        Image image = Image.getInstance("https://img-blog.csdn.net/20180801174617455?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzg0ODcxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70");
+        image.setAlignment(Image.ALIGN_CENTER);
+        image.scalePercent(40); //依照比例缩放
+
+// 表格
+        PdfPTable table = createTable(new float[] { 40, 120, 120, 120, 80, 80 });
+        table.addCell(createCell("美好的一天", headfont, Element.ALIGN_LEFT, 6, false));
+        table.addCell(createCell("早上9:00", keyfont, Element.ALIGN_CENTER));
+        table.addCell(createCell("中午11:00", keyfont, Element.ALIGN_CENTER));
+        table.addCell(createCell("中午13:00", keyfont, Element.ALIGN_CENTER));
+        table.addCell(createCell("下午15:00", keyfont, Element.ALIGN_CENTER));
+        table.addCell(createCell("下午17:00", keyfont, Element.ALIGN_CENTER));
+        table.addCell(createCell("晚上19:00", keyfont, Element.ALIGN_CENTER));
+        Integer totalQuantity = 0;
+        for (int i = 0; i < 5; i++) {
+            table.addCell(createCell("起床", textfont));
+            table.addCell(createCell("吃午饭", textfont));
+            table.addCell(createCell("午休", textfont));
+            table.addCell(createCell("下午茶", textfont));
+            table.addCell(createCell("回家", textfont));
+            table.addCell(createCell("吃晚饭", textfont));
+            totalQuantity ++;
+        }
+        table.addCell(createCell("总计", keyfont));
+        table.addCell(createCell("", textfont));
+        table.addCell(createCell("", textfont));
+        table.addCell(createCell("", textfont));
+        table.addCell(createCell(String.valueOf(totalQuantity) + "件事", textfont));
+        table.addCell(createCell("", textfont));
+
+        document.add(paragraph);
+        document.add(paragraph1);
+        document.add(paragraph2);
+        document.add(paragraph3);
+        document.add(paragraph4);
+        document.add(paragraph5);
+        document.add(paragraph6);
+        document.add(paragraph7);
+        document.add(paragraph8);
+        document.add(paragraph9);
+        document.add(paragraph26);
+        document.add(paragraph10);
+        document.add(paragraph11);
+        document.add(paragraph12);
+        document.add(paragraph13);
+        document.add(paragraph14);
+        document.add(paragraph15);
+        document.add(paragraph16);
+        document.add(paragraph17);
+        document.add(paragraph18);
+        document.add(paragraph19);
+        document.add(paragraph20);
+        document.add(paragraph21);
+        document.add(paragraph22);
+        document.add(paragraph23);
+        document.add(paragraph24);
+        document.add(paragraph25);
+//        document.add(anchor);
+//        document.add(p2);
+//        document.add(gotoP);
+//        document.add(p1);
+        document.add(table);
+//        document.add(image);
+    }
+
+
+/**------------------------创建表格单元格的方法start----------------------------*/
+    /**
+     * 创建单元格(指定字体)
+     * @param value
+     * @param font
+     * @return
+     */
+    public PdfPCell createCell(String value, Font font) {
+        PdfPCell cell = new PdfPCell();
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setPhrase(new Phrase(value, font));
+        return cell;
+    }
+    /**
+     * 创建单元格(指定字体、水平..)
+     * @param value
+     * @param font
+     * @param align
+     * @return
+     */
+    public PdfPCell createCell(String value, Font font, int align) {
+        PdfPCell cell = new PdfPCell();
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(align);
+        cell.setPhrase(new Phrase(value, font));
+        return cell;
+    }
+    /**
+     * 创建单元格(指定字体、水平居..、单元格跨x列合并)
+     * @param value
+     * @param font
+     * @param align
+     * @param colspan
+     * @return
+     */
+    public PdfPCell createCell(String value, Font font, int align, int colspan) {
+        PdfPCell cell = new PdfPCell();
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(align);
+        cell.setColspan(colspan);
+        cell.setPhrase(new Phrase(value, font));
+        return cell;
+    }
+    /**
+     * 创建单元格(指定字体、水平居..、单元格跨x列合并、设置单元格内边距)
+     * @param value
+     * @param font
+     * @param align
+     * @param colspan
+     * @param boderFlag
+     * @return
+     */
+    public PdfPCell createCell(String value, Font font, int align, int colspan, boolean boderFlag) {
+        PdfPCell cell = new PdfPCell();
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(align);
+        cell.setColspan(colspan);
+        cell.setPhrase(new Phrase(value, font));
+        cell.setPadding(3.0f);
+        if (!boderFlag) {
+            cell.setBorder(0);
+            cell.setPaddingTop(15.0f);
+            cell.setPaddingBottom(8.0f);
+        } else if (boderFlag) {
+            cell.setBorder(0);
+            cell.setPaddingTop(0.0f);
+            cell.setPaddingBottom(15.0f);
+        }
+        return cell;
+    }
+    /**
+     * 创建单元格(指定字体、水平..、边框宽度:0表示无边框、内边距)
+     * @param value
+     * @param font
+     * @param align
+     * @param borderWidth
+     * @param paddingSize
+     * @param flag
+     * @return
+     */
+    public PdfPCell createCell(String value, Font font, int align, float[] borderWidth, float[] paddingSize, boolean flag) {
+        PdfPCell cell = new PdfPCell();
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(align);
+        cell.setPhrase(new Phrase(value, font));
+        cell.setBorderWidthLeft(borderWidth[0]);
+        cell.setBorderWidthRight(borderWidth[1]);
+        cell.setBorderWidthTop(borderWidth[2]);
+        cell.setBorderWidthBottom(borderWidth[3]);
+        cell.setPaddingTop(paddingSize[0]);
+        cell.setPaddingBottom(paddingSize[1]);
+        if (flag) {
+            cell.setColspan(2);
+        }
+        return cell;
+    }
+/**------------------------创建表格单元格的方法end----------------------------*/
+
+
+/**--------------------------创建表格的方法start------------------- ---------*/
+    /**
+     * 创建默认列宽,指定列数、水平(居中、右、左)的表格
+     * @param colNumber
+     * @param align
+     * @return
+     */
+    public PdfPTable createTable(int colNumber, int align) {
+        PdfPTable table = new PdfPTable(colNumber);
+        try {
+            table.setTotalWidth(maxWidth);
+            table.setLockedWidth(true);
+            table.setHorizontalAlignment(align);
+            table.getDefaultCell().setBorder(1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return table;
+    }
+    /**
+     * 创建指定列宽、列数的表格
+     * @param widths
+     * @return
+     */
+    public PdfPTable createTable(float[] widths) {
+        PdfPTable table = new PdfPTable(widths);
+        try {
+            table.setTotalWidth(maxWidth);
+            table.setLockedWidth(true);
+            table.setHorizontalAlignment(Element.ALIGN_CENTER);
+            table.getDefaultCell().setBorder(1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return table;
+    }
+    /**
+     * 创建空白的表格
+     * @return
+     */
+    public PdfPTable createBlankTable() {
+        PdfPTable table = new PdfPTable(1);
+        table.getDefaultCell().setBorder(0);
+        table.addCell(createCell("", keyfont));
+        table.setSpacingAfter(20.0f);
+        table.setSpacingBefore(20.0f);
+        return table;
+    }
+
     @Override
     public List<IndexResultVo> indexResultSelect(Integer id, String createDate) {
         List<IndexResultVo> list = new ArrayList<>();
@@ -1036,4 +1611,252 @@ public class ReportIndexResultServiceImpl extends AbstractCrudService<ReportInde
 
         return list;
     }
+
+    @Override
+    public List<Object> reportContrast(ReportResultVO reportResultVO) {
+        List<Object> list = new ArrayList<>();
+        List<Object> list2 = new ArrayList<>();
+        List<Object> list3 = new ArrayList<>();
+        LambdaQueryWrapper<ReportResult> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.select(ReportResult::getId,ReportResult::getObjectType,ReportResult::getObjectId,
+                ReportResult::getReportObject,
+                ReportResult::getCreateDate, ReportResult::getOverallScore)
+                .in(ReportResult::getId,reportResultVO.getReportId());
+        List<ReportResult> list1 = reportResultService.list(queryWrapper);
+        Map<String, Object> map1 = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list1)) {
+            for (int i = 0; i < list1.size(); i++) {
+                List<Object> list8 = new ArrayList<>();
+                LambdaQueryWrapper<ReportIndexResult> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1
+                        .eq(ReportIndexResult::getObjectId,list1.get(i).getObjectId())
+                        .eq(ReportIndexResult::getCreateDate,list1.get(i).getCreateDate());
+                List<ReportIndexResult> list4 = this.list(queryWrapper1);
+                List<String> indexIdList = new ArrayList<>();
+                if (CollectionUtils.isNotEmpty(list4)) {
+                    for (int a = 0; a < list4.size(); a++) {
+                        indexIdList.add(list4.get(a).getIndexCode());
+                    }
+                    LambdaQueryWrapper<ReportIndexConfig> queryWrapper2 = Wrappers.lambdaQuery();
+                    queryWrapper2
+                            .in(ReportIndexConfig::getIndexCode, indexIdList);
+                    List<ReportIndexConfig> list5 = reportIndexConfigService.list(queryWrapper2);
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("objectType", list1.get(i).getObjectType().equals(1)?"重点单位":"其他");
+                    map.put("reportObject", list1.get(i).getReportObject());
+                    map.put("overallScore", list1.get(i).getOverallScore());
+                    map.put("createDate", list1.get(i).getCreateDate());
+                    map.put("associationField", "indexScore" + i);
+                    list2.add(map);
+                    for (int j = 0; j < list4.size(); j++) {
+                        if (CollectionUtils.isNotEmpty(list5)) {
+                            for (int k = 0; k < list5.size(); k++) {
+                                if (list4.get(j).getIndexCode().equals(list5.get(k).getIndexCode()) && list5.get(k).getIndexGrade().equals(1)) {
+                                    Map<String, Object> map2 = new HashMap<>();
+                                    map2.put("id", list5.get(k).getId());
+                                    map2.put("indexName", list4.get(j).getIndexName());
+                                    map2.put("indexWeight", list5.get(k).getIndexWeight());
+                                    map2.put("scoreDesc", list4.get(j).getScoreDesc());
+                                    map2.put("indexScore", list4.get(j).getIndexScore());
+                                    List<Object> list6 = new ArrayList<>();
+                                    for (int m = 0; m < list5.size(); m++) {
+                                        if (list5.get(m).getSeniorIndex().equals(list5.get(k).getId()) && list5.get(m).getIndexGrade().equals(2)) {
+                                            for (int l = 0; l < list4.size(); l++) {
+                                                if (list4.get(l).getIndexCode().equals(list5.get(m).getIndexCode())) {
+                                                    Map<String, Object> map3 = new HashMap<>();
+                                                    map3.put("id", list5.get(m).getId());
+                                                    map3.put("indexName", list4.get(l).getIndexName());
+                                                    map3.put("indexWeight", list5.get(m).getIndexWeight());
+                                                    map3.put("scoreDesc", list4.get(l).getScoreDesc());
+                                                    map3.put("indexScore", list4.get(l).getIndexScore());
+                                                    List<Object> list7 = new ArrayList<>();
+                                                    for (int o = 0; o < list5.size(); o++) {
+                                                        if (list5.get(o).getSeniorIndex().equals(list5.get(m).getId()) && list5.get(o).getIndexGrade().equals(3)) {
+                                                            for (int n = 0; n < list4.size(); n++) {
+                                                                if (list4.get(n).getIndexCode().equals(list5.get(o).getIndexCode())) {
+                                                                    Map<String, Object> map4 = new HashMap<>();
+                                                                    map4.put("id", list5.get(o).getId());
+                                                                    map4.put("indexName", list4.get(n).getIndexName());
+                                                                    map4.put("indexWeight", list5.get(o).getIndexWeight());
+                                                                    map4.put("scoreDesc", list4.get(n).getScoreDesc());
+                                                                    map4.put("indexScore", list4.get(n).getIndexScore());
+                                                                    list7.add(map4);
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                    map3.put("children",list7);
+                                                    list6.add(map3);
+                                                }
+                                            }
+                                        }
+                                    }
+                                    map2.put("children",list6);
+                                    list8.add(map2);
+                                }
+                            }
+                        }
+                    }
+
+                }
+                map1.put("indexScore"+i, list8);
+            }
+            map1.put("objectInfo", list2);
+        }
+        list.add(map1);
+        return list;
+    }
+
+    @Override
+    public List<ResultStatisticsVO> resultStatistic(Integer id, String createDate) {
+        List<ResultStatisticsVO> list = new ArrayList<>();
+        ResultStatisticsVO resultStatisticsVO = new ResultStatisticsVO();
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        String formattedDate = currentDate.format(formatter);
+        resultStatisticsVO.setHighRisk(getReportCountByScoreRange(0, 60, formattedDate).size());
+        resultStatisticsVO.setMildHighRisk(getReportCountByScoreRange(60, 70, formattedDate).size());
+        resultStatisticsVO.setNormalRisk(getReportCountByScoreRange(70, 80, formattedDate).size());
+        resultStatisticsVO.setLowRisk(getReportCountByScoreRange(80, 100, formattedDate).size());
+        list.add(resultStatisticsVO);
+        return list;
+    }
+
+    private List<ReportResult> getReportCountByScoreRange(int startScore, int endScore, String createDate) {
+        LambdaQueryWrapper<ReportResult> wrapper = new LambdaQueryWrapper<>();
+        wrapper.ge(ReportResult::getOverallScore, startScore).le(ReportResult::getOverallScore, endScore)
+                .like(ReportResult::getCreateDate, createDate);
+        return reportResultService.list(wrapper);
+    }
+
+    @Override
+    public List<Object> riskGradeScatter(Integer riskGrade) {
+        List<Object> list10 = new ArrayList<>();
+        String streetTown = "";
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        String formattedDate = currentDate.format(formatter);
+        List<ReportResult> highRiskList = new ArrayList<>();
+        if (riskGrade.equals(1)) {
+            highRiskList = getReportCountByScoreRange(0, 60, formattedDate);
+        }else if (riskGrade.equals(2)){
+            highRiskList = getReportCountByScoreRange(60, 70, formattedDate);
+        }else if (riskGrade.equals(3)){
+            highRiskList = getReportCountByScoreRange(70, 80, formattedDate);
+        }else if (riskGrade.equals(4)){
+            highRiskList = getReportCountByScoreRange(80, 100, formattedDate);
+        }
+        if (CollectionUtils.isNotEmpty(highRiskList)) {
+            List<Integer> idList = new ArrayList<>();
+            for (int a = 0; a < highRiskList.size(); a++) {
+                idList.add(highRiskList.get(a).getObjectId());
+            }
+            List<String> streetTownList = new ArrayList<>();
+            streetTownList.add("华漕镇");
+            streetTownList.add("新虹街道");
+            streetTownList.add("七宝镇");
+            streetTownList.add("虹桥镇");
+            streetTownList.add("古美路街道");
+            streetTownList.add("莘庄镇");
+            streetTownList.add("梅陇镇");
+            streetTownList.add("颛桥镇");
+            streetTownList.add("马桥镇");
+            streetTownList.add("江川路街道");
+            streetTownList.add("吴泾镇");
+            streetTownList.add("浦锦街道");
+            streetTownList.add("浦江镇");
+            List<Object> list = new ArrayList<>();
+            IPage<BaseCompany> page = new Page<>(1, 500);
+            LambdaQueryWrapper<BaseCompany> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.select(BaseCompany::getId, BaseCompany::getCompanyId, BaseCompany::getCompanyName,
+                    BaseCompany::getCompanyType, BaseCompany::getLinkPhone, BaseCompany::getAddress, BaseCompany::getStreetTown)
+                    .eq(BaseCompany::getEnable, 0)
+                    .in(BaseCompany::getId, idList);
+            page = baseCompanyService.page(page, queryWrapper);
+            List<BaseCompany> list1 = page.getRecords();
+            if (CollectionUtils.isNotEmpty(list1)) {
+                List<String> companyIdList = new ArrayList<>();
+                for (int i = 0; i < list1.size(); i++) {
+                    companyIdList.add(list1.get(i).getCompanyId());
+                }
+                LambdaQueryWrapper<BaseCompanyAttach1> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.select(BaseCompanyAttach1::getId, BaseCompanyAttach1::getCompanyId, BaseCompanyAttach1::getLongitude,
+                        BaseCompanyAttach1::getLatitude)
+                        .in(BaseCompanyAttach1::getCompanyId, companyIdList);
+                List<BaseCompanyAttach1> list2 = baseCompanyAttach1Service.list(queryWrapper1);
+                for (int i = 0; i < list1.size(); i++) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("id", list1.get(i).getId());
+                    map.put("companyName", list1.get(i).getCompanyName());
+                    String companyTypeName = null;
+                    if (StringUtils.isNotBlank(list1.get(i).getCompanyType())) {
+                        if (list1.get(i).getCompanyType().equals("1")) {
+                            companyTypeName = "重点单位";
+                        } else if (list1.get(i).getCompanyType().equals("2")) {
+                            companyTypeName = "一般单位";
+                        } else if (list1.get(i).getCompanyType().equals("3")) {
+                            companyTypeName = "九小场所";
+                        } else if (list1.get(i).getCompanyType().equals("9")) {
+                            companyTypeName = "其他单位";
+                        }
+                    }
+
+                    map.put("companyTypeName", companyTypeName);
+                    map.put("companyId", list1.get(i).getCompanyId());
+                    map.put("linkPhone", list1.get(i).getLinkPhone());
+                    map.put("address", list1.get(i).getAddress());
+                    map.put("longitude", null);
+                    map.put("latitude", null);
+                    map.put("streetTown", null);
+                    for (int j = 0; j < list2.size(); j++) {
+                        if (list1.get(i).getCompanyId().equals(list2.get(j).getCompanyId())) {
+                            String longitude = null;
+                            String latitude = null;
+                            if ((StringUtils.isBlank(list2.get(j).getLongitude()) && StringUtils.isNotBlank(list1.get(i).getAddress()))) {
+                                List<LocateInfo> lonLat = OnlineMethod.getLonLat(list1.get(i).getAddress());
+                                if (CollectionUtils.isNotEmpty(lonLat)) {
+                                    if (StringUtils.isBlank(list2.get(j).getLongitude()) && StringUtils.isBlank(list2.get(j).getLatitude())) {
+                                        longitude = "" + lonLat.get(0).getLongitude();
+                                        latitude = "" + lonLat.get(0).getLatitude();
+                                    } else {
+                                        longitude = list2.get(j).getLongitude();
+                                        latitude = list2.get(j).getLatitude();
+                                    }
+                                    String location = longitude + "," + latitude;
+                                    String streetTown2 = OnlineMethod.getStreetTown(location);
+                                    if (StringUtils.isBlank(list1.get(i).getStreetTown())) {
+                                        streetTown = streetTown2;
+                                    } else {
+                                        streetTown = list1.get(i).getStreetTown();
+                                    }
+                                    baseCompanyService.updateCompany1(list1.get(i).getId(), list2.get(j).getId(), longitude, latitude, streetTown);
+                                }
+                            } else {
+                                longitude = list2.get(j).getLongitude();
+                                latitude = list2.get(j).getLatitude();
+                                streetTown = list1.get(i).getStreetTown();
+                            }
+                            map.put("streetTown", streetTown);
+                            map.put("longitude", longitude);
+                            map.put("latitude", latitude);
+                        }
+                    }
+                    if (map.get("longitude") != null && map.get("latitude") != null && map.get("streetTown") != null) {
+                        String streetTown1 = map.get("streetTown").toString();
+                        if (streetTownList.contains(streetTown1)) {
+                            if (StringUtils.isNotBlank(streetTown)) {
+                                if (streetTown.equals(map.get("streetTown").toString())) {
+                                    list10.add(map);
+                                }
+                            } else {
+                                list10.add(map);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return list10;
+    }
+
 }

+ 39 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/ReportResultServiceImpl.java

@@ -6,13 +6,21 @@ 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.fire.domain.DemReportInfo;
+import com.usky.fire.domain.BaseCompanyPerson;
+import com.usky.fire.domain.ReportConfig;
 import com.usky.fire.domain.ReportResult;
 import com.usky.fire.mapper.ReportResultMapper;
+import com.usky.fire.service.ReportConfigService;
 import com.usky.fire.service.ReportResultService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 报告结果表 服务实现类
@@ -23,6 +31,9 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class ReportResultServiceImpl extends AbstractCrudService<ReportResultMapper, ReportResult> implements ReportResultService {
+    @Autowired
+    private ReportConfigService reportConfigService;
+
     @Override
     public CommonPage<ReportResult> reportResultList(Integer companyId, String sourceType, Integer pageNum,
                                                      Integer pageSize) {
@@ -33,4 +44,31 @@ public class ReportResultServiceImpl extends AbstractCrudService<ReportResultMap
         page = this.page(page, queryWrapper);
         return ToCommonPage(page);
     }
+    @Override
+    public CommonPage<Object> newReportResultList(String reportObject, Integer pageNum, Integer pageSize) {
+        List<Object> list = new ArrayList<>();
+        IPage<ReportResult> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<ReportResult> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(reportObject),ReportResult::getReportObject, reportObject)
+                .orderByDesc(ReportResult::getId);
+        page = this.page(page, queryWrapper);
+        LambdaQueryWrapper<ReportConfig> queryWrapper1 = Wrappers.lambdaQuery();
+        List<ReportConfig> list1 = reportConfigService.list(queryWrapper1);
+        if (page.getTotal() > 0) {
+            for (int i = 0; i < page.getRecords().size(); i++) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", page.getRecords().get(i).getId());
+                map.put("reportObject", page.getRecords().get(i).getReportObject());
+                map.put("overallScore", page.getRecords().get(i).getOverallScore());
+                map.put("createDate", page.getRecords().get(i).getCreateDate());
+                for (int j = 0; j < list1.size(); j++){
+                    if (page.getRecords().get(i).getConfigId().equals(list1.get(j).getId())){
+                        map.put("reportName", list1.get(j).getReportName());
+                    }
+                }
+                list.add(map);
+            }
+        }
+        return new CommonPage<>(list, page.getTotal(), pageSize, pageNum);
+    }
 }

+ 0 - 4
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/BaseGgpFacilityVO.java

@@ -1,9 +1,5 @@
 package com.usky.fire.service.vo;
 
-import com.usky.fire.domain.BaseBuild;
-import com.usky.fire.domain.BaseCompany;
-import com.usky.fire.domain.BaseCompanyAttach1;
-import com.usky.fire.domain.BaseCompanyPerson;
 import lombok.Data;
 
 import java.util.List;

+ 26 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/DemReportDataVo.java

@@ -34,6 +34,11 @@ public class DemReportDataVo implements Serializable {
      */
     private String lastMonthFirstTime;
 
+    /**
+     * 整体评价
+     */
+    private String overallRating;
+
     /**
      * 统计结束时间
      */
@@ -54,6 +59,11 @@ public class DemReportDataVo implements Serializable {
      */
     private Integer fireUnhandled;
 
+    /**
+     * 火灾报警系统设备数量
+     */
+    private Integer fireDeviceNum;
+
     /**
      * 消防水系统在线率
      */
@@ -69,6 +79,11 @@ public class DemReportDataVo implements Serializable {
      */
     private Integer waterUnhandled;
 
+    /**
+     * 消防水系统设备数量
+     */
+    private Integer waterDeviceNum;
+
     /**
      * 电气火灾系统在线率
      */
@@ -84,6 +99,11 @@ public class DemReportDataVo implements Serializable {
      */
     private Integer efUnhandled;
 
+    /**
+     * 电气火灾系统设备数量
+     */
+    private Integer efDeviceNum;
+
     /**
      * 防排烟系统在线率
      */
@@ -99,6 +119,11 @@ public class DemReportDataVo implements Serializable {
      */
     private Integer smokeUnhandled;
 
+    /**
+     * 防排烟系统设备数量
+     */
+    private Integer smokeDeviceNum;
+
     /**
      * 组织制度落实状态
      */
@@ -202,7 +227,7 @@ public class DemReportDataVo implements Serializable {
     /**
      * 当年度火灾情况-较大及以上火灾
      */
-    private Integer majorFireNum;
+    private int majorFireNum;
 
     /**
      * 当年度火灾情况-影响很大且具有典型意义火灾

+ 37 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportConfigVO.java

@@ -0,0 +1,37 @@
+package com.usky.fire.service.vo;
+
+import lombok.Data;
+
+/**
+ * @author han
+ * @date 2023/7/12 13:55
+ * 数据模型
+ */
+@Data
+public class ReportConfigVO {
+
+    /**
+     * 报告模版id
+     */
+    private Integer id;
+
+    /**
+     * 报告模版名称
+     */
+    private String reportName;
+
+    /**
+     * 一级指标数量
+     */
+    private Integer indexNum1;
+
+    /**
+     * 二级指标数量
+     */
+    private Integer indexNum2;
+
+    /**
+     * 三级指标数量
+     */
+    private Integer indexNum3;
+}

+ 62 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex1Vo.java

@@ -0,0 +1,62 @@
+package com.usky.fire.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-06-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ReportIndex1Vo implements Serializable {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 指数名称
+     */
+    private String indexName;
+
+    /**
+     * 指数权重分
+     */
+    private Double indexWeight;
+
+    /**
+     * 指数编号
+     */
+    private String indexCode;
+
+    /**
+     * 评分说明
+     */
+    private String indexDesc;
+
+    /**
+     * 指数等级
+     */
+    private Integer indexGrade;
+
+    /**
+     * 二级指数结果清单
+     */
+    private List<ReportIndex2Vo> children;
+
+}

+ 63 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex2Vo.java

@@ -0,0 +1,63 @@
+package com.usky.fire.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.usky.fire.domain.BaseBuild;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author JCB
+ * @since 2022-07-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ReportIndex2Vo implements Serializable {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 指数名称
+     */
+    private String indexName;
+
+    /**
+     * 指数权重分
+     */
+    private Double indexWeight;
+
+    /**
+     * 指数编号
+     */
+    private String indexCode;
+
+    /**
+     * 评分说明
+     */
+    private String indexDesc;
+
+    /**
+     * 指数等级
+     */
+    private Integer indexGrade;
+
+    /**
+     * 三级指数结果清单
+     */
+    private List<ReportIndex3Vo> children;
+
+}

+ 58 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndex3Vo.java

@@ -0,0 +1,58 @@
+package com.usky.fire.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.usky.fire.domain.BaseBuild;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author JCB
+ * @since 2022-07-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ReportIndex3Vo implements Serializable {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 指数名称
+     */
+    private String indexName;
+
+    /**
+     * 指数权重分
+     */
+    private Double indexWeight;
+
+    /**
+     * 指数编号
+     */
+    private String indexCode;
+
+    /**
+     * 评分说明
+     */
+    private String indexDesc;
+
+    /**
+     * 指数等级
+     */
+    private Integer indexGrade;
+
+}

+ 43 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportIndexVo.java

@@ -0,0 +1,43 @@
+package com.usky.fire.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-06-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ReportIndexVo implements Serializable {
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 报告名称
+     */
+    private String reportName;
+
+    /**
+     * 一级指数结果清单
+     */
+    private List<ReportIndex1Vo> reportIndex;
+
+}

+ 20 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ReportResultVO.java

@@ -0,0 +1,20 @@
+package com.usky.fire.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-17
+ */
+@Data
+public class ReportResultVO {
+
+        private List<Integer> reportId;
+
+}

+ 34 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ResultStatisticsVO.java

@@ -0,0 +1,34 @@
+package com.usky.fire.service.vo;
+
+import lombok.Data;
+
+/**
+ * @author han
+ * @date 2023/8/9 17:23
+ * 企业自主情况统计
+ */
+@Data
+public class ResultStatisticsVO {
+
+    /**
+     * 高风险数
+     */
+    private Integer highRisk;
+
+    /**
+     * 较高风险数
+     */
+    private Integer mildHighRisk;
+
+    /**
+     * 一般风险数
+     */
+    private Integer normalRisk;
+
+    /**
+     * 低风险数
+     */
+    private Integer lowRisk;
+
+
+}

+ 30 - 1
service-fire/service-fire-biz/src/main/resources/mapper/fire/ReportConfigMapper.xml

@@ -6,11 +6,40 @@
     <resultMap id="BaseResultMap" type="com.usky.fire.domain.ReportConfig">
         <id column="id" property="id" />
         <result column="report_name" property="reportName" />
+        <result column="delete_flag" property="deleteFlag" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
         <result column="update_by" property="updateBy" />
         <result column="update_time" property="updateTime" />
         <result column="tenant_id" property="tenantId" />
     </resultMap>
-
+    <select id="configNumList1" resultType="com.usky.fire.service.vo.ReportConfigVO">
+        SELECT d.id,d.report_name as reportName,IF(report_id IS NULL,0,COUNT(*)) AS
+        indexNum1
+        FROM report_config d
+        LEFT JOIN report_index_config e ON e.report_id = d.id
+        <where>
+            <if test="tenantId != null and tenantId != ''">
+                and d.tenant_id = #{tenantId}
+            </if>
+            and d.delete_flag = 0
+        </where>
+        GROUP BY d.id
+    </select>
+    <select id="configNumList" resultType="com.usky.fire.service.vo.ReportConfigVO">
+        SELECT d.id,IF(report_id IS NULL,0,COUNT(*)) AS
+        indexNum1
+        FROM report_config d
+        LEFT JOIN report_index_config e ON e.report_id = d.id
+        <where>
+            <if test="tenantId != null and tenantId != ''">
+                and d.tenant_id = #{tenantId}
+            </if>
+            <if test="indexGrade != null and indexGrade != ''">
+                and e.index_grade = #{indexGrade}
+            </if>
+            and d.delete_flag = 0
+        </where>
+        GROUP BY d.id
+    </select>
 </mapper>

+ 24 - 1
service-iot/service-iot-biz/pom.xml

@@ -37,8 +37,31 @@
             <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
             <version>1.1.0</version>
         </dependency>
-        
 
+        <!--MQTT依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+            <version>2.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-stream</artifactId>
+            <version>5.5.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+            <version>5.5.5</version>
+        </dependency>
+        <!--websocket依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 73 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmController.java

@@ -0,0 +1,73 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.service.BaseAlarmService;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import com.usky.iot.service.vo.BaseAlarmRequestVO;
+import com.usky.iot.service.vo.BaseAlarmResponeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 统一告警表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-13
+ */
+@RestController
+@RequestMapping("/baseAlarm")
+public class BaseAlarmController {
+    @Autowired
+    private BaseAlarmService baseAlarmService;
+
+    /**
+     * 统计
+     * @param baseAlarmRequestVO
+     * @return
+     */
+    @PostMapping("/statistic")
+    public ApiResult<CommonPage<BaseAlarmResponeVO>> statistic(@RequestBody BaseAlarmRequestVO baseAlarmRequestVO){
+        return ApiResult.success(baseAlarmService.statistic(baseAlarmRequestVO));
+    }
+
+    /**
+     * 分页
+     * @param baseAlarmListVO
+     * @return
+     */
+    @PostMapping("/page")
+    public ApiResult<CommonPage<BaseAlarm>> page(@RequestBody BaseAlarmListVO baseAlarmListVO){
+        return ApiResult.success(baseAlarmService.page(baseAlarmListVO));
+    }
+
+    /**
+     * 修改
+     * @param baseAlarm
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> update(@RequestBody BaseAlarm baseAlarm){
+        baseAlarmService.update(baseAlarm);
+        return ApiResult.success();
+    }
+
+    /**
+     * 新增
+     * @param baseAlarm
+     * @return
+     */
+    @PostMapping("/alarmInfo")
+    public ApiResult<Void> add(@RequestBody BaseAlarm baseAlarm){
+        baseAlarmService.add(baseAlarm);
+        return ApiResult.success();
+    }
+}
+

+ 85 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmTypeController.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.BaseAlarmType;
+import com.usky.iot.service.BaseAlarmTypeService;
+import com.usky.iot.service.vo.BaseAlarmTypeRequestVO;
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 告警类型表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-12
+ */
+@RestController
+@RequestMapping("/baseAlarmType")
+public class BaseAlarmTypeController {
+
+    @Autowired
+    private BaseAlarmTypeService baseAlarmTypeService;
+
+    /**
+     * 新增
+     * @param baseAlarmType
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody BaseAlarmType baseAlarmType){
+        baseAlarmTypeService.add(baseAlarmType);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param baseAlarmType
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> update(@RequestBody BaseAlarmType baseAlarmType){
+        baseAlarmTypeService.update(baseAlarmType);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id){
+        baseAlarmTypeService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 分页
+     * @param baseAlarmTypeRequestVO
+     * @return
+     */
+    @PostMapping("page")
+    public ApiResult<CommonPage<BaseAlarmType>> page(@RequestBody BaseAlarmTypeRequestVO baseAlarmTypeRequestVO){
+        return ApiResult.success(baseAlarmTypeService.page(baseAlarmTypeRequestVO));
+    }
+
+    /**
+     * 租户告警类型列表
+     * @return
+     */
+    @GetMapping("tenantIdAlarmTypeList")
+    public ApiResult<List<BaseAlarmType>> tenantIdAlarmTypeList(){
+        return ApiResult.success(baseAlarmTypeService.tenantIdAlarmTypeList());
+    }
+
+}
+

+ 106 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildController.java

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

+ 94 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildFacilityController.java

@@ -0,0 +1,94 @@
+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.BaseBuildFacility;
+import com.usky.iot.service.BaseBuildFacilityService;
+import com.usky.iot.service.vo.BaseBuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityResponeVO;
+import com.usky.iot.service.vo.FacilityDeviceStatusVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 建筑设施 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@RestController
+@RequestMapping("/baseBuildFacility")
+public class BaseBuildFacilityController {
+    @Autowired
+    private BaseBuildFacilityService baseBuildFacilityService;
+
+    /**
+     * 新增
+     * @param baseBuildFacility
+     * @return
+     */
+    @PostMapping
+    ApiResult<Void> add(@RequestBody BaseBuildFacility baseBuildFacility){
+        baseBuildFacilityService.add(baseBuildFacility);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param baseBuildFacility
+     * @return
+     */
+    @PutMapping
+    ApiResult<Void> update(@RequestBody BaseBuildFacility baseBuildFacility){
+        baseBuildFacilityService.update(baseBuildFacility);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    ApiResult<Void> remove(@PathVariable("id") Integer id){
+        baseBuildFacilityService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 分页
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("page")
+    ApiResult<CommonPage<BaseBuildFacility>> page(@RequestBody BaseBuildFacilityRequestVO requestVO){
+        return ApiResult.success(baseBuildFacilityService.page(requestVO));
+    }
+
+    /**
+     * 建筑设施关联设备列表
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("deviceList")
+    ApiResult<CommonPage<BuildFacilityResponeVO>> deviceList(@RequestBody BuildFacilityRequestVO requestVO){
+        return ApiResult.success(baseBuildFacilityService.deviceList(requestVO));
+    }
+
+    /**
+     * 建筑设施设备绑定
+     * @return
+     */
+    @PostMapping("setStatus")
+    ApiResult<Void> setStatus(@RequestBody FacilityDeviceStatusVO statusVO){
+        baseBuildFacilityService.setStatus(statusVO);
+        return ApiResult.success();
+    }
+}
+

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

@@ -0,0 +1,21 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+@Controller
+@RequestMapping("/baseBuildFacilityRelate")
+public class BaseBuildFacilityRelateController {
+
+}
+

+ 82 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseBuildFacilityTypeController.java

@@ -0,0 +1,82 @@
+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.BaseBuildFacilityType;
+import com.usky.iot.service.BaseBuildFacilityTypeService;
+import com.usky.iot.service.vo.BaseBuildFacilityTypeRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 建筑设施类型 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@RestController
+@RequestMapping("/baseBuildFacilityType")
+public class BaseBuildFacilityTypeController {
+
+    @Autowired
+    private BaseBuildFacilityTypeService baseBuildFacilityTypeService;
+
+    /**
+     * 新增
+     * @param baseBuildFacilityType
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody BaseBuildFacilityType baseBuildFacilityType){
+        baseBuildFacilityTypeService.add(baseBuildFacilityType);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param baseBuildFacilityType
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> update(@RequestBody BaseBuildFacilityType baseBuildFacilityType){
+        baseBuildFacilityTypeService.update(baseBuildFacilityType);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id){
+        baseBuildFacilityTypeService.remove(id);
+        return ApiResult.success();
+    }
+
+    /**
+     * 分页
+     * @param baseBuildFacilityTypeRequestVO
+     * @return
+     */
+    @PostMapping("page")
+    public ApiResult<CommonPage<BaseBuildFacilityType>> page(@RequestBody BaseBuildFacilityTypeRequestVO baseBuildFacilityTypeRequestVO){
+        return ApiResult.success(baseBuildFacilityTypeService.page(baseBuildFacilityTypeRequestVO));
+    }
+
+}
+
+
+
+
+
+
+
+
+
+

+ 30 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseGgpFacilityController.java

@@ -13,6 +13,7 @@ import com.usky.iot.service.BaseGgpFacilityService;
 import com.usky.iot.service.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -135,6 +136,7 @@ public class BaseGgpFacilityController {
     /**
      * 关联设备查看分页
      * @param deviceId  设备ID
+     * @param deviceType  设备类型
      * @param id  设施主键ID
      * @param current      当前页
      * @param size     每页条数
@@ -142,12 +144,13 @@ public class BaseGgpFacilityController {
      */
     @Log(title = "关联设备绑定分页", businessType = BusinessType.OTHER)
     @GetMapping("/deviceBindInfo")
-    public ApiResult<CommonPage<Object>> deviceBindInfo(@RequestParam(value = "deviceId", required = false) String deviceId,
+    public ApiResult<CommonPage<Object>> deviceBindInfo(@RequestParam(value = "deviceType", required = false) String deviceType,
+                                                        @RequestParam(value = "deviceId", required = false) String deviceId,
                                                            @RequestParam(value = "id") Integer id,
                                                            @RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
                                                            @RequestParam(value = "size", required = false, defaultValue = "10") Integer size)
     {
-        return ApiResult.success(baseGgpFacilityService.deviceBindInfo(deviceId, id, current, size));
+        return ApiResult.success(baseGgpFacilityService.deviceBindInfo(deviceType,deviceId, id, current, size));
     }
 
     /**
@@ -179,5 +182,30 @@ public class BaseGgpFacilityController {
         return ApiResult.success(baseGgpFacilityService.baseGgpFacilityList(baseGgpFacilityVO));
     }
 
+        /**
+         * 设施弹窗查询
+         *
+         * @param id  主键ID
+         * @return
+         */
+        @GetMapping("facilityPopInfo")
+        public ApiResult<List<Object>> facilityPopInfo(@RequestParam(value = "id") Integer id) {
+            return ApiResult.success(baseGgpFacilityService.facilityPopInfo(id));
+        }
+
+    /**
+     * 地理设施-导入
+     *
+     * @param file 导入文件
+     * @return
+     * @throws Exception
+     */
+    @Log(title = "地理设施", businessType = BusinessType.IMPORT)
+    @PostMapping("/facilityImport")
+    public ApiResult<Void> facilityImport(@RequestParam("file") MultipartFile file){
+        baseGgpFacilityService.facilityImport(file);
+        return ApiResult.success();
+    }
+
 }
 

+ 3 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/CrmCustomRemindController.java

@@ -44,8 +44,9 @@ public class CrmCustomRemindController {
      */
     @GetMapping("/page")
     public ApiResult<CommonPage<CrmCustomRemind>> page(@RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
-                                                       @RequestParam(value = "size", required = false, defaultValue = "10") Integer size){
-        return ApiResult.success(crmCustomRemindService.page(current,size));
+                                                       @RequestParam(value = "size", required = false, defaultValue = "10") Integer size,
+                                                       @RequestParam(value = "customId") Integer customId){
+        return ApiResult.success(crmCustomRemindService.page(current,size,customId));
     }
 
 }

+ 17 - 9
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java

@@ -1,18 +1,12 @@
 package com.usky.iot.controller.web;
 
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.core.bean.ApiResult;
-import com.usky.iot.domain.DmpDeviceStatus;
+import com.usky.iot.service.DmpDataInfoService;
 import com.usky.iot.service.DmpDeviceStatusService;
+import com.usky.backend.domain.request.DmpDeviceDataRequestVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
 /**
  * @author zyj
  * @date 2023/6/8 13:52:05
@@ -24,11 +18,25 @@ public class DeviceHttpController {
     @Autowired
     private DmpDeviceStatusService dmpDeviceStatusService;
 
-    @PutMapping("/status")
+    @Autowired
+    private DmpDataInfoService dmpDataInfoService;
+
+    @GetMapping("/status")
     public ApiResult<Void> status(){
         dmpDeviceStatusService.status();
         return ApiResult.success();
     }
 
+    /**
+     * 设备实时历史数据-对接客户
+     * @param dmpDeviceDataRequestVO
+     * @return
+     */
+    @PostMapping("/data")
+    public ApiResult<Void> data(@RequestBody DmpDeviceDataRequestVO dmpDeviceDataRequestVO){
+        dmpDataInfoService.data(dmpDeviceDataRequestVO);
+        return ApiResult.success();
+    }
+
 
 }

+ 15 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotNull;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -79,13 +80,23 @@ public class DmpDeviceInfoController {
     /**
      * 批量导入
      * @param multipartFiles
-     * @param productId
      * @return
      */
     @PostMapping("/addByFile")
-    public ApiResult<Void> addByFile(@RequestParam(value = "file") MultipartFile multipartFiles,
-                                     @RequestParam("productId") Integer productId){
-        dmpDeviceInfoService.addByFile(productId,multipartFiles);
+    public ApiResult<Void> addByFile(@RequestParam(value = "file") MultipartFile multipartFiles){
+        dmpDeviceInfoService.addByFile(multipartFiles);
+        return ApiResult.success();
+    }
+
+    /**
+     * 批量导入-对接客户
+     *
+     * @param list
+     * @return
+     */
+    @PostMapping("/importDeviceInfo")
+    public ApiResult<Void> importDeviceInfo(@RequestBody List<DmpDeviceInfo> list){
+        dmpDeviceInfoService.importDeviceInfo(list);
         return ApiResult.success();
     }
 

+ 9 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceTypeController.java

@@ -76,5 +76,14 @@ public class DmpDeviceTypeController {
         return ApiResult.success(dmpDeviceTypeService.getDeviceTypeList(typeCode,typeName,pageNum,pageSize));
     }
 
+    /**
+     * 租户设备类型列表
+     * @return
+     */
+    @GetMapping("tenantIdDeviceTypeList")
+    public ApiResult<List<DmpDeviceType>> tenantIdDeviceTypeList(){
+        return ApiResult.success(dmpDeviceTypeService.tenantIdDeviceTypeList());
+    }
+
 }
 

+ 165 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarm.java

@@ -0,0 +1,165 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 统一告警表
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseAlarm implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID
+     */
+    private String deviceId;
+
+    /**
+     * 告警时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime alarmTime;
+
+    /**
+     * 告警类型
+     */
+    private String alarmType;
+
+    /**
+     * 告警对象
+     */
+    private String alarmObject;
+
+    /**
+     * 告警值
+     */
+    private String alarmData;
+
+    /**
+     * 告警属性
+     */
+    private String alarmAttribute;
+
+    /**
+     * 告警内容
+     */
+    private String alarmContent;
+
+    /**
+     * 告警等级;1 一级,2 二级,3 三级,4 四级,5 五级
+     */
+    private Integer alarmGrade;
+
+    /**
+     * 告警位置
+     */
+    private String alarmAddress;
+
+    /**
+     * 处理人
+     */
+    private String handleBy;
+
+    /**
+     * 处理时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime handleTime;
+
+    /**
+     * 处理内容
+     */
+    private String handleContent;
+
+    /**
+     * 处理人电话
+     */
+    private String handlePhone;
+
+    /**
+     * 处理状态;0 未处理,1 已处理
+     */
+    private Integer handleStatus;
+
+    /**
+     * 是否误报;0 非误报,1 误报
+     */
+    private Integer alarmFalse;
+
+    /**
+     * 现场照片
+     */
+    private String sitePhoto;
+
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    /**
+     * 单位名称
+     */
+    @TableField(exist = false)
+    private String companyName;
+
+    /**
+     * 设备名称
+     */
+    @TableField(exist = false)
+    private String deviceName;
+
+    /**
+     * 处理范围
+     */
+    @TableField(exist = false)
+    private Integer handleRange;
+
+    /**
+     * 图标
+     */
+    @TableField(exist = false)
+    private String typeImg;
+
+    /**
+     * 设施编号
+     */
+    @TableField(exist = false)
+    private Integer facilityId;
+
+    /**
+     * 转换时间
+     */
+    @TableField(exist = false)
+    private String alarmTime1;
+}

+ 91 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseAlarmType.java

@@ -0,0 +1,91 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 告警类型表
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseAlarmType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 类型编码
+     */
+    private String typeCode;
+
+    /**
+     * 类型简称
+     */
+    private String typeAbbrevia;
+
+    /**
+     * 类型名称
+     */
+    private String typeName;
+
+    /**
+     * 图标
+     */
+    private String typeImg;
+
+    /**
+     * 告警描述
+     */
+    private String alarmDesc;
+
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 24 - 13
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuild.java

@@ -2,6 +2,8 @@ package com.usky.iot.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import java.time.LocalDate;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
@@ -134,9 +136,19 @@ public class BaseBuild implements Serializable {
     private Integer facilityId;
 
     /**
-     * 所属联网单位ID
+     * BIM地址
      */
-    private String companyId;
+    private String bimUrl;
+
+    /**
+     * 联系人电话
+     */
+    private String contactPhone;
+
+    /**
+     * 建筑备注
+     */
+    private String buildDesc;
 
     /**
      * 创建时间
@@ -151,17 +163,17 @@ public class BaseBuild implements Serializable {
     /**
      * 更新人
      */
-    private String updatePerson;
+    private String updateBy;
 
     /**
      * 创建人
      */
-    private String creator;
+    private String createBy;
 
     /**
      * 删除标识
      */
-    private String deleteFlag;
+    private Integer deleteFlag;
 
     /**
      * 地下空间
@@ -174,19 +186,18 @@ public class BaseBuild implements Serializable {
     private Integer fireproofCoat;
 
     /**
-     * 消防设施系统;0、无 1、有
+     * 组织机构ID
      */
-    private String fireFacilitySystem;
+    private Integer deptId;
 
     /**
-     * 其他系统;0、无 1、有
+     * 租户ID
      */
-    private String otherSystem;
+    private Integer tenantId;
 
     /**
-     * 其他设施
+     * 建筑设施总数
      */
-    private String otherFacilities;
-
-
+    @TableField(exist = false)
+    private Integer buildFacilityCount;
 }

+ 154 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacility.java

@@ -0,0 +1,154 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 建筑设施
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseBuildFacility implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 建筑Id
+     */
+    @TableField(exist = false)
+    private Integer buildId;
+
+    /**
+     * 建筑名称
+     */
+    @TableField(exist = false)
+    private String buildName;
+
+    /**
+     * 设施编号
+     */
+    private String facilityNum;
+
+    /**
+     * 设施名称
+     */
+    private String facilityName;
+
+    /**
+     * 设施类型
+     */
+    private String facilityType;
+
+    /**
+     * 设施类型名称
+     */
+    @TableField(exist = false)
+    private String typeName;
+
+    /**
+     * 所属楼层
+     */
+    private String floor;
+
+    /**
+     * 安装位置
+     */
+    private String address;
+
+    /**
+     * 图⽚地址URL
+     */
+    private String imagesUrl;
+
+    /**
+     * 设备ID
+     */
+    private String deviceId;
+
+    /**
+     * 联系人
+     */
+    private String contact;
+
+    /**
+     * 联系方式
+     */
+    private String contactPhone;
+
+    /**
+     * X轴坐标
+     */
+    private String coordinateX;
+
+    /**
+     * Y轴坐标
+     */
+    private String coordinateY;
+
+    /**
+     * Z轴坐标
+     */
+    private String coordinateZ;
+
+    /**
+     * 删除标识
+     */
+    private Integer deleteFlag;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 组织结构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    /**
+     * 建筑设施备注
+     */
+    private String facilityDesc;
+}

+ 51 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityRelate.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 han
+ * @since 2023-07-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseBuildFacilityRelate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 建筑id
+     */
+    private Integer buildId;
+
+    /**
+     * 建筑设施id
+     */
+    private Integer facilityId;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+
+}

+ 91 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseBuildFacilityType.java

@@ -0,0 +1,91 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 建筑设施类型
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseBuildFacilityType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 类型编码
+     */
+    private String typeCode;
+
+    /**
+     * 类型简称
+     */
+    private String typeAbbrevia;
+
+    /**
+     * 类型名称
+     */
+    private String typeName;
+
+    /**
+     * 图标
+     */
+    private String typeImg;
+
+    /**
+     * 类型描述
+     */
+    private String typeDesc;
+
+    /**
+     * 数据字段
+     */
+    private String dataField;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 3 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/BaseGgpFacility.java

@@ -40,7 +40,7 @@ public class BaseGgpFacility implements Serializable {
     /**
      * 设施状态
      */
-    private Integer status;
+    private Integer facilityStatus;
 
     /**
      * 设施地址
@@ -48,9 +48,9 @@ public class BaseGgpFacility implements Serializable {
     private String address;
 
     /**
-     * 设施类型(1、天然水源 2、五万方综合体 3、三到五万方综合体 4、拟列区级重大火灾隐患单位 5、拟列市级重大火灾隐患单位 6、一般重大火灾隐患单位 7、扣分5以下九小场所 8、扣分6-14九小场所 9、扣分15-24九小场所 10、钢瓶九小场所 11、电瓶车九小场所 12、三合一九小场所 13、重点单位微站 14、一般单位微站 15、居委会微站 16、村委会微站)
+     * 设施类型
      */
-    private Integer facilityType;
+    private String facilityType;
 
     /**
      * 经度(当设施类型为点时使用该字段)

+ 19 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmMapper.java

@@ -0,0 +1,19 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.BaseAlarmType;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 统一告警表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-13
+ */
+public interface BaseAlarmMapper extends CrudMapper<BaseAlarm> {
+    BaseAlarmType getAlarmTypeOne(String alarmType);
+}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseAlarmTypeMapper.java

@@ -0,0 +1,20 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.common.mybatis.core.CrudMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 告警类型表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-12
+ */
+public interface BaseAlarmTypeMapper extends CrudMapper<BaseAlarmType> {
+
+    List<BaseAlarm> getAlarmInfo(Integer tenantId);
+}

+ 19 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityMapper.java

@@ -0,0 +1,19 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.BaseBuildFacility;
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.BaseBuildFacilityType;
+
+/**
+ * <p>
+ * 建筑设施 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+public interface BaseBuildFacilityMapper extends CrudMapper<BaseBuildFacility> {
+    BaseBuildFacilityType baseBuildFacilityTypeList(String facilityType);
+    BaseBuild getBuildName(Integer buildId);
+}

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

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseBuildFacilityRelate;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+public interface BaseBuildFacilityRelateMapper extends CrudMapper<BaseBuildFacilityRelate> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.BaseBuildFacilityType;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 建筑设施类型 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+public interface BaseBuildFacilityTypeMapper extends CrudMapper<BaseBuildFacilityType> {
+
+}

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

@@ -22,5 +22,5 @@ public interface BaseFacilityTypeMapper extends CrudMapper<BaseFacilityType> {
     List<BaseGgpFacilityTypeNumVO> typeNormalNumList(@Param("tenantId") Integer tenantId);
     List<BaseGgpFacilityTypeNumVO> typeUpkeepNumList(@Param("tenantId") Integer tenantId);
     List<BaseGgpFacilityTypeNumVO> typeCloseNumList(@Param("tenantId") Integer tenantId);
-    List<BaseFacilityType> typeList(@Param("typeId") Integer typeId);
+    List<BaseFacilityType> typeList(@Param("typeId") String typeId);
 }

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

@@ -23,5 +23,5 @@ public interface DmpDeviceInfoMapper extends CrudMapper<DmpDeviceInfo> {
 
     List<DmpProductInfo> getProductInfo(String productCode);
 
-    Page<DmpDeviceInfo> page(IPage<DmpDeviceInfo> page, @Param("ar")DmpDeviceInfoRequest dmpDeviceInfoRequest);
+    Page<DmpDeviceInfo> page(IPage<DmpDeviceInfo> page, @Param("ar")DmpDeviceInfoRequest dmpDeviceInfoRequest, @Param("tenantId") Integer tenantId);
 }

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

@@ -24,21 +24,25 @@ public interface DmpDeviceStatusMapper extends CrudMapper<DmpDeviceStatus> {
 
     List<DmpDataOverviewVO> getDeviceStatusCollect(@Param("productId") Integer productId,
                                                    @Param("startTime") Date startTime,
-                                                   @Param("endTime") Date endTime);
+                                                   @Param("endTime") Date endTime,
+                                                   @Param("tenantId") Integer tenantId);
 
 
     DmpDataOverviewVO getAllCollect(@Param("productId") Integer productId,
                                              @Param("startTime") Date startTime,
-                                             @Param("endTime") Date endTime);
+                                             @Param("endTime") Date endTime,
+                                    @Param("tenantId") Integer tenantId);
 
 
     List<DmpDataOverviewVO> getMonthHyCollect(@Param("productId") Integer productId,
                                                @Param("startTime") Date startTime,
-                                               @Param("endTime") Date endTime);
+                                               @Param("endTime") Date endTime,
+                                              @Param("tenantId") Integer tenantId);
 
     DmpDataOverviewVO getAllMonthHyCollect(@Param("productId") Integer productId,
                                             @Param("startTime") Date startTime,
-                                            @Param("endTime") Date endTime);
+                                            @Param("endTime") Date endTime,
+                                           @Param("tenantId") Integer tenantId);
 
 
 

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

@@ -1,7 +1,11 @@
 package com.usky.iot.mapper;
 
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.DmpDeviceType;
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.domain.DmpProductInfo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,5 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @since 2023-06-06
  */
 public interface DmpDeviceTypeMapper extends CrudMapper<DmpDeviceType> {
-
+    List<DmpProductInfo> getProductInfo(Integer tenantId);
 }

+ 29 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java

@@ -0,0 +1,29 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import com.usky.iot.service.vo.BaseAlarmRequestVO;
+import com.usky.iot.service.vo.BaseAlarmResponeVO;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * <p>
+ * 统一告警表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-13
+ */
+public interface BaseAlarmService extends CrudService<BaseAlarm> {
+
+    CommonPage<BaseAlarmResponeVO> statistic(BaseAlarmRequestVO baseAlarmRequestVO);
+
+    CommonPage<BaseAlarm> page(BaseAlarmListVO baseAlarmListVO);
+
+    void update(BaseAlarm baseAlarm);
+
+    boolean add(BaseAlarm baseAlarm);
+}

+ 36 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmTypeService.java

@@ -0,0 +1,36 @@
+package com.usky.iot.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.service.vo.BaseAlarmTypeRequestVO;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 告警类型表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-12
+ */
+public interface BaseAlarmTypeService extends CrudService<BaseAlarmType> {
+
+    void add(BaseAlarmType baseAlarmType);
+
+    void update(BaseAlarmType baseAlarmType);
+
+    void remove(Integer id);
+
+    CommonPage<BaseAlarmType> page(BaseAlarmTypeRequestVO baseAlarmTypeRequestVO);
+
+    List<BaseAlarmType> tenantIdAlarmTypeList();
+
+    boolean checkNameUnique(BaseAlarmType baseAlarmType);
+
+}

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

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.BaseBuildFacilityRelate;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+public interface BaseBuildFacilityRelateService extends CrudService<BaseBuildFacilityRelate> {
+
+}

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

@@ -0,0 +1,33 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseBuildFacility;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.service.vo.BaseBuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityResponeVO;
+import com.usky.iot.service.vo.FacilityDeviceStatusVO;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * <p>
+ * 建筑设施 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+public interface BaseBuildFacilityService extends CrudService<BaseBuildFacility> {
+
+    void add(BaseBuildFacility baseBuildFacility);
+
+    void update(BaseBuildFacility baseBuildFacility);
+
+    void remove(Integer id);
+
+    CommonPage<BaseBuildFacility> page(BaseBuildFacilityRequestVO requestVO);
+
+    CommonPage<BuildFacilityResponeVO> deviceList(BuildFacilityRequestVO requestVO);
+
+    void setStatus(FacilityDeviceStatusVO statusVO);
+}

+ 27 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildFacilityTypeService.java

@@ -0,0 +1,27 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseBuildFacilityType;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.service.vo.BaseBuildFacilityTypeRequestVO;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * <p>
+ * 建筑设施类型 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+public interface BaseBuildFacilityTypeService extends CrudService<BaseBuildFacilityType> {
+    void add(BaseBuildFacilityType baseBuildFacilityType);
+
+    void update(BaseBuildFacilityType baseBuildFacilityType);
+
+    void remove(Integer id);
+
+    CommonPage<BaseBuildFacilityType> page(BaseBuildFacilityTypeRequestVO baseBuildFacilityTypeRequestVO);
+
+    boolean checkNameUnique(BaseBuildFacilityType baseBuildFacilityType);
+}

+ 38 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseBuildService.java

@@ -1,7 +1,16 @@
 package com.usky.iot.service;
 
+import com.usky.common.core.bean.CommonPage;
 import com.usky.iot.domain.BaseBuild;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.domain.BaseBuildFacility;
+import com.usky.iot.service.vo.BaseBuildFacilityVO;
+import com.usky.iot.service.vo.BuildFacilityRelateRequestVO;
+import com.usky.iot.service.vo.BuildFacilityRelateResponeVO;
+import com.usky.iot.service.vo.BuildFacilityStatusVO;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +22,33 @@ import com.usky.common.mybatis.core.CrudService;
  */
 public interface BaseBuildService extends CrudService<BaseBuild> {
 
+    void add(BaseBuild baseBuild);
+
+    void update(BaseBuild baseBuild);
+
+    void remove(Integer id);
+
+    List<BaseBuild> dataList(Integer id);
+
+    CommonPage<BuildFacilityRelateResponeVO> buildFacilityRelateList(BuildFacilityRelateRequestVO requestVO);
+
+    void setBuildFacilityStatus(BuildFacilityStatusVO statusVO);
+
+    /**
+     * 建筑设施关联查询
+     *
+     * @param id  主键ID
+     */
+    List<Object> buildFacilityInfo(BaseBuildFacilityVO baseBuildFacilityVO);
+
+    /**
+     * 类型设施关联查询
+     *
+     * @param id  主键ID
+     * @param floor  所属楼层
+     * @param typeCode  类型编码
+     */
+    List<BaseBuildFacility> typeFacilityInfo(Integer id, String floor, String typeCode);
+
+//    boolean checkNameUnique(BaseBuild baseBuild);
 }

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

@@ -9,6 +9,7 @@ import com.usky.iot.service.vo.BaseFacilityDeviceVO;
 import com.usky.iot.service.vo.BaseGgpFacilityExportVo;
 import com.usky.iot.service.vo.BaseGgpFacilityRequest;
 import com.usky.iot.service.vo.BaseGgpFacilityVO;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -37,7 +38,7 @@ public interface BaseGgpFacilityService extends CrudService<BaseGgpFacility> {
 
     CommonPage<DmpDeviceInfo> deviceInfo(String deviceId,Integer id,Integer current,Integer size);
 
-    CommonPage<Object> deviceBindInfo(String deviceId,Integer id,Integer current,Integer size);
+    CommonPage<Object> deviceBindInfo(String deviceType,String deviceId,Integer id,Integer current,Integer size);
 
     CommonPage<BaseBuild> buildInfo(String buildNum, Integer id, Integer current, Integer size);
 
@@ -48,4 +49,13 @@ public interface BaseGgpFacilityService extends CrudService<BaseGgpFacility> {
      * @return
      */
     List<BaseGgpFacility> baseGgpFacilityList(BaseGgpFacilityVO baseGgpFacilityVO);
+
+    /**
+     * 设施弹窗查询
+     *
+     * @param id  主键ID
+     */
+    List<Object> facilityPopInfo(Integer id);
+
+    void facilityImport(MultipartFile multipartFile);
 }

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

@@ -16,6 +16,6 @@ public interface CrmCustomRemindService extends CrudService<CrmCustomRemind> {
 
     void add(CrmCustomRemind crmCustomRemind);
 
-    CommonPage<CrmCustomRemind> page(Integer current, Integer size);
+    CommonPage<CrmCustomRemind> page(Integer current, Integer size, Integer customId);
 
 }

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

@@ -2,6 +2,7 @@ package com.usky.iot.service;
 
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.iot.domain.DmpDataInfo;
+import com.usky.backend.domain.request.DmpDeviceDataRequestVO;
 
 
 /**
@@ -14,4 +15,6 @@ import com.usky.iot.domain.DmpDataInfo;
  */
 public interface DmpDataInfoService extends CrudService<DmpDataInfo> {
 
+    void data(DmpDeviceDataRequestVO dmpDeviceDataRequestVO);
+
 }

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

@@ -28,6 +28,8 @@ public interface DmpDeviceInfoService extends CrudService<DmpDeviceInfo> {
 
     boolean checkNameUnique(DmpDeviceInfo dmpDeviceInfo);
 
+    boolean checkNameUnique1(DmpDeviceInfo dmpDeviceInfo,Integer tenantId);
+
     CommonPage<DmpDeviceInfo> page(DmpDeviceInfoRequest dmpDeviceInfoRequest);
 
     boolean remove(Integer id);
@@ -45,7 +47,9 @@ public interface DmpDeviceInfoService extends CrudService<DmpDeviceInfo> {
      */
     int deviceCountByProductId(Integer productId);
 
-    void addByFile(Integer productId, MultipartFile multipartFiles);
+    void addByFile(MultipartFile multipartFiles);
+
+    void importDeviceInfo(List<DmpDeviceInfo> list);
 
     /**
      * 导出

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceTypeService.java

@@ -26,6 +26,8 @@ public interface DmpDeviceTypeService extends CrudService<DmpDeviceType> {
 
     CommonPage<DmpDeviceType> getDeviceTypeList(String typeCode, String typeName, Integer pageNum, Integer pageSize);
 
+    List<DmpDeviceType> tenantIdDeviceTypeList();
+
     List<Map<String, Object>> getDeviceTypeImges(List<Integer> deviceTypes);
 
 }

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

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

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

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

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

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

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

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

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

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

+ 280 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -0,0 +1,280 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.*;
+import com.usky.iot.mapper.BaseAlarmMapper;
+import com.usky.iot.service.*;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.config.websocket.WebSocket;
+import com.usky.iot.service.vo.BaseAlarmListVO;
+import com.usky.iot.service.vo.BaseAlarmRequestVO;
+import com.usky.iot.service.vo.BaseAlarmResponeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 统一告警表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-13
+ */
+@Service
+public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, BaseAlarm> implements BaseAlarmService {
+
+    @Autowired
+    private DmpProductInfoService dmpProductInfoService;
+
+    @Autowired
+    private DmpDeviceInfoService dmpDeviceInfoService;
+
+    @Autowired
+    private BaseFacilityDeviceService baseFacilityDeviceService;
+
+    @Autowired
+    private WebSocket webSocket;
+
+    @Override
+    public CommonPage<BaseAlarmResponeVO> statistic(BaseAlarmRequestVO baseAlarmRequestVO){
+
+        List<BaseAlarmResponeVO> list = new ArrayList<>();
+
+        LambdaQueryWrapper<DmpProductInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(DmpProductInfo::getDeleteFlag,0)
+                .like(StringUtils.isNotBlank(baseAlarmRequestVO.getProductName()),DmpProductInfo::getProductName,baseAlarmRequestVO.getProductName())
+                .eq(DmpProductInfo::getTenantId,SecurityUtils.getTenantId());
+        List<DmpProductInfo> list1 = dmpProductInfoService.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list1)){
+            for(int i=0;i<list1.size();i++){
+                BaseAlarmResponeVO responeVO = new BaseAlarmResponeVO();
+                responeVO.setProductCode(list1.get(i).getProductCode());
+                responeVO.setProductName(list1.get(i).getProductName());
+                responeVO.setDeviceType(list1.get(i).getDeviceType());
+
+                //未处理
+                int untreated = 0;
+                untreated = this.count(Wrappers.<BaseAlarm>query().lambda().eq(BaseAlarm::getHandleStatus,0).eq(BaseAlarm::getProductCode,list1.get(i).getProductCode()).eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId()));
+                //已处理
+                int processed = 0;
+                processed = this.count(Wrappers.<BaseAlarm>query().lambda().eq(BaseAlarm::getHandleStatus,1).eq(BaseAlarm::getProductCode,list1.get(i).getProductCode()).eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId()));
+                //总数
+                int count = untreated+processed;
+                //处置率
+                float processRate = 0;
+                if(count != 0){
+                    processRate = ((float) processed/count)*100;
+                }
+
+                responeVO.setTotal(count);
+                responeVO.setUntreated(untreated);
+                responeVO.setProcessed(processed);
+                responeVO.setProcessRate(processRate);
+
+                //设备总数
+                int deviceCount = 0;
+                List<Integer> serviceStatusList = new ArrayList<>();
+                serviceStatusList.add(1);
+                serviceStatusList.add(2);
+                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.in(DmpDeviceInfo::getServiceStatus,serviceStatusList)
+                        .eq(DmpDeviceInfo::getProductCode,list1.get(i).getProductCode())
+                        .eq(DmpDeviceInfo::getDeleteFlag,0)
+                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId());
+                deviceCount = dmpDeviceInfoService.count(queryWrapper1);
+                responeVO.setDeviceCount(deviceCount);
+                //离线告警统计
+                //离线告警未处理
+                int offLineUntreated = 0;
+                offLineUntreated = this.count(Wrappers.<BaseAlarm>query().lambda().eq(BaseAlarm::getHandleStatus,0).eq(BaseAlarm::getAlarmType,"lx-20230700000000000").eq(BaseAlarm::getProductCode,list1.get(i).getProductCode()).eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId()));
+                //离线告警已处理
+                int offLineProcessed = 0;
+                offLineProcessed = this.count(Wrappers.<BaseAlarm>query().lambda().eq(BaseAlarm::getHandleStatus,1).eq(BaseAlarm::getAlarmType,"lx-20230700000000000").eq(BaseAlarm::getProductCode,list1.get(i).getProductCode()).eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId()));
+                //离线告警总数
+                int offLineCount = offLineUntreated+offLineProcessed;
+                //离线告警处置率
+                float offLineProcessRate = 0;
+                if(offLineCount != 0){
+                    offLineProcessRate = ((float) offLineProcessed/offLineCount)*100;
+                }
+                responeVO.setOffLineUntreated(offLineUntreated);
+                responeVO.setOffLineProcessed(offLineProcessed);
+                responeVO.setOffLineProcessRate(offLineProcessRate);
+
+                list.add(responeVO);
+            }
+        }
+
+        int total = 0;
+        if(list1.size()>0){
+            total = list1.size();
+        }
+        int current = 0;
+        Integer pageNum = baseAlarmRequestVO.getCurrent();
+        Integer pageSize = baseAlarmRequestVO.getSize();
+        if(pageNum != null && pageSize >0){
+            current = (pageNum-1)*pageSize;
+        }
+        List<BaseAlarmResponeVO> records = list.stream().skip(current).limit(pageSize).collect(Collectors.toList());
+
+        return new CommonPage<BaseAlarmResponeVO>(records,total,pageSize,pageNum);
+    }
+
+    public CommonPage<BaseAlarm> page(BaseAlarmListVO baseAlarmListVO){
+        List<BaseAlarm> list = new ArrayList<>();
+
+        LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper
+                .eq(StringUtils.isNotBlank(baseAlarmListVO.getProductCode()),BaseAlarm::getProductCode,baseAlarmListVO.getProductCode())
+                .eq(StringUtils.isNotBlank(baseAlarmListVO.getAlarmType()),BaseAlarm::getAlarmType,baseAlarmListVO.getAlarmType())
+                .eq(null != baseAlarmListVO.getHandleStatus(),BaseAlarm::getHandleStatus,baseAlarmListVO.getHandleStatus())
+                .between(StringUtils.isNotBlank(baseAlarmListVO.getStartTime()) && StringUtils.isNotBlank(baseAlarmListVO.getEndTime()),BaseAlarm::getAlarmTime,baseAlarmListVO.getStartTime(),baseAlarmListVO.getEndTime())
+                .eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseAlarm::getId);
+        List<BaseAlarm> records = this.list(queryWrapper);
+        if(records.size()>0){
+            for(int i=0;i<records.size();i++){
+                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.eq(DmpDeviceInfo::getDeviceId,records.get(i).getDeviceId())
+                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId())
+                        .eq(DmpDeviceInfo::getDeleteFlag,0);
+                DmpDeviceInfo deviceInfo = dmpDeviceInfoService.getOne(queryWrapper1);
+                if(deviceInfo != null){
+                    records.get(i).setDeviceName(deviceInfo.getDeviceName());
+                }
+
+                BaseAlarmType baseAlarmType = baseMapper.getAlarmTypeOne(records.get(i).getAlarmType());
+                if(baseAlarmType != null){
+                    records.get(i).setTypeImg(baseAlarmType.getTypeImg());
+                }
+
+            }
+        }
+
+        if(StringUtils.isNotBlank(baseAlarmListVO.getDeviceName())){
+            list = records.stream().filter(e -> baseAlarmListVO.getDeviceName().equals(e.getDeviceName())).collect(Collectors.toList());
+        }else {
+            if(records.size()>0){
+                for(int k=0;k<records.size();k++){
+                    list.add(records.get(k));
+                }
+            }
+
+        }
+        int total = 0;
+        if(list.size()>0){
+            total = list.size();
+        }
+        int current = 0;
+        Integer pageNum = baseAlarmListVO.getCurrent();
+        Integer pageSize = baseAlarmListVO.getSize();
+        if(pageNum != null && pageSize >0){
+            current = (pageNum-1)*pageSize;
+        }
+        List<BaseAlarm> info = list.stream().sorted(Comparator.comparing(BaseAlarm::getId,Comparator.reverseOrder())).skip(current).limit(pageSize).collect(Collectors.toList());
+
+        return new CommonPage<BaseAlarm>(info,total,pageSize,pageNum);
+
+    }
+
+    public void update(BaseAlarm baseAlarm){
+        int handleRange = baseAlarm.getHandleRange();
+        if(handleRange == 0){  //批量
+            LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(BaseAlarm::getDeviceId,baseAlarm.getDeviceId())
+                    .eq(BaseAlarm::getAlarmType,baseAlarm.getAlarmType())
+                    .eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId())
+                    .eq(BaseAlarm::getHandleStatus,0);
+            List<BaseAlarm> list = this.list(queryWrapper);
+            if(list.size() > 0){
+                for(int i=0;i<list.size();i++){
+                    list.get(i).setHandleContent(baseAlarm.getHandleContent());
+                    list.get(i).setAlarmFalse(baseAlarm.getAlarmFalse());
+                    list.get(i).setHandleStatus(1);
+                    list.get(i).setHandleBy(SecurityUtils.getUsername());
+                    list.get(i).setHandleTime(LocalDateTime.now());
+                    list.get(i).setHandlePhone(SecurityUtils.getLoginUser().getSysUser().getPhonenumber());
+                }
+            }
+            this.updateBatchById(list);
+
+        }else {  // 单一
+            baseAlarm.setHandleStatus(1);
+            baseAlarm.setHandleBy(SecurityUtils.getUsername());
+            baseAlarm.setHandleTime(LocalDateTime.now());
+            baseAlarm.setHandlePhone(SecurityUtils.getLoginUser().getSysUser().getPhonenumber());
+            this.updateById(baseAlarm);
+        }
+    }
+    @Override
+    public boolean add(BaseAlarm baseAlarm) {
+        baseAlarm.setHandleStatus(0);
+        if (StringUtils.isNotBlank(baseAlarm.getProductCode()) && StringUtils.isNotBlank(baseAlarm.getDeviceId()) && StringUtils.isNotBlank(baseAlarm.getAlarmType())){
+            LambdaQueryWrapper<DmpProductInfo> lambdaQuery = Wrappers.lambdaQuery();
+            lambdaQuery.eq(DmpProductInfo::getProductCode,baseAlarm.getProductCode())
+                    .eq(DmpProductInfo::getDeleteFlag,0);
+            List<DmpProductInfo> records = dmpProductInfoService.list(lambdaQuery);
+            LambdaQueryWrapper<BaseFacilityDevice> lambdaQuery1 = Wrappers.lambdaQuery();
+            lambdaQuery1.eq(BaseFacilityDevice::getDeviceId,baseAlarm.getDeviceId());
+            List<BaseFacilityDevice> records1 = baseFacilityDeviceService.list(lambdaQuery1);
+            LambdaQueryWrapper<DmpDeviceInfo> lambdaQuery2 = Wrappers.lambdaQuery();
+            lambdaQuery2.eq(DmpDeviceInfo::getDeviceId,baseAlarm.getDeviceId())
+                    .eq(DmpDeviceInfo::getProductCode,baseAlarm.getProductCode())
+                    .eq(DmpDeviceInfo::getDeleteFlag,0);
+            List<DmpDeviceInfo> records2 = dmpDeviceInfoService.list(lambdaQuery2);
+            BaseAlarmType baseAlarmType = baseMapper.getAlarmTypeOne(baseAlarm.getAlarmType());
+            if(records.size()>0 && baseAlarmType !=null && records2.size()>0){
+                baseAlarm.setTenantId(records.get(0).getTenantId());
+                if (StringUtils.isNotBlank(baseAlarm.getHandleBy()) || StringUtils.isNotBlank(baseAlarm.getHandlePhone())) {
+                    baseAlarm.setHandleStatus(1);
+                    LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
+                    queryWrapper.eq(BaseAlarm::getDeviceId, baseAlarm.getDeviceId())
+                            .eq(BaseAlarm::getAlarmType, baseAlarm.getAlarmType())
+                            .eq(BaseAlarm::getAlarmAddress, baseAlarm.getAlarmAddress())
+                            .eq(BaseAlarm::getAlarmGrade, baseAlarm.getAlarmGrade());
+                    return this.update(baseAlarm, queryWrapper);
+                } else {
+                    boolean saveResult = this.save(baseAlarm);
+                    if (records1.size() > 0) {
+                        baseAlarm.setFacilityId(records1.get(0).getFacilityId());
+                    }
+                    baseAlarm.setDeviceName(records2.get(0).getDeviceName());
+                    baseAlarm.setTypeImg(baseAlarmType.getTypeImg());
+                    baseAlarm.setAlarmType(baseAlarmType.getTypeName());
+                    baseAlarm.setAlarmTime1(baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                            "HH:mm:ss")));
+                    webSocket.sendMessage(baseAlarm, records.get(0).getTenantId().toString());
+                    return saveResult;
+                }
+            }else {
+                throw new BusinessException("告警数据投递失败,请检查产品编码、设备编号、告警类型,是否有误");
+            }
+        }else {
+            throw new BusinessException("告警数据投递失败,请检查产品编码、设备编号、告警类型,不能为空");
+        }
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 124 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmTypeServiceImpl.java

@@ -0,0 +1,124 @@
+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.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.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.BaseAlarmType;
+import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.mapper.BaseAlarmTypeMapper;
+import com.usky.iot.service.BaseAlarmService;
+import com.usky.iot.service.BaseAlarmTypeService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseAlarmTypeRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * <p>
+ * 告警类型表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-12
+ */
+@Service
+public class BaseAlarmTypeServiceImpl extends AbstractCrudService<BaseAlarmTypeMapper, BaseAlarmType> implements BaseAlarmTypeService {
+    @Autowired
+    private BaseAlarmService baseAlarmService;
+
+    @Override
+    public void add(BaseAlarmType baseAlarmType){
+        if(checkNameUnique(baseAlarmType)){
+            throw new BusinessException("新增告警类型名称失败,"+baseAlarmType.getTypeName()+" 已经存在");
+        }
+        //Calendar car = Calendar.getInstance();
+        //Date date = car.getTime();
+        //baseAlarmType.setTypeCode(baseAlarmType.getTypeAbbrevia()+"-"+new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date));
+        baseAlarmType.setCreateBy(SecurityUtils.getUsername());
+        baseAlarmType.setCreateTime(LocalDateTime.now());
+        baseAlarmType.setTenantId(SecurityUtils.getTenantId());
+        this.save(baseAlarmType);
+    }
+
+    @Override
+    public void update(BaseAlarmType baseAlarmType){
+        if(checkNameUnique(baseAlarmType)){
+            throw new BusinessException("修改告警类型名称失败,"+baseAlarmType.getTypeName()+" 已经存在");
+        }
+        baseAlarmType.setUpdateBy(SecurityUtils.getUsername());
+        baseAlarmType.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseAlarmType);
+    }
+
+    @Override
+    public void remove(Integer id){
+
+        BaseAlarmType baseAlarmType = this.getById(id);
+        Optional.ofNullable(baseAlarmType).orElseThrow(() -> new BusinessException("告警类型不存在"));
+
+        LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseAlarm::getAlarmType,baseAlarmType.getTypeCode());
+        int count = baseAlarmService.count(queryWrapper);
+        if(count > 0){
+            throw new BusinessException("有告警信息使用该告警类型,不能删除");
+        }
+
+        baseAlarmType.setDeleteFlag(1);
+        this.updateById(baseAlarmType);
+    }
+
+    @Override
+    public CommonPage<BaseAlarmType> page(BaseAlarmTypeRequestVO requestVO){
+        IPage<BaseAlarmType> page = new Page<>(requestVO.getCurrent(),requestVO.getSize());
+        LambdaQueryWrapper<BaseAlarmType> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(requestVO.getTypeCode()),BaseAlarmType::getTypeCode,requestVO.getTypeCode())
+                .like(StringUtils.isNotBlank(requestVO.getTypeName()),BaseAlarmType::getTypeName,requestVO.getTypeName())
+                .eq(BaseAlarmType::getDeleteFlag,0)
+                .orderByDesc(BaseAlarmType::getId);
+        page  = this.page(page,queryWrapper);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getSize(),page.getCurrent());
+
+    }
+
+    @Override
+    public List<BaseAlarmType> tenantIdAlarmTypeList(){
+        List<BaseAlarmType> list = new ArrayList<>();
+        List<String> typeList = new ArrayList<>();
+        List<BaseAlarm> list1 = baseMapper.getAlarmInfo(SecurityUtils.getTenantId());
+        if(list1.size() > 0){
+            for(int i=0;i<list1.size();i++){
+                typeList.add(list1.get(i).getAlarmType());
+            }
+        }
+        if(typeList.size()>0){
+            LambdaQueryWrapper<BaseAlarmType> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.in(CollectionUtils.isNotEmpty(typeList),BaseAlarmType::getTypeCode,typeList)
+                    .eq(BaseAlarmType::getDeleteFlag,0);
+            list = this.list(queryWrapper);
+        }
+
+        return list;
+    }
+
+    @Override
+    public boolean checkNameUnique(BaseAlarmType baseAlarmType) { //根据告警类型判断唯一
+        Integer id = null == baseAlarmType.getId() ? -1 : baseAlarmType.getId();
+        LambdaQueryWrapper<BaseAlarmType> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseAlarmType::getTypeName,baseAlarmType.getTypeName())
+                .eq(BaseAlarmType::getDeleteFlag,0);
+        BaseAlarmType one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(), id);
+    }
+
+}

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

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.BaseBuildFacilityRelate;
+import com.usky.iot.mapper.BaseBuildFacilityRelateMapper;
+import com.usky.iot.service.BaseBuildFacilityRelateService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-27
+ */
+@Service
+public class BaseBuildFacilityRelateServiceImpl extends AbstractCrudService<BaseBuildFacilityRelateMapper, BaseBuildFacilityRelate> implements BaseBuildFacilityRelateService {
+
+}

+ 233 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildFacilityServiceImpl.java

@@ -0,0 +1,233 @@
+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.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.security.utils.SecurityUtils;
+import com.usky.iot.domain.*;
+import com.usky.iot.mapper.BaseBuildFacilityMapper;
+import com.usky.iot.service.*;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseBuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityRequestVO;
+import com.usky.iot.service.vo.BuildFacilityResponeVO;
+import com.usky.iot.service.vo.FacilityDeviceStatusVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 建筑设施 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@Service
+public class BaseBuildFacilityServiceImpl extends AbstractCrudService<BaseBuildFacilityMapper, BaseBuildFacility> implements BaseBuildFacilityService {
+    @Autowired
+    private BaseBuildFacilityRelateService baseBuildFacilityRelateService;
+//
+//    @Autowired
+//    private BaseBuildService baseBuildService;
+
+    @Autowired
+    private DmpDeviceInfoService dmpDeviceInfoService;
+
+    @Autowired
+    private DmpDeviceTypeService dmpDeviceTypeService;
+
+    @Override
+    public void add(BaseBuildFacility baseBuildFacility){
+        baseBuildFacility.setFacilityNum("jzss-"+new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()));
+        baseBuildFacility.setTenantId(SecurityUtils.getTenantId());
+        baseBuildFacility.setCreateBy(SecurityUtils.getUsername());
+        baseBuildFacility.setCreateTime(LocalDateTime.now());
+        this.save(baseBuildFacility);
+
+        Integer id = baseBuildFacility.getId();
+        BaseBuildFacilityRelate relate = new BaseBuildFacilityRelate();
+        relate.setBuildId(baseBuildFacility.getBuildId());
+        relate.setFacilityId(id);
+        relate.setCreateBy(SecurityUtils.getUsername());
+        relate.setCreateTime(LocalDateTime.now());
+        baseBuildFacilityRelateService.save(relate);
+    }
+
+    @Override
+    public void update(BaseBuildFacility baseBuildFacility){
+        baseBuildFacility.setUpdateBy(SecurityUtils.getUsername());
+        baseBuildFacility.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseBuildFacility);
+    }
+
+    @Override
+    public void remove(Integer id){
+        BaseBuildFacility one = this.getById(id);
+        Optional.ofNullable(one).orElseThrow(() -> new BusinessException("无记录"));
+
+        LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacilityRelate::getFacilityId,id);
+        BaseBuildFacilityRelate one1 = baseBuildFacilityRelateService.getOne(queryWrapper);
+        if(one1 != null){
+            baseBuildFacilityRelateService.removeById(one1.getId());
+        }
+
+        one.setDeleteFlag(1);
+        this.updateById(one);
+    }
+
+    @Override
+    public CommonPage<BaseBuildFacility> page(BaseBuildFacilityRequestVO requestVO){
+        List<BaseBuildFacility> list = new ArrayList<>();
+        LambdaQueryWrapper<BaseBuildFacility> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(requestVO.getId() != null,BaseBuildFacility::getId,requestVO.getId())
+                .like(StringUtils.isNotBlank(requestVO.getFacilityNum()),BaseBuildFacility::getFacilityNum,requestVO.getFacilityNum())
+                .like(StringUtils.isNotBlank(requestVO.getFacilityName()),BaseBuildFacility::getFacilityName,requestVO.getFacilityName())
+                .eq(StringUtils.isNotBlank(requestVO.getFacilityType()),BaseBuildFacility::getFacilityType,requestVO.getFacilityType())
+                .eq(BaseBuildFacility::getDeleteFlag,0)
+                .eq(BaseBuildFacility::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseBuildFacility::getId);
+        List<BaseBuildFacility> list1 = this.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list1)){
+            for(int i=0;i<list1.size();i++){
+                LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.eq(BaseBuildFacilityRelate::getFacilityId,list1.get(i).getId());
+                BaseBuildFacilityRelate one = baseBuildFacilityRelateService.getOne(queryWrapper1);
+                if(one != null){
+                    BaseBuild one1 = baseMapper.getBuildName(one.getBuildId());
+                    if(one1 != null){
+                        list1.get(i).setBuildId(one1.getId());
+                        list1.get(i).setBuildName(one1.getBuildName());
+                    }
+
+                }
+                BaseBuildFacilityType typeOne = baseMapper.baseBuildFacilityTypeList(list1.get(i).getFacilityType());
+                list1.get(i).setTypeName(typeOne.getTypeName());
+            }
+        }
+
+
+        if(StringUtils.isNotBlank(requestVO.getBuildName())){
+            list1 = list1.stream().filter(m-> m.getBuildName().contains(requestVO.getBuildName())).collect(Collectors.toList());
+        }
+
+        if(requestVO.getBuildId() != null){
+            list1 = list1.stream().filter(m-> m.getBuildId().equals(requestVO.getBuildId())).collect(Collectors.toList());
+        }
+
+        if(list1.size() > 0){
+            for(int j=0;j<list1.size();j++){
+                list.add(list1.get(j));
+            }
+        }
+
+        Integer total = 0;
+        if(list.size() > 0){
+            total = list.size();
+        }
+
+        Integer pageCurrent = requestVO.getCurrent();
+        Integer pageSize = requestVO.getSize();
+        Integer current = 0;
+        if(pageCurrent!=null && pageSize>0){
+            current = (pageCurrent-1)*pageSize;
+        }
+        List<BaseBuildFacility> records = list.stream().skip(current).limit(pageSize).collect(Collectors.toList());
+
+        return new CommonPage<>(records,total,pageSize,pageCurrent);
+    }
+
+    @Override
+    public CommonPage<BuildFacilityResponeVO> deviceList(BuildFacilityRequestVO requestVO){
+        List<BuildFacilityResponeVO> list = new ArrayList<>();
+
+        LambdaQueryWrapper<BaseBuildFacility> query = Wrappers.lambdaQuery();
+        query.eq(BaseBuildFacility::getId,requestVO.getBaseBuildFacilityId())
+                .eq(BaseBuildFacility::getTenantId,SecurityUtils.getTenantId())
+                .eq(BaseBuildFacility::getDeleteFlag,0);
+        BaseBuildFacility buildFacilityOne = this.getOne(query);
+        String relateDeviceId = buildFacilityOne.getDeviceId();
+
+        IPage<DmpDeviceInfo> page = new Page<>(requestVO.getCurrent(),requestVO.getSize());
+        LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(requestVO.getDeviceId()),DmpDeviceInfo::getDeviceId,requestVO.getDeviceId())
+                .eq(requestVO.getDeviceType() != null,DmpDeviceInfo::getDeviceType,requestVO.getDeviceType())
+                .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId())
+                .eq(DmpDeviceInfo::getDeleteFlag,0);
+        page = dmpDeviceInfoService.page(page,queryWrapper);
+        if(CollectionUtils.isNotEmpty(page.getRecords())){
+            for(int i=0;i<page.getRecords().size();i++){
+                BuildFacilityResponeVO responeVO = new BuildFacilityResponeVO();
+                responeVO.setBaseBuildFacilityId(requestVO.getBaseBuildFacilityId());
+
+                responeVO.setDeviceId(page.getRecords().get(i).getDeviceId());
+                responeVO.setDeviceName(page.getRecords().get(i).getDeviceName());
+
+                LambdaQueryWrapper<DmpDeviceType> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.eq(DmpDeviceType::getTypeCode,page.getRecords().get(i).getDeviceType().toString());
+                DmpDeviceType one = dmpDeviceTypeService.getOne(queryWrapper1);
+                if(one != null){
+                    responeVO.setDeviceTypeName(one.getTypeName());
+                }
+
+                responeVO.setInstallAddress(page.getRecords().get(i).getInstallAddress());
+
+                if(page.getRecords().get(i).getDeviceId().equals(relateDeviceId)){
+                    responeVO.setStatus(1);
+                }else{
+                    responeVO.setStatus(0);
+                }
+                list.add(responeVO);
+            }
+        }
+        return new CommonPage<>(list,page.getTotal(),page.getSize(),page.getCurrent());
+    }
+
+    @Override
+    public void setStatus(FacilityDeviceStatusVO statusVO){
+        BaseBuildFacility baseBuildFacility = new BaseBuildFacility();
+
+        LambdaQueryWrapper<BaseBuildFacility> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacility::getDeleteFlag,0)
+                .eq(BaseBuildFacility::getTenantId,SecurityUtils.getTenantId())
+                .eq(BaseBuildFacility::getId,statusVO.getBaseBuildFacilityId());
+        BaseBuildFacility one = this.getOne(queryWrapper);
+        if(statusVO.getStatus() == 1){
+            if(one.getDeviceId() != null && (""+one.getDeviceId()).length() > 1){
+                throw new BusinessException("绑定失败,该建筑设施已绑定设备");
+            }
+            baseBuildFacility.setId(one.getId());
+            baseBuildFacility.setDeviceId(statusVO.getDeviceId());
+        }else{
+            if(one == null){
+                throw new BusinessException("无记录");
+            }
+            baseBuildFacility.setId(one.getId());
+            baseBuildFacility.setDeviceId("0");
+        }
+        baseBuildFacility.setUpdateBy(SecurityUtils.getUsername());
+        baseBuildFacility.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseBuildFacility);
+
+    }
+
+}
+
+
+
+
+

+ 98 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildFacilityTypeServiceImpl.java

@@ -0,0 +1,98 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseBuildFacility;
+import com.usky.iot.domain.BaseBuildFacilityType;
+import com.usky.iot.mapper.BaseBuildFacilityTypeMapper;
+import com.usky.iot.service.BaseBuildFacilityService;
+import com.usky.iot.service.BaseBuildFacilityTypeService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseBuildFacilityTypeRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.swing.text.html.Option;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * <p>
+ * 建筑设施类型 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-07-26
+ */
+@Service
+public class BaseBuildFacilityTypeServiceImpl extends AbstractCrudService<BaseBuildFacilityTypeMapper, BaseBuildFacilityType> implements BaseBuildFacilityTypeService {
+    @Autowired
+    private BaseBuildFacilityService baseBuildFacilityService;
+
+    @Override
+    public void add(BaseBuildFacilityType baseBuildFacilityType){
+        if(checkNameUnique(baseBuildFacilityType)){
+            throw new BusinessException("新增建筑设施类型'"+baseBuildFacilityType.getTypeName()+"'失败,该建筑设施类型已存在");
+        }
+        baseBuildFacilityType.setCreateBy(SecurityUtils.getUsername());
+        baseBuildFacilityType.setCreateTime(LocalDateTime.now());
+        baseBuildFacilityType.setTenantId(SecurityUtils.getTenantId());
+        this.save(baseBuildFacilityType);
+
+    }
+
+    @Override
+    public void update(BaseBuildFacilityType baseBuildFacilityType){
+        if(checkNameUnique(baseBuildFacilityType)){
+            throw new BusinessException("修改建筑设施类型'"+baseBuildFacilityType.getTypeName()+"'失败,该建筑设施类型已存在");
+        }
+        baseBuildFacilityType.setUpdateBy(SecurityUtils.getUsername());
+        baseBuildFacilityType.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseBuildFacilityType);
+    }
+
+    @Override
+    public void remove(Integer id){
+        BaseBuildFacilityType info = this.getById(id);
+        Optional.ofNullable(info).orElseThrow(() -> new BusinessException("该建筑设备类型不存在"));
+
+        LambdaQueryWrapper<BaseBuildFacility> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacility::getFacilityType,info.getTypeCode())
+                .eq(BaseBuildFacility::getDeleteFlag,0);
+        int count = baseBuildFacilityService.count(queryWrapper);
+        if(count > 0){
+            throw new BusinessException("有建筑设施使用该建筑设施类型,不能删除");
+        }
+
+        this.removeById(id);
+    }
+
+    @Override
+    public CommonPage<BaseBuildFacilityType> page(BaseBuildFacilityTypeRequestVO requestVO){
+        IPage<BaseBuildFacilityType> page = new Page<>(requestVO.getCurrent(),requestVO.getSize());
+        LambdaQueryWrapper<BaseBuildFacilityType> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(requestVO.getTypeCode()),BaseBuildFacilityType::getTypeCode,requestVO.getTypeCode())
+                .like(StringUtils.isNotBlank(requestVO.getTypeName()),BaseBuildFacilityType::getTypeName,requestVO.getTypeName())
+                .orderByDesc(BaseBuildFacilityType::getId);
+        page = this.page(page,queryWrapper);
+
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getSize(),page.getCurrent());
+    }
+
+    @Override
+    public boolean checkNameUnique(BaseBuildFacilityType baseBuildFacilityType){
+        Integer id = null == baseBuildFacilityType.getId()?-1:baseBuildFacilityType.getId();
+        LambdaQueryWrapper<BaseBuildFacilityType> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacilityType::getTypeName,baseBuildFacilityType.getTypeName());
+        BaseBuildFacilityType one = this.getOne(queryWrapper);
+        return null != one && !Objects.equals(one.getId(),id);
+    }
+
+}

+ 294 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseBuildServiceImpl.java

@@ -1,10 +1,32 @@
 package com.usky.iot.service.impl;
 
-import com.usky.iot.domain.BaseBuild;
+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.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.*;
 import com.usky.iot.mapper.BaseBuildMapper;
-import com.usky.iot.service.BaseBuildService;
+import com.usky.iot.service.*;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseBuildFacilityVO;
+import com.usky.iot.service.vo.BuildFacilityRelateRequestVO;
+import com.usky.iot.service.vo.BuildFacilityRelateResponeVO;
+import com.usky.iot.service.vo.BuildFacilityStatusVO;
+import org.apache.tomcat.jni.Local;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import sun.security.util.Length;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * <p>
@@ -17,4 +39,274 @@ import org.springframework.stereotype.Service;
 @Service
 public class BaseBuildServiceImpl extends AbstractCrudService<BaseBuildMapper, BaseBuild> implements BaseBuildService {
 
+    @Autowired
+    private BaseBuildFacilityRelateService baseBuildFacilityRelateService;
+
+    @Autowired
+    private BaseGgpFacilityService baseGgpFacilityService;
+
+    @Autowired
+    private BaseFacilityTypeService baseFacilityTypeService;
+
+    @Autowired
+    private BaseBuildFacilityService baseBuildFacilityService;
+
+    @Autowired
+    private BaseBuildFacilityTypeService baseBuildFacilityTypeService;
+
+    @Override
+    public void add(BaseBuild baseBuild){
+//        if(checkNameUnique(baseBuild)){
+//            throw new BusinessException("新增建筑名称"+baseBuild.getBuildName()+"失败,该建筑名称已存在");
+//        }
+        baseBuild.setBuildNum("jz-"+new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()));
+        baseBuild.setCreateBy(SecurityUtils.getUsername());
+        baseBuild.setCreateTime(LocalDateTime.now());
+        baseBuild.setTenantId(SecurityUtils.getTenantId());
+        this.save(baseBuild);
+
+    }
+
+    @Override
+    public void update(BaseBuild baseBuild){
+//        if(checkNameUnique(baseBuild)){
+//            throw new BusinessException("修改建筑名称"+baseBuild.getBuildName()+"失败,该建筑名称已存在");
+//
+//        }
+
+        baseBuild.setUpdateBy(SecurityUtils.getUsername());
+        baseBuild.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseBuild);
+    }
+
+    @Override
+    public void remove(Integer id){
+        BaseBuild baseBuild = this.getById(id);
+        Optional.ofNullable(baseBuild).orElseThrow(() -> new BusinessException("该建筑不存在"));
+
+        LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacilityRelate::getBuildId,baseBuild.getBuildNum());
+        Integer count = baseBuildFacilityRelateService.count(queryWrapper);
+        if(count > 0){
+            throw new BusinessException("该建筑下面有关联建筑设施,不能删除");
+        }
+        this.removeById(id);
+
+    }
+
+    @Override
+    public List<BaseBuild> dataList(Integer id){
+        LambdaQueryWrapper<BaseBuild> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuild::getDeleteFlag,0)
+                .eq(!ObjectUtils.isEmpty(id),BaseBuild::getId,id)
+                .eq(BaseBuild::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseBuild::getId);;
+        List<BaseBuild> list = this.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list)){
+            for(int i=0;i<list.size();i++){
+                LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.eq(BaseBuildFacilityRelate::getBuildId,list.get(i).getId());
+                Integer count = baseBuildFacilityRelateService.count(queryWrapper1);
+                list.get(i).setBuildFacilityCount(count);
+            }
+        }
+
+        return list;
+    }
+
+    @Override
+    public CommonPage<BuildFacilityRelateResponeVO> buildFacilityRelateList(BuildFacilityRelateRequestVO requestVO){
+        List<BuildFacilityRelateResponeVO> list = new ArrayList<>();
+
+        LambdaQueryWrapper<BaseBuild> queryBuild = Wrappers.lambdaQuery();
+        queryBuild.eq(BaseBuild::getId,requestVO.getBuildId())
+                .eq(BaseBuild::getDeleteFlag,0)
+                .eq(BaseBuild::getTenantId,SecurityUtils.getTenantId())
+                .orderByDesc(BaseBuild::getId);
+        BaseBuild buildOne = this.getOne(queryBuild);
+        Integer buildFacilityId = buildOne.getFacilityId();
+
+        IPage<BaseGgpFacility> page = new Page<>(requestVO.getCurrent(),requestVO.getSize());
+        LambdaQueryWrapper<BaseGgpFacility> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(requestVO.getFacilityNum()),BaseGgpFacility::getFacilityNum,requestVO.getFacilityNum())
+                .eq(StringUtils.isNotBlank(requestVO.getFacilityType()),BaseGgpFacility::getFacilityType,requestVO.getFacilityType())
+                .eq(BaseGgpFacility::getTenantId,SecurityUtils.getTenantId());
+        page = baseGgpFacilityService.page(page,queryWrapper);
+        if(CollectionUtils.isNotEmpty(page.getRecords())){
+            for(int i=0;i<page.getRecords().size();i++){
+                BuildFacilityRelateResponeVO responeVO = new BuildFacilityRelateResponeVO();
+                responeVO.setBuildId(requestVO.getBuildId());
+                responeVO.setFacilityId(page.getRecords().get(i).getId());
+                responeVO.setFacilityNum(page.getRecords().get(i).getFacilityNum());
+                responeVO.setFacilityName(page.getRecords().get(i).getFacilityName());
+
+                LambdaQueryWrapper<BaseFacilityType> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.eq(BaseFacilityType::getTypeCode,page.getRecords().get(i).getFacilityType());
+                BaseFacilityType one = baseFacilityTypeService.getOne(queryWrapper1);
+                if(one != null){
+                    responeVO.setFacilityType(one.getTypeName());
+                }
+
+                responeVO.setAddress(page.getRecords().get(i).getAddress());
+
+                if(page.getRecords().get(i).getId().equals(buildFacilityId)){
+                    responeVO.setStatus(1);
+                }else{
+                    responeVO.setStatus(0);
+                }
+                list.add(responeVO);
+            }
+        }
+        return new CommonPage<>(list,page.getTotal(),page.getSize(),page.getCurrent());
+    }
+
+    @Override
+    public void setBuildFacilityStatus(BuildFacilityStatusVO statusVO){
+        BaseBuild baseBuild = new BaseBuild();
+        LambdaQueryWrapper<BaseBuild> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuild::getDeleteFlag,0)
+                .eq(BaseBuild::getId,statusVO.getBuildId())
+                .eq(BaseBuild::getTenantId,SecurityUtils.getTenantId());
+        BaseBuild one = this.getOne(queryWrapper);
+
+        if(statusVO.getStatus() == 1){
+
+            if(one.getFacilityId() != null && (""+one.getFacilityId()).length() > 1){
+                throw new BusinessException("绑定失败,该建筑已绑定设施");
+            }
+
+            baseBuild.setId(statusVO.getBuildId());
+            baseBuild.setFacilityId(statusVO.getFacilityId());
+        }else{
+            if(one == null){
+                throw new BusinessException("该建筑信息不存在");
+            }
+
+            baseBuild.setId(statusVO.getBuildId());
+            baseBuild.setFacilityId(0);
+        }
+        baseBuild.setUpdateBy(SecurityUtils.getUsername());
+        baseBuild.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseBuild);
+
+
+
+    }
+
+    @Override
+    public List<Object> buildFacilityInfo(BaseBuildFacilityVO baseBuildFacilityVO) {
+        List<Object> list = new ArrayList<>();
+        List<Object> list2 = new ArrayList<>();
+        LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacilityRelate::getBuildId,baseBuildFacilityVO.getId());
+        List<BaseBuildFacilityRelate> baseBuildFacilityList = baseBuildFacilityRelateService.list(queryWrapper);
+        BaseBuild baseBuild = this.getById(baseBuildFacilityVO.getId());
+        Map<String, Object> map = new HashMap<>();
+        map.put("aboveFloor", baseBuild.getAboveFloor());
+        map.put("underFloor", baseBuild.getUnderFloor());
+        if (CollectionUtils.isNotEmpty(baseBuildFacilityList)) {
+            List<Integer> facilityIdList = new ArrayList<>();
+            for (int i = 0; i < baseBuildFacilityList.size(); i++) {
+                facilityIdList.add(baseBuildFacilityList.get(i).getFacilityId());
+            }
+            QueryWrapper<BaseBuildFacility> query2 = Wrappers.query();
+            query2.select("floor as floor","count(id) as count","facility_type as facilityType")
+                    .in("id",facilityIdList)
+                    .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
+                            baseBuildFacilityVO.getFacilityType())
+                    .eq("delete_flag",0)
+                    .groupBy("floor","facility_type");
+            List<Map<String, Object>> baseBuildFacilityList1 = baseBuildFacilityService.listMaps(query2);
+            QueryWrapper<BaseBuildFacility> query3 = Wrappers.query();
+            query3.select("floor as floor","count(id) as count")
+                    .in("id",facilityIdList)
+                    .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
+                            baseBuildFacilityVO.getFacilityType())
+                    .eq("delete_flag",0)
+                    .groupBy("floor");
+            List<Map<String, Object>> baseBuildFacilityList2 = baseBuildFacilityService.listMaps(query3);
+            QueryWrapper<BaseBuildFacility> query4 = Wrappers.query();
+            query4.select("facility_type as facilityType","count(id) as count")
+                    .in("id",facilityIdList)
+                    .in(CollectionUtils.isNotEmpty(baseBuildFacilityVO.getFacilityType()),"facility_type",
+                            baseBuildFacilityVO.getFacilityType())
+                    .eq("delete_flag",0)
+                    .groupBy("facility_type");
+            List<Map<String, Object>> baseBuildFacilityList3 = baseBuildFacilityService.listMaps(query4);
+            List<String> facilityTypeList = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(baseBuildFacilityList3)) {
+                for (int l = 0; l < baseBuildFacilityList3.size(); l++) {
+                    facilityTypeList.add(baseBuildFacilityList3.get(l).get("facilityType").toString());
+                }
+            }
+            LambdaQueryWrapper<BaseBuildFacilityType> queryWrapper1 = Wrappers.lambdaQuery();
+            queryWrapper1.in(BaseBuildFacilityType::getTypeCode,facilityTypeList);
+            List<BaseBuildFacilityType> baseBuildFacilityType = baseBuildFacilityTypeService.list(queryWrapper1);
+            if (CollectionUtils.isNotEmpty(baseBuildFacilityList2)) {
+                for (int j = 0; j < baseBuildFacilityList2.size(); j++){
+                    Map<String, Object> map1 = new HashMap<>();
+                    map1.put("floor", baseBuildFacilityList2.get(j).get("floor"));
+                    List<Object> list1 = new ArrayList<>();
+                    if (CollectionUtils.isNotEmpty(baseBuildFacilityList1)) {
+                        for (int k = 0; k < baseBuildFacilityList1.size(); k++){
+                            Map<String, Object> map2 = new HashMap<>();
+                            if (baseBuildFacilityList2.get(j).get("floor").equals(baseBuildFacilityList1.get(k).get(
+                                    "floor"))){
+                                map2.put("facilityType", baseBuildFacilityList1.get(k).get("facilityType"));
+                                map2.put("count", baseBuildFacilityList1.get(k).get("count"));
+                                if (CollectionUtils.isNotEmpty(baseBuildFacilityType)) {
+                                    for (int m = 0; m < baseBuildFacilityType.size(); m++) {
+                                        if (baseBuildFacilityList1.get(k).get("facilityType").equals(baseBuildFacilityType.get(m).getTypeCode())){
+                                            map2.put("typeImg", baseBuildFacilityType.get(m).getTypeImg());
+                                        }
+                                    }
+                                }
+                                list1.add(map2);
+                            }
+                        }
+                    }
+                    map1.put("facilityList", list1);
+                    list.add(map1);
+                }
+            }
+        }
+        map.put("floorList", list);
+        list2.add(map);
+        return list2;
+    }
+
+    @Override
+    public List<BaseBuildFacility> typeFacilityInfo(Integer id, String floor, String typeCode) {
+        LambdaQueryWrapper<BaseBuildFacilityRelate> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseBuildFacilityRelate::getBuildId,id);
+        List<BaseBuildFacilityRelate> baseBuildFacilityList = baseBuildFacilityRelateService.list(queryWrapper);
+        List<Integer> facilityIdList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(baseBuildFacilityList)) {
+            for (int i = 0; i < baseBuildFacilityList.size(); i++) {
+                facilityIdList.add(baseBuildFacilityList.get(i).getFacilityId());
+            }
+        }
+        LambdaQueryWrapper<BaseBuildFacility> queryWrapper1 = Wrappers.lambdaQuery();
+        queryWrapper1.in(BaseBuildFacility::getId,facilityIdList)
+                .eq(BaseBuildFacility::getFacilityType,typeCode)
+                .eq(BaseBuildFacility::getFloor,floor)
+                .eq(BaseBuildFacility::getDeleteFlag,0);
+        List<BaseBuildFacility> list = baseBuildFacilityService.list(queryWrapper1);
+        return list;
+    }
+
+//    @Override
+//    public boolean checkNameUnique(BaseBuild baseBuild){
+//        Integer id = null == baseBuild.getId()?-1:baseBuild.getId();
+//        LambdaQueryWrapper<BaseBuild> queryWrapper = Wrappers.lambdaQuery();
+//        queryWrapper.eq(BaseBuild::getBuildName,baseBuild.getBuildName())
+//                .eq(BaseBuild::getDeleteFlag,0)
+//                .eq(BaseBuild::getTenantId,SecurityUtils.getTenantId());
+//        BaseBuild one = this.getOne(queryWrapper);
+//        return null != one && !Objects.equals(one.getId(),id);
+//    }
 }
+
+
+
+

+ 220 - 7
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseGgpFacilityServiceImpl.java

@@ -1,12 +1,18 @@
 package com.usky.iot.service.impl;
 
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+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.security.utils.SecurityUtils;
 import com.usky.iot.domain.*;
@@ -18,9 +24,15 @@ import com.usky.iot.service.BaseFacilityDeviceService;
 import com.usky.iot.service.BaseGgpFacilityService;
 import com.usky.iot.service.vo.*;
 import com.usky.system.model.LoginUser;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -42,10 +54,14 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
     private BaseFacilityBuildService baseFacilityBuildService;
     @Autowired
     private DmpDeviceInfoService dmpDeviceInfoService;
-    @Autowired
-    private BaseBuildService baseBuildService;
+//    @Autowired
+//    private BaseBuildService baseBuildService;
     @Autowired
     private BaseFacilityTypeMapper baseFacilityTypeMapper;
+    @Autowired
+    private DmpProductInfoService dmpProductInfoService;
+    @Autowired
+    private BaseAlarmService baseAlarmService;
 
     @Override
     public boolean add(BaseGgpFacility baseGgpFacility) {
@@ -147,7 +163,7 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
                 baseGgpFacilityExportVo.setImagesUrl(baseGgpFacilityList.get(i).getImagesUrl());
                 baseGgpFacilityExportVo.setContact(baseGgpFacilityList.get(i).getContact());
                 baseGgpFacilityExportVo.setContactPhone(baseGgpFacilityList.get(i).getContactPhone());
-                baseGgpFacilityExportVo.setStatus(baseGgpFacilityList.get(i).getStatus());
+                baseGgpFacilityExportVo.setStatus(baseGgpFacilityList.get(i).getFacilityStatus());
                 baseGgpFacilityExportVo.setCreateTime(baseGgpFacilityList.get(i).getCreateTime().format(df));
                 list.add(baseGgpFacilityExportVo);
             }
@@ -197,7 +213,8 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
     }
 
     @Override
-    public CommonPage<Object> deviceBindInfo(String deviceId,Integer id,Integer current,Integer size) {
+    public CommonPage<Object> deviceBindInfo(String deviceType,String deviceId,Integer id,Integer current,
+                                             Integer size) {
         List<Object> list = new ArrayList<>();
         IPage<DmpDeviceInfo> page = new Page<>(current, size);
         LambdaQueryWrapper<BaseFacilityDevice> lambdaQuery = Wrappers.lambdaQuery();
@@ -205,8 +222,10 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
         List<BaseFacilityDevice> baseFacilityDeviceList = baseFacilityDeviceService.list(lambdaQuery);
         LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
         queryWrapper1.select(DmpDeviceInfo::getId, DmpDeviceInfo::getDeviceId,
-                DmpDeviceInfo::getDeviceName, DmpDeviceInfo::getInstallAddress)
+                DmpDeviceInfo::getDeviceName, DmpDeviceInfo::getInstallAddress,DmpDeviceInfo::getDeviceType)
                 .eq(StringUtils.isNotBlank(deviceId),DmpDeviceInfo::getDeviceId, deviceId)
+                .eq(StringUtils.isNotBlank(deviceType),DmpDeviceInfo::getDeviceType,deviceType)
+                .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId())
                 .eq(DmpDeviceInfo::getDeleteFlag,0);
         page = dmpDeviceInfoService.page(page,queryWrapper1);
         if (CollectionUtils.isNotEmpty(page.getRecords())) {
@@ -215,6 +234,7 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
                 map.put("id", page.getRecords().get(i).getId());
                 map.put("deviceId", page.getRecords().get(i).getDeviceId());
                 map.put("deviceName", page.getRecords().get(i).getDeviceName());
+                map.put("deviceType", page.getRecords().get(i).getDeviceType());
                 map.put("installAddress", page.getRecords().get(i).getInstallAddress());
                 map.put("bindStatus", 0);
                 map.put("bindId", 0);
@@ -251,14 +271,14 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
                             .in(BaseBuild::getId, buildIdList)
                             .eq(BaseBuild::getBuildNum, buildNum)
                             .eq(BaseBuild::getDeleteFlag,0);
-                    page = baseBuildService.page(page,queryWrapper1);
+//                    page = baseBuildService.page(page,queryWrapper1);
                 }else {
                     LambdaQueryWrapper<BaseBuild> queryWrapper1 = Wrappers.lambdaQuery();
                     queryWrapper1.select(BaseBuild::getId, BaseBuild::getBuildNum,
                             BaseBuild::getBuildName, BaseBuild::getAddress)
                             .in(BaseBuild::getId, buildIdList)
                             .eq(BaseBuild::getDeleteFlag,0);
-                    page = baseBuildService.page(page,queryWrapper1);
+//                    page = baseBuildService.page(page,queryWrapper1);
                 }
             }
         }
@@ -275,4 +295,197 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
         List<BaseGgpFacility> list = this.list(query);
         return list;
     }
+
+    @Override
+    public List<Object> facilityPopInfo(Integer id) {
+        List<Object> list = new ArrayList<>();
+        List<Object> list5 = new ArrayList<>();
+        LambdaQueryWrapper<BaseGgpFacility> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(BaseGgpFacility::getId, id);
+        List<BaseGgpFacility> baseGgpFacilityList = this.list(queryWrapper);
+        LambdaQueryWrapper<BaseFacilityDevice> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(BaseFacilityDevice::getFacilityId,id);
+        List<BaseFacilityDevice> baseFacilityDeviceList = baseFacilityDeviceService.list(lambdaQuery);
+        Map<String, Object> map = new HashMap<>();
+        map.put("id", baseGgpFacilityList.get(0).getId());
+        map.put("facilityName", baseGgpFacilityList.get(0).getFacilityName());
+        map.put("facilityAddress", baseGgpFacilityList.get(0).getFacilityAddress());
+        map.put("contact", baseGgpFacilityList.get(0).getContact());
+        map.put("contactPhone", baseGgpFacilityList.get(0).getContactPhone());
+        LambdaQueryWrapper<DmpProductInfo> queryWrapper2 = Wrappers.lambdaQuery();
+        queryWrapper2.eq(DmpProductInfo::getTenantId,SecurityUtils.getTenantId());
+        List<DmpProductInfo> dmpProductInfoList = dmpProductInfoService.list(queryWrapper2);
+        if (CollectionUtils.isNotEmpty(baseFacilityDeviceList)) {
+            List<String> deviceIdList = new ArrayList<>();
+            for (int i = 0; i < baseFacilityDeviceList.size(); i++) {
+                deviceIdList.add(baseFacilityDeviceList.get(i).getDeviceId());
+            }
+            QueryWrapper<BaseAlarm> query1 = Wrappers.query();
+            query1.select("product_code as productCode","count(id) as count")
+                    .in("device_id",deviceIdList)
+                    .groupBy("product_code");
+            List<Map<String, Object>> baseAlarmList = baseAlarmService.listMaps(query1);
+            QueryWrapper<BaseAlarm> query2 = Wrappers.query();
+            query2.select("product_code as productCode","count(id) as count")
+                    .in("device_id",deviceIdList)
+                    .eq("handle_status",1)
+                    .groupBy("product_code");
+            List<Map<String, Object>> baseAlarmList1 = baseAlarmService.listMaps(query2);
+            List<Map<String, Object>> list1 = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(baseAlarmList)){
+                for (int k = 0; k < baseAlarmList.size(); k++){
+                    if (CollectionUtils.isNotEmpty(baseAlarmList1)){
+                        for (int l = 0; l < baseAlarmList1.size(); l++){
+                            if (baseAlarmList.get(k).get("productCode").equals(baseAlarmList1.get(l).get("productCode"))){
+                                int count1 = Integer.parseInt(String.valueOf(baseAlarmList1.get(l).get("count")));
+                                int count = Integer.parseInt(String.valueOf(baseAlarmList.get(k).get("count")));
+                                double disposalRate = 0;
+                                if (count>0){
+                                    disposalRate = Math.round(count1/count)*100;
+                                }
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("productCode",baseAlarmList.get(k).get("productCode"));
+                                map1.put("disposalRate",disposalRate);
+                                list1.add(map1);
+                            }
+                        }
+                    }
+                }
+            }
+            QueryWrapper<DmpDeviceInfo> query = Wrappers.query();
+            query.select("product_code as productCode","count(id) as count")
+                    .in("device_id",deviceIdList)
+                    .eq("delete_flag",0)
+                    .groupBy("product_code");
+            List<Map<String, Object>> dmpDeviceInfoList = dmpDeviceInfoService.listMaps(query);
+            if (CollectionUtils.isNotEmpty(dmpDeviceInfoList)){
+                if (CollectionUtils.isNotEmpty(dmpProductInfoList)){
+                    for (int m = 0; m < dmpProductInfoList.size(); m++){
+                        Map<String, Object> map2 = new HashMap<>();
+                        map2.put("productName",dmpProductInfoList.get(m).getProductName());
+                        map2.put("deviceCount",0);
+                        map2.put("disposalRate",100);
+                        for (int n = 0; n < dmpDeviceInfoList.size(); n++){
+                            if (dmpProductInfoList.get(m).getProductCode().equals(dmpDeviceInfoList.get(n).get("productCode"))){
+                                map2.put("deviceCount",dmpDeviceInfoList.get(n).get("count"));
+                            }
+                        }
+                        if (CollectionUtils.isNotEmpty(list1)){
+                            for (int o = 0; o < list1.size(); o++){
+                                if (dmpProductInfoList.get(m).getProductCode().equals(list1.get(o).get("productCode"))){
+                                    map2.put("disposalRate",list1.get(o).get("disposalRate"));
+                                }
+                            }
+                        }else {
+                            map2.put("disposalRate",0);
+                        }
+                        list5.add(map2);
+                    }
+                }
+                map.put("productList",list5);
+            }else {
+                if (CollectionUtils.isNotEmpty(dmpProductInfoList)) {
+                    for (int m = 0; m < dmpProductInfoList.size(); m++) {
+                        Map<String, Object> map2 = new HashMap<>();
+                        map2.put("productName", dmpProductInfoList.get(m).getProductName());
+                        map2.put("deviceCount", 0);
+                        map2.put("disposalRate", 100);
+                        list5.add(map2);
+                    }
+                    map.put("productList",list5);
+                }
+            }
+        }else {
+            if (CollectionUtils.isNotEmpty(dmpProductInfoList)) {
+                for (int m = 0; m < dmpProductInfoList.size(); m++) {
+                    Map<String, Object> map2 = new HashMap<>();
+                    map2.put("productName", dmpProductInfoList.get(m).getProductName());
+                    map2.put("deviceCount", 0);
+                    map2.put("disposalRate", 100);
+                    list5.add(map2);
+                }
+                map.put("productList",list5);
+            }
+        }
+        list.add(map);
+        return list;
+    }
+
+//    @Override
+//    public void facilityImport(MultipartFile multipartFile) {
+//        ImportParams params = new ImportParams();
+//        params.setHeadRows(1);
+//        params.setTitleRows(1);
+//        String err="文件导入失败";
+//        try {
+//            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(multipartFile.getInputStream(),
+//                    FacilityImportVo.class, params);
+//            if (CollectionUtils.isNotEmpty(facilityImportVos)){
+//                int rot=0;
+//                for (FacilityImportVo facilityImportVo:facilityImportVos) {
+//                    BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
+//                    if (StringUtils.isBlank(baseGgpFacility.getFacilityType())||StringUtils.isBlank(baseGgpFacility.getFacilityName())||StringUtils.isBlank(baseGgpFacility.getAddress())||StringUtils.isBlank(baseGgpFacility.getLatitude())||StringUtils.isBlank(baseGgpFacility.getLongitude())){
+//                        int h=rot+3;
+//                        err="文件导入失败,第"+h+"行数据导入失败,必填字段不能为空";
+//                        throw  new BusinessException(err);
+//                    }
+//                    try{
+//                        this.add(baseGgpFacility);
+//                    }catch (Exception e){
+//                        int h=rot+3;
+//                        err="文件导入失败,第"+h+"行数据导入失败";
+//                        throw  new BusinessException(err);
+//                    }
+//                    rot++;
+//                }
+//            }else {
+//                err="文件不能为空";
+//                throw new BusinessException(err);
+//            }
+//        }catch (Exception e){
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            throw  new BusinessException(err);
+//        }
+//    }
+
+    @Override
+    public void facilityImport(MultipartFile multipartFile) {
+        String FILE_IMPORT_FAILED = "文件导入失败";
+        String FILE_EMPTY = "文件不能为空";
+        String ROW_IMPORT_FAILED = "第%d行数据导入失败";
+
+        ImportParams params = new ImportParams();
+        params.setHeadRows(1);
+        params.setTitleRows(1);
+
+        try (InputStream inputStream = multipartFile.getInputStream()) {
+            List<BaseGgpFacility> facilityList = new ArrayList<>();
+            List<FacilityImportVo> facilityImportVos = ExcelImportUtil.importExcel(inputStream, FacilityImportVo.class, params);
+            if (CollectionUtils.isEmpty(facilityImportVos)) {
+                throw new BusinessException(FILE_EMPTY);
+            }
+
+            for (int i = 0; i < facilityImportVos.size(); i++) {
+                FacilityImportVo facilityImportVo = facilityImportVos.get(i);
+                BaseGgpFacility baseGgpFacility = BeanMapperUtils.map(facilityImportVo, BaseGgpFacility.class);
+                if (isBlank(baseGgpFacility.getFacilityType()) || isBlank(baseGgpFacility.getFacilityName()) || isBlank(baseGgpFacility.getAddress()) || isBlank(baseGgpFacility.getLatitude()) || isBlank(baseGgpFacility.getLongitude())) {
+                    throw new BusinessException(String.format(ROW_IMPORT_FAILED, i + 1));
+                }
+                facilityList.add(baseGgpFacility);
+            }
+            try {
+                this.saveBatch(facilityList);
+            } catch (Exception e) {
+                throw new BusinessException(FILE_IMPORT_FAILED);
+            }
+        } catch (Exception e) {
+            log.error("文件导入失败", e);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            throw new BusinessException(FILE_IMPORT_FAILED);
+        }
+    }
+
+    private boolean isBlank(String str) {
+        return StringUtils.isBlank(str) || StringUtils.isBlank(str.trim());
+    }
 }

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

@@ -86,6 +86,7 @@ public class CrmCustomInfoServiceImpl extends AbstractCrudService<CrmCustomInfoM
                 .eq(cus.getMaintainStatus() != null,CrmCustomInfo::getMaintainStatus,cus.getMaintainStatus())
                 .between(StringUtils.isNotBlank(cus.getStartTime())&&StringUtils.isNotBlank(cus.getEndTime()),CrmCustomInfo::getExpireTime,cus.getStartTime(),cus.getEndTime())
                 .eq(CrmCustomInfo::getDeleteFlag,0)
+                .eq(CrmCustomInfo::getTenantId,SecurityUtils.getTenantId())
                 .orderByDesc(CrmCustomInfo::getId);
         page = this.page(page,queryWrapper);
 
@@ -102,6 +103,7 @@ public class CrmCustomInfoServiceImpl extends AbstractCrudService<CrmCustomInfoM
                 .eq(cus.getMaintainStatus() != null,CrmCustomInfo::getMaintainStatus,cus.getMaintainStatus())
                 .between(StringUtils.isNotBlank(cus.getStartTime())&&StringUtils.isNotBlank(cus.getEndTime()),CrmCustomInfo::getExpireTime,cus.getStartTime(),cus.getEndTime())
                 .eq(CrmCustomInfo::getDeleteFlag,0)
+                .eq(CrmCustomInfo::getTenantId,SecurityUtils.getTenantId())
                 .orderByDesc(CrmCustomInfo::getId);
         List<CrmCustomInfo> list1 = this.list(queryWrapper);
         if(CollectionUtils.isNotEmpty(list1)){
@@ -130,7 +132,8 @@ public class CrmCustomInfoServiceImpl extends AbstractCrudService<CrmCustomInfoM
         Integer id = null == crmCustomInfo.getId()?-1:crmCustomInfo.getId();
         LambdaQueryWrapper<CrmCustomInfo> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(CrmCustomInfo::getProjectName,crmCustomInfo.getProjectName())
-                    .eq(CrmCustomInfo::getDeleteFlag,0);
+                    .eq(CrmCustomInfo::getDeleteFlag,0)
+                .eq(CrmCustomInfo::getTenantId,SecurityUtils.getTenantId());
         CrmCustomInfo one = this.getOne(queryWrapper);
         return null != one && !Objects.equals(one.getId(),id);
 

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