From 0d4c9f50ee2bc3e4a03abd91ac7c9e03891d37f2 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 20 二月 2025 17:41:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java |  980 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 837 insertions(+), 143 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 71d189a..5484a0c 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,20 +1,19 @@
 package com.ruoyi.integration.drainage;
 
 import com.alibaba.fastjson.JSON;
-import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
-import com.ruoyi.chargingPile.api.feignClient.SiteClient;
-import com.ruoyi.chargingPile.api.model.Site;
-import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
-import com.ruoyi.chargingPile.api.model.TChargingGun;
-import com.ruoyi.chargingPile.api.model.TChargingPile;
+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.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
+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.feignClient.ChargingOrderAccountingStrategyClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
@@ -23,7 +22,8 @@
 import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
 import com.ruoyi.other.api.domain.Operator;
 import com.ruoyi.other.api.feignClient.OperatorClient;
-import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.other.api.feignClient.SystemConfigurationClient;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -35,15 +35,14 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+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 TCECController {
@@ -70,9 +69,20 @@
 	private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient;
 	
 	@Resource
-	private TokenUtil tokenUtil;
+	private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
 	
-	private static Map<Long, Integer> map = new HashMap<>();
+	@Resource
+	private TokenUtil tokenUtil;
+
+	@Resource
+	private ParkingLotClient parkingLotClient;
+	
+	@Resource
+	private ParkingRecordClient parkingRecordClient;
+	
+	@Resource
+	private SystemConfigurationClient systemConfigurationClient;
+	
 	
 	
 	/**
@@ -87,22 +97,8 @@
 		baseResult.setMsg("成功");
 		baseResult.setOperatorID(baseRequest.getOperatorID());
 		Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-		Integer integer = map.get(mapKey);
-		if(null == integer){
-			integer = 1;
-		}else{
-			integer++;
-		}
-		map.put(mapKey, integer);
 		baseResult.setTimeStamp(mapKey);
-		baseResult.setSeq(String.format("%04d", integer));
-		//清空小于当前时间的map中的无效数据
-		for (Long k : map.keySet()) {
-			if(k <= (mapKey - 10)){
-				map.remove(k);
-			}
-		}
-		
+		baseResult.setSeq("0001");
 		//校验token和签名
 		String operatorID = baseRequest.getOperatorID();
 		String sig = baseRequest.getSig();
@@ -123,7 +119,7 @@
 		}
 		//校验token
 		if(tokenCheck){
-			LoginUser loginUser = tokenUtil.getLoginUser(request);
+			Operator loginUser = tokenUtil.getLoginUser(request);
 			if(null == loginUser){
 				baseResult.setRet(4002);
 				baseResult.setMsg("身份校验失败,无效的token");
@@ -132,15 +128,15 @@
 		}
 		
 		Operator operator = r.getData();
+		baseResult.setOperator(operator);
 		baseRequest.setOperator(operator);
 		//校验签名
-		String sign = TCECUtil.buildSign(baseRequest);
+		String sign = TCECUtil.ourBuildSign(baseRequest);
 		if(!sign.equals(sig)){
 			baseResult.setRet(4001);
 			baseResult.setMsg("签名校验失败");
 			return baseResult;
 		}
-		baseResult.setOperator(operator);
 		return baseResult;
 	}
 	
@@ -154,10 +150,13 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		QueryTokenResult queryTokenResult = new QueryTokenResult();
@@ -166,24 +165,29 @@
 			queryTokenResult.setSuccStat(1);
 			queryTokenResult.setFailReason(1);
 			//参数加密
-			String jsonString = JSON.toJSONString(queryTokenResult);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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.getOperatorSecret())){
+		if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){
 			queryTokenResult.setSuccStat(1);
 			queryTokenResult.setFailReason(2);
 			//参数加密
-			String jsonString = JSON.toJSONString(queryTokenResult);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		
@@ -191,16 +195,19 @@
 		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 = JSON.toJSONString(queryTokenResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		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.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -214,16 +221,20 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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();
@@ -233,17 +244,20 @@
 		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);
 		queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
 		queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
-		queryStationsInfoResult.setStationInfos(buildSite(siteListPaging.getRecords()));
+		queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
 		//参数加密
-		String jsonString = JSON.toJSONString(queryStationsInfoResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(queryStationsInfoResult);
+		log.info("三方平台查询充电站信息响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -253,24 +267,24 @@
 	 * @param sites
 	 * @return
 	 */
-	public List<StationInfo> buildSite(List<Site> sites){
+	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.setStationID(datum.getId().toString());
-			stationInfo.setOperatorID("");
-			stationInfo.setEquipmentOwnerID("91510903906171535D");
+			stationInfo.setOperatorID("906171535");
+			stationInfo.setEquipmentOwnerID("906171535");
 			stationInfo.setStationName(datum.getName());
-			stationInfo.setCountryCode(datum.getCountryCode());
+			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.setServiceTel(serviceTel);
 			switch (datum.getSiteType()){
 				case 0:
 					stationInfo.setStationType(StationTypeEnum.OTHER.getType());
@@ -307,17 +321,47 @@
 			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(Arrays.asList(datum.getImgUrl().split(",")));
+			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);
+	}
+	
 	
 	
 	
@@ -357,7 +401,8 @@
 			}
 			
 			//构建设备接口信息
-			equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), chargingGunList));
+			equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
+			equipmentInfo.setPower(tChargingPile.getRatedPower());
 			equipmentInfos.add(equipmentInfo);
 		}
 		return equipmentInfos;
@@ -369,12 +414,12 @@
 	 * @param chargingGunList
 	 * @return
 	 */
-	public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, List<TChargingGun> chargingGunList){
+	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.getId().toString());
+			connectorInfo.setConnectorID(chargingGun.getFullNumber());
 			connectorInfo.setConnectorName(chargingGun.getName());
 			switch (chargingGun.getType()){
 				case 0:
@@ -402,6 +447,7 @@
 			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;
@@ -413,9 +459,9 @@
 	 * @return
 	 */
 	@PostMapping("/pushChargingGunStatus")
-	public R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status){
+	public R pushChargingGunStatus(@RequestParam("fullNumber") String fullNumber, @RequestParam("status") Integer status){
 		ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
-		connectorStatusInfo.setConnectorID(id.toString());
+		connectorStatusInfo.setConnectorID(fullNumber);
 		switch (status){
 			case 1:
 				connectorStatusInfo.setStatus(0);
@@ -439,6 +485,9 @@
 				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);
@@ -454,15 +503,19 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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();
@@ -482,7 +535,7 @@
 			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.getId().toString());
+				info.setConnectorID(chargingGun.getFullNumber());
 				switch (chargingGun.getStatus()){
 					case 1:
 						info.setStatus(0);
@@ -513,10 +566,12 @@
 		}
 		result.setStationStatusInfos(StationStatusInfos);
 		//参数加密
-		String jsonString = JSON.toJSONString(result);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(result);
+		log.info("三方平台获取设备接口状态响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -530,16 +585,20 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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();
@@ -572,8 +631,9 @@
 				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(integer1.toString());
+				connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
 				connectorStatsInfo.setConnectorElectricity(reduce2);
 				ConnectorStatsInfos.add(connectorStatsInfo);
 			}
@@ -583,10 +643,12 @@
 		stationStats.setEquipmentStatsInfos(EquipmentStatsInfos);
 		result.setStationStats(stationStats);
 		//参数加密
-		String jsonString = JSON.toJSONString(result);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(result);
+		log.info("三方平台获取统计信息响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -597,22 +659,27 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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.getChargingGunById(Integer.valueOf(connectorID)).getData();
+		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();
@@ -650,10 +717,12 @@
 				break;
 		}
 		//参数加密
-		String jsonString = JSON.toJSONString(queryEquipAuthResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(queryEquipAuthResult);
+		log.info("三方平台设备认证响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -665,16 +734,20 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
+		log.info("三方平台查询业务策略信息请求Data:" + decrypt);
 		QueryEquipBusinessPolicy queryEquipBusinessPolicy = JSON.parseObject(decrypt, QueryEquipBusinessPolicy.class);
 		
 		//构建返回结果
@@ -684,15 +757,17 @@
 		queryEquipBusinessPolicyResult.setSuccStat(0);
 		queryEquipBusinessPolicyResult.setFailReason(0);
 		String connectorID = queryEquipBusinessPolicy.getConnectorID();
-		TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
+		TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
 		if(null == tChargingGun){
 			baseResult.setRet(4004);
 			baseResult.setMsg("connectorID 参数无效");
 			//参数加密
-			String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
+			log.info("三方平台查询业务策略信息响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -706,10 +781,12 @@
 			queryEquipBusinessPolicyResult.setFailReason(1);
 			queryEquipBusinessPolicyResult.setSumPeriod(0);
 			//参数加密
-			String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
+			log.info("三方平台查询业务策略信息响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		List<PolicyInfo> PolicyInfos = new ArrayList<>();
@@ -723,30 +800,79 @@
 		queryEquipBusinessPolicyResult.setSumPeriod(PolicyInfos.size());
 		queryEquipBusinessPolicyResult.setPolicyInfos(PolicyInfos);
 		//参数加密
-		String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
+		log.info("三方平台查询业务策略信息响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
+		log.info("三方平台请求开始充电请求Data:" + decrypt);
 		QueryStartCharge queryStartCharge = JSON.parseObject(decrypt, QueryStartCharge.class);
 		
 		//构建返回结果
@@ -754,7 +880,7 @@
 		result.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
 		result.setConnectorID(queryStartCharge.getConnectorID());
 		String connectorID = queryStartCharge.getConnectorID();
-		TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
+		TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
 		//设备不存在
 		if(null == tChargingGun){
 			baseResult.setRet(4004);
@@ -763,10 +889,12 @@
 			result.setFailReason(1);
 			result.setStartChargeSeqStat(5);
 			//参数加密
-			String jsonString = JSON.toJSONString(result);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(result);
+			log.info("三方平台请求开始充电响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		//设备离线
@@ -775,10 +903,12 @@
 			result.setFailReason(2);
 			result.setStartChargeSeqStat(5);
 			//参数加密
-			String jsonString = JSON.toJSONString(result);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(result);
+			log.info("三方平台请求开始充电响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		//调用充电接口
@@ -786,8 +916,9 @@
 		addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
 		addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId());
 		addTripartitePlatformOrder.setOperatorId(operator.getOperatorId());
-		addTripartitePlatformOrder.setPaymentAmount(queryStartCharge.getPaymentAmount());
-		addTripartitePlatformOrder.setRechargePaymentType(queryStartCharge.getPaymentType());
+		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()){
@@ -795,20 +926,45 @@
 			result.setFailReason(1);
 			result.setStartChargeSeqStat(2);
 			//参数加密
-			String jsonString = JSON.toJSONString(result);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(result);
+			log.info("三方平台请求开始充电响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		result.setStartChargeSeqStat(1);
 		result.setSuccStat(0);
 		result.setFailReason(0);
 		//参数加密
-		String jsonString = JSON.toJSONString(result);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(result);
+		log.info("三方平台请求开始充电响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		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;
 	}
 	
@@ -864,24 +1020,30 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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 = JSON.toJSONString(queryEquipChargeStatusResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(queryEquipChargeStatusResult);
+		log.info("三方平台查询充电状态响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -920,8 +1082,8 @@
 				queryEquipChargeStatusResult.setStartChargeSeqStat(4);
 				break;
 		}
-		queryEquipChargeStatusResult.setConnectorID(chargingOrder.getChargingGunId().toString());
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		queryEquipChargeStatusResult.setConnectorID(chargingGun.getFullNumber());
 		//1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障
 		switch (chargingGun.getStatus()){
 			case 1:
@@ -948,20 +1110,30 @@
 		}
 		queryEquipChargeStatusResult.setCurrentA(chargingOrder.getCurrent());
 		queryEquipChargeStatusResult.setVoltageA(chargingOrder.getVoltage());
-		queryEquipChargeStatusResult.setSoc(chargingOrder.getTotalElectricity());
+		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.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).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());
-		queryEquipChargeStatusResult.setElecMoney(chargingOrder.getTotalElectricity());
-		queryEquipChargeStatusResult.setSeviceMoney(chargingOrder.getServiceCharge());
-		queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
+		
+		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<>();
-		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		
-		LocalDateTime startTime = chargingOrder.getStartTime();
-		LocalDateTime endTime = chargingOrder.getEndTime();
+		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) {
@@ -997,7 +1169,7 @@
 	 * @return
 	 */
 	@PostMapping("/notificationEquipChargeStatus")
-	public R notificationEquipChargeStatus(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){
+	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);
@@ -1039,16 +1211,20 @@
 	 */
 	@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.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
 		//解密参数
-		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		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());
@@ -1062,17 +1238,21 @@
 			queryStopChargeResult.setSuccStat(1);
 			queryStopChargeResult.setFailReason(3);
 			//参数加密
-			String jsonString = JSON.toJSONString(queryStopChargeResult);
-			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			String jsonString = JacksonUtils.toJson(queryStopChargeResult);
+			log.info("三方平台请求停止充电响应Data:" + jsonString);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		//参数加密
-		String jsonString = JSON.toJSONString(queryStopChargeResult);
-		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		String jsonString = JacksonUtils.toJson(queryStopChargeResult);
+		log.info("三方平台请求停止充电响应Data:" + jsonString);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+		log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
 	
@@ -1182,13 +1362,31 @@
 		if(null == chargingOrder){
 			return null;
 		}
-		notificationChargeOrderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
+		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.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).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());
-		notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getTotalElectricity());
-		notificationChargeOrderInfo.setTotalSeviceMoney(chargingOrder.getServiceCharge());
-		notificationChargeOrderInfo.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
+		
+		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:
@@ -1207,10 +1405,9 @@
 		
 		//构建充电明细
 		List<ChargeDetail> chargeDetails = new ArrayList<>();
-		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		
-		LocalDateTime startTime = chargingOrder.getStartTime();
-		LocalDateTime endTime = chargingOrder.getEndTime();
+		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) {
@@ -1238,4 +1435,501 @@
 		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();
+		SuperviseQueryOperatorInfoResult superviseQueryOperatorInfoResult = new SuperviseQueryOperatorInfoResult();
+		superviseQueryOperatorInfoResult.setOperatorID("906171535");
+		superviseQueryOperatorInfoResult.setOperatorUSCID("91510903906171535D");
+		superviseQueryOperatorInfoResult.setOperatorName("四川明星新能源科技有限公司");
+		superviseQueryOperatorInfoResult.setOperatorTel1(operatorTel);
+		
+		//参数加密
+		String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResult);
+		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(superviseBuildSite(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> 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