2021与蓝度共同重构项目,服务端
Van333
2022-12-15 5e94332935da62448c17f89a807acf46a5ae3e75
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -60,6 +60,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * 灯杆相关
 *
@@ -129,24 +130,26 @@
    /**
     * 删除灯杆
     */
    public boolean deletePole(Long poleId) {
        Pole pole = getById(poleId);
        if (pole == null) {
    public boolean deletePole(List<Long> poleIds) {
        List<Pole> poles = listByIds(poleIds);
        if (poles.isEmpty()) {
            throw new BusinessException("未找到该灯杆");
        }
        // 删除灯杆绑定关系
        poleBindingService.remove(Wrappers.<PoleBinding>lambdaQuery().eq(PoleBinding::getPoleId, poleId));
        poleBindingService.remove(Wrappers.<PoleBinding>lambdaQuery().in(PoleBinding::getPoleId, poleIds));
        SpringContextHolder.getBean(LightTaskPoleRelationService.class)
                .remove(Wrappers.lambdaQuery(LightTaskPoleRelation.class).in(LightTaskPoleRelation::getPoleId, poleIds));
        /**
         * 删除灯杆日志记录开始
         */
        String content = "{灯杆Code:" + pole.getDeviceCode() + ", 灯杆名称:" + pole.getPoleName() + " }";
        String content = "{灯杆id:" + poles + " }";
        StoreOperationRecordsUtils.storeOperationData(null, null, "删除灯杆", content);
        /**
         * 删除灯杆日志记录结束
         */
        return removeById(poleId);
        return removeByIds(poleIds);
    }
@@ -326,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();
        //单灯
@@ -413,50 +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 -> {
//                            RedisUtils.getBean().set(C3mRedisConstant.C3_STATUS.getCode() + heartbeatReportInnerFrame.getHeartBeatDataPackage().getC3Mac()
//                                    , heartbeatReportInnerFrame.getHeartBeatDataPackage(), 300L);
                            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);
                                if ("5".equals(heartBeatDataPackage.getStatusBit())) {
                                    //在线
                                    onLine.getAndIncrement();
                                } else {
                                    //故障
                                    onLine.getAndIncrement();
                                    error.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();
        //大气
@@ -472,7 +474,7 @@
                DeviceOnLineCountVO air = new DeviceOnLineCountVO();
                airEquipments.forEach(
                        device -> {
                            String s = redisUtils.get(DeviceRedisKey.AIR + device.getAirMac());
                            String s = redisUtils.get(DeviceRedisKey.AIR + device.getMac());
                            if (s != null) {
                                RedisDeviceStatus redisDeviceStatus = JSON.parseObject(s, RedisDeviceStatus.class);
                                if (redisDeviceStatus.getStatus() == 0) {
@@ -507,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);
@@ -647,7 +649,7 @@
        setCount(PoleResult);
        CommonPage commonPage = ListPagingUtils.pages(PoleResult, pageNo, pageSize);
//
        return commonPage;
    }
@@ -728,25 +730,24 @@
     * @param param
     * @return
     */
    public List<Pole> isBind(List<Pole> list, PoleStatesParam param) {
        List<Pole> bindList = new ArrayList<>();//已绑定客户
        List<Pole> unbindList = new ArrayList<>();//未绑定客户
        list.forEach(bindwarpper -> {
//                Long clientId = bindwarpper.getClientId();
            if (bindwarpper.getClientId() == null) {//判断是否绑定
                unbindList.add(bindwarpper);
            } else {
                bindList.add(bindwarpper);
            }
        });
        if (param.getBingStates() == 0) {
            return bindList;
        } else if (param.getBingStates() == 1) {
            return unbindList;
        }
        return list;
    }
//    public List<Pole> isBind(List<Pole> list, PoleStatesParam param) {
//        List<Pole> bindList = new ArrayList<>();//已绑定客户
//        List<Pole> unbindList = new ArrayList<>();//未绑定客户
//        list.forEach(bindwarpper -> {
////                Long clientId = bindwarpper.getClientId();
//            if (bindwarpper.getClientId() == null) {//判断是否绑定
//                unbindList.add(bindwarpper);
//            } else {
//                bindList.add(bindwarpper);
//            }
//        });
//        if (param.getBingStates() == 0) {
//            return bindList;
//        } else if (param.getBingStates() == 1) {
//            return unbindList;
//        }
//        return list;
//    }
    public List<Pole> isTrue(List<Pole> list, PoleStatesParam param) {
        //实体灯杆
        List<Pole> isTrue = new ArrayList<>();
@@ -865,8 +866,8 @@
     *
     * @return 是否成功
     */
    public boolean unBindPole(Long poleId, String deviceCode) {
        return poleBindingService.unBindPole(poleId, deviceCode);
    public boolean unBindPole(Long poleId, String deviceCode, Integer deviceType) {
        return poleBindingService.unBindPole(poleId, deviceCode, deviceType);
    }
@@ -883,7 +884,7 @@
        }
        String deviceName = byId.getDeviceCode();
        if (deviceName.isEmpty()) {
            throw new BusinessException("该灯杆Mca为空");
            throw new BusinessException("该灯杆Mac为空");
        }
        IRequestFrame build = FrameBuilder.builderA5().orderType(A5OrderEnum.REQUEST_LIGHT_DATA.getCode()).innerFrame(new A5LightResetReqInnerFrame()).build();
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(deviceName, build);
@@ -1050,7 +1051,7 @@
     * @return 设备状态列表
     */
    public List<DeviceStatus> listStatusByDeviceCode(ArrayList<String> deviceCodeList) {
        // 最大只能查50个
//         最大只能查50个
        List<List<String>> split = CollectionUtil.split(deviceCodeList, 50);
        List<DeviceStatus> statusList = new ArrayList<>();
        for (List<String> list : split) {
@@ -1064,6 +1065,8 @@
                }
            }
        }
        return statusList;
    }
@@ -1128,22 +1131,15 @@
    public List<Pole> getOwnerPole(BaseConditionVO baseConditionVO, String keyword, Long cilentId) {
        LambdaQueryWrapper<Pole> eq;
//        if(SecurityUtils.getClientId()!=null){
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        if (clientService.findClientId(cilentId)) {
            eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getUserId, cilentId);
            eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, cilentId);
        } else {
            PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
            eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, cilentId).or(pole -> {
                pole.eq(Pole::getUserId, cilentId);
            });
        }
//        }else {
//            PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
//            eq = Wrappers.lambdaQuery(Pole.class);
//        }
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        if (!keyword.isEmpty()) {
            eq.like(Pole::getPoleName, keyword).or(code -> {
                code.like(Pole::getPoleCode, keyword);
@@ -1151,6 +1147,7 @@
                deviceCode.like(Pole::getDeviceCode, keyword);
            });
        }
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        List<Pole> list;
        list = list(eq);
        setCount(list);
@@ -1310,16 +1307,16 @@
        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));
        LedPlayerEntity LED = SpringContextHolder.getBean(LedPlayerEntityService.class).getOne(Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::getSn, nova.getDeviceCode()));
        if (pole == null) {
            throw new BusinessException("灯杆不存在");
        }
        if (air == null) {
            throw new BusinessException("未绑定大气监测设备");
        }
        PoleBinding nova = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 1));
        if (nova == null) {
            throw new BusinessException("未绑定nova设备");
        }
        LedPlayerEntity LED = SpringContextHolder.getBean(LedPlayerEntityService.class).getOne(Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::getSn, nova.getDeviceCode()));
        if (pole == null) {
            throw new BusinessException("灯杆不存在");
        }
        //获取大气监测数据
        A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(poleId);
@@ -1344,28 +1341,28 @@
        //设置触发条件    存入Redis  15分钟超时   15分钟内再次调用直接返回
        redisUtils.set("redisStatusKeyTimeout", System.currentTimeMillis(), 60 * 15);
        CountDownLatch countDownLatch = new CountDownLatch(7);//todo
        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("音柱执行");
//        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() {
@@ -1390,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() {
@@ -1406,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 {
@@ -1425,4 +1422,4 @@
    }
}
}