From 167236d51d359745c6abe0b6ed827b2ff7d37a4b Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期二, 17 六月 2025 17:39:42 +0800
Subject: [PATCH] 领导层首页-运行监控界面

---
 src/main/java/com/whyc/service/MonitorService.java |  230 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 230 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/whyc/service/MonitorService.java b/src/main/java/com/whyc/service/MonitorService.java
new file mode 100644
index 0000000..dad9daa
--- /dev/null
+++ b/src/main/java/com/whyc/service/MonitorService.java
@@ -0,0 +1,230 @@
+package com.whyc.service;
+
+import com.whyc.constant.BattAlarmIdEnum;
+import com.whyc.dto.NameValueIntDto;
+import com.whyc.dto.Response;
+import com.whyc.factory.ThreadPoolExecutorFactory;
+import com.whyc.pojo.db_alarm.BattalarmData;
+import com.whyc.pojo.db_ram_db.DeviceState;
+import com.whyc.pojo.db_station.BattInf;
+import com.whyc.pojo.db_station.StationInf;
+import com.whyc.pojo.db_user.BaojigroupPower;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.stream.Collectors;
+
+@Service
+public class MonitorService {
+
+    @Autowired
+    private LeaderHomeService leaderHomeService;
+
+    @Autowired
+    private StationInfService stationInfService;
+
+    @Autowired
+    private PowerInfService powerInfService;
+
+    @Autowired
+    private BattInfService battInfService;
+
+    @Autowired
+    private PwrdevAlarmService powerAlarmService;
+
+    @Autowired
+    private DevalarmDataService devAlarmDataService;
+
+    @Autowired
+    private BattalarmDataService battAlarmDataService;
+
+    @Autowired
+    private DeviceStateService deviceStateService;
+
+
+    @Autowired
+    private BaoJiGroupPowerService baoJiGroupPowerService;
+
+
+    public Response getAll(Integer userId) {
+        Response response = new Response();
+        Map<String,Object> map = new HashMap<>();
+
+        CountDownLatch latch = new CountDownLatch(9);
+        ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
+
+        //TODO 浜ゆ祦鍛婅缁熻 寰呮槑纭憡璀﹀垎绫�
+        poolExecutor.execute(() -> {
+            //acAlarmStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //璧勪骇淇℃伅缁熻
+        poolExecutor.execute(() -> {
+            assetsInfoStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //钃勭數姹犳牳瀹逛俊鎭粺璁�
+        poolExecutor.execute(() -> {
+            leaderHomeService.testDataInfoStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //鐢垫睜鍝佺墝淇℃伅缁熻
+        poolExecutor.execute(() -> {
+            leaderHomeService.batteryInfoStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //鐢垫簮鍝佺墝淇℃伅缁熻
+        poolExecutor.execute(() -> {
+            leaderHomeService.powerInfoStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //TODO 鐢垫簮鍛婅淇℃伅缁熻 寰呮槑纭憡璀﹀垎绫�
+        poolExecutor.execute(() -> {
+            //powerAlarmStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //鍗曡妭钃勭數姹犲憡璀︾粺璁�
+        poolExecutor.execute(() -> {
+            battMonAlarmStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //璁惧瀹炴椂鐘舵�佺粺璁�
+        poolExecutor.execute(() -> {
+            deviceStatusStatistics(userId, map);
+            latch.countDown();
+        });
+
+        //鐝粍缁熻 鍙� 鍛婅缁熻
+        poolExecutor.execute(() -> {
+            baoJiAndAlarmStatistics(userId, map);
+            latch.countDown();
+        });
+
+        return response;
+    }
+
+    private void baoJiAndAlarmStatistics(Integer userId, Map<String, Object> map) {
+        List<NameValueIntDto> baoJiGroupStationDtoList = new ArrayList<>();
+        //鑾峰彇绠$悊鐨勬墍鏈夌彮缁勫拰绔欑偣
+        List<BaojigroupPower> baoJiGroupStationList =baoJiGroupPowerService.getListByUserId(userId);
+        Map<String, List<BaojigroupPower>> baoJiGroupStationMap = baoJiGroupStationList.stream().collect(Collectors.groupingBy(BaojigroupPower::getBaoJiGroupName));
+        baoJiGroupStationMap.forEach((baoJiGroupName, stationList) -> {
+            NameValueIntDto baoJiGroupStationDto = new NameValueIntDto();
+            baoJiGroupStationDto.setName(baoJiGroupName);
+            baoJiGroupStationDto.setValue(stationList.size());
+            baoJiGroupStationDtoList.add(baoJiGroupStationDto);
+        });
+        map.put("baoJiStationStatistics", baoJiGroupStationDtoList);
+
+
+        List<NameValueIntDto> alarmStatisticsList = new ArrayList<>();
+        long powerAlarmCount = powerAlarmService.getListByUserId(userId, 1).stream().count();
+        long devAlarmCount = devAlarmDataService.getListByUserId(userId, 1).stream().count();
+        long battAlarmCount = battAlarmDataService.getListByUserId(userId, 1).stream().count();
+        NameValueIntDto powerAlarmDto = new NameValueIntDto("鐢垫簮鐩戞祴", (int) powerAlarmCount);
+        alarmStatisticsList.add(powerAlarmDto);
+        NameValueIntDto devAlarmDto = new NameValueIntDto("璁惧鐩戞祴", (int) devAlarmCount);
+        alarmStatisticsList.add(devAlarmDto);
+        NameValueIntDto battAlarmDto = new NameValueIntDto("鐢垫睜鐩戞祴", (int) battAlarmCount);
+        alarmStatisticsList.add(battAlarmDto);
+        map.put("alarmStatistics", alarmStatisticsList);
+
+
+    }
+
+    private void deviceStatusStatistics(Integer userId, Map<String, Object> map) {
+        List<DeviceState> deviceStateList =deviceStateService.getListByUserId(userId);
+        long chargeCount = deviceStateList.stream().filter(deviceState -> deviceState.getDevWorkstate() == 0).count();
+        long hrChargeCount = deviceStateList.stream().filter(deviceState -> deviceState.getDevWorkstate() == 1).count();
+        long hrDischargeCount = deviceStateList.stream().filter(deviceState -> deviceState.getDevWorkstate() == 2).count();
+        long powerOffDischargeCount = deviceStateList.stream().filter(deviceState -> deviceState.getDevWorkstate() == 3).count();
+        long resTestCount = deviceStateList.stream().filter(deviceState -> deviceState.getDevWorkstate() == 4).count();
+
+        List<NameValueIntDto> nameValueList = new ArrayList<>();
+
+        NameValueIntDto chargeCountDto = new NameValueIntDto("鐩磋繛鍏呯數", (int) chargeCount);
+        nameValueList.add(chargeCountDto);
+        NameValueIntDto hrChargeCountDto = new NameValueIntDto("鏍稿鍏呯數", (int) hrChargeCount);
+        nameValueList.add(hrChargeCountDto);
+        NameValueIntDto hrDischargeCountDto = new NameValueIntDto("鏍稿鏀剧數", (int) hrDischargeCount);
+        nameValueList.add(hrDischargeCountDto);
+        NameValueIntDto powerOffDischargeCountDto = new NameValueIntDto("鍋滅數鏀剧數", (int) powerOffDischargeCount);
+        nameValueList.add(powerOffDischargeCountDto);
+        NameValueIntDto resTestCountDto = new NameValueIntDto("鍐呴樆娴嬭瘯", (int) resTestCount);
+        nameValueList.add(resTestCountDto);
+
+        map.put("deviceStatusStatistics", nameValueList);
+
+    }
+
+    private void battMonAlarmStatistics(Integer userId, Map<String, Object> map) {
+        List<NameValueIntDto> nameValueList = new ArrayList<>();
+
+        List<BattalarmData> battAlarmDataList = battAlarmDataService.getMonAlarm(userId);
+        //鑾峰彇鐢靛帇寮傚父鍛婅
+        List<BattalarmData> monVolAlarmList = battAlarmDataList.stream()
+                .filter(alarm -> alarm.getAlmId().intValue() == BattAlarmIdEnum.ALARM_119005.getStateId()).collect(Collectors.toList());
+        Map<String, List<BattalarmData>> monVolAlarmMap = monVolAlarmList.stream().collect(
+                Collectors.groupingBy(alarm -> alarm.getBattgroupId() + "_" + alarm.getMonNum()));
+        nameValueList.add(new NameValueIntDto("鐢靛帇", monVolAlarmMap.size()));
+
+        //鑾峰彇鍐呴樆寮傚父鍛婅
+        List<BattalarmData> monResAlarmList = battAlarmDataList.stream()
+                .filter(alarm -> alarm.getAlmId().intValue() == BattAlarmIdEnum.ALARM_119007.getStateId()).collect(Collectors.toList());
+        Map<String, List<BattalarmData>> monResAlarmMap = monResAlarmList.stream().collect(
+                Collectors.groupingBy(alarm -> alarm.getBattgroupId() + "_" + alarm.getMonNum()));
+        nameValueList.add(new NameValueIntDto("鍐呴樆", monResAlarmMap.size()));
+
+
+        //鑾峰彇娓╁害寮傚父鍛婅
+        List<BattalarmData> monTmpAlarmList = battAlarmDataList.stream()
+                .filter(alarm -> alarm.getAlmId().intValue() == BattAlarmIdEnum.ALARM_119006.getStateId()).collect(Collectors.toList());
+        Map<String, List<BattalarmData>> monTmpAlarmMap = monTmpAlarmList.stream().collect(
+                Collectors.groupingBy(alarm -> alarm.getBattgroupId() + "_" + alarm.getMonNum()));
+        nameValueList.add(new NameValueIntDto("娓╁害", monTmpAlarmMap.size()));
+
+        map.put("battMonAlarmStatistics", nameValueList);
+    }
+
+    private void assetsInfoStatistics(Integer userId, Map<String, Object> map) {
+        List<NameValueIntDto> nameValueList = new ArrayList<>();
+        List<StationInf> stationInfList =stationInfService.getListByUserId(userId);
+        int stationCount = stationInfList.size();
+        NameValueIntDto stationCountDto = new NameValueIntDto();
+        stationCountDto.setName("绔欑偣鏁伴噺");
+        stationCountDto.setValue(stationCount);
+
+        int powerCount = powerInfService.getListByUserId(userId).size();
+        NameValueIntDto powerCountDto = new NameValueIntDto();
+        powerCountDto.setName("鐢垫簮鏁伴噺");
+        powerCountDto.setValue(powerCount);
+
+        List<BattInf> battInfList = battInfService.getListByUserId(userId);
+        int battCount = battInfList.size();
+        Map<Integer, List<BattInf>> devIdMap = battInfList.stream().collect(Collectors.groupingBy(BattInf::getDevId));
+        NameValueIntDto devCountDto = new NameValueIntDto();
+        devCountDto.setName("璁惧鏁伴噺");
+        devCountDto.setValue(devIdMap.size());
+
+        NameValueIntDto battCountDto = new NameValueIntDto();
+        battCountDto.setName("鐢垫睜鏁伴噺");
+        battCountDto.setValue(battCount);
+
+        nameValueList.add(stationCountDto);
+        nameValueList.add(powerCountDto);
+        nameValueList.add(devCountDto);
+        nameValueList.add(battCountDto);
+        map.put("assetsInfoStatistics", nameValueList);
+
+    }
+}

--
Gitblit v1.9.1