From ad289f0322f3c75712c09888f6d855d4add46cd8 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 25 三月 2025 20:57:44 +0800
Subject: [PATCH] 充电桩bug修改
---
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