Browse Source

设备统计

459242451@qq.com 3 years ago
parent
commit
907fd3d3ce

+ 29 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/gas/So2Controller.java

@@ -20,6 +20,7 @@ import com.ruoyi.system.domain.ShipRecognition;
 import com.ruoyi.system.domain.XiuTanIllegalShip;
 import com.ruoyi.system.domain.XiuTanSemInstrument;
 import com.ruoyi.system.service.IAisDatabase;
+import com.ruoyi.system.service.IHeiYanService;
 import com.ruoyi.system.service.ISo2Service;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -51,6 +52,8 @@ public class So2Controller extends BaseController {
     @Autowired
     private ISo2Service so2Service;
     @Autowired
+    private IHeiYanService heiYanService;
+    @Autowired
     private RedisCache redisCache;
 
     @GetMapping("/guangpu/list")
@@ -140,13 +143,14 @@ public class So2Controller extends BaseController {
     }
 
     @GetMapping("/static/device")
-    @ApiOperation("嗅探-设备数据")
+    @ApiOperation("设备安装位置统计")
     public AjaxResult deviceStatic() {
-        if (redisCache.hasKey(CacheConstants.SO2_DEVICE_STATIC)) {
-            return AjaxResult.success(redisCache.getCacheMap(CacheConstants.SO2_DEVICE_STATIC));
+        if (redisCache.hasKey(CacheConstants.DEVICE_STATIC)) {
+            return AjaxResult.success(redisCache.getCacheMap(CacheConstants.DEVICE_STATIC));
         }
         List<Map<String, Object>> aisDevice = aisDatabase.queryDeviceStatic();
         List<Map<String, Object>> so2Device = so2Service.queryDeviceStatic();
+        List<Map<String, Object>> heiyanDevice = heiYanService.queryDeviceStatic();
         // 两个结果合并
         Map<String, Integer> result = new HashMap<>(8);
         for (Map<String, Object> stringIntegerMap : aisDevice) {
@@ -155,7 +159,28 @@ public class So2Controller extends BaseController {
         for (Map<String, Object> stringIntegerMap : so2Device) {
             result.put(Convert.toStr(stringIntegerMap.get("point")), Convert.toInt(NumberUtil.add(result.get(Convert.toStr(stringIntegerMap.get("point"))), Convert.toInt(stringIntegerMap.get("count")))));
         }
-        redisCache.setCacheMap(CacheConstants.SO2_DEVICE_STATIC, result);
+        for (Map<String, Object> stringObjectMap : heiyanDevice) {
+            result.put(Convert.toStr(stringObjectMap.get("point")), Convert.toInt(NumberUtil.add(result.get(Convert.toStr(stringObjectMap.get("point"))), Convert.toInt(stringObjectMap.get("count")))));
+        }
+        redisCache.setCacheMap(CacheConstants.DEVICE_STATIC, result);
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/static/deviceType")
+    @ApiOperation("设备类型统计")
+    public AjaxResult deviceTypeStatic() {
+        if (redisCache.hasKey(CacheConstants.DEVICE_TYPE_STATIC)) {
+            return AjaxResult.success(redisCache.getCacheMap(CacheConstants.DEVICE_TYPE_STATIC));
+        }
+        int aisDevice = aisDatabase.queryDeviceCount();
+        int so2Device = so2Service.queryDeviceCount();
+        int heiyanDevice = heiYanService.queryDeviceCount();
+        // 两个结果合并
+        Map<String, Integer> result = new HashMap<>(4);
+        result.put("光谱", so2Device);
+        result.put("嗅探", aisDevice);
+        result.put("黑烟", heiyanDevice);
+        redisCache.setCacheMap(CacheConstants.DEVICE_TYPE_STATIC, result);
         return AjaxResult.success(result);
     }
 

+ 37 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/job/CanalScheduling.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.job;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -143,7 +144,9 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
         }
 
         //不是user表中的数据不处理
-        if (!StrUtil.equalsAnyIgnoreCase(table, "ship_recognition",
+        if (!StrUtil.equalsAnyIgnoreCase(table,
+                "ship_recognition",
+                "ship_snap_address",
                 "alert",
                 "monitor_point",
                 "device",
@@ -160,13 +163,19 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
                 // 黑烟船舶数据入库
                 if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_recognition")) {
                     client.createDocument(ElasticConstants.HEIYAN_SHIP_RECOGNITION, Convert.toStr(afterDataMap.get("id")), afterDataMap);
+                } else if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_snap_address")) {
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "monitor_point")) {
                     // 检测点信息
                     client.createDocument(ElasticConstants.SO2_MONITOR_POINT, Convert.toStr(afterDataMap.get("id")), afterDataMap);
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CacheConstants.DEVICE_STATIC);
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "device")) {
                     // 设备信息
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "ship_static_info")) {
                     // 船舶信息
                     if (ObjectUtil.isNotEmpty(afterDataMap.get("mmsi"))) {
@@ -192,7 +201,9 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && (StrUtil.equalsIgnoreCase(table, "sem_instrument_test") || StrUtil.equalsIgnoreCase(table, "sem_instrument"))) {
                     // 嗅探系统-站点信息
                     client.createDocument(ElasticConstants.AIS_SEM_INSTRUMENT, Convert.toStr(afterDataMap.get("id")), afterDataMap);
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && StrUtil.equalsIgnoreCase(table, "illegal_ship")) {
                     // 嗅探系统-违规船舶
                     // 查询站点信息
@@ -209,13 +220,19 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
             case UPDATE:
                 if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_recognition")) {
                     client.updateDocument(ElasticConstants.HEIYAN_SHIP_RECOGNITION, Convert.toStr(afterDataMap.get("id")), afterDataMap);
+                } else if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_snap_address")) {
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "monitor_point")) {
                     // 检测点信息
                     client.updateDocument(ElasticConstants.SO2_MONITOR_POINT, Convert.toStr(afterDataMap.get("id")), afterDataMap);
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CacheConstants.DEVICE_STATIC);
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "device")) {
                     // 设备信息
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "ship_static_info")) {
                     // 船舶信息
                     client.updateDocument(ElasticConstants.SO2_SHIP_STATIC_INFO, Convert.toStr(afterDataMap.get("mmsi")), afterDataMap);
@@ -225,7 +242,9 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && (StrUtil.equalsIgnoreCase(table, "sem_instrument_test") || StrUtil.equalsIgnoreCase(table, "sem_instrument"))) {
                     // 嗅探系统-站点信息
                     client.updateDocument(ElasticConstants.AIS_SEM_INSTRUMENT, Convert.toStr(afterDataMap.get("id")), afterDataMap);
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && StrUtil.equalsIgnoreCase(table, "illegal_ship")) {
                     // 嗅探系统-违规船舶
                     // 查询站点信息
@@ -240,13 +259,19 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
             case DELETE:
                 if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_recognition")) {
                     client.deleteDocument(ElasticConstants.HEIYAN_SHIP_RECOGNITION, Convert.toStr(afterDataMap.get("id")));
+                } else if (StrUtil.equalsIgnoreCase(database, "heiyan") && StrUtil.equalsIgnoreCase(table, "ship_snap_address")) {
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "monitor_point")) {
                     // 检测点信息
                     client.deleteDocument(ElasticConstants.SO2_MONITOR_POINT, Convert.toStr(afterDataMap.get("id")));
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CacheConstants.DEVICE_STATIC);
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "device")) {
                     // 设备信息
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "so2") && StrUtil.equalsIgnoreCase(table, "ship_static_info")) {
                     // 船舶信息
                     client.deleteDocument(ElasticConstants.SO2_SHIP_STATIC_INFO, Convert.toStr(afterDataMap.get("mmsi")));
@@ -256,7 +281,9 @@ public class CanalScheduling implements Runnable, ApplicationContextAware {
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && (StrUtil.equalsIgnoreCase(table, "sem_instrument_test") || StrUtil.equalsIgnoreCase(table, "sem_instrument"))) {
                     // 嗅探系统-站点信息
                     client.deleteDocument(ElasticConstants.AIS_SEM_INSTRUMENT, Convert.toStr(afterDataMap.get("id")));
-                    redisCache.deleteObject(CacheConstants.SO2_DEVICE_STATIC);
+                    redisCache.deleteObject(CollUtil.set(false,
+                            CacheConstants.DEVICE_STATIC,
+                            CacheConstants.DEVICE_TYPE_STATIC));
                 } else if (StrUtil.equalsIgnoreCase(database, "ais_database") && StrUtil.equalsIgnoreCase(table, "illegal_ship")) {
                     // 嗅探系统-违规船舶
                     client.deleteDocument(ElasticConstants.AIS_ILLEGAL_SHIP, Convert.toStr(afterDataMap.get("id")));

+ 3 - 1
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -8,6 +8,8 @@ package com.ruoyi.common.constant;
  */
 public class CacheConstants {
     // 设备统计
-    public static final String SO2_DEVICE_STATIC = "so2:device:static";
+    public static final String DEVICE_STATIC = "device:static";
+    // 设备类型统计
+    public static final String DEVICE_TYPE_STATIC = "devicetype:static";
 
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AisDatabaseMapper.java

@@ -11,4 +11,6 @@ import java.util.Map;
  */
 public interface AisDatabaseMapper {
     List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
 }

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/HeiYanMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.system.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2021/8/31
+ * @Version V1.0
+ */
+public interface HeiYanMapper {
+    List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
+}

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/So2Mapper.java

@@ -11,4 +11,6 @@ import java.util.Map;
  */
 public interface So2Mapper {
     List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IAisDatabase.java

@@ -11,4 +11,6 @@ import java.util.Map;
  */
 public interface IAisDatabase {
     List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
 }

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IHeiYanService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2021/8/31
+ * @Version V1.0
+ */
+public interface IHeiYanService {
+    List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
+}

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISo2Service.java

@@ -11,4 +11,6 @@ import java.util.Map;
  */
 public interface ISo2Service {
     List<Map<String, Object>> queryDeviceStatic();
+
+    int queryDeviceCount();
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AisDatabaseImpl.java

@@ -27,4 +27,9 @@ public class AisDatabaseImpl implements IAisDatabase {
     public List<Map<String, Object>> queryDeviceStatic() {
         return aisDatabaseMapper.queryDeviceStatic();
     }
+
+    @Override
+    public int queryDeviceCount() {
+        return aisDatabaseMapper.queryDeviceCount();
+    }
 }

+ 37 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/HeiYanServiceImpl.java

@@ -0,0 +1,37 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.mapper.AisDatabaseMapper;
+import com.ruoyi.system.mapper.HeiYanMapper;
+import com.ruoyi.system.service.IAisDatabase;
+import com.ruoyi.system.service.IHeiYanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2021/8/31
+ * @Version V1.0
+ */
+@Service
+@DataSource(DataSourceType.SLAVE_BLACK)
+public class HeiYanServiceImpl implements IHeiYanService {
+
+    @Autowired
+    private HeiYanMapper heiYanMapper;
+
+    @Override
+    public List<Map<String, Object>> queryDeviceStatic() {
+        return heiYanMapper.queryDeviceStatic();
+    }
+
+    @Override
+    public int queryDeviceCount() {
+        return heiYanMapper.queryDeviceCount();
+    }
+}

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/So2ServiceImpl.java

@@ -27,4 +27,9 @@ public class So2ServiceImpl implements ISo2Service {
     public List<Map<String, Object>> queryDeviceStatic() {
         return so2Mapper.queryDeviceStatic();
     }
+
+    @Override
+    public int queryDeviceCount() {
+        return so2Mapper.queryDeviceCount();
+    }
 }

+ 5 - 0
ruoyi-system/src/main/resources/mapper/system/AisDatabaseMapper.xml

@@ -9,4 +9,9 @@
         from sem_instrument_test
         group by Category;
     </select>
+
+    <select id="queryDeviceCount" resultType="java.lang.Integer">
+        select count(1)
+        from sem_instrument_test
+    </select>
 </mapper>

+ 17 - 0
ruoyi-system/src/main/resources/mapper/system/HeiYanMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.HeiYanMapper">
+
+    <select id="queryDeviceStatic" resultType="java.util.Map">
+        select snapPos point, count(1) count
+        from ship_snap_address
+        group by snapPos
+    </select>
+
+    <select id="queryDeviceCount" resultType="java.lang.Integer">
+        select count(1)
+        from ship_snap_address
+    </select>
+</mapper>

+ 4 - 0
ruoyi-system/src/main/resources/mapper/system/So2Mapper.xml

@@ -10,4 +10,8 @@
             left join device d on t1.id = d.monitor_point_id
         group by t1.id;
     </select>
+
+    <select id="queryDeviceCount" resultType="java.lang.Integer">
+        select count(1) from device
+    </select>
 </mapper>