Quellcode durchsuchen

feat(water): add device ledger status statistics

Kazerin vor 15 Stunden
Ursprung
Commit
968e7f82b1

+ 7 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/WaterSupply/DeviceLedger/DeviceLedgerController.java

@@ -45,6 +45,13 @@ public class DeviceLedgerController {
         return AjaxResult.success(list);
     }
 
+    @GetMapping("/statistics")
+    @ApiOperation("设备台账运行状态统计")
+    @PreAuthorize("@ss.hasPermi('waterSupply:device:list')")
+    public AjaxResult getLedgerStatistics() {
+        return AjaxResult.success(waterSupplyDeviceService.getDeviceLedgerStatistics());
+    }
+
     @GetMapping("/page")
     @ApiOperation("设备台账分页查询")
     @PreAuthorize("@ss.hasPermi('waterSupply:device:list')")

+ 22 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/domain/vo/DeviceLedgerStatisticsVO.java

@@ -0,0 +1,22 @@
+package com.zksy.base.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("供水设备台账统计VO")
+public class DeviceLedgerStatisticsVO {
+
+    @ApiModelProperty("设备总数")
+    private Integer total;
+
+    @ApiModelProperty("在线设备数")
+    private Integer online;
+
+    @ApiModelProperty("离线设备数")
+    private Integer offline;
+
+    @ApiModelProperty("在线率(0-100,保留1位小数)")
+    private Double onlineRate;
+}

+ 2 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/WaterSupplyDeviceService.java

@@ -13,6 +13,8 @@ public interface WaterSupplyDeviceService extends IService<EquipmentBase> {
 
     List<DeviceTypeStatisticsVO> getDeviceTypeStatistics();
 
+    DeviceLedgerStatisticsVO getDeviceLedgerStatistics();
+
     Page<DeviceGisVO> getDeviceLedgerPage(long pageNum, long pageSize,
                                            String equipmentName, String equipmentCode,
                                            String equipmentTypeId, Integer status,

+ 26 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/impl/WaterSupplyDeviceServiceImpl.java

@@ -175,6 +175,32 @@ public class WaterSupplyDeviceServiceImpl extends ServiceImpl<EquipmentBaseMappe
         return total;
     }
 
+    @Override
+    public DeviceLedgerStatisticsVO getDeviceLedgerStatistics() {
+        List<EquipmentBase> devices = findWaterDevices();
+        DeviceLedgerStatisticsVO stats = new DeviceLedgerStatisticsVO();
+        stats.setTotal(devices.size());
+        stats.setOnline(0);
+        stats.setOffline(devices.size());
+        stats.setOnlineRate(0.0);
+        if (CollUtil.isEmpty(devices)) {
+            return stats;
+        }
+        Map<String, EquipmentStatus> statusMap = getStatusMap(devices.stream()
+                .map(EquipmentBase::getEquipmentId)
+                .collect(Collectors.toList()));
+        int onlineCount = (int) devices.stream()
+                .map(device -> statusMap.get(device.getEquipmentId()))
+                .filter(Objects::nonNull)
+                .filter(status -> Integer.valueOf(1).equals(status.getOnlineStatus()))
+                .count();
+        stats.setOnline(onlineCount);
+        stats.setOffline(devices.size() - onlineCount);
+        stats.setOnlineRate(Math.round(onlineCount * 1000.0 / devices.size()) / 10.0);
+        return stats;
+    }
+
+
     @Override
     public Page<DeviceGisVO> getDeviceLedgerPage(long pageNum, long pageSize,
                                                   String equipmentName, String equipmentCode,

+ 15 - 0
pipe-network-service/zksy-system/src/test/java/com/zksy/base/service/impl/WaterSupplyDeviceServiceImplTest.java

@@ -14,6 +14,7 @@ import com.zksy.base.domain.EquipmentType;
 import com.zksy.base.domain.WorkOrder;
 import com.zksy.base.domain.vo.AbnormalDeviceVO;
 import com.zksy.base.domain.vo.DeviceGisVO;
+import com.zksy.base.domain.vo.DeviceLedgerStatisticsVO;
 import com.zksy.base.domain.vo.DeviceTypeStatisticsVO;
 import com.zksy.base.domain.vo.MaintainOrderVO;
 import com.zksy.base.mapper.EquipmentMaintainMapper;
@@ -127,6 +128,20 @@ class WaterSupplyDeviceServiceImplTest {
         assertEquals(Arrays.asList("water-flow", "water-pressure"), childTypeIds);
     }
 
+    @Test
+    void ledgerStatisticsCountsOnlyWaterDevicesAndMissingStatusAsOffline() {
+        when(equipmentStatusMapper.selectList(any())).thenReturn(Arrays.asList(
+                status(pressureDevice.getEquipmentId(), 1, 1, 1),
+                status(gasDevice.getEquipmentId(), 1, 1, 1)));
+
+        DeviceLedgerStatisticsVO stats = service.getDeviceLedgerStatistics();
+
+        assertEquals(2, stats.getTotal());
+        assertEquals(1, stats.getOnline());
+        assertEquals(1, stats.getOffline());
+        assertEquals(50.0, stats.getOnlineRate());
+    }
+
     @Test
     void ledgerResolvesTypeNameByEquipmentTypePrimaryKey() {
         pressureDevice.setEquipmentTypeId("db-pressure-id");