Kaynağa Gözat

优化各行业设备汇总接口

sunzf 3 hafta önce
ebeveyn
işleme
b3614d33e6

+ 4 - 3
src/main/java/com/sooka/sponest/construction/api/PlatformDeviceApi.java

@@ -97,10 +97,11 @@ public class PlatformDeviceApi extends BaseController {
         for (DeviceSummaryVO deviceSummaryVO : source) {
             Map<String, Object> map = new HashMap<>();
             map.put("industryName", deviceSummaryVO.getIndustryName());
-            map.put("onlineStatus", deviceSummaryVO.getOnlineStatus());
             map.put("deviceTotal", deviceSummaryVO.getDeviceTotal());
-            map.put("statusCount", deviceSummaryVO.getStatusCount());
-            map.put("statusPercent", deviceSummaryVO.getStatusPercent());
+            map.put("onlineCount", deviceSummaryVO.getOnlineCount());
+            map.put("offlineCount", deviceSummaryVO.getOfflineCount());
+            map.put("onlinePercent", deviceSummaryVO.getOnlinePercent());
+            map.put("offlinePercent", deviceSummaryVO.getOfflinePercent());
             target.add(map);
         }
     }

+ 4 - 3
src/main/java/com/sooka/sponest/construction/api/vo/DeviceSummaryVO.java

@@ -10,9 +10,10 @@ import lombok.NoArgsConstructor;
 public class DeviceSummaryVO {
 
     private String industryName; // 行业名称
-    private String onlineStatus; // 设备状态
     private String deviceTotal; // 设备总数
-    private String statusCount; // 设备状态数量
-    private String statusPercent; // 设备状态百分比
+    private String onlineCount; //
+    private String offlineCount; //
+    private String onlinePercent; // 在线率
+    private String offlinePercent; // 离线率
 
 }

+ 6 - 21
src/main/resources/mapper/construction/bridge/BridgeDeviceMapper.xml

@@ -76,27 +76,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '桥梁' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM bridge_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM bridge_device), 2) AS statusPercent
-        FROM bridge_device
-        UNION ALL
-        SELECT
-            '桥梁' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM bridge_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM bridge_device), 2) AS statusPercent
-        FROM bridge_device
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM bridge_device;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">

+ 6 - 21
src/main/resources/mapper/construction/drainage/DrainageDeviceBaseInfoDataMapper.xml

@@ -66,27 +66,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '排水' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM drainage_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM drainage_device), 2) AS statusPercent
-        FROM drainage_device
-        UNION ALL
-        SELECT
-            '排水' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM drainage_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM drainage_device), 2) AS statusPercent
-        FROM drainage_device
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM drainage_device;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">

+ 6 - 21
src/main/resources/mapper/construction/gas/GasDeviceBaseInfoDataMapper.xml

@@ -108,27 +108,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '燃气' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM gas_device_base_info_data) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM gas_device_base_info_data), 2) AS statusPercent
-        FROM gas_device_base_info_data
-        UNION ALL
-        SELECT
-            '燃气' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM gas_device_base_info_data) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM gas_device_base_info_data), 2) AS statusPercent
-        FROM gas_device_base_info_data
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM gas_device_base_info_data;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">

+ 6 - 21
src/main/resources/mapper/construction/heating/HeatingDeviceMapper.xml

@@ -185,27 +185,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '供热' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM heating_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM heating_device), 2) AS statusPercent
-        FROM heating_device
-        UNION ALL
-        SELECT
-            '供热' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM heating_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM heating_device), 2) AS statusPercent
-        FROM heating_device
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM heating_device;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">

+ 6 - 21
src/main/resources/mapper/construction/utilityTunnel/UtilityTunnelDeviceMapper.xml

@@ -79,27 +79,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '管廊' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM utility_tunnel_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM utility_tunnel_device), 2) AS statusPercent
-        FROM utility_tunnel_device
-        UNION ALL
-        SELECT
-            '管廊' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM utility_tunnel_device) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM utility_tunnel_device), 2) AS statusPercent
-        FROM utility_tunnel_device
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM utility_tunnel_device;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">

+ 6 - 21
src/main/resources/mapper/construction/waterSupply/DeviceBaseInfoMapper.xml

@@ -95,27 +95,12 @@
     <select id="getDeviceSummary" resultType="com.sooka.sponest.construction.api.vo.DeviceSummaryVO">
         SELECT
             '供水' as industryName,
-            '在线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '1' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM water_supply_device_base_info) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '1' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM water_supply_device_base_info), 2) AS statusPercent
-        FROM water_supply_device_base_info
-        UNION ALL
-        SELECT
-            '供水' as industryName,
-            '离线' AS onlineStatus,
-            COUNT(CASE WHEN online_status = '0' THEN 1 END) AS statusCount,
-            (SELECT COUNT(*) FROM water_supply_device_base_info) AS deviceTotal,
-            ROUND(COUNT(CASE WHEN online_status = '0' THEN 1 END) * 100.0 /
-                  (SELECT COUNT(*) FROM water_supply_device_base_info), 2) AS statusPercent
-        FROM water_supply_device_base_info
-        ORDER BY
-            CASE
-                WHEN onlineStatus = '在线' THEN 1
-                WHEN onlineStatus = '离线' THEN 2
-                ELSE 3
-                END;
+            COUNT(*) AS deviceTotal,
+            SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) AS onlineCount,
+            SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) AS offlineCount,
+            ROUND(SUM(CASE WHEN online_status = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS onlinePercent,
+            ROUND(SUM(CASE WHEN online_status = '0' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS offlinePercent
+        FROM water_supply_device_base_info;
     </select>
 
     <select id="getDeviceType" resultType="com.sooka.sponest.construction.api.vo.DeviceTypeVO">