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()); } 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 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; } 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(); } 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(); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java
New file @@ -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; } 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); } // // 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); } // // 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=="); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java
New file @@ -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; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
New file @@ -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; } }