package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; 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.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.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.*; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; import com.sandu.ximon.admin.param.*; import com.sandu.ximon.admin.redis.LightKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.RedisUtils; 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.MonitorMapper; import com.sandu.ximon.dao.mapper.PoleMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 灯杆相关 * * @author chenjiantian */ @Service @Slf4j @AllArgsConstructor public class PoleService extends BaseServiceImpl { 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); } public boolean updatePole(Long poleId, PoleParam param) { Pole pole = getById(poleId); if (pole == null) { throw new BusinessException("未找到该灯杆"); } Pole update = new Pole(); BeanUtils.copyProperties(param, update); update.setId(poleId); return updateById(update); } /** * 删除灯杆 */ public boolean deletePole(Long poleId) { Pole pole = getById(poleId); if (pole == null) { throw new BusinessException("未找到该灯杆"); } // 删除灯杆绑定关系 poleBindingService.remove(Wrappers.lambdaQuery().eq(PoleBinding::getPoleId, poleId)); return removeById(poleId); } /** * 生成灯杆编号 */ public Long generatePoleCode() { StringBuilder sb = new StringBuilder(); String date = new SimpleDateFormat("yyMMdd").format(new Date()); sb.append(date); String key = LightKey.POLE_SN.key(null); Long increment = redisService.incr(key, 1); String incrementStr = increment.toString(); if (incrementStr.length() <= 4) { sb.append(String.format("%04d", increment)); } else { sb.append(incrementStr); } return Long.parseLong(sb.toString()); } /** * 统计在线灯杆数量 * * @return */ public Map poleCount() { Map result = new HashMap<>(); LambdaQueryWrapper 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 list = list(wrapper); List poles = isOnLine(list); result.put("poleOnlineCount", poles.size()); result.put("poleTotalCount", list.size()); //诺瓦 List 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 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 monitorBos = SpringContextHolder.getBean(MonitorService.class).listMonitorByKeyword(null, monitorParam); monitorParam.setEquipmentState(1); List online = SpringContextHolder.getBean(MonitorService.class).listMonitorByKeyword(null, monitorParam); result.put("monitorOnlineCount", online.size()); result.put("monitorTotalCount", monitorBos.size()); //单灯 number = 0; List 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 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 airEquipments = SpringContextHolder.getBean(AirEquipmentService.class).listAirEquipmentByKeyword(null, null); for (AirEquipmentBo airEquipmentBo : airEquipments) { if (RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT.getCode() + airEquipmentBo.getMac()) != null) { number++; } } result.put("AirEquipmentOnlineCount", number); result.put("AirEquipmentTotalCount", airEquipments.size()); //大气(农耕) number = 0; List airEquipmentNongGengBos = SpringContextHolder.getBean(AirEquipmentNongGengService.class).listAirEquipmentByKeyword(null, null); for (AirEquipmentNongGengBo airEquipmentNongGengBo : airEquipmentNongGengBos) { if (RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_NONG_GENG.getCode() + airEquipmentNongGengBo.getMac()) != null) { number++; } } result.put("AirEquipmentNongGengOnlineCount", number); result.put("AirEquipmentNongGengTotalCount", airEquipmentNongGengBos.size()); //水质 number = 0; List 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 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 poleLightemitEntities = SpringContextHolder.getBean(PoleLightemitService.class).listLed(null, false); List poleLightemitEntityOnlineList = SpringContextHolder.getBean(PoleLightemitService.class).ledOnline(poleLightemitEntities); result.put("XiXunOnlineCount", poleLightemitEntityOnlineList.size()); result.put("XiXunTotalCount", poleLightemitEntities.size()); return result; } public List queryAllStatesAndList(Integer pageNo, Integer pageSize, PoleStatesParam param) { List list = new ArrayList<>(); LambdaQueryWrapper 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 poleIds = new ArrayList<>(); List pole = new ArrayList<>(); List 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 setCount(List 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 isOnLine(List list, PoleStatesParam param) { setOnline(list); List online = new ArrayList<>();//在线 List 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 isOnLine(List list) { setOnline(list); List online = new ArrayList<>();//在线 list.forEach(onLinePole -> { if (("ONLINE").equals(onLinePole.getOnLineState())) { online.add(onLinePole); } }); return online; } /** * 查询绑定状态 * * @param list * @param param * @return */ public List isBind(List list, PoleStatesParam param) { List bindList = new ArrayList<>();//已绑定客户 List 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 isTrue(List list, PoleStatesParam param) { List isTrue = new ArrayList<>();//实体灯杆 List 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 setOnline(List list) { List MacCodes = new ArrayList<>(); for (Pole post : list) { if (post.getDeviceCode() != null) { MacCodes.add(post.getDeviceCode()); } } // List 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 queryStatesAndList(Integer pageNo, Integer pageSize, String keyword, Long groupid) { // List list = list(Wrappers.lambdaQuery(LampPost.class).eq(LampPost::getClientId, SecurityUtils.getUserId())); //List list = list(Wrappers.lambdaQuery(Pole.class)); PageHelper.startPage(pageNo, pageSize); List list = new ArrayList<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (SecurityUtils.getClientId() == null) { wrapper = Wrappers.lambdaQuery(Pole.class); } else { 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 MacCodes = new ArrayList<>(); for (Pole post : list) { MacCodes.add(post.getDeviceCode()); } List deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(MacCodes); 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; } /** * 灯杆绑定设备 * * @param poleId 绑定灯杆id * @param param 被绑定设备信息 * @return 是否成功 */ public boolean bindPole(Long poleId, PoleBindingParam param) { Pole pole = getById(poleId); if (pole == null) { throw new BusinessException("未找到该灯杆"); } return poleBindingService.bindPole(poleId, param); } /** * 灯杆解绑绑定设备 * * @return 是否成功 */ public boolean unBindPole(Long poleId, String deviceCode) { return poleBindingService.unBindPole(poleId, deviceCode); } /** * 灯杆恢复出厂设置 * * @param id * @return */ public boolean poleReset(Long id) { Pole byId = getById(id); String deviceName = byId.getDeviceCode(); if (byId == null) { throw new BusinessException("未找到该灯杆"); } if (deviceName.isEmpty()) { throw new BusinessException("该灯杆Mca为空"); } 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()); boolean b = false; if ("00".equals(rebootFrame.getPayload())) { byId.setDeviceCode(null); b = updateById(byId); System.out.println("重启成功"); } return b; } /** * 给灯杆注册三元码 */ public boolean setMac(String baseMac) { // public boolean setMac() { //Pole pole = getById(poleId); /* if (pole == null) { throw new BusinessException("未找到该灯杆"); }*/ 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); if (commonFrame == null) { throw new BusinessException("读取设备唯一ID失败"); } A1DeviceMacRespInnerFrame a1DeviceMacRespInnerFrame = new A1DeviceMacRespInnerFrame().transformFrame(commonFrame.getPayload()); log.info(commonFrame.toString()); String uniqueMac = a1DeviceMacRespInnerFrame.getMac(); uniqueMac = uniqueMac.toLowerCase(); if (uniqueMac.isEmpty()) { throw new BusinessException("读取设备唯一ID失败!"); } log.info("唯一码{}", uniqueMac); // 2 从阿里注册 MainBoardInvokeSyncService.getInstance().registerDevice(uniqueMac); // 3 获取设备详情 QueryDeviceDetailResponse.Data deviceDetail = MainBoardInvokeSyncService.getInstance().queryDeviceDetail(uniqueMac, null); if (deviceDetail == null) { throw new BusinessException("注册失败"); } log.info(deviceDetail.toString()); // 4 配置Mac① WrapResponseCommonFrame 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(); if (!MainBoardInvokeSyncService.getInstance().getProductKey().equals(responseInnerFrame.getTernaryCode())) { throw new BusinessException("设备配置ProductKey失败"); } // 5 配置Mac② WrapResponseCommonFrame 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())) { throw new BusinessException("设备配置名失败"); } // 6 配置Mac③ WrapResponseCommonFrame 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(); 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()); if ("00".equals(rebootFrame.getPayload())) { // pole.setDeviceCode(uniqueMac); // setMac = updateById(pole); System.out.println("重启成功"); } 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 listDeviceCodeByIds(List poleIdList) { if (CollectionUtil.isEmpty(poleIdList)) { return null; } List 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()); } /** * 批量获取阿里云设备的状态 * * @param deviceCodeList 阿里云设备码 * @return 设备状态列表 */ public List listStatusByDeviceCode(ArrayList deviceCodeList) { // 最大只能查50个 List> split = CollectionUtil.split(deviceCodeList, 50); List statusList = new ArrayList<>(); for (List list : split) { List deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(list); if (CollectionUtil.isNotEmpty(deviceStatuses)) { for (BatchGetDeviceStateResponse.DeviceStatus d : deviceStatuses) { DeviceStatus deviceStatus = new DeviceStatus(); deviceStatus.setDeviceCode(d.getDeviceName()); deviceStatus.setStatus(DeviceStateEnum.getCode(d.getStatus())); statusList.add(deviceStatus); } } } 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 getOwnerPole(BaseConditionVO baseConditionVO, String keyword, Long cilentId) { LambdaQueryWrapper 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 list; list = list(eq); setCount(list); setOnline(list); return list; } /** * 根据灯杆id查询灯杆绑定设备 * * @return */ public PoleBindVO getBindByPoleId(Long poleId) { List bind = poleBindingService.list(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId)); PoleBindVO bindVO = new PoleBindVO(); bindVO.setPole(getPoleByMac(poleId)); bind.forEach(poleBinding -> { if (poleBinding.getDeviceType() == 0) {//单灯 bindVO.setLight(SpringContextHolder.getBean(LightService.class).getLight(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 1) {//诺瓦 bindVO.setNova(SpringContextHolder.getBean(LedPlayerEntityService.class).getBySnAndPlayerSn(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 2) {//充电桩 bindVO.setC3mCharging(SpringContextHolder.getBean(C3ChargingService.class).getByC3Mac(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 3) {//大气 bindVO.setAirMonitoring(SpringContextHolder.getBean(AirEquipmentService.class).getAirEquipment(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 4) {//水质 bindVO.setWaterMonitoring(SpringContextHolder.getBean(WaterQualityDataService.class).getWaterQualityDataInfo(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 5) {//音柱 bindVO.setIpVolume(SpringContextHolder.getBean(IpVolumeService.class).getIpTerminalDetail(Integer.valueOf(poleBinding.getDeviceCode()))); } else if (poleBinding.getDeviceType() == 6) {//LCD //lcd暂无 } else if (poleBinding.getDeviceType() == 7) {//摄像头 bindVO.setMonitor(SpringContextHolder.getBean(MonitorService.class).getMonitorInfo(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 8) {//杆体倾测 bindVO.setLightPoleHeeling(SpringContextHolder.getBean(LightPoleHeelingService.class).getLightPoleHeelingByMac(poleBinding.getDeviceCode())); } else if (poleBinding.getDeviceType() == 9) {//一键求助 //一键求助暂无 } else if (poleBinding.getDeviceType() == 10) {//熙讯 bindVO.setXiXun(SpringContextHolder.getBean(PoleLightemitService.class).getLedByLightControlCode(poleBinding.getDeviceCode())); } else { throw new BusinessException("未知设备类型"); } }); return bindVO; } public Pole getPoleByMac(Long poleId) { Pole one = getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getId, poleId)); ArrayList macs = new ArrayList<>(); macs.add(one.getDeviceCode()); List 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); } }