From 3b4bd94a21864b9b638395c95c467bb82a2f157e Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 26 三月 2025 21:25:22 +0800 Subject: [PATCH] 监管平台 --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java | 77 ++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java | 31 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java | 220 ++++++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java | 18 + ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java | 7 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java | 258 -------------- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java | 25 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java | 29 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java | 13 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java | 34 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java | 210 +++++++++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 1 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java | 108 +++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java | 19 + 17 files changed, 794 insertions(+), 280 deletions(-) diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java index 91cd74b..ab7cfb8 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java @@ -17,7 +17,12 @@ return new TCECClient() { - @Override + @Override + public R superviseNotificationStationInfo(Integer id) { + return R.fail("推送充换电站信息失败:" + cause.getMessage()); + } + + @Override public R pushChargingGunStatus(String getFullNumber, Integer status) { return R.fail("接口状态变化后推送给第三方失败:" + cause.getMessage()); } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java index 3e3becc..c3ed65e 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java @@ -17,8 +17,14 @@ */ @FeignClient(contextId = "TCECClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = TCECClientFallbackFactory.class) public interface TCECClient { - - + /** + * 推送充换电站信息 + * @param id + * @return + */ + @PostMapping("/evcs/v1.0/supervise_notification_station_info") + R superviseNotificationStationInfo(@RequestParam Integer id); + /** * 接口状态变化后推送给第三方 * @return diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java index 157fa00..bb7b7f1 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java @@ -18,4 +18,6 @@ private LocalDateTime startTime; @ApiModelProperty(value = "结束时间2020-01-01 23:59:59") private LocalDateTime endTime; + @ApiModelProperty(value = "站点id") + private Integer siteId; } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 3f991b8..60e93b3 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -196,7 +196,6 @@ } site.setMark(0); this.save(site); - // 推送充电站数据给监管平台 return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java index 1ab951e..43815e0 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.chargingPile.api.query.TChargingGunQuery; import com.ruoyi.chargingPile.api.vo.*; import com.ruoyi.chargingPile.api.domain.SiteMenu; +import com.ruoyi.chargingPile.mapper.SiteMapper; import com.ruoyi.chargingPile.mapper.TChargingGunMapper; import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.TChargingGunService; @@ -23,6 +24,7 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.SendMessageClient; +import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.integration.api.model.QrCodeDelivery; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; @@ -72,7 +74,8 @@ @Resource private SiteClient siteClient; - + @Autowired + private TCECClient tcecClient; @Resource private TokenService tokenService; @@ -117,7 +120,9 @@ pageInfo.setRecords(list); return pageInfo; } - + +@Autowired +private SiteMapper siteMapper; /** * 添加充电枪 * @param dto @@ -148,6 +153,9 @@ qrCodeDelivery.setCode_prefix(code_prefix); qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); + Site site = siteMapper.selectById(chargingPile.getSiteId()); + // 推送充换电站信息 + tcecClient.superviseNotificationStationInfo(site.getId()); return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java new file mode 100644 index 0000000..889346d --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java @@ -0,0 +1,34 @@ +package com.ruoyi.integration.drainage; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 换电设备信 + * 息 + */ +@Data +public class SupSwapEquipmentInfo { + //换电设备 + //编码 + @JsonProperty("SwapMechanicalEquipmentID") + private String SwapMechanicalEquipmentID; + //换电设备 + //生产商组 + //织机构代 + //码 + @JsonProperty("SwapManufacturerID") + private String SwapManufacturerID; + //换电设备 + //生产商名 + //称 + @JsonProperty("SwapManufacturerName") + private String SwapManufacturerName; + //换电机械 + //设备额定 + //功率 + @JsonProperty("MechanicalEquipmentPower") + private BigDecimal MechanicalEquipmentPower; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java index db89dda..9eaf611 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java @@ -2051,16 +2051,85 @@ return R.ok(); } + /** * 推送充换电站信息 - * @param site + * @param id * @return */ @PostMapping("/supervise_notification_station_info") - public BaseResult superviseNotificationStationInfo(@RequestBody Site site){ - BaseResult baseResult = new BaseResult(); + public R superviseNotificationStationInfo(@RequestParam Integer id){ + String serviceTel = systemConfigurationClient.getServerPhone().getData(); + Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site()); - return baseResult; + List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(site.getId())).getData(); + List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); + List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); + SupStationInfo supStationInfo = new SupStationInfo(); + supStationInfo.setStationID(site.getId().toString()); + supStationInfo.setStationUniqueNumber(site.getDistrictsCode() + "906171535" + site.getId()); + supStationInfo.setOperatorID("906171535"); + supStationInfo.setEquipmentOwnerID("906171535"); + supStationInfo.setStationName(site.getName()); + supStationInfo.setCountryCode(site.getCountryCode()); + supStationInfo.setAreaCode(site.getCityCode()); + supStationInfo.setAddress(site.getAddress()); + supStationInfo.setAreaCodeCountryside(site.getAreaCodeCountryside()); + supStationInfo.setStationTel(site.getPhone()); + + supStationInfo.setServiceTel(serviceTel); + supStationInfo.setStationClassification(site.getStationClassification()); + supStationInfo.setGeneralApplicationType(site.getGeneralApplicationType()); + supStationInfo.setStationType(site.getSiteType()); + supStationInfo.setStationStatus(site.getStatus()); + supStationInfo.setParkNums(site.getParkingSpace()); + supStationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.DOWN)); + supStationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.DOWN)); + supStationInfo.setSiteGuide(site.getGuide()); + supStationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite()); + supStationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>()); + + supStationInfo.setMatchCars(site.getVehicleDescription()); + if (org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars())){ + supStationInfo.setSwapMatchCars(Arrays.asList(site.getSwapMatchCars().split(","))); + } + supStationInfo.setBusineHours(site.getStartServiceTime()); + supStationInfo.setRoundTheClock(site.getRoundTheClock()); + supStationInfo.setParkType(site.getParkType()); + supStationInfo.setParkFee("{\"rules\":"+site.getParkFee()+","+"\"freeDuration\":"+site.getParkFeeFree()+"}"); + supStationInfo.setElectricityType(site.getElectricityType()); + supStationInfo.setBusinessExpandType(site.getBusinessExpandType()); + supStationInfo.setCapacity(site.getCapacity()); + supStationInfo.setRatedPower(site.getRatedPower()); + supStationInfo.setPeriodFee(site.getPeriodFee()); + supStationInfo.setOfficialRunTime(site.getOfficialRunTime()); + supStationInfo.setStationOrientation(site.getStationOrientation()); + supStationInfo.setStationArea(site.getStationArea()); + supStationInfo.setHavePerson(site.getHavePerson()); + supStationInfo.setVideoMonitor(site.getVideoMonitor()); + if (StringUtils.isNotEmpty(site.getSupportingFacilities())){ + String[] split = site.getSupportingFacilities().split(","); + List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList()); + supStationInfo.setSupportingFacilities(collect); + } + supStationInfo.setPrinterFlag(site.getPrinterFlag()); + supStationInfo.setBarrierFlag(site.getBarrierFlag()); + supStationInfo.setParkingLockFlag(site.getParkingLockFlag()); + supStationInfo.setEquipmentInfos(buildEquipmentInfo(site.getId(), tChargingPiles, chargingGunList)); +// supStationInfo.setSwapEquipmentInfos(); + supStationInfo.setElectricityFee("{"+site.getElectricityFee()+"}"); + supStationInfo.setEquipmentOwnerName(site.getEquipmentOwnerName()); + supStationInfo.setResidentNo(site.getResidentNo()); + supStationInfo.setSupplyType(site.getSupplyType()); + supStationInfo.setWattHourMeterNo(site.getWattHourMeterNo()); + supStationInfo.setForwardPower(site.getForwardPower()); + supStationInfo.setServiceFee("{"+site.getServiceFee()+"}"); + supStationInfo.setRecordUniqueNo(site.getRecordUniqueNo()); + BaseResult baseResult = new BaseResult(); + SupStationInfoResult supStationInfoResult = new SupStationInfoResult(); + supStationInfoResult.setSupStationInfo(supStationInfo); + tcecSuperviseUtil.superviseNotificationStationInfo(supStationInfoResult); + return R.ok(baseResult); } // // diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java index 43c6faa..7b24b27 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java @@ -31,6 +31,7 @@ import com.ruoyi.other.api.feignClient.SystemConfigurationClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -56,7 +57,8 @@ @Resource private SiteClient siteClient; - + @Autowired + private TCECSuperviseUtil tcecSuperviseUtil; @Resource private ChargingPileClient chargingPileClient; @@ -1809,262 +1811,8 @@ log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); return baseResult; } - /** - * 推送充电用能统计 - * @return - */ - @PostMapping("/supervise_notification_operation_stats_info") - public void superviseNotificationOperationStatsInfo(){ - List<Site> data = siteClient.getSiteAll().getData(); - LocalDateTime now = LocalDateTime.now(); - LocalDateTime startLocalDateTime = now.minusDays(1); - LocalDateTime endLocalDateTime = now.minusDays(1); - // 获取今天凌晨 - startLocalDateTime.withHour(0); - startLocalDateTime.withMinute(0); - startLocalDateTime.withSecond(0); - String start = DateUtils.localDateTimeToString(startLocalDateTime); - endLocalDateTime.withHour(23); - endLocalDateTime.withMinute(59); - endLocalDateTime.withSecond(59); - String end = DateUtils.localDateTimeToString(endLocalDateTime); - ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO(); - chargingStatisticeDTO.setStartTime(startLocalDateTime); - chargingStatisticeDTO.setEndTime(endLocalDateTime); - List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData(); - List<StationStatsInfo> stationStatsInfos = new ArrayList<>(); - for (Site datum : data) { - StationStatsInfo stationStatsInfo = new StationStatsInfo(); - stationStatsInfo.setStationID(datum.getId().toString()); - stationStatsInfo.setEquipmentOwnerID("906171535"); - stationStatsInfo.setOperatorID("906171535"); - stationStatsInfo.setStationClassification(1); - stationStatsInfo.setStartTime(start); - stationStatsInfo.setEndTime(end); - List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList()); - // 充电电量 - BigDecimal electricity = new BigDecimal("0"); - int chargingCount = 0; - for (TChargingOrder chargingOrder : chargingOrders) { - if (chargingOrder.getElectricity()!=null){ - electricity = electricity.add(chargingOrder.getElectricity()); - chargingCount++; - } - } - stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN)); - stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN)); - stationStatsInfo.setStationTotalWarningNum(0); - stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0")); - stationStatsInfo.setStationTotalChargeNum(chargingCount); - //构建设备统计数据 - List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>(); - Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId)); - for (Integer integer : collect.keySet()) { - List<TChargingOrder> tChargingOrders = collect.get(integer); - BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); - EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo(); - equipmentStatsInfo.setEquipmentClassification(1); - long chargingTime = 0L; - for (TChargingOrder tChargingOrder : tChargingOrders) { - // 累加充电时长 - LocalDateTime startTime = tChargingOrder.getStartTime(); - LocalDateTime endTime = tChargingOrder.getEndTime(); - // 计算时间差 单位分钟 - chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60; - } - equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime); - equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size()); - equipmentStatsInfo.setEquipmentTotalWarningNum(0); - equipmentStatsInfo.setEquipmentID(integer.toString()); - equipmentStatsInfo.setEquipmentElectricity(reduce1); - //构建设备接口统计数据 - Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId)); - List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>(); - for (Integer integer1 : collect2.keySet()) { - List<TChargingOrder> tChargingOrders1 = collect2.get(integer1); - BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData(); - ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo(); - connectorStatsInfo.setConnectorID(chargingGun.getFullNumber()); - connectorStatsInfo.setConnectorElectricity(reduce2); - ConnectorStatsInfos.add(connectorStatsInfo); - } - equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos); - EquipmentStatsInfos.add(equipmentStatsInfo); - } - stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos); - stationStatsInfos.add(stationStatsInfo); - } - } - /** - * 推送充换电站实时功率 - * @return - */ - @PostMapping("/supervise_notification_realtime_power_info") - public void superviseNotificationRealtimePowerInfo(){ - } - - /** - * 推送充换电站信息 - * @param datum - * @return - */ - @PostMapping("/supervise_notification_station_info") - public void superviseNotificationStationInfo(@RequestBody Site datum){ - BaseResult baseResult = new BaseResult(); - StationInfo stationInfo = new StationInfo(); - List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(datum.getId())).getData(); - List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); - List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); - String serviceTel = systemConfigurationClient.getServerPhone().getData(); - stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside()); - stationInfo.setStationClassification(datum.getStationClassification()); - stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType()); - if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){ - stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(","))); - } - stationInfo.setBusineHours(datum.getStartServiceTime()); - stationInfo.setRoundTheClock(datum.getRoundTheClock()); - stationInfo.setParkType(datum.getParkType()); - stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}"); - stationInfo.setServiceFee("{"+datum.getServiceFee()+"}"); - stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}"); - stationInfo.setElectricityType(datum.getElectricityType()); - stationInfo.setBusinessExpandType(datum.getBusinessExpandType()); - stationInfo.setCapacity(datum.getCapacity()); - stationInfo.setRatedPower(datum.getRatedPower()); - stationInfo.setPeriodFee(datum.getPeriodFee()); - stationInfo.setOfficialRunTime(datum.getOfficialRunTime()); - stationInfo.setStationOrientation(datum.getStationOrientation()); - stationInfo.setStationArea(datum.getStationArea()); - stationInfo.setHavePerson(datum.getHavePerson()); - stationInfo.setVideoMonitor(datum.getVideoMonitor()); - if (StringUtils.isNotEmpty(datum.getSupportingFacilities())){ - String[] split = datum.getSupportingFacilities().split(","); - List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList()); - stationInfo.setSupportingFacilities(collect); - } - stationInfo.setPrinterFlag(datum.getPrinterFlag()); - stationInfo.setBarrierFlag(datum.getBarrierFlag()); - stationInfo.setParkingLockFlag(datum.getParkingLockFlag()); - stationInfo.setEquipmentOwnerName(datum.getEquipmentOwnerName()); - stationInfo.setResidentNo(datum.getResidentNo()); - stationInfo.setSupplyType(datum.getSupplyType()); - stationInfo.setWattHourMeterNo(datum.getWattHourMeterNo()); - BigDecimal forwardPower = datum.getForwardPower(); - if (forwardPower!=null){ - stationInfo.setForwardPower(forwardPower.setScale(4, BigDecimal.ROUND_HALF_UP).toString()); - } - stationInfo.setRecordUniqueNo(datum.getRecordUniqueNo()); - stationInfo.setStationID(datum.getId().toString()); - stationInfo.setOperatorID("906171535"); - stationInfo.setEquipmentOwnerID("906171535"); - stationInfo.setStationName(datum.getName()); - stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN"); - stationInfo.setAreaCode(datum.getDistrictsCode()); - stationInfo.setAddress(datum.getAddress()); - stationInfo.setStationTel(datum.getPhone()); - stationInfo.setServiceTel(serviceTel); - switch (datum.getSiteType()){ - case 0: - stationInfo.setStationType(StationTypeEnum.OTHER.getType()); - break; - case 1: - stationInfo.setStationType(StationTypeEnum.PUBLIC.getType()); - break; - case 2: - stationInfo.setStationType(StationTypeEnum.PERSONAGE.getType()); - break; - case 3: - stationInfo.setStationType(StationTypeEnum.BUS_SPECIFIC.getType()); - break; - case 4: - stationInfo.setStationType(StationTypeEnum.SANITATION_SPECIFIC.getType()); - break; - case 5: - stationInfo.setStationType(StationTypeEnum.LOGISTICS_SPECIFIC.getType()); - break; - case 6: - stationInfo.setStationType(StationTypeEnum.TEXT_SPECIFIC.getType()); - break; - } - if(datum.getStatus() == 1){ - stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus()); - } - if(datum.getStatus() == 2){ - stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus()); - } - if(datum.getStatus() == 3){ - stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus()); - } - stationInfo.setParkNums(datum.getParkingSpace()); - stationInfo.setStationLat(new BigDecimal(datum.getLat()).setScale(6, RoundingMode.DOWN)); - stationInfo.setStationLng(new BigDecimal(datum.getLon()).setScale(6, RoundingMode.DOWN)); - stationInfo.setConstruction(datum.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : datum.getConstructionSite()); - stationInfo.setPictures(StringUtils.isNotEmpty(datum.getImgUrl()) ? Arrays.asList(datum.getImgUrl().split(",")) : new ArrayList<>()); - stationInfo.setSiteGuide(datum.getGuide()); - stationInfo.setMatchCars(datum.getVehicleDescription()); - stationInfo.setElectricityFee(datum.getRateDescription()); - //构建充电设备信息数据 - stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList)); - // 推送 - HttpRequest post = HttpUtil.createPost(url + "supervise_notification_station_info"); - buildBody(post, stationInfo); - HttpResponse execute = post.execute(); - if(200 != execute.getStatus()){ - log.error("推送监管平台电站信息失败:" + execute.body()); - return ; - } - log.info("推送监管平台电站信息响应:" + execute.body()); - String data = baseResult.getData(); - // 转化为json - if(!data.contains("0")){ - log.error("推送监管平台电站信息失败:" + baseResult.getMsg()); - // 重试 - for (int i = 1; i <= 3; i++) { - try { - Thread.sleep(5000); - HttpRequest post1 = HttpUtil.createPost(url + "supervise_notification_station_info"); - buildBody(post1, stationInfo); - HttpResponse execute1 = post1.execute(); - if(200 == execute1.getStatus()){ - log.info("重试次数:"+i+"推送监管平台电站信息响应:" + execute1.body()); - BaseResult baseResult2 = JSON.parseObject(execute1.body(), BaseResult.class); - String data1 = baseResult2.getData(); - if (data1.contains("0")){ - break; - } - } - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } - } - /** - * 构建请求参数和消息头 - * @param post - * @param o - */ - public static void buildBody(HttpRequest post, Object o){ - Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - post.contentType("application/json;charset=utf-8"); -// post.header("Authorization", "Bearer " + getToken(operator)); - BaseRequest baseRequest = new BaseRequest(); - baseRequest.setOperatorID("906171535"); - baseRequest.setTimeStamp(timeStamp); - baseRequest.setSeq("0001"); - String jsonString = JacksonUtils.toJson(o); - String encrypt = AESUtil.encrypt(jsonString, ourDataSecret, ourDataSecretIv); - baseRequest.setData(encrypt); - baseRequest.setSig(TCECUtil.ourBuildSign(baseRequest)); - log.info("监管平台推送参数:" + JacksonUtils.toJson(baseRequest)); - String request_json = JacksonUtils.toJson(baseRequest); - post.body(request_json); - - } // // diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java index 5d23f51..9e859d2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java @@ -20,6 +20,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; import java.util.concurrent.TimeUnit; import static com.ruoyi.integration.drainage.TCECUtil.getToken; @@ -59,13 +60,16 @@ *推送充电订单信息 */ private final static String supervise_notification_charge_order_info = "/supervise_notification_charge_order_info"; + private final static String supervise_notification_operation_stats_info = "/supervise_notification_operation_stats_info"; + private final static String supervise_notification_realtime_power_info = "/supervise_notification_realtime_power_info"; + private final static String supervise_notification_station_info = "/supervise_notification_station_info"; - + /** * 获取token */ - public String queryToken(Operator operator){ + public String queryToken(){ String token = redisService.getCacheObject(TOKEN_KEY); if(StringUtils.hasLength(token)){ return token; @@ -96,8 +100,7 @@ redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS); return token; } - - + /** * 设备状态变化推送 @@ -124,8 +127,8 @@ NotificationStationStatusResult notificationStationStatusResult = JSON.parseObject(decrypt, NotificationStationStatusResult.class); return notificationStationStatusResult; } - - + + /** * 推动充电状态 * @param info @@ -152,8 +155,8 @@ NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = JSON.parseObject(decrypt, NotificationEquipChargeStatusResult.class); return notificationEquipChargeStatusResult; } - - + + /** * 推送充电订单信息 * @param info @@ -180,8 +183,8 @@ NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = JSON.parseObject(decrypt, NotificationChargeOrderInfoResult.class); return notificationChargeOrderInfoResult; } - - + + /** * 构建请求参数和消息头 * @param post @@ -190,7 +193,7 @@ public void buildBody(HttpRequest post, Object o, Operator operator){ Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); post.contentType("application/json;charset=utf-8"); - post.header("Authorization", "Bearer " + getToken(operator)); + post.header("Authorization", "Bearer " + queryToken()); BaseRequest baseRequest = new BaseRequest(); baseRequest.setOperatorID(operator.getOurOperatorId()); baseRequest.setTimeStamp(timeStamp); @@ -207,8 +210,83 @@ log.info("推送三方平台请求Data:" + jsonString); } - - + /** + * 推送充电用能统计 + * @param info + * @return + */ + public void superviseNotificationOperationStatsInfo(StationStatsInfoResult info){ + Operator operator = new Operator(); + HttpRequest post = HttpUtil.createPost(url+supervise_notification_operation_stats_info); + buildBody(post, info, operator); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送充电用能统计失败:" + execute.body()); + return ; + } + log.info("推送充电用能统计信息响应:" + execute.body()); + BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class); + Integer Ret = baseResult.getRet(); + if(0 != Ret){ + log.error("推送充电用能统计信息失败:" + baseResult.getMsg()); + return ; + } + //解密参数 + String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv()); + log.info("推送充电用能统计信息Data:" + decrypt); + + } + /** + * 推送充换电站信息 + * @param info + * @return + */ + public void superviseNotificationStationInfo(SupStationInfoResult info){ + Operator operator = new Operator(); + HttpRequest post = HttpUtil.createPost(url+supervise_notification_station_info); + buildBody(post, info, operator); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送充换电站信息失败:" + execute.body()); + return ; + } + log.info("推送充换电站信息信息响应:" + execute.body()); + BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class); + Integer Ret = baseResult.getRet(); + if(0 != Ret){ + log.error("推送充换电站信息失败:" + baseResult.getMsg()); + return ; + } + //解密参数 + String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv()); + log.info("推送充换电站信息信息Data:" + decrypt); + } + /** + * 充换电站功率信息 + * @param info + * @return + */ + public void superviseNotificationRealtimePowerInfo(SupStationPowerInfoResult info){ + Operator operator = new Operator(); + HttpRequest post = HttpUtil.createPost(url+supervise_notification_realtime_power_info); + buildBody(post, info, operator); + HttpResponse execute = post.execute(); + if(200 != execute.getStatus()){ + log.error("推送充换电站实时功率失败:" + execute.body()); + return ; + } + log.info("推送充换电站实时功率信息响应:" + execute.body()); + BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class); + Integer Ret = baseResult.getRet(); + if(0 != Ret){ + log.error("推送充换电站实时功率信息失败:" + baseResult.getMsg()); + return ; + } + //解密参数 + String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv()); + log.info("推送充换电站实时功率信息Data:" + decrypt); + } + public static void main(String[] args) { BaseModel model = new BaseModel(); model.setOperatorID("MA25CNM38"); @@ -226,8 +304,8 @@ // 打印计算得到的签名Sig String s = SignUtil.bytesToHexString(hmacMd5); System.err.println(s); - - + + // BaseModel model = new BaseModel(); // model.setOperatorID("MA25CNM38"); // model.setData("xQYYEPiwoc4JENnQsF50qP6Tmnj7uU/AshWn3QbIgrMIk8zvFpy6fWLIiLzQHcLPFCihqH1uzoNhGVNcS8Wvf5gIx9+cWJvYtjwtsjAGMEwNQ6y+rF1jjKnqCNcQbHbhqJ2l76sD54QCFKyenKxymrXri19bDV8hizn3nBw+jcHBtqKHWzjdSHwPDWPIw4rXnrbWLya2PXVgYtVg93WPtliw+0xsqW0BxJamE70/Ilbg4wB5fOAOvXmbLFI+v9jRjpcA7ImhprqPMYkXYAfa2QlICrJEBK7DfpJvRMzKzeT90kOAITqIqFvbfV0ti+greRqToLP6ni4o6w3ID42UmKasIpLTnx+qtR4bVTBTRuDzXvNXDA92RqHaJO21xbSen1eHN/yGfrchBIM0gmav7EpaYAerfU4ubnmJ6xujR6okYepJwBD5DiSIrObfS+GWVPRekvnjvm7BC02NXTrGKA=="); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java new file mode 100644 index 0000000..560a0d2 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java @@ -0,0 +1,18 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * 充电站统计信息 + * @author zhibing.pu + * @Date 2025/1/21 15:17 + */ +@Data +public class StationStatsInfoResult { + private List<StationStatsInfo> stationStatsInfos; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java new file mode 100644 index 0000000..61bb8d2 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java @@ -0,0 +1,25 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 充电设备接口功率信息 + */ +@Data +public class SupConnectorPowerInfo { + @JsonProperty("ConnectorID") + + private String ConnectorID; + @JsonProperty("EquipmentClassification") + + private Integer EquipmentClassification; + @JsonProperty("DataTime") + + private String DataTime; + @JsonProperty("ConnectorRealTimePower") + + private BigDecimal ConnectorRealTimePower; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java new file mode 100644 index 0000000..9df1b09 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java @@ -0,0 +1,29 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 充电设备功率信息 + */ +@Data +public class SupEquipmentPowerInfo { + @JsonProperty("EquipmentID") + + private String EquipmentID; + @JsonProperty("EquipmentClassification") + + private Integer EquipmentClassification; + @JsonProperty("DataTime") + + private String DataTime; + @JsonProperty("EquipRealTimePower") + + private BigDecimal EquipRealTimePower; + @JsonProperty("DataTime") + + private List<SupConnectorPowerInfo> ConnectorPowerInfos; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java new file mode 100644 index 0000000..f0b8ee7 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java @@ -0,0 +1,210 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.integration.drainage.SupSwapEquipmentInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 充换电站信息 + */ +@Data +public class SupStationInfo { + // 充换电站ID + @JsonProperty("StationID") + private String StationID; + // 充换电站唯一编码 + @JsonProperty("StationUniqueNumber") + private String StationUniqueNumber; + //平台运营商 + //ID + @JsonProperty("OperatorID") + private String OperatorID; + //充换电服务 + //运营商ID + @JsonProperty("EquipmentOwnerID") + private String EquipmentOwnerID; + //充换电站名 + //称 + @JsonProperty("StationName") + private String StationName; + //充换电站国 + //家代码 + @JsonProperty("CountryCode") + private String CountryCode; + //充换电站省 + //市辖区编码 + @JsonProperty("AreaCode") + private String AreaCode; + //详细地址 + @JsonProperty("Address") + private String Address; + //充换电站所 + //在县以下行 + //政区划代码 + @JsonProperty("AreaCodeCountryside") + private String AreaCodeCountryside; + // 站点电话 + @JsonProperty("StationTel") + private String StationTel; + // 服务电话 + @JsonProperty("ServiceTel") + private String ServiceTel; + // 站点分类 + @JsonProperty("StationClassification") + private Integer StationClassification; + //通用类型 + @JsonProperty("GeneralApplicationType") + private Integer GeneralApplicationType; + //站点类型 + @JsonProperty("StationType") + private Integer StationType; + //站点状态 + @JsonProperty("StationStatus") + private Integer StationStatus; + //车位数量 + @JsonProperty("ParkNums") + private Integer ParkNums; + //经度 + @JsonProperty("StationLng") + private BigDecimal StationLng; + //纬度 + @JsonProperty("StationLat") + private BigDecimal StationLat; + //站点引导 + @JsonProperty("SiteGuide") + private String SiteGuide; + //建设场所 + @JsonProperty("Construction") + private Integer Construction; + //站点照片 + @JsonProperty("Pictures") + private List<String> Pictures; + //使用车型描 + //述 + @JsonProperty("MatchCars") + private String MatchCars; + //服务车型描 + //述 + @JsonProperty("SwapMatchCars") + private List<String> SwapMatchCars; + //车位楼层及 + //数量描述 + @JsonProperty("ParkInfo") + private String ParkInfo; + //营业时间 + @JsonProperty("BusineHours") + private String BusineHours; + //7*24小时营 + //业 + @JsonProperty("RoundTheClock") + private Integer RoundTheClock; + //停车费类型 + @JsonProperty("ParkType") + private Integer ParkType; + //停车费描述 + @JsonProperty("ParkFee") + private String ParkFee; + //支付方式 + @JsonProperty("Payment") + private String Payment; + //是否支持预 + //约 + @JsonProperty("SupportOrder") + private Integer SupportOrder; + //备注 + @JsonProperty("Remark") + private String Remark; + //电费类型 + @JsonProperty("ElectricityType") + private Integer ElectricityType; + //报装类型 + @JsonProperty("BusinessExpandType") + private Integer BusinessExpandType; + //报装电源容 + //量 + @JsonProperty("Capacity") + private BigDecimal Capacity; + //站点额定总 + //功率 + @JsonProperty("RatedPower") + private BigDecimal RatedPower; + //峰谷分时 + @JsonProperty("PeriodFee") + private Integer PeriodFee; + //正式投运时 + //间 + @JsonProperty("OfficialRunTime") + private String OfficialRunTime; + //充换电站方 + //位 + @JsonProperty("StationOrientation") + private Integer StationOrientation; + //充换电站建 + //设面积 + @JsonProperty("StationArea") + private BigDecimal StationArea; + //充换电站人 + //工值守 + @JsonProperty("HavePerson") + private Integer HavePerson; + //视频监控配 + //套情况 + @JsonProperty("VideoMonitor") + private Integer VideoMonitor; + //周边配套设 + // 施 + @JsonProperty("SupportingFacilities") + private List<Integer> SupportingFacilities; + //是否有小票 + //机 + @JsonProperty("PrinterFlag") + private Integer PrinterFlag; + //是否有道闸 + @JsonProperty("BarrierFlag") + private Integer BarrierFlag; + //是否有地锁 + @JsonProperty("ParkingLockFlag") + private Integer ParkingLockFlag; + //充电设备信 + //息列表 + @JsonProperty("EquipmentInfos") + private List<EquipmentInfo> EquipmentInfos; + //换电设备信 + //息 + @JsonProperty("SwapEquipmentInfos") + private List<SupSwapEquipmentInfo> SwapEquipmentInfos; + //充电电费描 + //述 + @JsonProperty("ElectricityFee") + private String ElectricityFee; + //设备所属方 + //名称 + @JsonProperty("EquipmentOwnerName") + private String EquipmentOwnerName; + //供电局用户 + //编号 + @JsonProperty("ResidentNo") + private String ResidentNo; + //供电类型 + @JsonProperty("SupplyType") + private Integer SupplyType; + //表号 + @JsonProperty("WattHourMeterNo") + private String WattHourMeterNo; + //外电功率 + @JsonProperty("ForwardPower") + private BigDecimal ForwardPower; + //服务费描述 + @JsonProperty("ServiceFee") + private String ServiceFee; + //充电站全省 + //唯一备案号 + @JsonProperty("RecordUniqueNo") + private String RecordUniqueNo; + + + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java new file mode 100644 index 0000000..3a09447 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java @@ -0,0 +1,19 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.integration.drainage.model.EquipmentInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 充换电站信息 + */ +@Data +public class SupStationInfoResult { + private SupStationInfo SupStationInfo; + + + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java new file mode 100644 index 0000000..74793ea --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java @@ -0,0 +1,31 @@ +package com.ruoyi.integration.drainage.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * 推送充换电站实时功率 + */ +@Data +public class SupStationPowerInfo { + @NotNull + @JsonProperty("OperatorID") + private String OperatorID; + @JsonProperty("EquipmentOwnerID") + private String EquipmentOwnerID; + @JsonProperty("StationID") + private String StationID; + @JsonProperty("StationClassification") + private Integer StationClassification; + @JsonProperty("DataTime") + private String DataTime; + @JsonProperty("StationRealTimePower") + private BigDecimal StationRealTimePower; + @JsonProperty("EquipmentPowerInfos") + private List<SupEquipmentPowerInfo> EquipmentPowerInfos; + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java new file mode 100644 index 0000000..d009e4b --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java @@ -0,0 +1,13 @@ +package com.ruoyi.integration.drainage.model; + +import lombok.Data; + +import java.util.List; + +/** + * 推送充换电站实时功率 + */ +@Data +public class SupStationPowerInfoResult { + private List<SupStationPowerInfo> stationStatsInfos; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java new file mode 100644 index 0000000..84dfe16 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java @@ -0,0 +1,220 @@ +package com.ruoyi.integration.drainage.util; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.chargingPile.api.feignClient.*; +import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TChargingGun; +import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.integration.drainage.TCECSuperviseUtil; +import com.ruoyi.integration.drainage.TokenUtil; +import com.ruoyi.integration.drainage.model.*; +import com.ruoyi.integration.drainage.model.enu.ConnectorTypeEnum; +import com.ruoyi.integration.drainage.model.enu.EquipmentTypeEnum; +import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; +import com.ruoyi.order.api.dto.ChargingStatisticeDTO; +import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.model.TChargingBill; +import com.ruoyi.order.api.model.TChargingOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zhibing.pu + * @date 2023/7/11 8:39 + */ +@Component +public class TaskUtil { + + + @Resource + private SiteClient siteClient; + @Autowired + private TCECSuperviseUtil tcecSuperviseUtil; + + @Resource + private ChargingGunClient chargingGunClient; + + @Resource + private ChargingOrderClient chargingOrderClient; + + @Resource + private ChargingPileClient chargingPileClient; + + + + // 每天凌晨12点30执行 推送充电用能统计 + @Scheduled(cron = "0 30 0 * * ?") + public void superviseNotificationOperationStatsInfo() { + StationStatsInfoResult res = new StationStatsInfoResult(); + + List<Site> data = siteClient.getSiteAll().getData(); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startLocalDateTime = now.minusDays(1); + LocalDateTime endLocalDateTime = now.minusDays(1); + // 获取今天凌晨 + startLocalDateTime.withHour(0); + startLocalDateTime.withMinute(0); + startLocalDateTime.withSecond(0); + String start = DateUtils.localDateTimeToString(startLocalDateTime); + endLocalDateTime.withHour(23); + endLocalDateTime.withMinute(59); + endLocalDateTime.withSecond(59); + String end = DateUtils.localDateTimeToString(endLocalDateTime); + ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO(); + chargingStatisticeDTO.setStartTime(startLocalDateTime); + chargingStatisticeDTO.setEndTime(endLocalDateTime); + List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData(); + List<StationStatsInfo> stationStatsInfos = new ArrayList<>(); + for (Site datum : data) { + StationStatsInfo stationStatsInfo = new StationStatsInfo(); + stationStatsInfo.setStationID(datum.getId().toString()); + stationStatsInfo.setEquipmentOwnerID("906171535"); + stationStatsInfo.setOperatorID("906171535"); + stationStatsInfo.setStationClassification(1); + stationStatsInfo.setStartTime(start); + stationStatsInfo.setEndTime(end); + List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList()); + // 充电电量 + BigDecimal electricity = new BigDecimal("0"); + int chargingCount = 0; + for (TChargingOrder chargingOrder : chargingOrders) { + if (chargingOrder.getElectricity()!=null){ + electricity = electricity.add(chargingOrder.getElectricity()); + chargingCount++; + } + } + stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN)); + stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN)); + stationStatsInfo.setStationTotalWarningNum(0); + stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0")); + stationStatsInfo.setStationTotalChargeNum(chargingCount); + //构建设备统计数据 + List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>(); + Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId)); + for (Integer integer : collect.keySet()) { + List<TChargingOrder> tChargingOrders = collect.get(integer); + BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); + EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo(); + equipmentStatsInfo.setEquipmentClassification(1); + long chargingTime = 0L; + for (TChargingOrder tChargingOrder : tChargingOrders) { + // 累加充电时长 + LocalDateTime startTime = tChargingOrder.getStartTime(); + LocalDateTime endTime = tChargingOrder.getEndTime(); + // 计算时间差 单位分钟 + chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60; + } + equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime); + equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size()); + equipmentStatsInfo.setEquipmentTotalWarningNum(0); + equipmentStatsInfo.setEquipmentID(integer.toString()); + equipmentStatsInfo.setEquipmentElectricity(reduce1); + //构建设备接口统计数据 + Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId)); + List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>(); + for (Integer integer1 : collect2.keySet()) { + List<TChargingOrder> tChargingOrders1 = collect2.get(integer1); + BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); + + TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData(); + ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo(); + connectorStatsInfo.setConnectorID(chargingGun.getFullNumber()); + connectorStatsInfo.setConnectorElectricity(reduce2); + ConnectorStatsInfos.add(connectorStatsInfo); + } + equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos); + EquipmentStatsInfos.add(equipmentStatsInfo); + } + stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos); + stationStatsInfos.add(stationStatsInfo); + } + res.setStationStatsInfos(stationStatsInfos); + tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res); + } + // 每15分钟执行一次的定时任务 + @Scheduled(cron = "0 0/15 * * * ?") + public void supervise_notification_realtime_power_info() { + List<Site> data = siteClient.getSiteAll().getData(); + List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList()); + List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); + List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); + List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); + SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult(); + List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startLocalDateTime = now.minusMinutes(15); + ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO(); + chargingStatisticeDTO.setStartTime(startLocalDateTime); + chargingStatisticeDTO.setEndTime(now); + List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData(); + for (Site datum : data) { + List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId()) + &&e.getChargingPower()!=null).collect(Collectors.toList()); + SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo(); + supStationPowerInfo.setOperatorID("906171535"); + supStationPowerInfo.setEquipmentOwnerID("906171535"); + supStationPowerInfo.setStationID(datum.getId().toString()); + supStationPowerInfo.setStationClassification(1); + supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now())); + BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal::add).get().divide(new BigDecimal(collect.size()).setScale(4, BigDecimal.ROUND_DOWN)); + supStationPowerInfo.setStationRealTimePower(divide); + supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList)); + + stationStatsInfos.add(supStationPowerInfo); + } + supStationPowerInfoResult.setStationStatsInfos(stationStatsInfos); + tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult); + + } + /** + * 构建桩数据 + * @param tChargingPiles + * @return + */ + public List<SupEquipmentPowerInfo> buildEquipmentPowerInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){ + List<SupEquipmentPowerInfo> equipmentInfos = new ArrayList<>(); + List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList()); + for (TChargingPile tChargingPile : collect) { + SupEquipmentPowerInfo equipmentInfo = new SupEquipmentPowerInfo(); + equipmentInfo.setEquipmentID(tChargingPile.getId().toString()); + equipmentInfo.setEquipmentClassification(1); + equipmentInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now())); + equipmentInfo.setEquipRealTimePower(tChargingPile.getRatedPower()); + //构建设备接口信息 + equipmentInfo.setConnectorPowerInfos(buildConnectorPowerInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList)); + equipmentInfos.add(equipmentInfo); + } + return equipmentInfos; + } + /** + * 构建接口数据 + * @param chargingGunList + * @return + */ + public List<SupConnectorPowerInfo> buildConnectorPowerInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){ + List<SupConnectorPowerInfo> connectorInfos = new ArrayList<>(); + List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList()); + for (TChargingGun chargingGun : collect) { + SupConnectorPowerInfo connectorInfo = new SupConnectorPowerInfo(); + connectorInfo.setConnectorID(chargingGun.getFullNumber()); + connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification()); + connectorInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now())); + connectorInfo.setConnectorRealTimePower(chargingGun.getChargingPower()); + connectorInfos.add(connectorInfo); + } + return connectorInfos; + } +} -- Gitblit v1.7.1