From be652e7453938c7537dbb73f3caff336e8325b8d Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 06 五月 2025 15:49:47 +0800
Subject: [PATCH] 政务云数据上传
---
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java | 718 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 704 insertions(+), 14 deletions(-)
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
index 1992e6b..1760e83 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -1,6 +1,7 @@
package com.ruoyi.integration.drainage;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.JacksonUtils;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.*;
@@ -13,6 +14,9 @@
import com.ruoyi.integration.drainage.kuaidian.model.*;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
+import com.ruoyi.integration.drainage.util.AesEncryption;
+import com.ruoyi.integration.drainage.util.HMacMD5Util;
+import com.ruoyi.integration.drainage.util.SequenceGenerator;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
@@ -22,14 +26,18 @@
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.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
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.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -79,7 +87,11 @@
@Resource
private ParkingRecordClient parkingRecordClient;
-
+ @Resource
+ private SystemConfigurationClient systemConfigurationClient;
+ @Autowired
+ private TCECSuperviseUtil tcecSuperviseUtil;
+ private final static String operatorId = "906171535";
/**
* 请求校验
@@ -95,19 +107,22 @@
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("系统异常");
@@ -131,6 +146,30 @@
if(!sign.equals(sig)){
baseResult.setRet(4001);
baseResult.setMsg("签名校验失败");
+ return baseResult;
+ }
+ return baseResult;
+ }
+ public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
+ Operator operator = new Operator();
+ BaseResult baseResult = new BaseResult();
+ baseResult.setRet(0);
+ baseResult.setMsg("成功");
+ baseResult.setOperatorID(baseRequest.getOperatorID());
+ operator.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();
+ baseResult.setOperator(operator);
+ if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
+ baseResult.setRet(4003);
+ baseResult.setMsg("参数异常");
return baseResult;
}
return baseResult;
@@ -206,6 +245,48 @@
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
return baseResult;
}
+ /**
+ * 获取token
+ * @return
+ */
+ @PostMapping("/query_token_jianguan")
+ public BaseResult queryTokenJianguan(@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();
+ //生成token
+ Operator operator = baseResult.getOperator();
+ 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);
+ String timeStamp = System.currentTimeMillis() + "";
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+ String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString);
+ String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+ baseResult.setData(data);
+ baseResult.setSig(hmacMD5);
+ log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
+ return baseResult;
+ }
@@ -240,7 +321,7 @@
if(null == pageSize){
pageSize = 10;
}
- PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize);
+ PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, new ArrayList<>());
List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
queryStationsInfoResult.setPageNo(pageNo);
@@ -268,10 +349,49 @@
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");
@@ -279,8 +399,8 @@
stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
stationInfo.setAreaCode(datum.getDistrictsCode());
stationInfo.setAddress(datum.getAddress());
- stationInfo.setStationTel(datum.getPhone());
- stationInfo.setServiceTel(datum.getServicePhone());
+ stationInfo.setStationTel(StringUtils.isNotEmpty(datum.getPhone()) ? datum.getPhone().split(",")[0] : "");
+ stationInfo.setServiceTel(StringUtils.isNotEmpty(serviceTel) ? serviceTel.split(",")[0] : "");
switch (datum.getSiteType()){
case 0:
stationInfo.setStationType(StationTypeEnum.OTHER.getType());
@@ -320,7 +440,7 @@
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.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
stationInfo.setElectricityFee(datum.getRateDescription());
//添加停车费信息
Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst();
@@ -328,7 +448,6 @@
TParkingLot tParkingLot = first.get();
buildPlaceHolder(tParkingLot, stationInfo);
}
-
//构建充电设备信息数据
stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
StationInfos.add(stationInfo);
@@ -375,6 +494,8 @@
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")));
}
@@ -393,6 +514,12 @@
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;
}
@@ -417,6 +544,14 @@
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());
@@ -437,8 +572,6 @@
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());
@@ -455,7 +588,7 @@
* @return
*/
@PostMapping("/pushChargingGunStatus")
- public R pushChargingGunStatus(@RequestParam("fullNumber") String fullNumber, @RequestParam("status") Integer status){
+ public R pushChargingGunStatus(@RequestParam(value = "fullNumber") String fullNumber, @RequestParam(value = "status") Integer status){
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
connectorStatusInfo.setConnectorID(fullNumber);
switch (status){
@@ -1149,7 +1282,7 @@
}
chargeDetail.setElecPrice(datum.getElectrovalence());
chargeDetail.setSevicePrice(datum.getServiceCharge());
- chargeDetail.setDetailPower(datum.getChargingCapacity());
+ chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
chargeDetails.add(chargeDetail);
@@ -1356,6 +1489,7 @@
notificationChargeOrderInfo.setStartChargeSeq(startChargeSeq);
TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData();
if(null == chargingOrder){
+ log.info("三方平台流水号获取订单失败");
return null;
}
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
@@ -1423,7 +1557,7 @@
}
chargeDetail.setElecPrice(datum.getElectrovalence());
chargeDetail.setSevicePrice(datum.getServiceCharge());
- chargeDetail.setDetailPower(datum.getChargingCapacity());
+ chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
chargeDetails.add(chargeDetail);
@@ -1618,7 +1752,7 @@
}
chargeDetail.setElecPrice(datum.getElectrovalence());
chargeDetail.setSevicePrice(datum.getServiceCharge());
- chargeDetail.setDetailPower(datum.getChargingCapacity());
+ chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_EVEN));
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
chargeDetails.add(chargeDetail);
@@ -1629,4 +1763,560 @@
queryChargeOrderInfoResult.setOrderInfos(orderInfos);
return queryChargeOrderInfoResult;
}
+
+
+
+ /*********************数据监管平台接口*********************/
+ /**
+ * 查询运营商信息
+ * @param baseRequest
+ * @param request
+ * @return
+ */
+ @PostMapping("/supervise_query_operator_info")
+ public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+ //解密参数
+ String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
+ 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);
+ String timeStamp = System.currentTimeMillis() + "";
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+ String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage));
+ String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+ BaseResult baseResult = new BaseResult();
+ baseResult.setData(data);
+ baseResult.setSig(hmacMD5);
+ baseResult.setRet(0);
+ baseResult.setMsg("OK");
+ baseResult.setOperatorID(OperatorID);
+ return baseResult;
+ }
+
+
+
+ /**
+ * 查询充电站信息
+ * @param baseRequest
+ * @param request
+ * @return
+ */
+ @PostMapping("/supervise_query_stations_info")
+ public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+ String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
+ log.info("监管平台supervise_query_stations_infoData:" + 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 timeStamp = System.currentTimeMillis() + "";
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+ String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult));
+ String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
+ BaseResult baseResult = new BaseResult();
+ baseResult.setData(data);
+ baseResult.setSig(hmacMD5);
+ baseResult.setRet(0);
+ baseResult.setMsg("OK");
+ baseResult.setOperatorID(OurOperatorID);
+ return baseResult;
+ }
+ /**
+ * 查询充换电站状态信息
+ * @param baseRequest
+ * @param request
+ * @return
+ */
+ @PostMapping("/supervise_query_station_status")
+ public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+ log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest));
+ String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
+ log.info("监管平台supervise_query_station_statusData:" + decrypt);
+ //解密参数
+ log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
+ QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
+ List<String> stationIDs = queryStationStatus.getStationIDs();
+ String operatorID = queryStationStatus.getOperatorID();
+
+ List<Integer> stationIDList = new ArrayList<>();
+ for (String stationID : stationIDs) {
+ stationIDList.add(Integer.valueOf(stationID));
+ }
+
+ QueryStationStatusResult queryStationStatusResult = new QueryStationStatusResult();
+ List<StationStatusInfo> stationStatusInfos = new ArrayList<>();
+
+ // 查询站点下的桩信息状态
+ List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
+ if(!CollectionUtils.isEmpty(chargingPiles)){
+ List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
+ List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
+ if(!CollectionUtils.isEmpty(chargingGuns)){
+ for (Integer stationID : stationIDList) {
+ StationStatusInfo stationStatusInfo = new StationStatusInfo();
+ stationStatusInfo.setOperatorID(operatorID);
+ stationStatusInfo.setEquipmentOwnerID(operatorId);
+ stationStatusInfo.setStationID(String.valueOf(stationID));
+ List<ConnectorStatusInfo> connectorStatusInfos = new ArrayList<>();
+ for (TChargingGun chargingGun : chargingGuns) {
+ ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
+ connectorStatusInfo.setOperatorID(operatorId);
+ connectorStatusInfo.setEquipmentOwnerID(operatorId);
+ connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
+ connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
+ connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
+ connectorStatusInfo.setEquipmentClassification(1);
+ switch (chargingGun.getStatus()){
+ 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.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ connectorStatusInfos.add(connectorStatusInfo);
+ }
+ stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
+ stationStatusInfos.add(stationStatusInfo);
+ }
+ }
+ queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
+ }
+ String timeStamp = System.currentTimeMillis() + "";
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+ String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult));
+ String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
+ BaseResult baseResult = new BaseResult();
+ baseResult.setData(data);
+ baseResult.setSig(hmacMD5);
+ baseResult.setRet(0);
+ baseResult.setMsg("OK");
+ baseResult.setOperatorID(OurOperatorID);
+ return baseResult;
+ }
+
+ // 测试环境
+ private static final String OperatorID = "MA01H3BQ2";
+ private static final String OperatorSecret = "f1331ef0b37c2d1b";
+ private static final String SigSecret = "a6fedf0e1b27d6f7";
+ private static final String DataSecret = "50a61b93919c9604";
+ private static final String DataSecretIV = "7c8ac6861661d584";
+
+ private static final String OurDataSecret = "50a61b93919c9605";
+ private static final String OurDataSecretIV = "7c8ac6861661d585";
+ private static final String OurSigSecret = "a6fedf0e1b27d6f6";
+ private static final String OurOperatorID = "MA01H3BQ3";
+ private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
+
+
+
+
+ /**
+ * 推送充电设备接口状态信息
+ * @param chargingGun
+ * @return
+ */
+ public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
+ ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
+ connectorStatusInfo.setOperatorID(operatorId);
+ connectorStatusInfo.setEquipmentOwnerID(operatorId);
+ connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
+ connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
+ connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
+ connectorStatusInfo.setEquipmentClassification(1);
+ switch (chargingGun.getStatus()){
+ 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.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ List<Operator> operators = operatorClient.getAllOperator().getData();
+ for (Operator operator : operators) {
+ tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo);
+ }
+ return R.ok();
+ }
+ /**
+ * 推送充电状态信息
+ * @param chargingOrder
+ * @return
+ */
+ public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){
+ SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
+ supEquipChargeStatus.setOperatorID(operatorId);
+ supEquipChargeStatus.setEquipmentOwnerID(operatorId);
+ supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
+ supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+ supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
+ switch (chargingOrder.getStatus()){
+ case 2:
+ supEquipChargeStatus.setConnectorStatus(1);
+ break;
+ case 3:
+ supEquipChargeStatus.setConnectorStatus(2);
+ break;
+ case 4:
+ supEquipChargeStatus.setConnectorStatus(3);
+ break;
+ case 5:
+ supEquipChargeStatus.setConnectorStatus(4);
+ break;
+ }
+ TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+ supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber());
+ supEquipChargeStatus.setEquipmentClassification(1);
+ supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ switch (chargingGun.getStatus()){
+ case 1:
+ supEquipChargeStatus.setConnectorStatus(0);
+ break;
+ case 2:
+ supEquipChargeStatus.setConnectorStatus(1);
+ break;
+ case 3:
+ supEquipChargeStatus.setConnectorStatus(2);
+ break;
+ case 4:
+ supEquipChargeStatus.setConnectorStatus(3);
+ break;
+ case 5:
+ supEquipChargeStatus.setConnectorStatus(3);
+ break;
+ case 6:
+ supEquipChargeStatus.setConnectorStatus(4);
+ break;
+ case 7:
+ supEquipChargeStatus.setConnectorStatus(255);
+ break;
+ }
+ supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
+ supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
+ supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+ supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
+ List<Operator> operators = operatorClient.getAllOperator().getData();
+ for (Operator operator : operators) {
+ tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
+ }
+ return R.ok();
+ }
+ /**
+ * 推送充电订单信息
+ * @param chargingOrder
+ * @return
+ */
+ public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
+ SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
+ supChargeOrderInfo.setOperatorID(operatorId);
+ supChargeOrderInfo.setEquipmentOwnerID(operatorId);
+ supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
+ supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+ supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
+ TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+ supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
+ supChargeOrderInfo.setEquipmentClassification(1);
+ supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+ supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+ supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence());
+ supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
+ supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge());
+ supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount());
+ switch (chargingOrder.getEndMode()){
+ case 0:
+ supChargeOrderInfo.setStopReason(5);
+ supChargeOrderInfo.setStopDesc("异常终止");
+ break;
+ case 1:
+ supChargeOrderInfo.setStopReason(0);
+ supChargeOrderInfo.setStopDesc("用户手动停止充电");
+ break;
+ case 2:
+ supChargeOrderInfo.setStopReason(1);
+ supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电");
+ break;
+ case 3:
+ supChargeOrderInfo.setStopReason(1);
+ supChargeOrderInfo.setStopDesc("费用不足中止");
+ break;
+ }
+
+ List<Operator> operators = operatorClient.getAllOperator().getData();
+ for (Operator operator : operators) {
+ tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
+ }
+ return R.ok();
+ }
+
+
+
+//
+//
+// /**
+// * 构建站点数据
+// * @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;
+// }
+
}
--
Gitblit v1.7.1