From ccd1837ee6016e0b72557f98ea45fc2e4f152ae1 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 26 三月 2025 11:10:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java | 50 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java | 2264 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java | 21 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java | 29 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingStatisticeVO.java | 21 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 19 8 files changed, 2,418 insertions(+), 8 deletions(-) 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 new file mode 100644 index 0000000..157fa00 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.order.api.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.order.api.model.TChargingOrder; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "监管平台充电用能DTO",description = "监管平台充电用能DTO") +public class ChargingStatisticeDTO { + @ApiModelProperty(value = "开始时间2020-01-01 00:00:00") + private LocalDateTime startTime; + @ApiModelProperty(value = "结束时间2020-01-01 23:59:59") + private LocalDateTime endTime; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index b1f6b08..6d50bbe 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -3,6 +3,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; +import com.ruoyi.order.api.dto.ChargingStatisticeDTO; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.AddTripartitePlatformOrder; import com.ruoyi.order.api.model.ChargingListQuery; @@ -174,8 +175,13 @@ public R<List<TChargingOrder>> getChargingOrder(TChargingOrderVo order) { return R.fail("获取充电订单数据失败:" + throwable.getMessage()); } - - + + @Override + public R<List<TChargingOrder>> getChargingStatistics(ChargingStatisticeDTO dto) { + return R.fail("获取充电订单数据失败-监管:" + throwable.getMessage()); + } + + @Override public R<List<TChargingOrder>> getCarChargingOrder(Long carId, String startTime, String endTime) { return R.fail("根据车辆id获取指定时间范围内的数据失败:" + throwable.getMessage()); diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 2a22b03..fc03e1f 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -5,6 +5,7 @@ import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.order.api.dto.ChargingStatisticeDTO; import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.model.AddTripartitePlatformOrder; import com.ruoyi.order.api.model.ChargingListQuery; @@ -235,8 +236,15 @@ */ @PostMapping("/t-charging-order/getChargingOrder") R<List<TChargingOrder>> getChargingOrder(@RequestBody TChargingOrderVo order); - - + /** + * 获取充电订单数据 + * @param + * @return + */ + @PostMapping(value = "/t-charging-order/getChargingStatistics") + public R<List<TChargingOrder>> getChargingStatistics(@RequestBody ChargingStatisticeDTO dto); + + /** * 根据车辆id获取指定时间范围内的数据 * @param carId diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingStatisticeVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingStatisticeVO.java new file mode 100644 index 0000000..6760d25 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingStatisticeVO.java @@ -0,0 +1,21 @@ +package com.ruoyi.order.api.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "监管平台充电用能DTO",description = "监管平台充电用能DTO") +public class ChargingStatisticeVO { + @ApiModelProperty(value = "站点id") + private Integer siteId; + @ApiModelProperty(value = "累计充电量") + private BigDecimal startTime; + @ApiModelProperty(value = "累计充电时间") + private Integer chargingTime; + + +} 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 new file mode 100644 index 0000000..43c6faa --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java @@ -0,0 +1,2264 @@ +package com.ruoyi.integration.drainage; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.ruoyi.chargingPile.api.feignClient.*; +import com.ruoyi.chargingPile.api.model.*; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.HttpUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; +import com.ruoyi.integration.api.vo.StartChargeResult; +import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil; +import com.ruoyi.integration.drainage.kuaidian.model.*; +import com.ruoyi.integration.drainage.model.*; +import com.ruoyi.integration.drainage.model.enu.*; +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.AddTripartitePlatformOrder; +import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; +import com.ruoyi.other.api.domain.Operator; +import com.ruoyi.other.api.feignClient.OperatorClient; +import com.ruoyi.other.api.feignClient.SystemConfigurationClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; + +/** + * @author zhibing.pu + * @Date 2025/1/21 17:52 + */ +@Slf4j +@RestController +@RequestMapping("/evcs/v1.0") +public class TCECController1 { + + @Resource + private SiteClient siteClient; + + @Resource + private ChargingPileClient chargingPileClient; + + @Resource + private ChargingGunClient chargingGunClient; + + @Resource + private ChargingOrderClient chargingOrderClient; + + @Resource + private OperatorClient operatorClient; + + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; + + @Resource + private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient; + + @Resource + private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; + + @Resource + private TokenUtil tokenUtil; + + @Resource + private ParkingLotClient parkingLotClient; + + @Resource + private ParkingRecordClient parkingRecordClient; + + @Resource + private SystemConfigurationClient systemConfigurationClient; + // 监管平台密钥 向量 地址 + private static String ourDataSecret = ""; + private static String ourDataSecretIv = ""; + private static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/";// 测试 +// private static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0/";// 正式 + private static String operatorSecret = "f1331ef0b37c2d1b";// 测试 +// private static String operatorSecret = "a762796b2a8989b8";// 正式 + + + + /** + * 请求校验 + * @param baseRequest + * @param request + * @return + */ + public BaseResult requestCheck(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){ + BaseResult baseResult = new BaseResult(); + baseResult.setRet(0); + baseResult.setMsg("成功"); + baseResult.setOperatorID(baseRequest.getOperatorID()); + Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + baseResult.setTimeStamp(mapKey); + baseResult.setSeq("0001"); + //校验token和签名 + String operatorID = baseRequest.getOperatorID(); + String sig = baseRequest.getSig(); + Long timeStamp = baseRequest.getTimeStamp(); + String data = baseRequest.getData(); + String seq = baseRequest.getSeq(); + if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){ + baseResult.setRet(4003); + baseResult.setMsg("参数异常"); + return baseResult; + } + + R<Operator> r = operatorClient.getOperator(operatorID); + if(200 != r.getCode()){ + baseResult.setRet(500); + baseResult.setMsg("系统异常"); + return baseResult; + } + //校验token + if(tokenCheck){ + Operator loginUser = tokenUtil.getLoginUser(request); + if(null == loginUser){ + baseResult.setRet(4002); + baseResult.setMsg("身份校验失败,无效的token"); + return baseResult; + } + } + + Operator operator = r.getData(); + baseResult.setOperator(operator); + baseRequest.setOperator(operator); + //校验签名 + String sign = TCECUtil.ourBuildSign(baseRequest); + if(!sign.equals(sig)){ + baseResult.setRet(4001); + baseResult.setMsg("签名校验失败"); + return baseResult; + } + return baseResult; + } + + + + + + /** + * 获取token + * @return + */ + @PostMapping("/query_token") + public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest)); + BaseResult baseResult = requestCheck(false, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台获取token响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + QueryTokenResult queryTokenResult = new QueryTokenResult(); + Operator operator = baseResult.getOperator(); + if(null == operator){ + queryTokenResult.setSuccStat(1); + queryTokenResult.setFailReason(1); + //参数加密 + String jsonString = JacksonUtils.toJson(queryTokenResult); + log.info("三方平台获取token响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台获取token请求Data:" + decrypt); + QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class); + if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){ + queryTokenResult.setSuccStat(1); + queryTokenResult.setFailReason(2); + //参数加密 + String jsonString = JacksonUtils.toJson(queryTokenResult); + log.info("三方平台获取token响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + //生成token + Map<String, Object> token = tokenUtil.createToken(operator); + String access_token = token.get("access_token").toString(); + Long expires_in = Long.valueOf(token.get("expires_in").toString()); + + queryTokenResult.setOperatorID("906171535"); + queryTokenResult.setSuccStat(0); + queryTokenResult.setFailReason(0); + queryTokenResult.setAccessToken(access_token); + queryTokenResult.setTokenAvailableTime(expires_in * 60); + //参数加密 + String jsonString = JacksonUtils.toJson(queryTokenResult); + log.info("三方平台获取token响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + + + /** + * 查询充电站信息 + * @return + */ + @PostMapping("/query_stations_info") + public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台查询充电站信息响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台查询充电站信息请求Data:" + decrypt); + QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class); + Integer pageNo = queryStationsInfo.getPageNo(); + Integer pageSize = queryStationsInfo.getPageSize(); + if(null == pageNo){ + pageNo = 1; + } + if(null == pageSize){ + pageSize = 10; + } + PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, new ArrayList<>()); + List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData(); + QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult(); + queryStationsInfoResult.setPageNo(pageNo); + queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue()); + queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue()); + queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords())); + //参数加密 + String jsonString = JacksonUtils.toJson(queryStationsInfoResult); + log.info("三方平台查询充电站信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + /** + * 构建站点数据 + * @param sites + * @return + */ + public List<StationInfo> buildSite(List<TParkingLot> parkingLots, List<Site> sites){ + List<Integer> siteIds = sites.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(); + String serviceTel = systemConfigurationClient.getServerPhone().getData(); + List<StationInfo> StationInfos = new ArrayList<>(); + for (Site datum : sites) { + StationInfo stationInfo = new StationInfo(); + 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.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime()); + stationInfo.setElectricityFee(datum.getRateDescription()); + //添加停车费信息 + Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst(); + if(first.isPresent()){ + TParkingLot tParkingLot = first.get(); + buildPlaceHolder(tParkingLot, stationInfo); + } + //构建充电设备信息数据 + stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList)); + StationInfos.add(stationInfo); + + } + return StationInfos; + } + + + /** + * 构建停车费信息 + * @param tParkingLot + * @param stationInfo + */ + public void buildPlaceHolder(TParkingLot tParkingLot, StationInfo stationInfo){ + stationInfo.setOvertimeFee(tParkingLot.getName() + "停车费"); + PlaceHolder placeHolder = new PlaceHolder(); + placeHolder.setFreeTime(tParkingLot.getChargeFreeDuration()); + placeHolder.setMaxFee(tParkingLot.getChargeCapping()); + List<PlaceHolderPrice> PlaceHolderPrices = new ArrayList<>(); + PlaceHolderPrice placeHolderPrice = new PlaceHolderPrice(); + placeHolderPrice.setStartTime("00:00"); + placeHolderPrice.setEndTime("23:59"); + placeHolderPrice.setPrice(tParkingLot.getChargeRate()); + PlaceHolderPrices.add(placeHolderPrice); + placeHolder.setPlaceHolderPrices(PlaceHolderPrices); + stationInfo.setPlaceHolder(placeHolder); + } + + + + + /** + * 构建桩数据 + * @param tChargingPiles + * @return + */ + public List<EquipmentInfo> buildEquipmentInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){ + List<EquipmentInfo> equipmentInfos = new ArrayList<>(); + List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList()); + for (TChargingPile tChargingPile : collect) { + EquipmentInfo equipmentInfo = new EquipmentInfo(); + equipmentInfo.setEquipmentID(tChargingPile.getId().toString()); + equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode()); + equipmentInfo.setManufacturerName(tChargingPile.getManufacturer()); + equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType()); + equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber()); + equipmentInfo.setEquipmentClassification(tChargingPile.getEquipmentClassification()); + if(null != tChargingPile.getProductionDate()){ + equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + } + switch (tChargingPile.getType()){ + case 0: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType()); + break; + case 1: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType()); + break; + case 2: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType()); + break; + case 3: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType()); + break; + case 4: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType()); + break; + case 5: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.ORDER.getType()); + break; + case 6: + equipmentInfo.setEquipmentType(EquipmentTypeEnum.V2G.getType()); + break; + } + + //构建设备接口信息 + equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList)); + equipmentInfo.setPower(tChargingPile.getRatedPower()); + equipmentInfos.add(equipmentInfo); + } + return equipmentInfos; + } + + + /** + * 构建接口数据 + * @param chargingGunList + * @return + */ + public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){ + List<ConnectorInfo> connectorInfos = new ArrayList<>(); + List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList()); + for (TChargingGun chargingGun : collect) { + ConnectorInfo connectorInfo = new ConnectorInfo(); + connectorInfo.setConnectorID(chargingGun.getFullNumber()); + connectorInfo.setConnectorName(chargingGun.getName()); + connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification()); + connectorInfo.setConstantVoltageLowerLimits(chargingGun.getConstantVoltageLowerLimits()); + connectorInfo.setConstantVoltageUpperLimits(chargingGun.getConstantVoltageUpperLimits()); + connectorInfo.setConstantCurrentLowerLimits(chargingGun.getConstantCurrentLowerLimits()); + connectorInfo.setConstantCurrentUpperLimits(chargingGun.getConstantCurrentUpperLimits()); + connectorInfo.setAuxPower(chargingGun.getAuxPower()); + connectorInfo.setOpreateStatus(chargingGun.getOpreateStatus()); + connectorInfo.setOpreateHours(chargingGun.getOpreateHours()); + switch (chargingGun.getType()){ + case 0: + connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType()); + break; + case 1: + connectorInfo.setConnectorType(ConnectorTypeEnum.HOUSEHOLD_SOCKET.getType()); + break; + case 2: + connectorInfo.setConnectorType(ConnectorTypeEnum.AC_SOCKET.getType()); + break; + case 3: + connectorInfo.setConnectorType(ConnectorTypeEnum.AC_INTERFACE_PLUG.getType()); + break; + case 4: + connectorInfo.setConnectorType(ConnectorTypeEnum.DC_INTERFACE_GUN_HEAD.getType()); + break; + case 5: + connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType()); + break; + } + connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue()); + connectorInfo.setPower(chargingGun.getRatedPower()); + connectorInfo.setParkNo(chargingGun.getParkingNumber()); + connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard())); + connectorInfo.setQRCode("https://mxcd.zhinenganguan.com?No=" + code + chargingGun.getCode()); + connectorInfos.add(connectorInfo); + } + return connectorInfos; + } + + + /** + * 接口状态变化后推送给第三方 + * @return + */ + @PostMapping("/pushChargingGunStatus") + public R pushChargingGunStatus(@RequestParam("fullNumber") String fullNumber, @RequestParam("status") Integer status){ + ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); + connectorStatusInfo.setConnectorID(fullNumber); + switch (status){ + case 1: + connectorStatusInfo.setStatus(0); + break; + case 2: + connectorStatusInfo.setStatus(1); + break; + case 3: + connectorStatusInfo.setStatus(2); + break; + case 4: + connectorStatusInfo.setStatus(3); + break; + case 5: + connectorStatusInfo.setStatus(3); + break; + case 6: + connectorStatusInfo.setStatus(4); + break; + case 7: + connectorStatusInfo.setStatus(255); + break; + } + ConnectorStatusInfo connectorStatusInfo1 = new ConnectorStatusInfo(); + BeanUtils.copyProperties(connectorStatusInfo, connectorStatusInfo1); + connectorStatusInfo.setConnectorStatusInfo(connectorStatusInfo1); + List<Operator> operators = operatorClient.getAllOperator().getData(); + for (Operator operator : operators) { + TCECUtil.notificationStationStatus(operator, connectorStatusInfo); + } + return R.ok(); + } + + + + /** + * 设备接口状态查询 + * @return + */ + @PostMapping("/query_station_status") + public BaseResult queryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台获取设备接口状态请求参数:" + JacksonUtils.toJson(baseRequest)); + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台获取设备接口状态响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台获取设备接口状态请求Data:" + decrypt); + QueryStationStatus queryStationsInfo = JSON.parseObject(decrypt, QueryStationStatus.class); + List<Integer> collect = queryStationsInfo.getStationIDs().stream().map(Integer::valueOf).collect(Collectors.toList()); + List<Site> data = siteClient.getSiteByIds(collect).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(); + + QueryStationStatusResult result = new QueryStationStatusResult(); + result.setTotal(data.size()); + List<StationStatusInfo> StationStatusInfos = new ArrayList<>(); + for (Site datum : data) { + StationStatusInfo stationStatusInfo = new StationStatusInfo(); + stationStatusInfo.setStationID(datum.getId().toString()); + //构建接口状态 + List<ConnectorStatusInfo> ConnectorStatusInfos = new ArrayList<>(); + List<TChargingGun> collect2 = chargingGunList.stream().filter(s -> s.getSiteId().equals(datum.getId())).collect(Collectors.toList()); + for (TChargingGun chargingGun : collect2) { + ConnectorStatusInfo info = new ConnectorStatusInfo(); + info.setConnectorID(chargingGun.getFullNumber()); + switch (chargingGun.getStatus()){ + case 1: + info.setStatus(0); + break; + case 2: + info.setStatus(1); + break; + case 3: + info.setStatus(2); + break; + case 4: + info.setStatus(3); + break; + case 5: + info.setStatus(3); + break; + case 6: + info.setStatus(4); + break; + case 7: + info.setStatus(255); + break; + } + ConnectorStatusInfos.add(info); + } + stationStatusInfo.setConnectorStatusInfos(ConnectorStatusInfos); + StationStatusInfos.add(stationStatusInfo); + } + result.setStationStatusInfos(StationStatusInfos); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台获取设备接口状态响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + + + /** + * 查询统计信息 + * @return + */ + @PostMapping("/query_station_stats") + public BaseResult queryStationStats(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台获取统计信息请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台获取统计信息响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台获取统计信息请求Data:" + decrypt); + QueryStationStats queryStationStats = JSON.parseObject(decrypt, QueryStationStats.class); + QueryStationStatsResult result = new QueryStationStatsResult(); + ChargingPercentProvinceDto dto = new ChargingPercentProvinceDto(); + dto.setDate1(LocalDate.parse(queryStationStats.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + dto.setDate2(LocalDate.parse(queryStationStats.getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + dto.setSiteIds(new HashSet<>(Integer.valueOf(queryStationStats.getStationID()))); + dto.setTripartitePlatformName(operator.getName()); + List<TChargingOrder> chargingOrders = chargingOrderClient.getOrderBySiteIdAndTime(dto).getData(); + BigDecimal reduce = chargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); + StationStatsInfo stationStats = new StationStatsInfo(); + stationStats.setStationID(chargingOrders.get(0).getSiteId().toString()); + stationStats.setStartTime(queryStationStats.getStartTime()); + stationStats.setEndTime(queryStationStats.getEndTime()); + stationStats.setStationElectricity(reduce); + //构建设备统计数据 + 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.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); + } + stationStats.setEquipmentStatsInfos(EquipmentStatsInfos); + result.setStationStats(stationStats); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台获取统计信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + /** + * 请求设备认证 + * @return + */ + @PostMapping("/query_equip_auth") + public BaseResult queryEquipAuth(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台设备认证请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台设备认证响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台设备认证请求Data:" + decrypt); + QueryEquipAuth queryEquipAuth = JSON.parseObject(decrypt, QueryEquipAuth.class); + String connectorID = queryEquipAuth.getConnectorID(); + TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData(); + if(null == tChargingGun){ + baseResult.setRet(4004); + baseResult.setMsg("connectorID 参数无效"); + log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + QueryEquipAuthResult queryEquipAuthResult = new QueryEquipAuthResult(); + queryEquipAuthResult.setEquipAuthSeq(queryEquipAuth.getEquipAuthSeq()); + queryEquipAuthResult.setConnectorID(connectorID); + //1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障 + switch (tChargingGun.getStatus()){ + case 1: + queryEquipAuthResult.setSuccStat(1); + queryEquipAuthResult.setFailReason(2); + break; + case 2: + queryEquipAuthResult.setSuccStat(0); + queryEquipAuthResult.setFailReason(0); + break; + case 3: + queryEquipAuthResult.setSuccStat(0); + queryEquipAuthResult.setFailReason(1); + break; + case 4: + queryEquipAuthResult.setSuccStat(1); + queryEquipAuthResult.setFailReason(4); + break; + case 5: + queryEquipAuthResult.setSuccStat(1); + queryEquipAuthResult.setFailReason(5); + break; + case 6: + queryEquipAuthResult.setSuccStat(1); + queryEquipAuthResult.setFailReason(6); + break; + case 7: + queryEquipAuthResult.setSuccStat(1); + queryEquipAuthResult.setFailReason(2); + break; + } + //参数加密 + String jsonString = JacksonUtils.toJson(queryEquipAuthResult); + log.info("三方平台设备认证响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + /** + * 查询业务策略信息 + * @return + */ + @PostMapping("/query_equip_business_policy") + public BaseResult queryEquipBusinessPolicy(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台查询业务策略信息请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台查询业务策略信息响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台查询业务策略信息请求Data:" + decrypt); + QueryEquipBusinessPolicy queryEquipBusinessPolicy = JSON.parseObject(decrypt, QueryEquipBusinessPolicy.class); + + //构建返回结果 + QueryEquipBusinessPolicyResult queryEquipBusinessPolicyResult = new QueryEquipBusinessPolicyResult(); + queryEquipBusinessPolicyResult.setEquipBizSeq(queryEquipBusinessPolicy.getEquipBizSeq()); + queryEquipBusinessPolicyResult.setConnectorID(queryEquipBusinessPolicy.getConnectorID()); + queryEquipBusinessPolicyResult.setSuccStat(0); + queryEquipBusinessPolicyResult.setFailReason(0); + String connectorID = queryEquipBusinessPolicy.getConnectorID(); + TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData(); + if(null == tChargingGun){ + baseResult.setRet(4004); + baseResult.setMsg("connectorID 参数无效"); + //参数加密 + String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult); + log.info("三方平台查询业务策略信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Integer accountingStrategyId = tChargingGun.getAccountingStrategyId(); + if(null == accountingStrategyId){ + List<Site> data = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData(); + accountingStrategyId = data.get(0).getAccountingStrategyId(); + } + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData(); + if(accountingStrategyDetails.size() == 0){ + queryEquipBusinessPolicyResult.setSuccStat(1); + queryEquipBusinessPolicyResult.setFailReason(1); + queryEquipBusinessPolicyResult.setSumPeriod(0); + //参数加密 + String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult); + log.info("三方平台查询业务策略信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + List<PolicyInfo> PolicyInfos = new ArrayList<>(); + for (TAccountingStrategyDetail accountingStrategyDetail : accountingStrategyDetails) { + PolicyInfo policyInfo = new PolicyInfo(); + policyInfo.setStartTime(accountingStrategyDetail.getStartTime().replaceAll(":", "") + "00"); + policyInfo.setElecPrice(accountingStrategyDetail.getElectrovalence()); + policyInfo.setSevicePrice(accountingStrategyDetail.getServiceCharge()); + PolicyInfos.add(policyInfo); + } + queryEquipBusinessPolicyResult.setSumPeriod(PolicyInfos.size()); + queryEquipBusinessPolicyResult.setPolicyInfos(PolicyInfos); + //参数加密 + String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult); + log.info("三方平台查询业务策略信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + /** + * 站点变更推送通知(快电) + * @param siteIds + * @return + */ + @PostMapping("/notificationStationChange") + public R notificationStationChange(@RequestParam("siteIds") List<Integer> siteIds){ + Operator operator = operatorClient.getOperatorByName("KuaiDian").getData(); + NotificationStationChangeResult notificationStationChange = TCECKDUtil.notificationStationChange(operator, 3, siteIds); + //启动重试推送机制 + if(null == notificationStationChange || 1 == notificationStationChange.getSuccStat()){ + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(new Runnable() { + //计数器 + Integer size = 0; + @Override + public void run() { + NotificationStationChangeResult notificationStationChange1 = TCECKDUtil.notificationStationChange(operator, 3, siteIds); + //启动重试推送机制 + if(null != notificationStationChange1 && 0 == notificationStationChange1.getSuccStat()){ + threadPoolExecutor.shutdown(); + return; + } + size++; + if(size >= 5){ + threadPoolExecutor.shutdown(); + return; + } + //间隔一分钟重试一次 + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }); + } + return R.ok(); + } + + + + + /** + * 请求开始充电 + * @return + */ + @PostMapping("/query_start_charge") + public BaseResult queryStartCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台请求开始充电请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台请求开始充电响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台请求开始充电请求Data:" + decrypt); + QueryStartCharge queryStartCharge = JSON.parseObject(decrypt, QueryStartCharge.class); + + //构建返回结果 + QueryStartChargeResult result = new QueryStartChargeResult(); + result.setStartChargeSeq(queryStartCharge.getStartChargeSeq()); + result.setConnectorID(queryStartCharge.getConnectorID()); + String connectorID = queryStartCharge.getConnectorID(); + TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData(); + //设备不存在 + if(null == tChargingGun){ + baseResult.setRet(4004); + baseResult.setMsg("connectorID 参数无效"); + result.setSuccStat(1); + result.setFailReason(1); + result.setStartChargeSeqStat(5); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台请求开始充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + //设备离线 + if(tChargingGun.getStatus() == 1){ + result.setSuccStat(1); + result.setFailReason(2); + result.setStartChargeSeqStat(5); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台请求开始充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + //调用充电接口 + AddTripartitePlatformOrder addTripartitePlatformOrder = new AddTripartitePlatformOrder(); + addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq()); + addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId()); + addTripartitePlatformOrder.setOperatorId(operator.getOperatorId()); + addTripartitePlatformOrder.setPaymentAmount(null == queryStartCharge.getChargingAmt() ? new BigDecimal(9999) : queryStartCharge.getChargingAmt()); + addTripartitePlatformOrder.setRechargePaymentType(0); + addTripartitePlatformOrder.setPlateNum(queryStartCharge.getPlateNum()); + R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder); + //启动失败 + if(200 != order.getCode()){ + result.setSuccStat(1); + result.setFailReason(1); + result.setStartChargeSeqStat(2); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台请求开始充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + result.setStartChargeSeqStat(1); + result.setSuccStat(0); + result.setFailReason(0); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台请求开始充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult)); + + //定义定时任务推送订单状态 + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + Runnable task = new Runnable() { + @Override + public void run() { + try { + TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(result.getStartChargeSeq()).getData(); + if(chargingOrder.getStatus() != 3){ + scheduler.shutdown(); + return; + } + log.info("开始执行三方平台定时推送"); + notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); + }catch (Exception e){ + e.printStackTrace(); + } + } + }; + //一分钟执行一次 + scheduler.scheduleAtFixedRate(task, 10, 10, TimeUnit.SECONDS); + return baseResult; + } + + + /** + * 启动充电结果推送 + * @param result + * @return + */ + @PostMapping("/notificationStartChargeResult") + public R notificationStartChargeResult(@RequestBody StartChargeResult result){ + NotificationStartCharge notificationStartCharge = new NotificationStartCharge(); + BeanUtils.copyProperties(result, notificationStartCharge); + Operator operator = operatorClient.getOperator(result.getOperatorID()).getData(); + NotificationStartChargeResult notificationStartChargeResult = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge); + //启动重试推送机制 + if(null == notificationStartChargeResult || 1 == notificationStartChargeResult.getSuccStat()){ + + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(new Runnable() { + //计数器 + Integer size = 0; + @Override + public void run() { + NotificationStartChargeResult notificationStartChargeResult1 = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge); + //启动重试推送机制 + if(null != notificationStartChargeResult1 && 0 == notificationStartChargeResult1.getSuccStat()){ + threadPoolExecutor.shutdown(); + return; + } + size++; + if(size >= 5){ + threadPoolExecutor.shutdown(); + return; + } + //间隔一分钟重试一次 + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }); + } + return R.ok(); + } + + + + /** + * 查询充电状态 + * @return + */ + @PostMapping("/query_equip_charge_status") + public BaseResult queryEquipChargeStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台查询充电状态请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台查询充电状态响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台查询充电状态请求Data:" + decrypt); + QueryEquipChargeStatus queryEquipChargeStatus = JSON.parseObject(decrypt, QueryEquipChargeStatus.class); + //校验token和签名 + QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(queryEquipChargeStatus.getStartChargeSeq()); + //参数加密 + String jsonString = JacksonUtils.toJson(queryEquipChargeStatusResult); + log.info("三方平台查询充电状态响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + /** + * 构建充电状态结果 + * @param startChargeSeq + * @return + */ + public QueryEquipChargeStatusResult buildQueryEquipChargeStatusResult(String startChargeSeq){ + //构建返回结果 + QueryEquipChargeStatusResult queryEquipChargeStatusResult = new QueryEquipChargeStatusResult(); + queryEquipChargeStatusResult.setStartChargeSeq(startChargeSeq); + TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData(); + if(null == chargingOrder){ + return null; + } + //0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束 + switch (chargingOrder.getStatus()){ + case 0: + queryEquipChargeStatusResult.setStartChargeSeqStat(5); + break; + case 1: + queryEquipChargeStatusResult.setStartChargeSeqStat(0); + break; + case 2: + queryEquipChargeStatusResult.setStartChargeSeqStat(1); + break; + case 3: + queryEquipChargeStatusResult.setStartChargeSeqStat(2); + break; + case 4: + queryEquipChargeStatusResult.setStartChargeSeqStat(3); + break; + case 5: + queryEquipChargeStatusResult.setStartChargeSeqStat(4); + break; + } + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + queryEquipChargeStatusResult.setConnectorID(chargingGun.getFullNumber()); + //1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障 + switch (chargingGun.getStatus()){ + case 1: + queryEquipChargeStatusResult.setConnectorStatus(0); + break; + case 2: + queryEquipChargeStatusResult.setConnectorStatus(1); + break; + case 3: + queryEquipChargeStatusResult.setConnectorStatus(2); + break; + case 4: + queryEquipChargeStatusResult.setConnectorStatus(3); + break; + case 5: + queryEquipChargeStatusResult.setConnectorStatus(1); + break; + case 6: + queryEquipChargeStatusResult.setConnectorStatus(4); + break; + case 7: + queryEquipChargeStatusResult.setConnectorStatus(255); + break; + } + queryEquipChargeStatusResult.setCurrentA(chargingOrder.getCurrent()); + queryEquipChargeStatusResult.setVoltageA(chargingOrder.getVoltage()); + UploadRealTimeMonitoringData timeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode()); + queryEquipChargeStatusResult.setSoc(null == timeMonitoringData ? BigDecimal.ZERO : new BigDecimal(timeMonitoringData.getSoc())); + queryEquipChargeStatusResult.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + queryEquipChargeStatusResult.setTotalPower(chargingOrder.getElectricity()); + + List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData(); + if(data.size() > 0){ + BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); + queryEquipChargeStatusResult.setElecMoney(totalElectricity); + queryEquipChargeStatusResult.setSeviceMoney(serviceCharge); + queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount()); + }else{ + queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount())); + queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO); + queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount())); + } + + //构建充电明细 + List<ChargeDetail> chargeDetails = new ArrayList<>(); + + LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime(); + LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime(); + String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + for (TChargingOrderAccountingStrategy datum : data) { + ChargeDetail chargeDetail = new ChargeDetail(); + if(s_format.equals(e_format)){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":")); + if(Integer.valueOf(substring) > 12){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59"); + } + } + chargeDetail.setElecPrice(datum.getElectrovalence()); + chargeDetail.setSevicePrice(datum.getServiceCharge()); + chargeDetail.setDetailPower(datum.getChargingCapacity()); + chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice()); + chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice()); + chargeDetails.add(chargeDetail); + } + queryEquipChargeStatusResult.setChargeDetails(chargeDetails); + return queryEquipChargeStatusResult; + } + + + /** + * 推送充电状态 + * @param startChargeSeq + * @return + */ + @PostMapping("/notificationEquipChargeStatus") + public R notificationEquipChargeStatus(@RequestParam(value = "startChargeSeq") String startChargeSeq, @RequestParam(value = "operatorId") Integer operatorId){ + QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(startChargeSeq); + Operator operator = operatorClient.getOperatorById(operatorId).getData(); + NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult); + //启动重试推送机制 + if(null == notificationEquipChargeStatusResult || 1 == notificationEquipChargeStatusResult.getSuccStat()){ + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(new Runnable() { + //计数器 + Integer size = 0; + @Override + public void run() { + NotificationEquipChargeStatusResult notificationEquipChargeStatusResult1 = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult); + //启动重试推送机制 + if(null != notificationEquipChargeStatusResult1 && 0 == notificationEquipChargeStatusResult1.getSuccStat()){ + threadPoolExecutor.shutdown(); + return; + } + size++; + if(size >= 5){ + threadPoolExecutor.shutdown(); + return; + } + //间隔一分钟重试一次 + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }); + } + return R.ok(); + } + + + /** + * 请求停止充电 + * @return + */ + @PostMapping("/query_stop_charge") + public BaseResult queryStopCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台请求停止充电请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台请求停止充电响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台请求停止充电请求Data:" + decrypt); + QueryStopCharge queryStopCharge = JSON.parseObject(decrypt, QueryStopCharge.class); + QueryStopChargeResult queryStopChargeResult = new QueryStopChargeResult(); + queryStopChargeResult.setStartChargeSeq(queryStopCharge.getStartChargeSeq()); + queryStopChargeResult.setStartChargeSeqStat(3); + queryStopChargeResult.setSuccStat(0); + queryStopChargeResult.setFailReason(0); + //执行停机操作 + R r = chargingOrderClient.tripartitePlatformStopCharge(queryStopCharge.getStartChargeSeq()); + if(200 != r.getCode()){ + queryStopChargeResult.setStartChargeSeqStat(5); + queryStopChargeResult.setSuccStat(1); + queryStopChargeResult.setFailReason(3); + //参数加密 + String jsonString = JacksonUtils.toJson(queryStopChargeResult); + log.info("三方平台请求停止充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + //参数加密 + String jsonString = JacksonUtils.toJson(queryStopChargeResult); + log.info("三方平台请求停止充电响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + /** + * 推送停止充电结果 + * @param startChargeSeq 充电订单号 + * @param connectorID 充电设备接口编码 + * @return + */ + @PostMapping("/notificationStopChargeResult") + public R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID, + @RequestParam("operatorId") Integer operatorId){ + Operator operator = operatorClient.getOperatorById(operatorId).getData(); + NotificationStopChargeResult info = new NotificationStopChargeResult(); + info.setStartChargeSeq(startChargeSeq); + info.setStartChargeSeqStat(4); + info.setConnectorID(connectorID); + info.setSuccStat(0); + info.setFailReason(0); + NotificationStopCharge notificationStopCharge = TCECUtil.notificationStopChargeResult(operator, info); + //启动重试推送机制 + if(null == notificationStopCharge || 1 == notificationStopCharge.getSuccStat()){ + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(new Runnable() { + //计数器 + Integer size = 0; + @Override + public void run() { + NotificationStopCharge notificationStopCharge1 = TCECUtil.notificationStopChargeResult(operator, info); + //启动重试推送机制 + if(null != notificationStopCharge1 && 0 == notificationStopCharge1.getSuccStat()){ + threadPoolExecutor.shutdown(); + return; + } + size++; + if(size >= 5){ + threadPoolExecutor.shutdown(); + return; + } + //间隔一分钟重试一次 + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }); + } + return R.ok(); + } + + + /** + * 推送订单信息 + * @param startChargeSeq + * @return + */ + @PostMapping("/notificationChargeOrderInfo") + public R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){ + NotificationChargeOrderInfo info = buildNotificationChargeOrderInfo(startChargeSeq); + Operator operator = operatorClient.getOperatorById(operatorId).getData(); + NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = TCECUtil.notificationChargeOrderInfo(operator, info); + //启动重试推送机制 + if(null == notificationChargeOrderInfoResult || 1 == notificationChargeOrderInfoResult.getConfirmResult()){ + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(new Runnable() { + //计数器 + Integer size = 0; + @Override + public void run() { + NotificationChargeOrderInfoResult notificationChargeOrderInfoResult1 = TCECUtil.notificationChargeOrderInfo(operator, info); + //启动重试推送机制 + if(null != notificationChargeOrderInfoResult1 && 0 == notificationChargeOrderInfoResult1.getConfirmResult()){ + threadPoolExecutor.shutdown(); + return; + } + size++; + if(size >= 5){ + threadPoolExecutor.shutdown(); + return; + } + //间隔一分钟重试一次 + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }); + } + return R.ok(); + } + + + /** + * 构建推送订单信息 + * @param startChargeSeq + * @return + */ + public NotificationChargeOrderInfo buildNotificationChargeOrderInfo(String startChargeSeq){ + //构建返回结果 + NotificationChargeOrderInfo notificationChargeOrderInfo = new NotificationChargeOrderInfo(); + notificationChargeOrderInfo.setStartChargeSeq(startChargeSeq); + TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData(); + if(null == chargingOrder){ + return null; + } + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + notificationChargeOrderInfo.setConnectorID(chargingGun.getFullNumber()); + notificationChargeOrderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + notificationChargeOrderInfo.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + notificationChargeOrderInfo.setTotalPower(chargingOrder.getElectricity()); + + List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData(); + if(data.size() > 0){ + BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); + notificationChargeOrderInfo.setTotalElecMoney(totalElectricity.setScale(2, RoundingMode.HALF_EVEN)); + notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge.setScale(2, RoundingMode.HALF_EVEN)); + notificationChargeOrderInfo.setTotalMoney(chargingOrder.getPaymentAmount()); + }else{ + notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount())); + notificationChargeOrderInfo.setTotalSeviceMoney(BigDecimal.ZERO); + notificationChargeOrderInfo.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount())); + } + + + TParkingRecord parkingRecord = parkingRecordClient.getParkingRecordByChargingOrderId(chargingOrder.getId()).getData(); + if(null != parkingRecord && parkingRecord.getStatus() == 3){ + notificationChargeOrderInfo.setTotalDelayMoney(parkingRecord.getPayment()); + } + + //结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止) + switch (chargingOrder.getEndMode()){ + case 0: + notificationChargeOrderInfo.setStopReason(3); + break; + case 1: + notificationChargeOrderInfo.setStopReason(0); + break; + case 2: + notificationChargeOrderInfo.setStopReason(2); + break; + case 3: + notificationChargeOrderInfo.setStopReason(5); + break; + } + + //构建充电明细 + List<ChargeDetail> chargeDetails = new ArrayList<>(); + + LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime(); + LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime(); + String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + for (TChargingOrderAccountingStrategy datum : data) { + ChargeDetail chargeDetail = new ChargeDetail(); + if(s_format.equals(e_format)){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":")); + if(Integer.valueOf(substring) > 12){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59"); + } + } + chargeDetail.setElecPrice(datum.getElectrovalence()); + chargeDetail.setSevicePrice(datum.getServiceCharge()); + chargeDetail.setDetailPower(datum.getChargingCapacity()); + chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice()); + chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice()); + chargeDetails.add(chargeDetail); + } + notificationChargeOrderInfo.setChargeDetails(chargeDetails); + return notificationChargeOrderInfo; + } + + + /** + * 二维码查询枪号(快电) + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/query_terminal_code") + public BaseResult queryTerminalCode(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台二维码查询枪号请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台二维码查询枪号响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台二维码查询枪号响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台二维码查询枪号请求Data:" + decrypt); + QueryTerminalCode queryTerminalCode = JSON.parseObject(decrypt, QueryTerminalCode.class); + String qrCode = queryTerminalCode.getQRCode(); + String substring = qrCode.substring(qrCode.indexOf("=") + 1); + TChargingGun chargingGun = chargingGunClient.getChargingGunByFullNumber(substring).getData(); + QueryTerminalCodeResult queryTerminalCodeResult = new QueryTerminalCodeResult(); + if(null != chargingGun){ + queryTerminalCodeResult.setTerminalCode(chargingGun.getId().toString()); + } + + //参数加密 + String jsonString = JacksonUtils.toJson(queryTerminalCodeResult); + log.info("三方平台二维码查询枪号响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台二维码查询枪号响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + /** + * 推送充电车牌号 + * 客户归属运营商向设备运营商推送充电用户车牌号减免停车费,多次推送以最后一次车牌号为准 + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/notification_charge_carnum") + public BaseResult notificationChargeCarnum(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + baseResult.setData(""); + baseResult.setSig(TCECUtil.buildSign(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv()); + NotificationChargeCarnum notificationChargeCarnum = JSON.parseObject(decrypt, NotificationChargeCarnum.class); + + NotificationChargeCarnumResult notificationChargeCarnumResult = new NotificationChargeCarnumResult(); + notificationChargeCarnumResult.setStartChargeSeqs(notificationChargeCarnum.getStartChargeSeqs()); + notificationChargeCarnumResult.setSuccStat(0); + notificationChargeCarnumResult.setFailReason(0); + TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(notificationChargeCarnum.getStartChargeSeqs()).getData(); + if(null == chargingOrder){ + notificationChargeCarnumResult.setSuccStat(1); + notificationChargeCarnumResult.setFailReason(1); + }else{ + //待处理相关业务逻辑 + } + //参数加密 + String jsonString = JacksonUtils.toJson(notificationChargeCarnumResult); + String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.buildSign(baseResult)); + return baseResult; + } + + + /** + * 账单拉取(快电) + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/query_charge_order_info") + public BaseResult queryChargeOrderInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("三方平台账单拉取请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("三方平台账单拉取响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台账单拉取响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("三方平台账单拉取请求Data:" + decrypt); + QueryChargeOrderInfo queryChargeOrderInfo = JSON.parseObject(decrypt, QueryChargeOrderInfo.class); + //构建返回结果 + QueryChargeOrderInfoResult result = buildQueryChargeOrderInfoResult(queryChargeOrderInfo); + //参数加密 + String jsonString = JacksonUtils.toJson(result); + log.info("三方平台账单拉取响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("三方平台账单拉取响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + /** + * 构建充电账单拉取实体 + * @param queryChargeOrderInfo + * @return + */ + public QueryChargeOrderInfoResult buildQueryChargeOrderInfoResult(QueryChargeOrderInfo queryChargeOrderInfo){ + //构建返回结果 + QueryChargeOrderInfoResult queryChargeOrderInfoResult = new QueryChargeOrderInfoResult(); + List<OrderInfo> orderInfos = new ArrayList<>(); + List<String> startChargeSeqs = queryChargeOrderInfo.getStartChargeSeqs(); + List<TChargingOrder> chargingOrders = chargingOrderClient.getChargingOrderByStartChargeSeqs(startChargeSeqs).getData(); + for (TChargingOrder chargingOrder : chargingOrders) { + if(null == chargingOrder){ + return null; + } + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + OrderInfo orderInfo = new OrderInfo(); + orderInfo.setStartChargeSeq(chargingOrder.getStartChargeSeq()); + orderInfo.setConnectorID(chargingGun.getFullNumber()); + orderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + orderInfo.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + orderInfo.setTotalPower(chargingOrder.getTotalElectricity()); + orderInfo.setTotalElecMoney(chargingOrder.getElectrovalence()); + orderInfo.setTotalSeviceMoney(chargingOrder.getServiceCharge()); + orderInfo.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge())); + //结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止) + switch (chargingOrder.getEndMode()){ + case 0: + orderInfo.setStopReason(3); + break; + case 1: + orderInfo.setStopReason(0); + break; + case 2: + orderInfo.setStopReason(2); + break; + case 3: + orderInfo.setStopReason(4); + break; + } + //构建充电明细 + List<ChargeDetail> chargeDetails = new ArrayList<>(); + List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData(); + + LocalDateTime startTime = chargingOrder.getStartTime(); + LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime(); + String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + for (TChargingOrderAccountingStrategy datum : data) { + ChargeDetail chargeDetail = new ChargeDetail(); + if(s_format.equals(e_format)){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":")); + if(Integer.valueOf(substring) > 12){ + chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); + }else{ + chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00"); + chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59"); + } + } + chargeDetail.setElecPrice(datum.getElectrovalence()); + chargeDetail.setSevicePrice(datum.getServiceCharge()); + chargeDetail.setDetailPower(datum.getChargingCapacity()); + chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice()); + chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice()); + chargeDetails.add(chargeDetail); + } + orderInfo.setChargeDetails(chargeDetails); + orderInfos.add(orderInfo); + } + queryChargeOrderInfoResult.setOrderInfos(orderInfos); + return queryChargeOrderInfoResult; + } + + + + /*********************数据监管平台接口*********************/ + /** + * 查询运营商信息 + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/supervise_query_operator_info") + public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("监管平台查询充电站信息响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("监管平台查询充电站信息请求Data:" + decrypt); + SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class); + Integer pageNo = superviseQueryOperatorInfo.getPageNo(); + Integer pageSize = superviseQueryOperatorInfo.getPageSize(); + if(null == pageNo){ + pageNo = 1; + } + if(null == pageSize){ + pageSize = 50; + } + String operatorTel = systemConfigurationClient.getServerPhone().getData(); + SuperviseQueryOperatorInfoResultPage superviseQueryOperatorInfoResultPage = new SuperviseQueryOperatorInfoResultPage(); + superviseQueryOperatorInfoResultPage.setPageNo(1); + superviseQueryOperatorInfoResultPage.setPageCount(1); + superviseQueryOperatorInfoResultPage.setItemSize(1); + + SuperviseQueryOperatorInfoResult superviseQueryOperatorInfoResult = new SuperviseQueryOperatorInfoResult(); + superviseQueryOperatorInfoResult.setOperatorID("906171535"); + superviseQueryOperatorInfoResult.setOperatorUSCID("91510903906171535D"); + superviseQueryOperatorInfoResult.setOperatorName("四川明星新能源科技有限公司"); + superviseQueryOperatorInfoResult.setOperatorTel1(operatorTel); + List<SuperviseQueryOperatorInfoResult> superviseQueryOperatorInfoResults = new ArrayList<>(); + superviseQueryOperatorInfoResults.add(superviseQueryOperatorInfoResult); + // 将superviseQueryOperatorInfoResults转化为json数组 + superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults); + String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage); + //参数加密 + log.info("监管平台查询充电站信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + + + + /** + * 查询充电站信息 + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/supervise_query_stations_info") + public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); + //校验token和签名 + BaseResult baseResult = requestCheck(true, baseRequest, request); + if(0 != baseResult.getRet()){ + log.info("监管平台查询充电站信息响应Data:"); + baseResult.setData(""); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + return baseResult; + } + Operator operator = baseResult.getOperator(); + //解密参数 + String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + log.info("监管平台查询充电站信息请求Data:" + decrypt); + QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class); + Integer pageNo = queryStationsInfo.getPageNo(); + Integer pageSize = queryStationsInfo.getPageSize(); + List<String> stationIDs = queryStationsInfo.getStationIDs(); + if(null == pageNo){ + pageNo = 1; + } + if(null == pageSize){ + pageSize = 50; + } + PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs); + List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData(); + QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult(); + queryStationsInfoResult.setPageNo(pageNo); + queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue()); + queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue()); + queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords())); + //参数加密 + String jsonString = JacksonUtils.toJson(queryStationsInfoResult); + log.info("监管平台查询充电站信息响应Data:" + jsonString); + String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); + baseResult.setData(encrypt); + baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); + 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); + + } + +// +// +// /** +// * 构建站点数据 +// * @param sites +// * @return +// */ +// public List<StationInfo> superviseBuildSite(List<TParkingLot> parkingLots, List<Site> sites){ +// List<Integer> siteIds = sites.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(); +// String serviceTel = systemConfigurationClient.getServerPhone().getData(); +// List<StationInfo> StationInfos = new ArrayList<>(); +// for (Site datum : sites) { +// StationInfo stationInfo = new StationInfo(); +// stationInfo.setStationID(datum.getId().toString()); +// stationInfo.setStationUniqueNumber(datum.getDistrictsCode() + "906171535" + datum.getId()); +// stationInfo.setOperatorID("906171535"); +// stationInfo.setEquipmentOwnerID("906171535"); +// stationInfo.setStationName(datum.getName()); +// stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN"); +// stationInfo.setAreaCode(datum.getDistrictsCode()); +// stationInfo.setAreaCodeCountryside(); +// 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.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime()); +// stationInfo.setElectricityFee(datum.getRateDescription()); +// //添加停车费信息 +// Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst(); +// if(first.isPresent()){ +// TParkingLot tParkingLot = first.get(); +// superviseBuildPlaceHolder(tParkingLot, stationInfo); +// } +// +// //构建充电设备信息数据 +// stationInfo.setEquipmentInfos(superviseBuildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList)); +// StationInfos.add(stationInfo); +// +// } +// return StationInfos; +// } +// +// +// /** +// * 构建停车费信息 +// * @param tParkingLot +// * @param stationInfo +// */ +// public void superviseBuildPlaceHolder(TParkingLot tParkingLot, StationInfo stationInfo){ +// stationInfo.setOvertimeFee(tParkingLot.getName() + "停车费"); +// PlaceHolder placeHolder = new PlaceHolder(); +// placeHolder.setFreeTime(tParkingLot.getChargeFreeDuration()); +// placeHolder.setMaxFee(tParkingLot.getChargeCapping()); +// List<PlaceHolderPrice> PlaceHolderPrices = new ArrayList<>(); +// PlaceHolderPrice placeHolderPrice = new PlaceHolderPrice(); +// placeHolderPrice.setStartTime("00:00"); +// placeHolderPrice.setEndTime("23:59"); +// placeHolderPrice.setPrice(tParkingLot.getChargeRate()); +// PlaceHolderPrices.add(placeHolderPrice); +// placeHolder.setPlaceHolderPrices(PlaceHolderPrices); +// stationInfo.setPlaceHolder(placeHolder); +// } +// +// +// +// +// /** +// * 构建桩数据 +// * @param tChargingPiles +// * @return +// */ +// public List<EquipmentInfo> superviseBuildEquipmentInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){ +// List<EquipmentInfo> equipmentInfos = new ArrayList<>(); +// List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList()); +// for (TChargingPile tChargingPile : collect) { +// EquipmentInfo equipmentInfo = new EquipmentInfo(); +// equipmentInfo.setEquipmentID(tChargingPile.getId().toString()); +// equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode()); +// equipmentInfo.setManufacturerName(tChargingPile.getManufacturer()); +// equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType()); +// if(null != tChargingPile.getProductionDate()){ +// equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); +// } +// switch (tChargingPile.getType()){ +// case 0: +// equipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType()); +// break; +// case 1: +// equipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType()); +// break; +// case 2: +// equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType()); +// break; +// case 3: +// equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType()); +// break; +// case 4: +// equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType()); +// break; +// } +// +// //构建设备接口信息 +// equipmentInfo.setConnectorInfos(superviseBuildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList)); +// equipmentInfo.setPower(tChargingPile.getRatedPower()); +// equipmentInfos.add(equipmentInfo); +// } +// return equipmentInfos; +// } +// +// +// /** +// * 构建接口数据 +// * @param chargingGunList +// * @return +// */ +// public List<ConnectorInfo> superviseBuildConnectorInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){ +// List<ConnectorInfo> connectorInfos = new ArrayList<>(); +// List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList()); +// for (TChargingGun chargingGun : collect) { +// ConnectorInfo connectorInfo = new ConnectorInfo(); +// connectorInfo.setConnectorID(chargingGun.getFullNumber()); +// connectorInfo.setConnectorName(chargingGun.getName()); +// switch (chargingGun.getType()){ +// case 0: +// connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType()); +// break; +// case 1: +// connectorInfo.setConnectorType(ConnectorTypeEnum.HOUSEHOLD_SOCKET.getType()); +// break; +// case 2: +// connectorInfo.setConnectorType(ConnectorTypeEnum.AC_SOCKET.getType()); +// break; +// case 3: +// connectorInfo.setConnectorType(ConnectorTypeEnum.AC_INTERFACE_PLUG.getType()); +// break; +// case 4: +// connectorInfo.setConnectorType(ConnectorTypeEnum.DC_INTERFACE_GUN_HEAD.getType()); +// break; +// case 5: +// connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType()); +// break; +// } +// connectorInfo.setVoltageUpperLimits(chargingGun.getUpperRatedVoltage().intValue()); +// connectorInfo.setVoltageLowerLimits(chargingGun.getLowerLimitOfRatedVoltage().intValue()); +// connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue()); +// connectorInfo.setPower(chargingGun.getRatedPower()); +// connectorInfo.setParkNo(chargingGun.getParkingNumber()); +// connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard())); +// connectorInfo.setQRCode("https://mxcd.zhinenganguan.com?No=" + code + chargingGun.getCode()); +// connectorInfos.add(connectorInfo); +// } +// return connectorInfos; +// } + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java index 33d9c11..7dcb6c0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java @@ -27,6 +27,35 @@ @JsonProperty("EquipmentElectricity") private BigDecimal equipmentElectricity; /** + * 设备分类 1:车辆充电设备 + * 2:换电站内的电池 + * 箱充电设备 + */ + @NotNull + @JsonProperty("EquipmentClassification") + private Integer equipmentClassification; + /** + * 充电设备累计充电时长 单位分钟 + */ + @NotNull + @JsonProperty("EquipmentTotalChargeTime") + private Long equipmentTotalChargeTime; + /** + * 充电设备累计充 + * 电次数 + */ + @NotNull + @JsonProperty("EquipmentTotalChargeNum") + private Integer equipmentTotalChargeNum; + /** + * 充电设备累计充 + * 电次数 + */ + @NotNull + @JsonProperty("EquipmentTotalWarningNum") + private Integer equipmentTotalWarningNum; + + /** * 充电设备接口统计信息列表 */ @NotNull diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java index e06100b..5662a1c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java @@ -21,6 +21,27 @@ @JsonProperty("StationID") private String stationID; /** + * 设备所属方ID + * 设备所属运营平台组织机构代码 + */ + @NotNull + @JsonProperty("EquipmentOwnerID") + private String equipmentOwnerID; + /** + * 运营商ID + */ + @NotNull + @JsonProperty("OperatorID") + private String operatorID; + /** + * 站点分类 1:充电站 + * 2:换电站 + * 3:充换电一体站 + */ + @NotNull + @JsonProperty("StationClassification") + private Integer stationClassification; + /** * 统计的开始时间 * yyyy-MM-dd */ @@ -41,6 +62,35 @@ @JsonProperty("StationElectricity") private BigDecimal stationElectricity; /** + * 充换电站累计 + * 充电量 + */ + @NotNull + @JsonProperty("StationTotalChargeEnergy") + private BigDecimal stationTotalChargeEnergy; + + /** + * 充换电站累计 + * 告警数量 + */ + @NotNull + @JsonProperty("StationTotalWarningNum") + private Integer stationTotalWarningNum; + /** + 充换电站累计 + 其他电量 + */ + @NotNull + @JsonProperty("StationTotalOtherEnergy") + private BigDecimal stationTotalOtherEnergy; + /** + 充换电站累计 + 充电次数 + */ + @NotNull + @JsonProperty("StationTotalChargeNum") + private Integer stationTotalChargeNum; + /** * 充电设备统计信息列表 */ @NotNull diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index b980704..06e5acf 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -36,6 +36,7 @@ import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringPageData; +import com.ruoyi.order.api.dto.ChargingStatisticeDTO; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.common.core.dto.MongoChargingOrderQuery; @@ -157,10 +158,20 @@ private RoleSiteClient roleSiteClient; @Resource private SysUserRoleClient sysUserRoleClient; - - - - + + + + /** + * 远程调用 监管平台查询前一天用能统计 + * @return + */ + @ResponseBody + @PostMapping(value = "/getChargingStatistics") + public R<List<TChargingOrder>> getChargingStatistics(@RequestBody ChargingStatisticeDTO dto) { + List<TChargingOrder> list = chargingOrderService.lambdaQuery() + .between(TChargingOrder::getEndTime, dto.getStartTime(), dto.getEndTime()).list(); + return R.ok(list); + } /** * 远程调用 增加管理后台赠送会员记录 -- Gitblit v1.7.1