From 1b4274e27a60892492195e7e3a4b820dcd2b6be5 Mon Sep 17 00:00:00 2001
From: liuhaonan <31457034@qq.com>
Date: 星期三, 28 九月 2022 14:16:15 +0800
Subject: [PATCH] changes
---
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java | 463 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 457 insertions(+), 6 deletions(-)
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
index fb5656d..c591d87 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -2,6 +2,7 @@
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateResponse;
import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -33,25 +34,32 @@
import com.sandu.ximon.admin.param.PoleParam;
import com.sandu.ximon.admin.param.PoleStatesParam;
import com.sandu.ximon.admin.param.PushAirDataToNovaParam;
+import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.redis.LightKey;
import com.sandu.ximon.admin.security.SecurityUtils;
-import com.sandu.ximon.admin.utils.LightemitUtils;
-import com.sandu.ximon.admin.utils.ListPagingUtils;
-import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
+import com.sandu.ximon.admin.utils.*;
import com.sandu.ximon.admin.utils.response.VnnoxResult;
+import com.sandu.ximon.admin.vo.DeviceOnLineCountVO;
+import com.sandu.ximon.admin.vo.OnLineCountVO;
import com.sandu.ximon.admin.vo.PoleBindVO;
+import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.bo.*;
import com.sandu.ximon.dao.domain.*;
import com.sandu.ximon.dao.enums.OrderByEnums;
import com.sandu.ximon.dao.mapper.PoleMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -69,6 +77,8 @@
private final PoleGroupRelationService groupRelationService;
private final ClientService clientService;
private final PoleMapper poleMapper;
+ private final RedisUtils redisUtils;
+ private final CountDownLatchUtil countDownLatchUtil;
public boolean addPole(PoleParam param) {
Pole pole = new Pole();
@@ -166,7 +176,7 @@
*
* @return
*/
- public Map<String, Integer> poleCount() {
+ public Map<String, Integer> poleCount1() {
Map<String, Integer> result = new HashMap<>();
LambdaQueryWrapper<Pole> wrapper;
if (SecurityUtils.getClientId() == null) {
@@ -223,6 +233,351 @@
return result;
}
+
+
+ /**
+ * 缁熻鍦ㄧ嚎鐏潌鏁伴噺
+ *
+ * @return
+ */
+ public OnLineCountVO poleCount() {
+ System.out.println("璇锋眰鏃堕棿: " + LocalDateTime.now());
+ OnLineCountVO onLineCountVO = new OnLineCountVO();
+ CountDownLatch countDownLatch = new CountDownLatch(9);//todo
+ //鑾峰彇涓�涓�7浣嶉殢鏈烘暟
+ String str = RandomStringUtils.randomAlphanumeric(7);
+ countDownLatchUtil.push(str, countDownLatch);
+ //璇虹摝
+ List<LedPlayerEntity> ledPlayerEntities = SpringContextHolder.getBean(LedPlayerEntityService.class).ledPlayerEntityListOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+
+
+ //ip闊虫煴
+
+ DeviceOnLineCountVO ledNova = new DeviceOnLineCountVO();
+ ledPlayerEntities.forEach(
+ Volume -> {
+ String s = redisUtils.get(DeviceRedisKey.IP_BROADCAST + Volume.getId());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ }
+ } else {
+ offLine.getAndIncrement();
+ }
+ }
+ );
+
+ ledNova.setTotalCount(ledPlayerEntities.size());
+ ledNova.setOnlineCount(onLine.get());
+ ledNova.setOfflineCount(offLine.get());
+
+ onLineCountVO.setLedNova(ledNova);
+ System.out.println("璇虹摝鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+ //闊虫煴
+ List<BroadcastTerminalV2EntityBo> broadcastTerminalList = SpringContextHolder.getBean(IpVolumeService.class).getBroadcastTerminalListOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+
+
+ //ip闊虫煴
+
+ DeviceOnLineCountVO ipVolume = new DeviceOnLineCountVO();
+ broadcastTerminalList.forEach(
+ Volume -> {
+ String s = redisUtils.get(DeviceRedisKey.IP_BROADCAST + Volume.getId());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ }
+ } else {
+ offLine.getAndIncrement();
+ }
+ }
+ );
+
+ ipVolume.setTotalCount(broadcastTerminalList.size());
+ ipVolume.setOnlineCount(onLine.get());
+ ipVolume.setOfflineCount(offLine.get());
+
+ onLineCountVO.setBroadcast(ipVolume);
+ System.out.println("闊虫煴鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+ //鎽勫儚澶�
+ List<MonitorBo> monitorBos = SpringContextHolder.getBean(MonitorService.class).listMonitorOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+
+ DeviceOnLineCountVO Monitor = new DeviceOnLineCountVO();
+ monitorBos.forEach(
+ device -> {
+ String s = redisUtils.get(DeviceRedisKey.MONITOR + device.getDeviceSerial());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ }
+ } else {
+ offLine.getAndIncrement();
+ }
+ }
+ );
+
+ Monitor.setTotalCount(monitorBos.size());
+ Monitor.setOnlineCount(onLine.get());
+ Monitor.setOfflineCount(offLine.get());
+
+ onLineCountVO.setMonitor(Monitor);
+ System.out.println("鎽勫儚澶存墽琛屾椂闂�: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+
+ //鍗曠伅
+ List<LightBo> lights = SpringContextHolder.getBean(LightService.class).listLightOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+ AtomicInteger error = new AtomicInteger(0);
+
+
+ DeviceOnLineCountVO light = new DeviceOnLineCountVO();
+ lights.forEach(
+ device -> {
+ String s = redisUtils.get(DeviceRedisKey.LIGHT_DEVICE + device.getDeviceCode());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ }
+ } else {
+ error.getAndIncrement();
+ }
+ }
+ );
+
+ light.setTotalCount(lights.size());
+ light.setOnlineCount(onLine.get());
+ light.setOfflineCount(offLine.get());
+ light.setErrorCount(error.get());
+
+ onLineCountVO.setLight(light);
+ System.out.println("鍗曠伅鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+
+ //鍏呯數妗�
+ List<C3ChargingBo> c3mChargings = SpringContextHolder.getBean(C3ChargingService.class).getC3ChargingList();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+ AtomicInteger error = new AtomicInteger(0);
+
+
+ DeviceOnLineCountVO c3m = new DeviceOnLineCountVO();
+ c3mChargings.forEach(
+ device -> {
+ String s = redisUtils.get(DeviceRedisKey.C3M + device.getC3Id());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else if (redisDeviceStatus.getStatus() == 1) {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ } else {
+ error.getAndIncrement();
+ }
+ } else {
+ error.getAndIncrement();
+ }
+ }
+ );
+
+ c3m.setTotalCount(c3mChargings.size());
+ c3m.setOnlineCount(onLine.get());
+ c3m.setOfflineCount(offLine.get());
+ c3m.setErrorCount(error.get());
+
+ onLineCountVO.setC3m(c3m);
+ System.out.println("鍏呯數妗╂墽琛屾椂闂�: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+
+ //澶ф皵
+ List<AirEquipmentBo> airEquipments = SpringContextHolder.getBean(AirEquipmentService.class).listAirEquipmentOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+ AtomicInteger error = new AtomicInteger(0);
+
+
+ DeviceOnLineCountVO air = new DeviceOnLineCountVO();
+ airEquipments.forEach(
+ device -> {
+ String s = redisUtils.get(DeviceRedisKey.AIR + device.getAirMac());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else if (redisDeviceStatus.getStatus() == 1) {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ } else {
+ error.getAndIncrement();
+ }
+ } else {
+ error.getAndIncrement();
+ }
+ }
+ );
+
+ air.setTotalCount(airEquipments.size());
+ air.setOnlineCount(onLine.get());
+ air.setOfflineCount(offLine.get());
+ air.setErrorCount(error.get());
+
+ onLineCountVO.setAirEquipment(air);
+ System.out.println("澶ф皵鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+
+ //澶ф皵(鍐滆��)
+// List<AirEquipmentNongGengBo> airEquipmentNongGengBos = SpringContextHolder.getBean(AirEquipmentNongGengService.class).listAirEquipmentOnHome();
+// result.put("AirEquipmentNongGengTotalCount", airEquipmentNongGengBos.size());
+
+ //姘磋川
+ List<WaterQualityEquipmentBo> waterQualityEquipments = SpringContextHolder.getBean(WaterQualityEquipmentService.class).listWaterQualityEquipmentByKeyword(null, null);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+
+ DeviceOnLineCountVO water = new DeviceOnLineCountVO();
+ water.setTotalCount(waterQualityEquipments.size());
+ water.setOnlineCount(waterQualityEquipments.size());
+ water.setOfflineCount(0);
+ water.setErrorCount(0);
+ onLineCountVO.setWaterEquipment(water);
+ System.out.println("姘磋川鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+
+ //鐏潌鍊炬枩
+ List<LightPoleHeelingEquipmentBo> lightPoleHeelingEquipmentBos = SpringContextHolder.getBean(LightPoleHeelingEquipmentService.class).LightPoleHeelingEquipmentListOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+
+ DeviceOnLineCountVO PoleHeeling = new DeviceOnLineCountVO();
+ PoleHeeling.setTotalCount(lightPoleHeelingEquipmentBos.size());
+ PoleHeeling.setOnlineCount(lightPoleHeelingEquipmentBos.size());
+ PoleHeeling.setOfflineCount(0);
+ PoleHeeling.setErrorCount(0);
+ onLineCountVO.setLightPoleHeeling(PoleHeeling);
+ System.out.println("鐏潌鍊炬枩鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+
+ //鐔欒
+ List<PoleLightemitEntity> xiXuns = SpringContextHolder.getBean(PoleLightemitService.class).listLedOnHome();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ AtomicInteger onLine = new AtomicInteger(0);
+ AtomicInteger offLine = new AtomicInteger(0);
+
+ DeviceOnLineCountVO xixunLed = new DeviceOnLineCountVO();
+ xiXuns.forEach(
+ device -> {
+ String s = redisUtils.get(DeviceRedisKey.XIXUN + device.getLightemitControlCode());
+ if (s != null) {
+ RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
+ if (redisDeviceStatus.getStatus() == 0) {
+ //鍦ㄧ嚎
+ onLine.getAndIncrement();
+ } else {
+ //绂荤嚎
+ offLine.getAndIncrement();
+ }
+ } else {
+ offLine.getAndIncrement();
+ }
+ }
+ );
+
+ xixunLed.setTotalCount(xiXuns.size());
+ xixunLed.setOnlineCount(onLine.get());
+ xixunLed.setOfflineCount(offLine.get());
+
+ onLineCountVO.setLedXiXun(xixunLed);
+ System.out.println("鐔欐睕鎵ц鏃堕棿: " + LocalDateTime.now());
+ countDownLatchUtil.countDown(str);
+ }
+ }).start();
+ try {
+ countDownLatch.await(12000, TimeUnit.MILLISECONDS);
+ countDownLatchUtil.remove(str);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println("鍝嶅簲鏃堕棿: " + LocalDateTime.now());
+ return onLineCountVO;
+ }
+
public CommonPage queryAllStatesAndList(Integer pageNo, Integer pageSize, PoleStatesParam param, Integer order, Integer seq) {
if (param == null) {
@@ -939,7 +1294,7 @@
* 鎺ㄩ�佸ぇ姘旂洃娴嬫暟鎹埌novaLED
*/
public VnnoxResult pushAirDataToNova(PushAirDataToNovaParam param) {
- Long poleId=param.getPoleId();
+ Long poleId = param.getPoleId();
Pole pole = getById(poleId);
PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 3));
PoleBinding nova = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 1));
@@ -957,8 +1312,104 @@
A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(poleId);
//鎺ㄩ�佹暟鎹�
// return SpringContextHolder.getBean(VnnoxService.class).publishWaterData(LED.getPlayerId(),param.getDuration(), data);
- return SpringContextHolder.getBean(VnnoxService.class).WaterData(LED.getPlayerId(),param.getDuration(), data);
+ return SpringContextHolder.getBean(VnnoxService.class).WaterData(LED.getPlayerId(), param.getDuration(), data);
}
+ /**
+ * 缁熻璁惧鐘舵�佸瓨鍏edis
+ */
+ public void setRedis() {
+
+ // redisStatusKeyTimeout涓虹┖ 浠h〃涓婃璋冪敤鍦�15鍒嗛挓鍓�
+ if (redisUtils.get("redisStatusKeyTimeout") != null) {
+ //涓嶄负绌� 璇存槑鐭椂闂村唴璋冪敤杩� 鐩存帴杩斿洖
+ System.out.println("15鍒嗛挓鍐呭凡缁忔洿鏂拌繃鏁版嵁");
+ return;
+ }
+
+ //璁剧疆瑙﹀彂鏉′欢 瀛樺叆Redis 15鍒嗛挓瓒呮椂 15鍒嗛挓鍐呭啀娆¤皟鐢ㄧ洿鎺ヨ繑鍥�
+ redisUtils.set("redisStatusKeyTimeout", System.currentTimeMillis(), 60*15);
+
+ CountDownLatch countDownLatch = new CountDownLatch(7);//todo
+ //鑾峰彇涓�涓�7浣嶉殢鏈烘暟
+ String str = RandomStringUtils.randomAlphanumeric(7);
+ countDownLatchUtil.push(str, countDownLatch);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(IpVolumeService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("闊虫煴鎵ц");
+
+ }
+ }).start();
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(MonitorService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("鎽勫儚澶存墽琛�");
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(LightService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("鍗曠伅鎵ц");
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(C3ChargingService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("鍏呯數妗╂墽琛�");
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(AirEquipmentService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("澶ф皵鎵ц");
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(PoleLightemitService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("鐔欐睕鎵ц");
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(VnnoxService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("璇虹摝鎵ц"); //todo 璇虹摝鏁呴殰鏆傛棤
+ }
+ }).start();
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ SpringContextHolder.getBean(PoleLightemitService.class).setCacheData();
+ countDownLatchUtil.countDown(str);
+ System.out.println("鐔欐睕鎵ц");
+ }
+ }).start();
+
+
+ try {
+ countDownLatch.await(12000, TimeUnit.MILLISECONDS);
+ countDownLatchUtil.remove(str);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3