2021与蓝度共同重构项目,服务端
Van333
2022-12-15 5e94332935da62448c17f89a807acf46a5ae3e75
本地诺瓦调整
已修改9个文件
587 ■■■■■ 文件已修改
dao/src/main/resources/mapper/AirDataMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/controller/localMQTTTestController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleBindingService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java 356 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/AirDataMapper.xml
@@ -76,7 +76,7 @@
        select t1.device_code
        from pole_binding t1
        left join pole t2 on t1.pole_id = t2.id
        where t1.device_type = 3
        where t1.device_type = 11
        and t1.pole_id = #{poleId}
        <if test="clientId != null">
            AND (t2.user_id = #{clientId} OR t2.client_id = #{clientId})
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/controller/localMQTTTestController.java
@@ -1,13 +1,21 @@
package com.sandu.ximon.admin.localMQTT.controller;
import com.sandu.ximon.admin.localMQTT.util.MqttClientUtil;
import com.sandu.ximon.admin.newnova.param.NewNovaStatusParam;
import com.sandu.ximon.admin.newnova.utils.NovaAPIUtil;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.dao.domain.NewNovaLed;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatus;
import static com.sandu.ximon.admin.newnova.utils.NovaAPIUtil.loginSn;
import static com.sandu.ximon.admin.newnova.utils.NovaAPIUtil.searchStatus;
import static java.lang.Thread.sleep;
/**
@@ -25,7 +33,7 @@
    @RequestMapping("/test")
    public String localMQTT() throws InterruptedException {
        for (int i = 0; i < 1000; i++) {
        for (int i = 0; i < 1; i++) {
            /*
            * 开灯100
@@ -74,15 +82,66 @@
//            log.info("定时任务返回结果:"+result4);
//            sleep(3000);
            boolean set = RedisUtils.getBean().set(localMqttConnectStatus+"363832544e5008ff4734ffff",0);
            System.out.println(set);
            System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"));
            System.out.println("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff")));
            System.out.println("------------");
//            boolean set = RedisUtils.getBean().set(localMqttConnectStatus+"363832544e5008ff4734ffff",0);
//            System.out.println(set);
//            System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"));
//            System.out.println("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff")));
//            System.out.println("------------");
//            System.out.println("链接状态:---"+i+"---:");
//            System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"));
            sleep(1000);
//            sleep(1000);
            NovaAPIUtil instanceUtil = NovaAPIUtil.getInstanceUtil();
            System.out.println(instanceUtil);
//            System.out.println("循环重复登录:");
//            for (int j = 0; j < 1; j++) {
//                System.out.println(j+"次循环,开始");
//                loginSn.forEach(
//                        (sn,data)->{
//                            instanceUtil.login(sn, 0);
//                        }
//                );
//                System.out.println(j+"次循环,结束");
//            }
            System.out.println("循环重复截图:");
            NewNovaStatusParam newNovaStatusParam = new NewNovaStatusParam();
            List<NewNovaStatusParam.NovascreenShotDTO> list = new ArrayList<>();
            NewNovaStatusParam.NovascreenShotDTO dto = new NewNovaStatusParam.NovascreenShotDTO();
            List<NewNovaStatusParam.NovaDTO> novaList = new ArrayList<>();
            loginSn.forEach(
                    (sn,data)->{
                        dto.setSn(sn);
                        list.add(dto);
                    }
            );
//            instanceUtil.reboot();
            newNovaStatusParam.setScreenShotList(list);
            System.out.println("list中一共"+list.size()+"个屏幕");
            System.out.println("loginSn"+loginSn.size()+"个屏幕");
            for (int j = 0; j < 1; j++) {
                System.out.println(j+"次循环,开始");
                List<NewNovaLed> newNovaLedList = new ArrayList<>();
                loginSn.forEach(
                        (sn,data)->{
                            instanceUtil.screenShot(newNovaStatusParam);
                            NewNovaLed newNovaLed = new NewNovaLed();
                            newNovaLed.setSn(sn);
                            instanceUtil.getInfo(newNovaLed);
                            newNovaLedList.add(newNovaLed);
                        }
                );
                instanceUtil.getOnlineStatus(newNovaLedList,false);
                System.out.println(j+"次循环,结束");
            }
        }
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java
@@ -209,6 +209,7 @@
        if (param.getNovaList() == null || param.getNovaList().isEmpty()) {
            return ResponseUtil.fail("请选择设备");
        }
//        return ResponseUtil.success("666");
        return ResponseUtil.success(NovaAPIUtil.getInstanceUtil().reboot(param));
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java
@@ -7,7 +7,6 @@
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame;
import com.sandu.ximon.admin.newnova.conf.ProgramPathConfig;
import com.sandu.ximon.admin.newnova.param.NewNovaLedParam;
import com.sandu.ximon.admin.newnova.param.ProgramPrarm;
@@ -18,13 +17,14 @@
import com.sandu.ximon.admin.newnova.vo.StatusVO;
import com.sandu.ximon.admin.newnova.vo.TrasfromStatusVO;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.service.AirDataService;
import com.sandu.ximon.admin.service.PoleBindingService;
import com.sandu.ximon.admin.service.PoleService;
import com.sandu.ximon.dao.bo.AirDataNongGengBo;
import com.sandu.ximon.dao.bo.NewNovaGroupListBo;
import com.sandu.ximon.dao.domain.NewNovaLed;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.domain.PoleBinding;
import com.sandu.ximon.dao.mapper.AirDataNongGengMapper;
import com.sandu.ximon.dao.mapper.NewNovaLedMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -198,13 +198,13 @@
        if (nova == null) {
            throw new BusinessException("未绑定诺瓦设备");
        }
        PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, nova.getPoleId()).eq(PoleBinding::getDeviceType, 3));
        PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, nova.getPoleId()).eq(PoleBinding::getDeviceType, 11));
        if (air == null) {
            throw new BusinessException("未绑定大气设备");
        }
        //获取大气监测数据
        A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(nova.getPoleId());
        AirDataNongGengBo data = SpringContextHolder.getBean(AirDataNongGengMapper.class).historyData(air.getDeviceCode()).get(0);
        //解析大气数据
        Map pageInfo = parseData(data, duration, fontSize);
@@ -248,7 +248,7 @@
     * @return
     */
    private Map parseData(A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data, Long duration, Long fontSize) {
    private Map parseData(AirDataNongGengBo data, Long duration, Long fontSize) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z+8:00'");
        Date end = new Date();
        end.setTime(end.getTime() + duration);
@@ -302,42 +302,42 @@
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"温度:" + (data == null || data.getTemperature() == null ? " - " : data.getTemperature()) + "°\"" + "\n" +
                "                                                            \"content\": \"温度:" + (data == null || data.getAirTemperature() == null ? " - " : data.getAirTemperature()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                },\n" +
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"湿度:" + (data == null || data.getHumidity() == null ? " - " : data.getHumidity()) + "%\"" + "\n" +
                "                                                            \"content\": \"湿度:" + (data == null || data.getAirHumidity() == null ? " - " : data.getAirHumidity()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                },\n" +
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"pm25:" + (data == null || data.getPm25() == null ? " - " : data.getPm25()) + "μg/m³\"" + "\n" +
                "                                                            \"content\": \"pm25:" + (data == null || data.getPm2point5() == null ? " - " : data.getPm2point5()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                },\n" +
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"pm10:" + (data == null || data.getPm10() == null ? " - " : data.getPm10()) + "μg/m³\"" + "\n" +
                "                                                            \"content\": \"pm10:" + (data == null || data.getPm10() == null ? " - " : data.getPm10()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                },\n" +
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"甲醛:" + (data == null || data.getEch2o() == null ? " - " : data.getEch2o()) + "μg/m³\"" + "\n" +
                "                                                            \"content\": \"光照:" + (data == null || data.getIllumination() == null ? " - " : data.getIllumination()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                },\n" +
                "                                                {\n" +
                "                                                    \"segs\": [\n" +
                "                                                        {\n" +
                "                                                            \"content\": \"CO2:" + (data == null || data.getCo2() == null ? " - " : data.getCo2()) + "ppm\"" + "\n" +
                "                                                            \"content\": \"噪音:" + (data == null || data.getNoise() == null ? " - " : data.getNoise()) + "\"" + "\n" +
                "                                                        }\n" +
                "                                                    ]\n" +
                "                                                }\n" +
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -1,5 +1,6 @@
package com.sandu.ximon.admin.newnova.utils;
import afu.org.checkerframework.checker.units.qual.A;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sandu.common.execption.BusinessException;
@@ -24,6 +25,8 @@
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static java.lang.Thread.sleep;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
@@ -33,7 +36,15 @@
    private ProgramPathConfig filePathConfig;
    private Map<String, Boolean> loginSn = new HashMap();
    /*
    * 成功登录的
    * */
    public static Map<String, Boolean> loginSn = new HashMap();
    /*
    * 搜索出来的状态
    * */
    public static List<StatusVO> searchStatus = new ArrayList<>();
    private ViplexCore instance = null;
@@ -41,7 +52,7 @@
    private static String loginInfo = null;
    private NovaAPIUtil() {
    private NovaAPIUtil() throws InterruptedException {
        filePathConfig = SpringContextHolder.getBean(ProgramPathConfig.class);
        String rootDir = filePathConfig.getOutPutPath();
        instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class);
@@ -57,32 +68,59 @@
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        CountDownLatch countDownLatch1 = new CountDownLatch(1);
        instance.nvSearchTerminalAsync(new ViplexCore.CallBack() {
        instance.nvSearchTerminalAsync((code, data) -> {
            searchVO.setStatusCode(code);
            searchVO.setStatusData(data);
            loginInfo = data;
            @Override
            public void dataCallBack(int code, String data) {
                searchVO.setStatusCode(code);
                searchVO.setStatusData(data);
                loginInfo = data;
            if (code == 0 ){
                Map map = (Map) JSONObject.parse(data);
                /*
                * 当前屏体状态,terminalState共有6个值,分别代表:
0:未连接任何终端,当前处于未连接状态
1:连接成功但是未登录状态
2:被他人登录状态
3:登录成功状态
4:密码错误状态
5:离线状态,处于搜索不到的状态,但是曾经被搜索到过
                * */
                if (map.get("terminalState").equals(0) || map.get("terminalState").equals(1)){
                    login((String) map.get("sn"),0);
                    searchVO.setSn((String) map.get("sn"));
                    searchStatus.add(searchVO);
                    System.out.println("\nViplexCore 搜索 sn:" + map.get("sn"));
                } else if (map.get("terminalState").equals(3) ) {
                    loginSn.put(searchVO.getSn(),true);
                }
                System.out.println("\nViplexCore 搜索 code:" + code);
                System.out.println("\nViplexCore 搜索 data:" + data);
                countDownLatch1.countDown();
            }
            else{
                System.out.println("搜索结果code:"+code);
            }
            countDownLatch1.countDown();
        });
        try {
            countDownLatch1.await(10000, TimeUnit.MILLISECONDS);
            countDownLatch1.await(30000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
//        login("MZVA51930N2113017308");
        sleep(35000);
    }
    public static NovaAPIUtil getInstanceUtil() {
        if (instanceUtil == null) {
            synchronized (NovaAPIUtil.class) {
                if (instanceUtil == null) {
                    instanceUtil = new NovaAPIUtil();
                    try {
                        instanceUtil = new NovaAPIUtil();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }
@@ -100,49 +138,50 @@
     */
    public StatusVO login(String sn, Integer loginType) {
        /*
        从loginSn 判断是否登录过
        * */
        if (loginSn.get(sn) != null && loginSn.get(sn) && loginType == 0) {
            return new StatusVO(0);
        }
        if (loginInfo == null) {
            return new StatusVO(10086);
        }
        if (!loginInfo.contains(String.format("\"sn\":\"%s\",", sn)) && loginType == 0) {
            //未搜索到屏幕  登录不成功
            System.out.println("loginType : " + loginType);
            return new StatusVO(10086);
        }
        /*
        * 没有则执行登录
        * */
        else  {
        StatusVO statusVO = new StatusVO();
            StatusVO statusVO = new StatusVO();
        System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
        String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":" + loginType + "}", sn);
            System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
            String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":" + loginType + "}", sn);
        CountDownLatch countDownLatch2 = new CountDownLatch(1);
        instance.nvLoginAsync(loginParam, new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
            CountDownLatch countDownLatch2 = new CountDownLatch(1);
            instance.nvLoginAsync(loginParam, (code, data) -> {
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore 登录 sn:" + sn);
                System.out.println("\nViplexCore 登录 code:" + code);
                System.out.println("\nViplexCore 登录 data:" + data);
                if (code == 65353) {
                    statusVO.setStatusCode(0);
                }
                countDownLatch2.countDown();
            }
            });
        });
        try {
            countDownLatch2.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
            try {
                countDownLatch2.await(5000,TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            if (statusVO.getStatusCode() != 0) {
                System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!");
                System.out.println("错误码:" + statusVO.getStatusCode());
                loginSn.put(sn,false);
            } else {
                loginSn.put(sn, true);
            }
            return statusVO;
        }
        if (statusVO.getStatusCode() != 0) {
            System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!");
            System.out.println("错误码:" + statusVO.getStatusCode());
        } else {
            //登陆成功之后存入map保存登录信息
            loginSn.put(sn, true);
        }
        return statusVO;
    }
    /**
@@ -776,14 +815,13 @@
     * 重启
     */
    public List<NewNovaStatusParam.NovaDTO> reboot(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetReBootTaskAsync(重启) begin... ");
        if (param.getNovaList() == null || param.getNovaList().size() == 0) {
            throw new BusinessException("重启设备不能为空 !");
        }
        CountDownLatch countDownLatch = new CountDownLatch(1);
        param.getNovaList().forEach(newNova -> {
                    logout(newNova.getSn(), 0);
//                    logout(newNova.getSn(), 0);
                    StatusVO login = login(newNova.getSn(), 1);
                    if (login.getStatusCode() != 0) {
                        countDownLatch.countDown();
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java
@@ -9,6 +9,8 @@
@Data
public class StatusVO {
    public StatusVO(int statusCode) {
        this.statusCode = statusCode;
    }
@@ -19,4 +21,6 @@
    private String statusData;
    private String sn;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
@@ -161,7 +161,7 @@
            code = baseMapper.getCodeByPoleId(poleId, null);
        }
        A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage
                = RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT.getCode() + code, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage.class);
                = RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_NONG_GENG.getCode() + code, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage.class);
        if (heartBeatDataPackage == null) {
            return null;
        }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleBindingService.java
@@ -37,6 +37,9 @@
    @Transactional(rollbackFor = Exception.class)
    public boolean bindPole(Long poleId, PoleBindingParam param) {
        Integer deviceType = param.getDeviceType();
        if (deviceType == 1){
            deviceType = 12;
        }
        int size = 0;
        switch (deviceType.toString()) {
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -329,42 +329,42 @@
        }).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<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();
        //单灯
@@ -416,49 +416,49 @@
        //充电桩
        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(C3mRedisConstant.C3_STATUS.getCode() + device.getC3Mac());
                            RedisDeviceStatus redisDeviceStatus = new RedisDeviceStatus();
                            redisDeviceStatus.setDeviceId(device.getC3Id().toString());
                            if (s != null) {
                                A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage = JSON.parseObject(s, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage.class);
                                //  充电桩口状态位  1.空闲 2.充电中 3.充电中断,等待服务器确认 4.充电结束,等待服务器确认 5.有故障 6.与充电桩对接中
                                if ("5".equals(heartBeatDataPackage.getStatusBit())) {
                                    //故障
                                    onLine.getAndIncrement();
                                    error.getAndIncrement();
                                } else {
                                    //在线
                                    onLine.getAndIncrement();
                                }
                            } else {
                                //离线
                                offLine.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<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(C3mRedisConstant.C3_STATUS.getCode() + device.getC3Mac());
//                            RedisDeviceStatus redisDeviceStatus = new RedisDeviceStatus();
//                            redisDeviceStatus.setDeviceId(device.getC3Id().toString());
//                            if (s != null) {
//                                A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage = JSON.parseObject(s, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage.class);
//                                //  充电桩口状态位  1.空闲 2.充电中 3.充电中断,等待服务器确认 4.充电结束,等待服务器确认 5.有故障 6.与充电桩对接中
//                                if ("5".equals(heartBeatDataPackage.getStatusBit())) {
//                                    //故障
//                                    onLine.getAndIncrement();
//                                    error.getAndIncrement();
//                                } else {
//                                    //在线
//                                    onLine.getAndIncrement();
//                                }
//                            } else {
//                                //离线
//                                offLine.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();
        //大气
@@ -509,76 +509,76 @@
//        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<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<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();
//        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(20000, TimeUnit.MILLISECONDS);
            countDownLatchUtil.remove(str);
@@ -649,7 +649,7 @@
        setCount(PoleResult);
        CommonPage commonPage = ListPagingUtils.pages(PoleResult, pageNo, pageSize);
//
        return commonPage;
    }
@@ -1345,24 +1345,24 @@
        //获取一个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("音柱执行");
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                SpringContextHolder.getBean(IpVolumeService.class).setCacheData();
//                countDownLatchUtil.countDown(str);
//                System.out.println("音柱执行");
//
//            }
//        }).start();
            }
        }).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(MonitorService.class).setCacheData();
//                countDownLatchUtil.countDown(str);
//                System.out.println("摄像头执行");
//            }
//        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
@@ -1387,14 +1387,14 @@
                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(PoleLightemitService.class).setCacheData();
//                countDownLatchUtil.countDown(str);
//                System.out.println("熙汛执行");
//            }
//        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
@@ -1403,14 +1403,14 @@
                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();
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                SpringContextHolder.getBean(PoleLightemitService.class).setCacheData();
//                countDownLatchUtil.countDown(str);
//                System.out.println("熙汛执行");
//            }
//        }).start();
        try {