| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | 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.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.dto.WaterQualityDataDto; |
| | | 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.request.A1TernaryCodeReqInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.A5LightResetReqInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.request.EmptyRequestInnerFrame; |
| | |
| | | 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.*; |
| | | 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.LightemitUtils; |
| | | import com.sandu.ximon.admin.utils.RedisUtils; |
| | | import com.sandu.ximon.admin.utils.response.VnnoxResult; |
| | | import com.sandu.ximon.admin.vo.PoleBindVO; |
| | | import com.sandu.ximon.dao.bo.*; |
| | | import com.sandu.ximon.dao.domain.*; |
| | | import com.sandu.ximon.dao.mapper.PoleMapper; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | 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; |
| | | |
| | | public boolean addPole(PoleParam param) { |
| | | Pole pole = new Pole(); |
| | | BeanUtils.copyProperties(param, pole); |
| | | pole.setPoleCode(generatePoleCode()); |
| | | pole.setDeviceType(-1); |
| | | return save(pole); |
| | | } |
| | | |
| | |
| | | if (pole == null) { |
| | | throw new BusinessException("未找到该灯杆"); |
| | | } |
| | | // 删除灯杆绑定关系 |
| | | poleBindingService.remove(Wrappers.<PoleBinding>lambdaQuery().eq(PoleBinding::getPoleId, poleId)); |
| | | return removeById(poleId); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 统计在线灯杆数量 |
| | | * |
| | | * @return |
| | | */ |
| | | public Map<String, Integer> poleCount() { |
| | | Map<String, Integer> result = new HashMap<>(); |
| | | LambdaQueryWrapper<Pole> wrapper = new LambdaQueryWrapper<>(); |
| | | 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); |
| | | List<Pole> poles = isOnLine(list); |
| | | result.put("poleOnlineCount", poles.size()); |
| | | result.put("poleTotalCount", list.size()); |
| | | |
| | | //诺瓦 |
| | | List<LedPlayerEntity> ledPlayerEntities = SpringContextHolder.getBean(LedPlayerEntityService.class).ledPlayerEntityList(null, null); |
| | | int number = 0; |
| | | for (LedPlayerEntity bean : ledPlayerEntities) { |
| | | if (bean.getOnlineStatus() == 1) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("novaOnlineCount", number); |
| | | result.put("novaTotalCount", ledPlayerEntities.size()); |
| | | |
| | | //ip音柱 |
| | | number = 0; |
| | | BroadcastTerminalV2Param broadcastTerminalV2Param = new BroadcastTerminalV2Param(); |
| | | broadcastTerminalV2Param.setBindingState(2); |
| | | broadcastTerminalV2Param.setWorkState(2); |
| | | List<BroadcastTerminalV2EntityBo> broadcastTerminalList |
| | | = SpringContextHolder.getBean(IpVolumeService.class).getBroadcastTerminalList(null, broadcastTerminalV2Param); |
| | | for (BroadcastTerminalV2EntityBo bean : broadcastTerminalList) { |
| | | if (bean.getStatus() == 1 || bean.getStatus() == 0) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("broadcastOnlineCount", number); |
| | | result.put("broadcastTotalCount", broadcastTerminalList.size()); |
| | | |
| | | //摄像头 |
| | | number = 0; |
| | | MonitorParam monitorParam = new MonitorParam(); |
| | | monitorParam.setEquipmentState(2); |
| | | monitorParam.setBindingState(2); |
| | | List<MonitorBo> monitorBos = SpringContextHolder.getBean(MonitorService.class).listMonitorByKeyword(null, monitorParam).getList(); |
| | | monitorParam.setEquipmentState(1); |
| | | List<MonitorBo> online = SpringContextHolder.getBean(MonitorService.class).listMonitorByKeyword(null, monitorParam).getList(); |
| | | result.put("monitorOnlineCount", online.size()); |
| | | result.put("monitorTotalCount", monitorBos.size()); |
| | | |
| | | //单灯 |
| | | number = 0; |
| | | List<Light> lights = SpringContextHolder.getBean(LightService.class).listLight(); |
| | | for (Light light : lights) { |
| | | if (light.getOnlineStatus() == 1) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("LightOnlineCount", number); |
| | | result.put("LightTotalCount", lights.size()); |
| | | |
| | | //充电桩 |
| | | number = 0; |
| | | List<C3ChargingBo> c3mChargings = SpringContextHolder.getBean(C3ChargingService.class).getC3ChargingListByKeyword(null, null); |
| | | for (C3ChargingBo c3ChargingBo : c3mChargings) { |
| | | if (c3ChargingBo.getStatusBit() != 0) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("C3ChargingOnlineCount", number); |
| | | result.put("C3ChargingTotalCount", c3mChargings.size()); |
| | | |
| | | |
| | | //大气 |
| | | number = 0; |
| | | List<AirEquipmentBo> airEquipments = SpringContextHolder.getBean(AirEquipmentService.class).listAirEquipmentByKeyword(null, null); |
| | | for (AirEquipmentBo airEquipmentBo : airEquipments) { |
| | | if (RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_STATE.getCode() + airEquipmentBo.getMac()) != null) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("AirEquipmentOnlineCount", number); |
| | | result.put("AirEquipmentTotalCount", airEquipments.size()); |
| | | //大气(农耕) |
| | | number = 0; |
| | | List<AirEquipmentNongGengBo> airEquipmentNongGengBos = SpringContextHolder.getBean(AirEquipmentNongGengService.class).listAirEquipmentByKeyword(null, null); |
| | | for (AirEquipmentNongGengBo airEquipmentNongGengBo : airEquipmentNongGengBos) { |
| | | if (RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_NONG_GENG_STATE.getCode() + airEquipmentNongGengBo.getMac()) != null) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("AirEquipmentNongGengOnlineCount", number); |
| | | result.put("AirEquipmentNongGengTotalCount", airEquipmentNongGengBos.size()); |
| | | //水质 |
| | | number = 0; |
| | | List<WaterQualityEquipmentBo> waterQualityEquipments |
| | | = SpringContextHolder.getBean(WaterQualityEquipmentService.class).listWaterQualityEquipmentByKeyword(null, null); |
| | | |
| | | for (WaterQualityEquipmentBo waterQualityEquipmentBo : waterQualityEquipments) { |
| | | WaterQualityDataDto waterQualityDataDto |
| | | = SpringContextHolder.getBean(WaterQualityDataService.class).getWaterQualityDataInfo(waterQualityEquipmentBo.getWaterQualityEquipmentCode()); |
| | | if (waterQualityDataDto != null) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("WaterQualityEquipmentOnlineCount", number); |
| | | result.put("WaterQualityEquipmentTotalCount", waterQualityEquipments.size()); |
| | | //灯杆倾斜 |
| | | number = 0; |
| | | List<LightPoleHeeling> lightPoleHeelings |
| | | = SpringContextHolder.getBean(LightPoleHeelingService.class).listLightPoleHeelingByKeyword(null, null); |
| | | |
| | | for (LightPoleHeeling lightPoleHeeling : lightPoleHeelings) { |
| | | if (RedisUtils.getBean().get(LightPoleHeelingEnum.LIGHT_POLE_HEELING_STATE.getCode() + lightPoleHeeling.getMac()) != null) { |
| | | number++; |
| | | } |
| | | } |
| | | result.put("LightPoleHeelingOnlineCount", number); |
| | | result.put("LightPoleHeelingTotalCount", lightPoleHeelings.size()); |
| | | |
| | | //熙讯 |
| | | List<PoleLightemitEntity> poleLightemitEntities = SpringContextHolder.getBean(PoleLightemitService.class).listLed(null, false); |
| | | List<PoleLightemitEntity> poleLightemitEntityOnlineList = SpringContextHolder.getBean(PoleLightemitService.class).ledOnline(poleLightemitEntities); |
| | | |
| | | result.put("XiXunOnlineCount", poleLightemitEntityOnlineList.size()); |
| | | result.put("XiXunTotalCount", poleLightemitEntities.size()); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public List<Pole> queryAllStatesAndList(Integer pageNo, Integer pageSize, PoleStatesParam param) { |
| | | |
| | | List<Pole> list = new ArrayList<>(); |
| | | LambdaQueryWrapper<Pole> wrapper = new LambdaQueryWrapper<>(); |
| | | 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()); |
| | | }); |
| | | } |
| | | if (param.getKeyword() != null && !param.getKeyword().isEmpty()) { |
| | | wrapper.like(Pole::getPoleCode, param.getKeyword()).or( |
| | | wrappers -> { |
| | | wrappers.like(Pole::getPoleName, param.getKeyword()); |
| | | } |
| | | ); |
| | | } |
| | | |
| | | PageHelper.startPage(pageNo, pageSize); |
| | | list = list(wrapper); |
| | | if (param.getGroupid() != null) { |
| | | // List<Long> poleIds = new ArrayList<>(); |
| | | List<Pole> pole = new ArrayList<>(); |
| | | List<PoleGroupRelation> relations = groupRelationService.list(Wrappers.lambdaQuery(PoleGroupRelation.class) |
| | | .eq(PoleGroupRelation::getPoleGroupId, param.getGroupid())); |
| | | relations.forEach(relation -> { |
| | | pole.add(getById(relation.getPoleId())); |
| | | } |
| | | ); |
| | | list = pole; |
| | | } |
| | | |
| | | if (param.getBingStates() != 2) {//是否绑定 |
| | | list = isBind(list, param);// 绑定/未绑定 |
| | | if (param.getIsTrue() != 2) {//已绑定的是否是真实灯杆 |
| | | list = isTrue(list, param); |
| | | if (param.getOnLineStates() != 2) {//绑定的真实灯杆是否在线 |
| | | list = isOnLine(list, param); |
| | | } |
| | | } else {//全部灯杆 实体/虚拟 |
| | | if (param.getOnLineStates() != 2) { //查询全部灯杆是否在线 |
| | | list = isOnLine(list, param); |
| | | } |
| | | } |
| | | } else {//全部 绑定/未绑定 |
| | | if (param.getIsTrue() != 2) {// 判断灯杆类型 |
| | | list = isTrue(list, param);// 实体/虚拟 |
| | | if (param.getOnLineStates() != 2) {// 灯杆的在线判断 |
| | | list = isOnLine(list, param);//在线/离线 |
| | | } |
| | | } else {//全类型灯杆 |
| | | if (param.getOnLineStates() != 2) {//判断在线状态 |
| | | list = isOnLine(list, param);//在线/离线 |
| | | } |
| | | } |
| | | } |
| | | |
| | | setCount(list); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * 设置绑定设备数量 |
| | | * |
| | | * @param list |
| | | * @return |
| | | */ |
| | | public List<Pole> setCount(List<Pole> list) { |
| | | for (Pole post : list) { |
| | | int size = poleBindingService.list(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, post.getId())).size(); |
| | | // System.out.println("size:----------------------"+size); |
| | | post.setBindingCount(size); |
| | | } |
| | | 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.getDeviceCode() == null) { |
| | | 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) { |
| | | // System.out.println("DeviceCode:---------------------"+post.getDeviceCode()); |
| | | // System.out.println("DeviceName:---------------------"+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(); |
| | | //// System.out.println("size:----------------------"+size); |
| | | // post.setBindingCount(size); |
| | | } |
| | | } |
| | | // MacCodes.add(post.getDeviceCode()); |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询灯杆的在线状态并赋值 |
| | | * |
| | | * @return |
| | | */ |
| | | public List<Pole> queryStatesAndList(Integer pageNo,Integer pageSize) { |
| | | public List<Pole> queryStatesAndList(Integer pageNo, Integer pageSize, String keyword, Long groupid) { |
| | | // List<LampPost> list = list(Wrappers.lambdaQuery(LampPost.class).eq(LampPost::getClientId, SecurityUtils.getUserId())); |
| | | //List<Pole> list = list(Wrappers.lambdaQuery(Pole.class)); |
| | | PageHelper.startPage(pageNo,pageSize); |
| | | 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())) { |
| | | // System.out.println("DeviceCode:---------------------"+post.getDeviceCode()); |
| | | // System.out.println("DeviceName:---------------------"+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(); |
| | | // System.out.println("size:----------------------"+size); |
| | | post.setBindingCount(size); |
| | | } |
| | | } |
| | | // MacCodes.add(post.getDeviceCode()); |
| | |
| | | return poleBindingService.bindPole(poleId, param); |
| | | } |
| | | |
| | | /** |
| | | * 灯杆解绑绑定设备 |
| | | * |
| | | * @return 是否成功 |
| | | */ |
| | | public boolean unBindPole(Long poleId, String deviceCode) { |
| | | return poleBindingService.unBindPole(poleId, deviceCode); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 灯杆恢复出厂设置 |
| | |
| | | .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("重启成功"); |
| | | } |
| | | |
| | | CommonFrame result = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(deviceName, |
| | | FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) |
| | | .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); |
| | | |
| | | boolean b = false; |
| | | if ("00".equals(result.getPayload())) { |
| | | if ("00".equals(rebootFrame.getPayload())) { |
| | | byId.setDeviceCode(null); |
| | | b = updateById(byId); |
| | | System.out.println("重启成功"); |
| | |
| | | /** |
| | | * 给灯杆注册三元码 |
| | | */ |
| | | |
| | | |
| | | public boolean setMac(Long poleId) { |
| | | Pole pole = getById(poleId); |
| | | if (pole == null) { |
| | | public boolean setMac(String baseMac) { |
| | | // public boolean setMac() { |
| | | //Pole pole = getById(poleId); |
| | | /* if (pole == null) { |
| | | throw new BusinessException("未找到该灯杆"); |
| | | } |
| | | }*/ |
| | | |
| | | boolean setMac = false; |
| | | String baseMac = "baseDevice"; |
| | | //String baseMac = "baseDevice"; |
| | | A1Frame a1Frame = new A1Frame(A1OrderEnum.REQUEST_READ_DEVICE_UNIQUE_MAC.getCode(), new EmptyRequestInnerFrame()); |
| | | CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance() |
| | | .sendRRPC(baseMac, a1Frame); |
| | |
| | | log.info(commonFrame.toString()); |
| | | String uniqueMac = a1DeviceMacRespInnerFrame.getMac(); |
| | | uniqueMac = uniqueMac.toLowerCase(); |
| | | |
| | | if (uniqueMac.isEmpty()) { |
| | | throw new BusinessException("读取设备唯一ID失败!"); |
| | | } |
| | | log.info("唯一码{}", uniqueMac); |
| | | |
| | | // 2 从阿里注册 |
| | |
| | | FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) |
| | | .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); |
| | | if ("00".equals(rebootFrame.getPayload())) { |
| | | pole.setDeviceCode(uniqueMac); |
| | | // pole.setDeviceCode(uniqueMac); |
| | | |
| | | setMac = updateById(pole); |
| | | // setMac = updateById(pole); |
| | | |
| | | System.out.println("重启成功"); |
| | | } |
| | | return setMac; |
| | | |
| | | Pole pole = new Pole(); |
| | | /* String type = uniqueMac.substring(uniqueMac.length() - 2, uniqueMac.length()); |
| | | String Code = uniqueMac.substring(0, uniqueMac.length() - 2);*/ |
| | | pole.setDeviceCode(uniqueMac); |
| | | pole.setPoleName(uniqueMac); |
| | | /* int i = Integer.parseInt(strm);*/ |
| | | if ("00".equals(a1DeviceMacRespInnerFrame.getType())) { |
| | | pole.setDeviceType(0); |
| | | } else if ("01".equals(a1DeviceMacRespInnerFrame.getType())) { |
| | | pole.setDeviceType(1); |
| | | } |
| | | |
| | | pole.setPoleCode(generatePoleCode()); |
| | | Pole one = getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getDeviceCode, uniqueMac)); |
| | | // setMac = save(pole); |
| | | if (one == null) { |
| | | return save(pole); |
| | | } else { |
| | | pole.setId(one.getId()); |
| | | return updateById(pole); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | public List<String> listDeviceCodeByIds(List<Long> poleIdList) { |
| | | if(CollectionUtil.isEmpty(poleIdList)){ |
| | | if (CollectionUtil.isEmpty(poleIdList)) { |
| | | return null; |
| | | } |
| | | List<Pole> list = list(Wrappers.lambdaQuery(Pole.class).in(Pole::getId, poleIdList).select(Pole::getDeviceCode)); |
| | |
| | | |
| | | /** |
| | | * 批量获取阿里云设备的状态 |
| | | * |
| | | * @param deviceCodeList 阿里云设备码 |
| | | * @return 设备状态列表 |
| | | */ |
| | |
| | | List<DeviceStatus> statusList = new ArrayList<>(); |
| | | for (List<String> list : split) { |
| | | List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(list); |
| | | if(CollectionUtil.isNotEmpty(deviceStatuses)){ |
| | | if (CollectionUtil.isNotEmpty(deviceStatuses)) { |
| | | for (BatchGetDeviceStateResponse.DeviceStatus d : deviceStatuses) { |
| | | DeviceStatus deviceStatus = new DeviceStatus(); |
| | | deviceStatus.setDeviceCode(d.getDeviceName()); |
| | |
| | | } |
| | | return statusList; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 用户绑定灯杆 |
| | | * |
| | | * @param clientId 用户ID |
| | | * @param poleIds 灯杆ID |
| | | * @return |
| | | */ |
| | | public boolean ClientBindingPole(long clientId, int[] poleIds) { |
| | | boolean r = false; |
| | | for (int poleId : poleIds) { |
| | | Pole pole = getById(poleId); |
| | | if (pole == null) { |
| | | throw new BusinessException("灯杆不存在"); |
| | | } |
| | | pole.setUserId(clientId); |
| | | if (!clientService.findClientId(clientId)) { |
| | | pole.setClientId(clientService.getClientId(clientId)); |
| | | } |
| | | 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(SecurityUtils.getClientId()!=null){ |
| | | PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); |
| | | if (clientService.findClientId(cilentId)) { |
| | | eq = Wrappers.lambdaQuery(Pole.class).eq(Pole::getUserId, 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); |
| | | } |
| | | ).or( |
| | | deviceCode -> { |
| | | deviceCode.like(Pole::getDeviceCode, keyword); |
| | | } |
| | | ); |
| | | } |
| | | 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("设备不存在"); |
| | | } |
| | | //关闭推送 |
| | | SpringContextHolder.getBean(LightemitUtils.class).clear(xixun.getDeviceCode()); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 推送大气监测数据到novaLED |
| | | */ |
| | | public VnnoxResult pushAirDataToNova(Long poleId) { |
| | | 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("未绑定大气监测设备"); |
| | | } |
| | | if (nova == null) { |
| | | throw new BusinessException("未绑定nova设备"); |
| | | } |
| | | //获取大气监测数据 |
| | | A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(poleId); |
| | | //推送数据 |
| | | return SpringContextHolder.getBean(VnnoxService.class).publishWaterData(LED.getPlayerId(), data); |
| | | } |
| | | |
| | | |
| | | } |