ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java
@@ -14,6 +14,7 @@ import com.sandu.ximon.admin.dto.DeviceStatusDto; import com.sandu.ximon.admin.param.*; import com.sandu.ximon.admin.security.PermissionConfig; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.service.AirEquipmentService; import com.sandu.ximon.admin.service.IpVolumeService; import com.sandu.ximon.admin.service.MonitorService; @@ -119,6 +120,7 @@ /** * å¨çº¿æ°é */ // @AnonymousAccess @GetMapping("/online") public ResponseVO<Object> online() { return ResponseUtil.success(poleService.poleCount()); @@ -296,9 +298,9 @@ @AnonymousAccess @PostMapping("/isRegisterByCode") public ResponseVO<Object> getStatusByCode() { /*// if (!permissionConfig.check(MenuEnum.GET_STATE_BY_DEVICECODE.getCode())) { // return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); // }*/ if (!permissionConfig.check(MenuEnum.GET_STATE_BY_DEVICECODE.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } ArrayList<String> deviceCodeList = new ArrayList<>(); deviceCodeList.add("baseDevice01"); deviceCodeList.add("baseDevice02"); @@ -414,4 +416,12 @@ return ResponseUtil.success(poleService.pushAirDataToXiXun(poleId)); } @AnonymousAccess @PostMapping("/setRedis") public ResponseVO<Object> pushAirDataToXiXun() { poleService.setRedis(); return ResponseUtil.success("æ´æ°ç¶æå®æ"); } } ximon-admin/src/main/java/com/sandu/ximon/admin/redis/DeviceRedisKey.java
@@ -9,40 +9,40 @@ /** * 鳿± */ public static final String IP_BROADCAST = "volume."; public static final String IP_BROADCAST = "volume:"; /** * æå头 */ public static final String MONITOR = "monitor."; public static final String MONITOR = "monitor:"; /** * åç¯ */ public static final String LIGHT_DEVICE = "lightDevice."; public static final String LIGHT_DEVICE = "lightDevice:"; /** * å çµæ¡© */ public static final String C3M = "c3m."; public static final String C3M = "c3m:"; /** * å¤§æ° */ public static final String AIR = "air."; public static final String AIR = "air:"; /** * åè */ public static final String AIR_NONGGENG = "airNongGeng."; public static final String AIR_NONGGENG = "airNongGeng:"; /** * çæ± */ public static final String XIXUN = "led_xixun."; public static final String XIXUN = "led_xixun:"; /** * è¯ºç¦ */ public static final String NOVA = "led_nova."; public static final String NOVA = "led_nova:"; } ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java
@@ -82,7 +82,7 @@ if (loginUserInfo == null) { return null; } if (AdministratorEnums.NORMAL.getCode().equals(loginUserInfo.getAdministratorType())) { if (!AdministratorEnums.ADMIN.getCode().equals(loginUserInfo.getAdministratorType())) { return loginUserInfo.getUserId(); } return null; ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
@@ -1,5 +1,6 @@ package com.sandu.ximon.admin.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; @@ -16,11 +17,13 @@ import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; import com.sandu.ximon.admin.redis.DeviceRedisKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.admin.utils.StringUtil; import com.sandu.ximon.admin.vo.EquipmentInfomation; import com.sandu.ximon.admin.vo.RedisDeviceStatus; import com.sandu.ximon.dao.bo.AirEquipmentBo; import com.sandu.ximon.dao.domain.AirEquipment; import com.sandu.ximon.dao.mapper.AirEquipmentMapper; @@ -35,6 +38,7 @@ public class AirEquipmentService extends BaseServiceImpl<AirEquipmentMapper, AirEquipment> { private final AirEquipmentMapper airEquipmentMapper; private final RedisUtils redisUtils; /** @@ -352,4 +356,25 @@ throw new BusinessException("æ°æ®æ ¡éªå¼å¸¸ï¼"); } } /** * åRedisä¸åå ¥è®¾å¤ç¶æ */ public void setCacheData() { list().forEach( device -> { RedisDeviceStatus deviceStatus = new RedisDeviceStatus(); deviceStatus.setDeviceId(device.getAirMac()); if (RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_STATE.getCode() + device.getAirMac()) != null) { deviceStatus.setStatus(0); } else { deviceStatus.setStatus(1); } redisUtils.set(DeviceRedisKey.AIR + device.getAirMac(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.AIR + device.getAirMac()); } ); } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -1178,7 +1178,7 @@ A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage beatDataPackage = ReadTheHeartbeatPackage(device.getC3Id(), false); if (beatDataPackage != null) { //å¨çº¿ç¶æ 1.ç©ºé² 2.å çµä¸ 3.å çµä¸æï¼çå¾ æå¡å¨ç¡®è®¤ 4.å çµç»æï¼çå¾ æå¡å¨ç¡®è®¤ 5.ææ é 6.ä¸å çµæ¡©å¯¹æ¥ä¸ if (Integer.valueOf(beatDataPackage.getStatusBit()) != 5) { if (Integer.valueOf(beatDataPackage.getStatusBit()) == 5) { deviceStatus.setStatus(2); } else { deviceStatus.setStatus(0); @@ -1188,7 +1188,8 @@ deviceStatus.setStatus(1); } } redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getC3Id(), deviceStatus); redisUtils.set(DeviceRedisKey.C3M + device.getC3Id(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.C3M + device.getC3Id()); } ); ximon-admin/src/main/java/com/sandu/ximon/admin/service/DeviceStatusCountService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package com.sandu.ximon.admin.service; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author LiuHaoNan * @date 2022/9/27 */ @Service @AllArgsConstructor public class DeviceStatusCountService implements Runnable { private final WaterQualityEquipmentService waterQualityEquipmentService; private final AirEquipmentNongGengService airEquipmentNongGengService; private final LightPoleHeelingService poleHeelingService; private final AirEquipmentService airEquipmentService; private final LedPlayerEntityService ledNovaService; private final PoleLightemitService ledXixunService; private final C3ChargingService c3ChargingService; private final IpVolumeService ipVolumeService; private final MonitorService monitorService; private final LightService lightService; @Override public void run() { } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeService.java
@@ -1,5 +1,6 @@ package com.sandu.ximon.admin.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; @@ -179,7 +180,6 @@ */ public List<BroadcastTerminalV2EntityBo> getBroadcastTerminalListOnHome() { List<BroadcastTerminalV2EntityBo> broadcastTerminalV2EntityBos; List<BroadcastTerminalV2EntityBo> broadcastTerminalV2EntityBos_final = new ArrayList<>(); if (SecurityUtils.getClientId() == null) { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(null, null, 2); @@ -372,7 +372,8 @@ } } redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getId(), deviceStatus); redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getId(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.IP_BROADCAST + device.getId()); } ); ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.iot.model.v20180120.BatchGetDeviceStateResponse; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -932,10 +933,15 @@ public void setCacheData() { List<String> collect = list().stream().map(Light::getDeviceCode).collect(Collectors.toList()); // collect.forEach( // code -> { // redisUtils.delete(DeviceRedisKey.LIGHT_DEVICE + code); // } // ); List<List<String>> split = CollectionUtil.split(collect, 100); List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = null; List<RedisDeviceStatus> statusList = null; List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = new ArrayList<>(); List<RedisDeviceStatus> statusList = new ArrayList<>(); for (List<String> splist : split) { deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(splist); if (deviceStatuses != null) { @@ -946,6 +952,10 @@ device.setStatus(0); } else if ("OFFLINE".equals(deviceStatus.getStatus())) { device.setStatus(1); } else if ("UNACTIVE".equals(deviceStatus.getStatus())) { device.setStatus(0); } else if ("DISABLE".equals(deviceStatus.getStatus())) { device.setStatus(0); } else { device.setStatus(2); } @@ -956,7 +966,7 @@ } statusList.forEach(status -> { redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), status); redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), JSON.toJSONString(status)); }); } @@ -987,7 +997,7 @@ } A5LightSetCalendarReqInnerFrame setCalendarReqInnerFrame = new A5LightSetCalendarReqInnerFrame(address, year % 100, month+1, day, hour, min, sec); new A5LightSetCalendarReqInnerFrame(address, year % 100, month + 1, day, hour, min, sec); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), setCalendarReqInnerFrame); System.out.println(a5Frame + " -----a5Frame"); ximon-admin/src/main/java/com/sandu/ximon/admin/service/MonitorService.java
@@ -12,10 +12,13 @@ import com.sandu.ximon.admin.dto.YSY_AccessTokenDto; import com.sandu.ximon.admin.dto.YSY_MonitorDto; import com.sandu.ximon.admin.param.MonitorParam; import com.sandu.ximon.admin.redis.DeviceRedisKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.ListPagingUtils; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.admin.vo.EquipmentInfomation; import com.sandu.ximon.admin.vo.RedisDeviceStatus; import com.sandu.ximon.dao.bo.MonitorBo; import com.sandu.ximon.dao.domain.Monitor; import com.sandu.ximon.dao.domain.PoleBinding; @@ -55,6 +58,8 @@ private final PoleBindingService poleBindingService; private final RedisUtils redisUtils; /** * æå头åè¡¨æ¨¡ç³æ¥è¯¢ @@ -460,4 +465,33 @@ } /** * åRedisä¸åå ¥è®¾å¤ç¶æ */ public void setCacheData() { list().forEach( device -> { RedisDeviceStatus deviceStatus = new RedisDeviceStatus(); deviceStatus.setDeviceId(device.getDeviceSerial()); if (device != null) { EquipmentInfomation monitorInfo = getMonitorInfo(device.getDeviceSerial()); if (monitorInfo != null) { if ("å¨çº¿".equals(monitorInfo.getEquipmentState())) { deviceStatus.setStatus(0); } else { deviceStatus.setStatus(1); } } else { deviceStatus.setStatus(1); } } redisUtils.set(DeviceRedisKey.MONITOR + device.getDeviceSerial(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.MONITOR + device.getDeviceSerial()); } ); } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
@@ -576,13 +576,15 @@ list().forEach( xiXun -> { RedisDeviceStatus deviceStatus = new RedisDeviceStatus(); deviceStatus.setDeviceId(xiXun.getLightemitControlCode()); boolean ledOnLine = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode()); if (ledOnLine) { deviceStatus.setStatus(0); } else { deviceStatus.setStatus(1); } redisUtils.set(DeviceRedisKey.XIXUN + xiXun.getLightemitControlCode(), deviceStatus); redisUtils.set(DeviceRedisKey.XIXUN + xiXun.getLightemitControlCode(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.XIXUN + xiXun.getLightemitControlCode()); } ); } 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); } /** * ç»è®¡è®¾å¤ç¶æåå ¥redis */ public void setRedis() { // redisStatusKeyTimeout为空 ä»£è¡¨ä¸æ¬¡è°ç¨å¨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); } } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
@@ -1,10 +1,12 @@ package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.sandu.common.execption.BusinessException; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.config.VnnoxConstant; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; import com.sandu.ximon.admin.redis.DeviceRedisKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.*; import com.sandu.ximon.admin.utils.request.VnnoxScreenStatusType; @@ -12,10 +14,7 @@ import com.sandu.ximon.admin.utils.response.VnnoxPlayerResponse; import com.sandu.ximon.admin.utils.response.VnnoxResult; import com.sandu.ximon.admin.utils.response.VnnoxResultResponse; import com.sandu.ximon.admin.vo.NovaAStateInfoVO; import com.sandu.ximon.admin.vo.NovaPushResultVO; import com.sandu.ximon.admin.vo.NovaScreenShorUrlVO; import com.sandu.ximon.admin.vo.NovaWeatherVO; import com.sandu.ximon.admin.vo.*; import com.sandu.ximon.dao.domain.LedPlayerEntity; import com.sandu.ximon.dao.domain.LedPlayerInfoEntity; import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity; @@ -718,6 +717,38 @@ vnnoxAPIUtil.getAsyncStatus(playerIdList, stateValue); } ); } /** * åRedisä¸åå ¥è®¾å¤ç¶æ */ public void setCacheData() { List<List<LedPlayerEntity>> split = CollectionUtil.split(ledPlayerEntityService.list(), 100); List<LedPlayerEntity> ledList = new ArrayList<>(); split.forEach( list -> { List<LedPlayerEntity> ledPlayerEntities = vnnoxAPIUtil.syncCurrentInfo(list); ledList.addAll(ledPlayerEntities); } ); ledList.forEach( device -> { RedisDeviceStatus deviceStatus = new RedisDeviceStatus(); deviceStatus.setDeviceId(device.getPlayerId()); if (device.getOnlineStatus() == 0) { deviceStatus.setStatus(1); } else if (device.getOnlineStatus() == 1) { deviceStatus.setStatus(0); } else { deviceStatus.setStatus(1); } redisUtils.set(DeviceRedisKey.NOVA + device.getPlayerId(), JSON.toJSONString(deviceStatus)); // redisUtils.delete(DeviceRedisKey.IP_BROADCAST + device.getId()); } ); } } ximon-admin/src/main/java/com/sandu/ximon/admin/vo/DeviceOnLineCountVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.sandu.ximon.admin.vo; import lombok.Data; /** * @author LiuHaoNan * @date 2022/9/27 * è®¾å¤æ°éç»è®¡ */ @Data public class DeviceOnLineCountVO { /** * è®¾å¤æ»æ°é */ private Integer totalCount; /** * å¨çº¿æ°é */ private Integer onlineCount; /** * 离线æ°é */ private Integer offlineCount = 0; /** * æ éæ°é */ private Integer errorCount = 0; } ximon-admin/src/main/java/com/sandu/ximon/admin/vo/OnLineCountVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package com.sandu.ximon.admin.vo; import lombok.Data; /** * @author LiuHaoNan * @date 2022/9/27 * é¦é¡µæ°éç»è®¡å®ä½ */ @Data public class OnLineCountVO { /** * è¯ºç¦ */ private DeviceOnLineCountVO ledNova; /** * 鳿± */ private DeviceOnLineCountVO broadcast; /** * æå头 */ private DeviceOnLineCountVO monitor; /** * åç¯ */ private DeviceOnLineCountVO light; /** * å çµæ¡© */ private DeviceOnLineCountVO c3m; /** * å¤§æ° */ private DeviceOnLineCountVO airEquipment; /** * åè */ private DeviceOnLineCountVO airEquipmentNongGeng; /** * æ°´è´¨ */ private DeviceOnLineCountVO waterEquipment; /** * ç¯æå¾æ */ private DeviceOnLineCountVO LightPoleHeeling; /** * çæ± */ private DeviceOnLineCountVO ledXiXun; }