From c05a14bba4b86d83918d7cdc01635785bf5694c2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 03 六月 2025 00:26:08 +0800 Subject: [PATCH] 拆分mongodb查询服务 --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 194 +++++++++++++++++++++++++++++++----------------- 1 files changed, 125 insertions(+), 69 deletions(-) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index 5c6bf3b..2bfa42a 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -3,7 +3,9 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.account.api.dto.SendMessageDTO; import com.ruoyi.account.api.feignClient.AppUserCarClient; +import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO; import com.ruoyi.chargingPile.api.model.*; @@ -17,6 +19,7 @@ import com.ruoyi.chargingPile.dto.GetChargingGunMonitoring; import com.ruoyi.chargingPile.mapper.TChargingPileMapper; import com.ruoyi.chargingPile.service.*; +import com.ruoyi.chargingPile.util.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -24,10 +27,7 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.integration.api.feignClient.IntegrationClient; -import com.ruoyi.integration.api.feignClient.IotInterfaceClient; -import com.ruoyi.integration.api.feignClient.SendMessageClient; -import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; +import com.ruoyi.integration.api.feignClient.*; import com.ruoyi.integration.api.model.QrCodeDelivery; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.AddDevice; @@ -43,6 +43,7 @@ import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.feignClient.SysUserRoleClient; import com.ruoyi.system.api.model.SysUserRoleVo; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -69,6 +70,9 @@ private TChargingGunService chargingGunService; @Resource + private TCECClient tcecClient; + + @Resource private SysUserClient sysUserClient; @Resource @@ -93,7 +97,7 @@ private AppUserCarClient appUserCarClient; @Resource - private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; + private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; @Resource private SysUserRoleClient sysUserRoleClient; @@ -102,7 +106,7 @@ private IotInterfaceClient iotInterfaceClient; @Resource - private RedisService redisService; + private RedisTemplate redisTemplate; @Resource private TFaultMessageService faultMessageService; @@ -117,11 +121,14 @@ private SendMessageClient sendMessageClient; @Resource private TokenService tokenService; + @Resource + private TChargingPileNotificationService chargingPileNotificationService; + + @Resource + private AppUserClient appUserClient; - - - + /** * 获取充电桩列表数据 * @param page @@ -177,22 +184,29 @@ return AjaxResult.error("设备编号已存在"); } //调用华为Iot创建设备 - AddDevice addDevice = new AddDevice(); - addDevice.setProductId("66da68d21837002b28b34ec0"); - addDevice.setNodeId(chargingPile.getCode()); - addDevice.setDeviceName(chargingPile.getName()); - addDevice.setDescription(chargingPile.getNumber().toString()); - AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); - if(null != deviceResp){ - int httpStatusCode = deviceResp.getHttpStatusCode(); - if(httpStatusCode == 201){ - chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(chargingPile.getCode()).getData(); + if(null == showDeviceResp){ + //调用华为Iot创建设备 + AddDevice addDevice = new AddDevice(); + addDevice.setProductId("66da68d21837002b28b34ec0"); + addDevice.setNodeId(chargingPile.getCode()); + addDevice.setDeviceName(chargingPile.getName()); + addDevice.setDescription(chargingPile.getNumber().toString()); + AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); + if(null != deviceResp){ + int httpStatusCode = deviceResp.getHttpStatusCode(); + if(httpStatusCode == 201){ + chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); + }else{ + log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); + return AjaxResult.error("华为创建设备失败"); + } }else{ log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } }else{ - return AjaxResult.error("华为创建设备失败"); + chargingPile.setIotdDeviceId(showDeviceResp.getDeviceId()); } this.save(chargingPile); return AjaxResult.success(); @@ -258,32 +272,37 @@ return AjaxResult.error("设备编号已存在"); } TChargingPile tChargingPile = this.getById(chargingPile.getId()); - ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); - if(null != showDeviceResp){ - DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData(); - if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){ - return AjaxResult.error("删除设备异常,请查看华为设备管理"); + //桩号不相同,需要重新绑定设备 + if(!tChargingPile.getCode().equals(chargingPile.getCode())){ + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); + if(null != showDeviceResp){ + DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData(); + if(null == deleteDeviceResp){ + return AjaxResult.error("删除设备异常,请查看华为设备管理"); + } } } - - //调用华为Iot创建设备 - AddDevice addDevice = new AddDevice(); - addDevice.setProductId("66da68d21837002b28b34ec0"); - addDevice.setNodeId(chargingPile.getCode()); - addDevice.setDeviceName(chargingPile.getName()); - addDevice.setDescription(chargingPile.getNumber().toString()); - AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); - if(null != deviceResp){ - int httpStatusCode = deviceResp.getHttpStatusCode(); - if(httpStatusCode == 201){ - chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); + if(null == showDeviceResp){ + //调用华为Iot创建设备 + AddDevice addDevice = new AddDevice(); + addDevice.setProductId("66da68d21837002b28b34ec0"); + addDevice.setNodeId(chargingPile.getCode()); + addDevice.setDeviceName(chargingPile.getName()); + addDevice.setDescription(chargingPile.getNumber().toString()); + AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); + if(null != deviceResp){ + int httpStatusCode = deviceResp.getHttpStatusCode(); + if(httpStatusCode == 201){ + chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); + }else{ + log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); + return AjaxResult.error("华为创建设备失败"); + } }else{ - log.error("华为创建设备失败" + JSON.toJSONString(deviceResp)); return AjaxResult.error("华为创建设备失败"); } - }else{ - return AjaxResult.error("华为创建设备失败"); } this.updateById(chargingPile); @@ -292,6 +311,7 @@ TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setFullNumber(chargingPile.getCode() + chargingGun.getCode()); + chargingGun1.setSiteId(chargingPile.getSiteId()); chargingGunService.updateById(chargingGun1); //下发硬件充电二维码 @@ -305,6 +325,7 @@ qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + chargingGun.getCode()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); } + tcecClient.superviseNotificationStationInfo(chargingPile.getSiteId()); return AjaxResult.success(); } @@ -334,7 +355,7 @@ } chargingPile.setIotdDeviceId(""); } - + } this.removeById(chargingPile); } @@ -368,33 +389,47 @@ @Override public List<TChargingPileVO> getChargingGunList(Integer siteId,Integer type) { - List<TChargingPileVO> chargingPileVOS = this.baseMapper.getChargingGunList(siteId); LambdaQueryWrapper<TChargingGun> wrapper = new LambdaQueryWrapper<>(); if(Objects.nonNull(type)){ wrapper.eq(TChargingGun::getChargeMode, type); } wrapper.eq(TChargingGun::getSiteId, siteId); List<TChargingGun> chargingGuns = chargingGunService.list(wrapper); - // 查询充电枪信息 - chargingPileVOS.forEach(item -> { - List<TChargingGun> chargingGunList = chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList()); - for (TChargingGun chargingGun : chargingGunList) { - if(chargingGun.getStatus().equals(4)){ - // 查询正在充电的单子的实时记录 - TChargingOrder chargingOrder = chargingOrderClient.getOrderDetailByGunId(chargingGun.getId()).getData(); - if(Objects.nonNull(chargingOrder)){ - UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); - chargingGun.setSoc(uploadRealTimeMonitoringData.getSoc()); - }else { + Set<Integer> collect = chargingGuns.stream().map(TChargingGun::getChargingPileId).collect(Collectors.toSet()); + List<TChargingPileVO> chargingPileVOS = new ArrayList<>(); + if(collect.size() > 0){ + List<TChargingPile> tChargingPiles = this.baseMapper.selectBatchIds(collect); + for (TChargingPile tChargingPile : tChargingPiles) { + TChargingPileVO vo = new TChargingPileVO(); + List<TChargingGun> chargingGunList = chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(tChargingPile.getId())).collect(Collectors.toList()); + for (TChargingGun chargingGun : chargingGunList) { + if(chargingGun.getStatus().equals(4)){ + // 查询正在充电的单子的实时记录 + TChargingOrder chargingOrder = chargingOrderClient.getOrderDetailByGunId(chargingGun.getId()).getData(); + if(Objects.nonNull(chargingOrder)){ + UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode()); + if(null != uploadRealTimeMonitoringData){ + chargingGun.setSoc(uploadRealTimeMonitoringData.getSoc()); + }else{ + chargingGun.setSoc(0); + } + }else { + chargingGun.setSoc(100); + } + } + if(chargingGun.getStatus().equals(5)){ chargingGun.setSoc(100); } } - if(chargingGun.getStatus().equals(5)){ - chargingGun.setSoc(100); - } + vo.setChargingGunList(chargingGunList); + vo.setId(tChargingPile.getId()); + vo.setCode(tChargingPile.getCode()); + vo.setName(tChargingPile.getName()); + vo.setNumber(tChargingPile.getNumber()); + chargingPileVOS.add(vo); + } - item.setChargingGunList(chargingGunList); - }); + } return chargingPileVOS; } @@ -469,16 +504,18 @@ chargeTrend.put("value", value1); chargeMonitoring.setChargeTrend(chargeTrend); - //每日利用率=当日充电度数/(总桩数量*桩总功率*24小时) + //每日利用率=当日充电度数/(桩总功率*24小时) List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getSiteId, siteIds).eq(TChargingPile::getDelFlag, 0)); BigDecimal v = list.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN); List<Double> data = chargingOrderAccountingStrategyClient.getDailyChargingDegree(6, siteIds).getData(); List<Double> value2 = new ArrayList<>(); + BigDecimal multiply = v.multiply(new BigDecimal(24)); for (Double datum : data) { if(list.size() == 0){ value2.add(0D); }else{ - Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24)), new MathContext(4, RoundingMode.HALF_EVEN)).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + Double datum1 = new BigDecimal(datum).divide(multiply, new MathContext(4, RoundingMode.HALF_EVEN)) + .multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); value2.add(datum1); } } @@ -596,9 +633,11 @@ if(null != appUserCarId){ TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(appUserCarId)).getData().get(0); gunMonitoring.setLicensePlate(tAppUserCar.getLicensePlate()); + }else{ + gunMonitoring.setLicensePlate(chargingOrder.getPlateNum()); } - UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); + UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode()); gunMonitoring.setChargingRatio(BigDecimal.valueOf(data.getSoc())); gunMonitoring.setElectricQuantity(data.getCharging_degree().toString()); gunMonitoring.setSoc(data.getSoc().toString()); @@ -664,19 +703,22 @@ */ @Override public void updateStatus() { - Map<String, Object> charging_gun_online = redisService.getCacheMap("charging_gun_online"); - Set<String> keySet = charging_gun_online.keySet(); - List<TChargingGun> list = new ArrayList<>(); - if(keySet.size() > 0){ - list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getDelFlag, 0).in(TChargingGun::getFullNumber, keySet)); - } + List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getDelFlag, 0)); for (TChargingGun chargingGun : list) { - Long time = (Long) charging_gun_online.get(chargingGun.getFullNumber()); - if(null != time && System.currentTimeMillis() - time > 60000){ + Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", chargingGun.getFullNumber()); + //判断设备是否真的离线5分钟 + if(null != time && System.currentTimeMillis() - time > 300000){ TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setStatus(1); chargingGunService.updateById(chargingGun1); + new Thread(new Runnable() { + @Override + public void run() { + //推送状态给三方平台 + tcecClient.pushChargingGunStatus(chargingGun1.getFullNumber(), chargingGun1.getStatus()); + } + }).start(); //桩处于正常,桩所属的枪都处于非正常,修改桩状态为异常 TChargingPile chargingPile = this.getById(chargingGun.getChargingPileId()); @@ -703,6 +745,20 @@ faultMessage.setDelFlag(false); faultMessage.setContent("设备离线"); faultMessageService.save(faultMessage); + + // 发送故障短信 + Site site = siteService.getById(faultMessage.getSiteId()); + String siteName = site.getName(); + SendMessageDTO sendMessageDTO = new SendMessageDTO(); + sendMessageDTO.setPhone(site.getPhone()); + sendMessageDTO.setSite(site.getName()); + sendMessageDTO.setChargeGun(chargingPile.getNumber() + ""); + sendMessageDTO.setType(3); + String result = appUserClient.sendMessage(sendMessageDTO).getData(); + if(siteName.length()>10){ + siteName = siteName.substring(0,10); + } + chargingPileNotificationService.saveData(4,faultMessage.getSiteId(),faultMessage.getChargingPileId(),site.getPhone(),"检测到"+siteName+"..."+chargingPile.getNumber()+"号桩设备离线,请及时查看处理!"); } } } -- Gitblit v1.7.1