| | |
| | | |
| | | 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; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.sandu.common.domain.CommonPage; |
| | | import com.sandu.common.execption.BusinessException; |
| | | import com.sandu.common.object.BaseConditionVO; |
| | | import com.sandu.common.redis.RedisService; |
| | | import com.sandu.common.service.impl.BaseServiceImpl; |
| | | import com.sandu.common.util.SpringContextHolder; |
| | | import com.sandu.ximon.admin.dto.DeviceStatus; |
| | | import com.sandu.ximon.admin.manager.iot.frame.A1Frame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.FrameBuilder; |
| | | import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.A1TernaryCodeReqInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.A5LightResetReqInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.A7PlcResetReqInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.EmptyRequestInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.response.A1DeviceMacRespInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.response.A1TernaryCodeRespInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.A1OrderEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.A2OrderEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.DeviceStateEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.*; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; |
| | | import com.sandu.ximon.admin.param.PoleBindingParam; |
| | | 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.dao.domain.Pole; |
| | | 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 eu.bitwalker.useragentutils.DeviceType; |
| | | 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.web.bind.annotation.RequestParam; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | 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; |
| | | |
| | | /** |
| | |
| | | |
| | | private final RedisService redisService; |
| | | private final PoleBindingService poleBindingService; |
| | | 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(); |
| | | BeanUtils.copyProperties(param, pole); |
| | | pole.setPoleCode(generatePoleCode()); |
| | | return save(pole); |
| | | pole.setDeviceType(-1); |
| | | pole.setCentre(1); |
| | | boolean save = save(pole); |
| | | |
| | | /** |
| | | * 新增虚拟灯杆日志记录开始 |
| | | */ |
| | | String content = "{灯杆ID:" + pole.getId() + ", 灯杆名:" + param.getPoleName() + "}"; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "新增虚拟灯杆", content); |
| | | /** |
| | | * 新增虚拟灯杆日志记录结束 |
| | | */ |
| | | return save; |
| | | } |
| | | |
| | | public boolean updatePole(Long poleId, PoleParam param) { |
| | |
| | | if (pole == null) { |
| | | throw new BusinessException("未找到该灯杆"); |
| | | } |
| | | Long clientId = SecurityUtils.getClientId(); |
| | | //非超管 |
| | | if (clientId != null) { |
| | | if (!Objects.equals(SecurityUtils.getUserId(), pole.getUserId()) && !Objects.equals(SecurityUtils.getUserId(), pole.getClientId())) { |
| | | throw new BusinessException("该灯杆不属于您"); |
| | | } |
| | | } |
| | | Pole update = new Pole(); |
| | | BeanUtils.copyProperties(param, update); |
| | | update.setId(poleId); |
| | | if (param.getIsCenter() != null) { |
| | | update.setCentre(param.getIsCenter()); |
| | | } |
| | | /** |
| | | * 修改灯杆日志记录开始 |
| | | */ |
| | | String content = "编辑灯杆:" + poleId; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "编辑灯杆", content); |
| | | /** |
| | | * 修改灯杆日志记录结束 |
| | | */ |
| | | return updateById(update); |
| | | } |
| | | |
| | | /** |
| | | * 删除灯杆 |
| | | */ |
| | | 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("未找到该灯杆"); |
| | | } |
| | | return removeById(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 = "{灯杆id:" + poles + " }"; |
| | | |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "删除灯杆", content); |
| | | /** |
| | | * 删除灯杆日志记录结束 |
| | | */ |
| | | return removeByIds(poleIds); |
| | | } |
| | | |
| | | |
| | |
| | | StringBuilder sb = new StringBuilder(); |
| | | String date = new SimpleDateFormat("yyMMdd").format(new Date()); |
| | | sb.append(date); |
| | | String key = LightKey.POLE_SN.key(null); |
| | | String key = LightKey.POLE_SN.key(date); |
| | | Long increment = redisService.incr(key, 1); |
| | | String incrementStr = increment.toString(); |
| | | if (incrementStr.length() <= 4) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 统计在线灯杆数量 |
| | | * |
| | | * @return |
| | | */ |
| | | public Map<String, Integer> poleCount1() { |
| | | Map<String, Integer> result = new HashMap<>(); |
| | | LambdaQueryWrapper<Pole> wrapper; |
| | | if (SecurityUtils.getClientId() == null) { |
| | | wrapper = Wrappers.lambdaQuery(Pole.class); |
| | | } else { |
| | | wrapper = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, SecurityUtils.getUserId()).or(w -> { |
| | | w.eq(Pole::getUserId, SecurityUtils.getUserId()); |
| | | }); |
| | | } |
| | | |
| | | //灯杆 |
| | | List<Pole> list = list(wrapper); |
| | | result.put("poleTotalCount", list.size()); |
| | | |
| | | //诺瓦 |
| | | List<LedPlayerEntity> ledPlayerEntities = SpringContextHolder.getBean(LedPlayerEntityService.class).ledPlayerEntityListOnHome(); |
| | | result.put("novaTotalCount", ledPlayerEntities.size()); |
| | | |
| | | //ip音柱 |
| | | List<BroadcastTerminalV2EntityBo> broadcastTerminalList = SpringContextHolder.getBean(IpVolumeService.class).getBroadcastTerminalListOnHome(); |
| | | result.put("broadcastTotalCount", broadcastTerminalList.size()); |
| | | |
| | | //摄像头 |
| | | |
| | | List<MonitorBo> monitorBos = SpringContextHolder.getBean(MonitorService.class).listMonitorOnHome(); |
| | | result.put("monitorTotalCount", monitorBos.size()); |
| | | |
| | | //单灯 |
| | | List<LightBo> lights = SpringContextHolder.getBean(LightService.class).listLightOnHome(); |
| | | result.put("LightTotalCount", lights.size()); |
| | | |
| | | //充电桩 |
| | | List<C3ChargingBo> c3mChargings = SpringContextHolder.getBean(C3ChargingService.class).getC3ChargingList(); |
| | | result.put("C3ChargingTotalCount", c3mChargings.size()); |
| | | |
| | | //大气 |
| | | List<AirEquipmentBo> airEquipments = SpringContextHolder.getBean(AirEquipmentService.class).listAirEquipmentOnHome(); |
| | | result.put("AirEquipmentTotalCount", airEquipments.size()); |
| | | //大气(农耕) |
| | | List<AirEquipmentNongGengBo> airEquipmentNongGengBos = SpringContextHolder.getBean(AirEquipmentNongGengService.class).listAirEquipmentOnHome(); |
| | | result.put("AirEquipmentNongGengTotalCount", airEquipmentNongGengBos.size()); |
| | | |
| | | //水质 |
| | | List<WaterQualityEquipmentBo> waterQualityEquipments = SpringContextHolder.getBean(WaterQualityEquipmentService.class).listWaterQualityEquipmentByKeyword(null, null); |
| | | result.put("WaterQualityEquipmentTotalCount", waterQualityEquipments.size()); |
| | | |
| | | //灯杆倾斜 |
| | | List<LightPoleHeelingEquipmentBo> lightPoleHeelingEquipmentBos = SpringContextHolder.getBean(LightPoleHeelingEquipmentService.class).LightPoleHeelingEquipmentListOnHome(); |
| | | result.put("LightPoleHeelingTotalCount", lightPoleHeelingEquipmentBos.size()); |
| | | |
| | | //熙讯 |
| | | List<PoleLightemitEntity> poleLightemitEntities = SpringContextHolder.getBean(PoleLightemitService.class).listLedOnHome(); |
| | | result.put("XiXunTotalCount", poleLightemitEntities.size()); |
| | | |
| | | 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.NOVA + 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(); |
| | | BaseConditionVO baseConditionVO = new BaseConditionVO(); |
| | | baseConditionVO.setPageNo(1); |
| | | baseConditionVO.setPageSize(999); |
| | | System.out.println("单灯故障统计时间: " + LocalDateTime.now()); |
| | | CommonPage commonPage = SpringContextHolder.getBean(LightReportErrorService.class).queryErrorCode(baseConditionVO); |
| | | System.out.println("单灯故障统计时间: " + LocalDateTime.now()); |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | |
| | | AtomicInteger onLine = new AtomicInteger(0); |
| | | AtomicInteger offLine = new AtomicInteger(0); |
| | | AtomicInteger error = new AtomicInteger(commonPage.getList().size()); |
| | | |
| | | |
| | | 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 { |
| | | offLine.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(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<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.getMac()); |
| | | 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(20000, 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) { |
| | | param = new PoleStatesParam(); |
| | | } |
| | | |
| | | //排序字段 |
| | | String orderByResult = OrderByEnums.POLE_ID.getCode(); |
| | | //正序、倒叙 |
| | | String orderBySeq = OrderByEnums.ASC.getCode(); |
| | | if (order != null) { |
| | | switch (order) { |
| | | case 1: |
| | | orderByResult = OrderByEnums.POLE_NAME.getCode(); |
| | | break; |
| | | case 2: |
| | | orderByResult = OrderByEnums.POLE_ID.getCode(); |
| | | break; |
| | | case 3: |
| | | orderByResult = OrderByEnums.POLE_CREATE_TIME.getCode(); |
| | | break; |
| | | default: |
| | | } |
| | | } |
| | | if (seq != null) { |
| | | switch (seq) { |
| | | case 1: |
| | | orderBySeq = OrderByEnums.ASC.getCode(); |
| | | break; |
| | | case 2: |
| | | orderBySeq = OrderByEnums.DESC.getCode(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | //排序方式 |
| | | String orderBy = "t1." + orderByResult + " " + orderBySeq; |
| | | |
| | | List<Pole> poleList; |
| | | Integer center = param.getCenter(); |
| | | if (SecurityUtils.getClientId() == null) { |
| | | poleList = poleMapper.queryPoleOnLineStatesList(null, param.getIsTrue(), |
| | | param.getBingStates(), param.getGroupid(), param.getKeyword(), center, orderBy); |
| | | } else { |
| | | poleList = poleMapper.queryPoleOnLineStatesList(SecurityUtils.getUserId(), |
| | | param.getIsTrue(), param.getBingStates(), param.getGroupid(), param.getKeyword(), center, orderBy); |
| | | } |
| | | |
| | | poleList.forEach( |
| | | centre -> { |
| | | if (centre.getCentre() == 0) { |
| | | centre.setCenter(true); |
| | | } |
| | | } |
| | | ); |
| | | List<Pole> PoleResult = isOnLine(poleList, param); |
| | | setCount(PoleResult); |
| | | |
| | | CommonPage commonPage = ListPagingUtils.pages(PoleResult, pageNo, pageSize); |
| | | |
| | | return commonPage; |
| | | } |
| | | |
| | | /** |
| | | * 获取绑定设备详情 |
| | | * |
| | | * @param list |
| | | * @return |
| | | */ |
| | | public List<Pole> setCount(List<Pole> list) { |
| | | BindEquipments bindEquipments; |
| | | for (Pole pole : list) { |
| | | bindEquipments = new BindEquipments(); |
| | | List<PoleBinding> poleBindings = poleBindingService.list(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, pole.getId())); |
| | | pole.setBindingCount(poleBindings.size()); |
| | | for (PoleBinding poleBinding : poleBindings) { |
| | | bindEquipments.setInfo(poleBinding.getDeviceType()); |
| | | } |
| | | pole.setBindEquipments(bindEquipments); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 在线状态处理 |
| | | * |
| | | * @param list |
| | | * @param param |
| | | * @return |
| | | */ |
| | | public List<Pole> isOnLine(List<Pole> list, PoleStatesParam param) { |
| | | setOnline(list); |
| | | List<Pole> online = new ArrayList<>();//在线 |
| | | List<Pole> offline = new ArrayList<>();//离线 |
| | | list.forEach(onLinePole -> { |
| | | System.out.println("online---------------------------------------------------" + ("ONLINE").equals(onLinePole.getOnLineState())); |
| | | System.out.println("online---------------------------------------------------" + (onLinePole.getOnLineState())); |
| | | if (("ONLINE").equals(onLinePole.getOnLineState())) { |
| | | online.add(onLinePole); |
| | | } else if (("OFFLINE").equals(onLinePole.getOnLineState())) { |
| | | offline.add(onLinePole); |
| | | } |
| | | }); |
| | | |
| | | if (param.getOnLineStates() == 0) { |
| | | return online; |
| | | } else if (param.getOnLineStates() == 1) { |
| | | return offline; |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 在线灯杆 |
| | | * |
| | | * @param list |
| | | * @param |
| | | * @return |
| | | */ |
| | | public List<Pole> isOnLine(List<Pole> list) { |
| | | setOnline(list); |
| | | List<Pole> online = new ArrayList<>();//在线 |
| | | list.forEach(onLinePole -> { |
| | | if (("ONLINE").equals(onLinePole.getOnLineState())) { |
| | | online.add(onLinePole); |
| | | } |
| | | }); |
| | | |
| | | return online; |
| | | } |
| | | |
| | | /** |
| | | * 查询绑定状态 |
| | | * |
| | | * @param list |
| | | * @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> isTrue(List<Pole> list, PoleStatesParam param) { |
| | | //实体灯杆 |
| | | List<Pole> isTrue = new ArrayList<>(); |
| | | //虚拟灯杆 |
| | | List<Pole> isFalse = new ArrayList<>(); |
| | | list.forEach(bindwarpper -> { |
| | | // Long clientId = bindwarpper.getClientId(); |
| | | //判断是否绑定 |
| | | if (bindwarpper.getDeviceType() == -1) { |
| | | isFalse.add(bindwarpper); |
| | | } else { |
| | | isTrue.add(bindwarpper); |
| | | } |
| | | }); |
| | | if (param.getIsTrue() == 0) { |
| | | return isTrue; |
| | | } else if (param.getIsTrue() == 1) { |
| | | return isFalse; |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置在线状态 |
| | | * |
| | | * @param list |
| | | * @return |
| | | */ |
| | | public List<Pole> setOnline(List<Pole> list) { |
| | | |
| | | List<String> MacCodes = new ArrayList<>(); |
| | | |
| | | for (Pole post : list) { |
| | | if (post.getDeviceCode() != null) { |
| | | MacCodes.add(post.getDeviceCode()); |
| | | } |
| | | } |
| | | // |
| | | List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(MacCodes); |
| | | if (deviceStatuses != null) { |
| | | for (Pole post : list) { |
| | | for (BatchGetDeviceStateResponse.DeviceStatus deviceStatus : deviceStatuses) { |
| | | |
| | | if (post.getDeviceCode() != null && post.getDeviceCode().equals(deviceStatus.getDeviceName())) { |
| | | post.setOnLineState(deviceStatus.getStatus()); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询灯杆的在线状态并赋值 |
| | | * |
| | | * @return |
| | | */ |
| | | public List<Pole> queryStatesAndList(Integer pageNo, Integer pageSize) { |
| | | // List<LampPost> list = list(Wrappers.lambdaQuery(LampPost.class).eq(LampPost::getClientId, SecurityUtils.getUserId())); |
| | | //List<Pole> list = list(Wrappers.lambdaQuery(Pole.class)); |
| | | public List<Pole> queryStatesAndList(Integer pageNo, Integer pageSize, String keyword, Long groupid) { |
| | | PageHelper.startPage(pageNo, pageSize); |
| | | List<Pole> list = new ArrayList<>(); |
| | | LambdaQueryWrapper<Pole> wrapper = new LambdaQueryWrapper<>(); |
| | | if (SecurityUtils.getClientId() == null) { |
| | | list = list(Wrappers.lambdaQuery(Pole.class)); |
| | | wrapper = Wrappers.lambdaQuery(Pole.class); |
| | | } else { |
| | | list = list(Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, SecurityUtils.getUserId())); |
| | | wrapper = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, SecurityUtils.getUserId()); |
| | | } |
| | | |
| | | if (!keyword.isEmpty()) { |
| | | wrapper.like(Pole::getPoleCode, keyword).or(wrappers -> { |
| | | wrappers.like(Pole::getPoleName, keyword); |
| | | }); |
| | | } |
| | | list = list(wrapper); |
| | | List<String> MacCodes = new ArrayList<>(); |
| | | |
| | | for (Pole post : list) { |
| | |
| | | List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(MacCodes); |
| | | for (Pole post : list) { |
| | | for (BatchGetDeviceStateResponse.DeviceStatus deviceStatus : deviceStatuses) { |
| | | if (post.getDeviceCode().equals(deviceStatus.getDeviceName())) { |
| | | if (post.getDeviceCode() != null && post.getDeviceCode().equals(deviceStatus.getDeviceName())) { |
| | | post.setOnLineState(deviceStatus.getStatus()); |
| | | int size = poleBindingService.list(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, post.getId())).size(); |
| | | post.setBindingCount(size); |
| | | } |
| | | } |
| | | // MacCodes.add(post.getDeviceCode()); |
| | | } |
| | | |
| | | |
| | |
| | | * |
| | | * @return 是否成功 |
| | | */ |
| | | public boolean unBindPole(String deviceCode) { |
| | | return poleBindingService.unBindPole(deviceCode); |
| | | public boolean unBindPole(Long poleId, String deviceCode, Integer deviceType) { |
| | | return poleBindingService.unBindPole(poleId, deviceCode, deviceType); |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | public boolean poleReset(Long id) { |
| | | Pole byId = getById(id); |
| | | String deviceName = byId.getDeviceCode(); |
| | | if (byId == null) { |
| | | throw new BusinessException("未找到该灯杆"); |
| | | } |
| | | 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); |
| | | System.out.println(commonFrame.toString()); |
| | | CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(deviceName, |
| | | FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) |
| | | .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); |
| | | if ("00".equals(rebootFrame.getPayload())) { |
| | | System.out.println("重启成功"); |
| | | Integer deviceType = byId.getDeviceType(); |
| | | |
| | | IRequestFrame build = null; |
| | | if (deviceType < 2){ |
| | | build = FrameBuilder.builderA5().orderType(A5OrderEnum.REQUEST_LIGHT_DATA.getCode()).innerFrame(new A5LightResetReqInnerFrame()).build(); |
| | | } |
| | | else if (deviceType == 2){ |
| | | build = FrameBuilder.builderA7().orderType(A7OrderEnum.REQUEST_PLC_DATA.getCode()).innerFrame(new A7PlcResetReqInnerFrame()).build(); |
| | | |
| | | } |
| | | |
| | | CommonFrame result = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(deviceName, |
| | | FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) |
| | | .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); |
| | | CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(deviceName, build); |
| | | |
| | | StoreOperationRecordsUtils.storeInnerFrameData(deviceName, "灯杆恢复出厂设置", build, commonFrame); |
| | | |
| | | IRequestFrame iRequestFrame = FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()).orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build(); |
| | | CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(deviceName, iRequestFrame); |
| | | StoreOperationRecordsUtils.storeInnerFrameData(deviceName, "灯杆重启", iRequestFrame, commonFrame); |
| | | |
| | | boolean b = false; |
| | | if ("00".equals(result.getPayload())) { |
| | | if ("00".equals(rebootFrame.getPayload())) { |
| | | byId.setDeviceCode(null); |
| | | b = updateById(byId); |
| | | System.out.println("重启成功"); |
| | | } |
| | | /** |
| | | * 灯杆恢复出厂设置日志记录开始 |
| | | */ |
| | | String content = "{灯杆ID:" + id + " }"; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "灯杆恢复出厂设置", content); |
| | | /** |
| | | * 灯杆恢复出厂设置日志记录结束 |
| | | */ |
| | | return b; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 给灯杆注册三元码 |
| | | */ |
| | | public boolean setMac(String baseMac) { |
| | | // public boolean setMac() { |
| | | //Pole pole = getById(poleId); |
| | | /* if (pole == null) { |
| | | throw new BusinessException("未找到该灯杆"); |
| | | }*/ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Map setMac(String baseMac) { |
| | | |
| | | boolean setMac = false; |
| | | //String baseMac = "baseDevice"; |
| | | A1Frame a1Frame = new A1Frame(A1OrderEnum.REQUEST_READ_DEVICE_UNIQUE_MAC.getCode(), new EmptyRequestInnerFrame()); |
| | | CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, a1Frame); |
| | | CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(baseMac, a1Frame); |
| | | //存储振记录 |
| | | StoreOperationRecordsUtils.storeInnerFrameData(baseMac, "注册三元码", a1Frame, commonFrame); |
| | | if (commonFrame == null) { |
| | | throw new BusinessException("读取设备唯一ID失败"); |
| | | } |
| | |
| | | log.info(deviceDetail.toString()); |
| | | |
| | | // 4 配置Mac① |
| | | WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> productKeyResp = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, |
| | | FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(MainBoardInvokeSyncService.getInstance().getProductKey())) |
| | | .orderType(A1OrderEnum.REQUEST_SET_PRODUCT_KEY.getCode()).build(), |
| | | A1TernaryCodeRespInnerFrame.class); |
| | | A1TernaryCodeRespInnerFrame responseInnerFrame = productKeyResp.getResponseInnerFrame(); |
| | | IRequestFrame build1 = FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(MainBoardInvokeSyncService.getInstance().getProductKey())).orderType(A1OrderEnum.REQUEST_SET_PRODUCT_KEY.getCode()).build(); |
| | | CommonFrame commonFrame1 = MainBoardInvokeSyncService.getInstance().sendRRPC(baseMac, build1); |
| | | //存储振记录 |
| | | StoreOperationRecordsUtils.storeInnerFrameData(baseMac, "设备配置ProductKey", build1, commonFrame1); |
| | | |
| | | A1TernaryCodeRespInnerFrame responseInnerFrame = new A1TernaryCodeRespInnerFrame().transformFrame(commonFrame1.getPayload()); |
| | | if (!MainBoardInvokeSyncService.getInstance().getProductKey().equals(responseInnerFrame.getTernaryCode())) { |
| | | throw new BusinessException("设备配置ProductKey失败"); |
| | | } |
| | | |
| | | // 5 配置Mac② |
| | | WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> responseCommonFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, |
| | | FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(uniqueMac)) |
| | | .orderType(A1OrderEnum.REQUEST_SET_DEVICE_NAME.getCode()).build(), |
| | | A1TernaryCodeRespInnerFrame.class); |
| | | A1TernaryCodeRespInnerFrame deviceNameFrame = responseCommonFrame.getResponseInnerFrame(); |
| | | if (!uniqueMac.equals(deviceNameFrame.getTernaryCode())) { |
| | | IRequestFrame build2 = FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(uniqueMac)).orderType(A1OrderEnum.REQUEST_SET_DEVICE_NAME.getCode()).build(); |
| | | CommonFrame commonFrame2 = MainBoardInvokeSyncService.getInstance().sendRRPC(baseMac, build2); |
| | | //存储振记录 |
| | | StoreOperationRecordsUtils.storeInnerFrameData(baseMac, "设备配置名", build2, commonFrame2); |
| | | |
| | | A1TernaryCodeRespInnerFrame a1TernaryCodeRespInnerFrame = new A1TernaryCodeRespInnerFrame().transformFrame(commonFrame2.getPayload()); |
| | | if (!uniqueMac.equals(a1TernaryCodeRespInnerFrame.getTernaryCode())) { |
| | | throw new BusinessException("设备配置名失败"); |
| | | } |
| | | |
| | | // 6 配置Mac③ |
| | | WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> wrapResponseCommonFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, |
| | | FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(deviceDetail.getDeviceSecret())) |
| | | .orderType(A1OrderEnum.REQUEST_SET_DEVICE_SECRET.getCode()).build(), |
| | | A1TernaryCodeRespInnerFrame.class); |
| | | A1TernaryCodeRespInnerFrame deviceSecretFrame = wrapResponseCommonFrame.getResponseInnerFrame(); |
| | | IRequestFrame build3 = FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(deviceDetail.getDeviceSecret())).orderType(A1OrderEnum.REQUEST_SET_DEVICE_SECRET.getCode()).build(); |
| | | CommonFrame commonFrame3 = MainBoardInvokeSyncService.getInstance().sendRRPC(baseMac, build3); |
| | | //存储振记录 |
| | | StoreOperationRecordsUtils.storeInnerFrameData(baseMac, "设备密钥", build3, commonFrame3); |
| | | |
| | | A1TernaryCodeRespInnerFrame deviceSecretFrame = new A1TernaryCodeRespInnerFrame().transformFrame(commonFrame3.getPayload()); |
| | | |
| | | if (!deviceDetail.getDeviceSecret().equals(deviceSecretFrame.getTernaryCode())) { |
| | | throw new BusinessException("设备密钥失败"); |
| | | } |
| | | |
| | | |
| | | // 7 重启设备 并使用新的Mac |
| | | CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, |
| | | FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) |
| | | .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); |
| | | IRequestFrame build4 = FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()).orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build(); |
| | | CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(baseMac, build4); |
| | | //存储振记录 |
| | | StoreOperationRecordsUtils.storeInnerFrameData(baseMac, "重启设备", build4, rebootFrame); |
| | | |
| | | if ("00".equals(rebootFrame.getPayload())) { |
| | | // pole.setDeviceCode(uniqueMac); |
| | | |
| | | // setMac = updateById(pole); |
| | | |
| | | System.out.println("重启成功"); |
| | | } |
| | | |
| | | Pole pole = new Pole(); |
| | | String strh = uniqueMac.substring(uniqueMac.length() - 2, uniqueMac.length()); |
| | | pole.setDeviceCode(strh); |
| | | pole.setPoleName(strh); |
| | | String strm = uniqueMac.substring(0, uniqueMac.length() - 2); |
| | | int i = Integer.parseInt(strm); |
| | | pole.setPoleCode(generatePoleCode()); |
| | | pole.setDeviceType(i); |
| | | setMac = save(pole); |
| | | |
| | | return setMac; |
| | | Pole pole = getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getDeviceCode, uniqueMac)); |
| | | if (pole == null) { |
| | | pole = new Pole(); |
| | | } |
| | | pole.setDeviceCode(uniqueMac); |
| | | pole.setPoleName(uniqueMac); |
| | | if ("00".equals(a1DeviceMacRespInnerFrame.getType())) { |
| | | pole.setDeviceType(0); |
| | | } else if ("01".equals(a1DeviceMacRespInnerFrame.getType())) { |
| | | pole.setDeviceType(1); |
| | | } else if ("02".equals(a1DeviceMacRespInnerFrame.getType())) { |
| | | pole.setDeviceType(2); |
| | | } |
| | | |
| | | pole.setPoleCode(generatePoleCode()); |
| | | |
| | | boolean result = saveOrUpdate(pole); |
| | | |
| | | if (result) { |
| | | if (pole.getDeviceType() < 2) { |
| | | Light light = SpringContextHolder.getBean(LightService.class). |
| | | getOne(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, pole.getDeviceCode()).last("limit 1")); |
| | | if (light == null) { |
| | | light = new Light(); |
| | | light.setDeviceCode(uniqueMac); |
| | | light.setLightCount(2); |
| | | SpringContextHolder.getBean(LightService.class).save(light); |
| | | } |
| | | } else if (pole.getDeviceType() == 2) { |
| | | Plc plc = SpringContextHolder.getBean(PlcService.class). |
| | | getOne(Wrappers.lambdaQuery(Plc.class).eq(Plc::getDeviceCode,pole.getDeviceCode()).last("limit 1")); |
| | | if (plc == null){ |
| | | plc = new Plc(); |
| | | plc.setDeviceCode(uniqueMac); |
| | | plc.setPlcCount(3); |
| | | SpringContextHolder.getBean(PlcService.class).save(plc); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 实体灯杆注册日志记录开始 |
| | | */ |
| | | String content = "{灯杆ID:" + pole.getId() + ",灯杆编号:" + pole.getPoleCode() + ",灯杆名称:" + pole.getPoleName() + ",灯杆类型:" + pole.getDeviceType() + ",灯杆MAC:" + pole.getDeviceCode() + " }"; |
| | | StoreOperationRecordsUtils.storeOperationData(null, null, "实体灯杆注册", content); |
| | | /** |
| | | * 实体灯杆注册日志记录结束 |
| | | */ |
| | | Map map = new HashMap(); |
| | | if (true) { |
| | | map.put("mac", uniqueMac); |
| | | } else { |
| | | map.put("mac", -1); |
| | | } |
| | | |
| | | return map; |
| | | } |
| | | |
| | | public List<String> listDeviceCodeByIds(List<Long> poleIdList) { |
| | |
| | | return null; |
| | | } |
| | | List<Pole> list = list(Wrappers.lambdaQuery(Pole.class).in(Pole::getId, poleIdList).select(Pole::getDeviceCode)); |
| | | return list |
| | | .stream().filter(Objects::nonNull).map(Pole::getDeviceCode).filter(StrUtil::isNotEmpty).collect(Collectors.toList()); |
| | | return list.stream().filter(Objects::nonNull).map(Pole::getDeviceCode).filter(StrUtil::isNotEmpty).collect(Collectors.toList()); |
| | | } |
| | | |
| | | /** |
| | |
| | | throw new BusinessException("灯杆不存在"); |
| | | } |
| | | pole.setClientId(clientId); |
| | | if (clientService.findClientId(clientId)) { |
| | | pole.setUserId(clientService.getClientId(clientId)); |
| | | |
| | | } |
| | | r = updateById(pole); |
| | | |
| | | if (!r) { |
| | |
| | | } |
| | | return r; |
| | | } |
| | | |
| | | /** |
| | | * 用户解绑灯杆 |
| | | * |
| | | * @param clientId |
| | | * @param poleIds |
| | | * @return |
| | | */ |
| | | public boolean ClientUnBindingPole(long clientId, int[] poleIds) { |
| | | boolean r = false; |
| | | for (int poleId : poleIds) { |
| | | Pole pole = getById(poleId); |
| | | if (pole == null) { |
| | | throw new BusinessException("灯杆不存在"); |
| | | } |
| | | |
| | | //一级客户 -1 userId |
| | | //二级客户 上级客户id userId |
| | | pole.setClientId(-1L); |
| | | pole.setUserId(-1L); |
| | | r = updateById(pole); |
| | | |
| | | if (!r) { |
| | | throw new BusinessException("灯杆ID为" + poleId + "设置失败,自动停止"); |
| | | } |
| | | |
| | | } |
| | | return r; |
| | | } |
| | | |
| | | |
| | | public List<Pole> getOwnerPole(BaseConditionVO baseConditionVO, String keyword, Long cilentId) { |
| | | LambdaQueryWrapper<Pole> eq; |
| | | if (clientService.findClientId(cilentId)) { |
| | | eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, cilentId); |
| | | } else { |
| | | eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getClientId, cilentId).or(pole -> { |
| | | pole.eq(Pole::getUserId, cilentId); |
| | | }); |
| | | } |
| | | |
| | | |
| | | if (!keyword.isEmpty()) { |
| | | eq.like(Pole::getPoleName, keyword).or(code -> { |
| | | code.like(Pole::getPoleCode, keyword); |
| | | }).or(deviceCode -> { |
| | | deviceCode.like(Pole::getDeviceCode, keyword); |
| | | }); |
| | | } |
| | | PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); |
| | | List<Pole> list; |
| | | list = list(eq); |
| | | setCount(list); |
| | | setOnline(list); |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据灯杆id查询灯杆绑定设备 |
| | | * |
| | | * @return |
| | | */ |
| | | public PoleBindVO getBindByPoleId(Long poleId) { |
| | | List<PoleBinding> bind = poleBindingService.list(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId)); |
| | | |
| | | Map<Integer, String> map = new HashMap<>(); |
| | | for (int i = 0; i < 11; i++) { |
| | | map.put(i, null); |
| | | } |
| | | |
| | | for (PoleBinding poleBinding : bind) { |
| | | map.put(poleBinding.getDeviceType(), poleBinding.getDeviceCode()); |
| | | } |
| | | |
| | | PoleBindVO poleBindVO = new PoleBindVO(); |
| | | // //灯杆信息 |
| | | // poleBindVOTest.setPole(getPoleByMac(poleId)); |
| | | |
| | | /** |
| | | * 设备信息 |
| | | */ |
| | | //单灯 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(LightService.class).getLightInfo(map.get(0))); |
| | | //诺瓦 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(LedPlayerEntityService.class).getBySnAndPlayerSnInfo(map.get(1))); |
| | | //充电桩 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(C3ChargingService.class).getByC3MacInfo(map.get(2))); |
| | | //大气 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(AirEquipmentService.class).getAirEquipmentInfo(map.get(3))); |
| | | //水质 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(WaterQualityEquipmentService.class).getWaterQualityDataInfo(map.get(4))); |
| | | //音柱 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(IpVolumeService.class).getIpTerminalDetail(map.get(5))); |
| | | |
| | | //LCD |
| | | //lcd暂无 |
| | | |
| | | //摄像头 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(MonitorService.class).getMonitorInfo(map.get(7))); |
| | | //杆体倾测 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(LightPoleHeelingService.class).getLightPoleHeelingByMac(map.get(8))); |
| | | |
| | | //一键求助 |
| | | //一键求助暂无 |
| | | |
| | | //熙讯 |
| | | poleBindVO.getList().add(SpringContextHolder.getBean(PoleLightemitService.class).getLedByLightControlCodeInfo(map.get(10))); |
| | | |
| | | return poleBindVO; |
| | | } |
| | | |
| | | |
| | | public Pole getPoleByMac(Long poleId) { |
| | | Pole one = getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getId, poleId)); |
| | | ArrayList<String> macs = new ArrayList<>(); |
| | | |
| | | macs.add(one.getDeviceCode()); |
| | | List<DeviceStatus> deviceStatuses = listStatusByDeviceCode(macs); |
| | | if (one.getDeviceCode() == null || one.getDeviceType() == null || one.getDeviceType() == -1) { |
| | | one.setOnLineState("虚拟灯杆"); |
| | | } else if (deviceStatuses.get(0).getStatus() == 0) { |
| | | one.setOnLineState("离线"); |
| | | } else if (deviceStatuses.get(0).getStatus() == 1) { |
| | | one.setOnLineState("在线"); |
| | | } else if (deviceStatuses.get(0).getStatus() == 2) { |
| | | one.setOnLineState("未激活"); |
| | | } else if (deviceStatuses.get(0).getStatus() == 3) { |
| | | one.setOnLineState("不可用"); |
| | | } else { |
| | | one.setOnLineState("未知"); |
| | | } |
| | | return one; |
| | | } |
| | | |
| | | // /** |
| | | // * 用户总单灯节能率 |
| | | // */ |
| | | // public Double getPoleEnergy() { |
| | | // Double energy = 0.0; |
| | | // |
| | | // |
| | | // return energy; |
| | | // } |
| | | |
| | | |
| | | public boolean updateDeviceCode(Long poleId) { |
| | | return poleMapper.updateDeviceCode(poleId); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 推送大气监测数据到novaLED |
| | | */ |
| | | public boolean pushAirDataToXiXun(Long poleId) { |
| | | Pole pole = getById(poleId); |
| | | //判断归属权 |
| | | if (SecurityUtils.getClientId() != null) { |
| | | if (!pole.getClientId().equals(SecurityUtils.getUserId()) && !pole.getUserId().equals(SecurityUtils.getUserId())) { |
| | | throw new BusinessException("无权限操作"); |
| | | } |
| | | } |
| | | PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 3)); |
| | | PoleBinding xixun = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 10)); |
| | | if (pole == null) { |
| | | throw new BusinessException("灯杆不存在"); |
| | | } |
| | | if (air == null) { |
| | | throw new BusinessException("未绑定大气监测设备"); |
| | | } |
| | | if (xixun == null) { |
| | | throw new BusinessException("未绑定xixun设备"); |
| | | } |
| | | //获取大气监测数据 |
| | | A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(poleId); |
| | | //推送数据 |
| | | return SpringContextHolder.getBean(XiXunPlayerService.class).pushWeather(xixun.getDeviceCode(), data, pole); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 关闭熙讯大气推送 |
| | | */ |
| | | public void closeXiXunAirPush(Long poleId) { |
| | | Pole pole = getById(poleId); |
| | | if (SecurityUtils.getClientId() != null) { |
| | | if (!pole.getClientId().equals(SecurityUtils.getUserId()) && !pole.getUserId().equals(SecurityUtils.getUserId())) { |
| | | throw new BusinessException("无权限操作"); |
| | | } |
| | | } |
| | | PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 3)); |
| | | PoleBinding xixun = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 10)); |
| | | if (pole == null || air == null || xixun == null) { |
| | | throw new BusinessException("设备不存在"); |
| | | } |
| | | //关闭推送 |
| | | String clear = SpringContextHolder.getBean(LightemitUtils.class).clear(xixun.getDeviceCode()); |
| | | if (clear.contains("is not") || clear.contains("does not")) { |
| | | throw new BusinessException("设备不在线或设备未存在于服务器"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 推送大气监测数据到novaLED |
| | | */ |
| | | public VnnoxResult pushAirDataToNova(PushAirDataToNovaParam param) { |
| | | Long poleId = param.getPoleId(); |
| | | Pole pole = getById(poleId); |
| | | PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 3)); |
| | | 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); |
| | | //推送数据 |
| | | // return SpringContextHolder.getBean(VnnoxService.class).publishWaterData(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); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |