From ce3b68cce4b030e222448044adf7325d0c897376 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 13 二月 2025 14:02:00 +0800
Subject: [PATCH] 优化功能

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java |  483 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 365 insertions(+), 118 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 ca33eb3..f931203 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.nacos.common.utils.JacksonUtils;
 import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.common.core.domain.R;
@@ -8,9 +9,7 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil;
-import com.ruoyi.integration.drainage.kuaidian.model.NotificationStationChangeResult;
-import com.ruoyi.integration.drainage.kuaidian.model.QueryTerminalCode;
-import com.ruoyi.integration.drainage.kuaidian.model.QueryTerminalCodeResult;
+import com.ruoyi.integration.drainage.kuaidian.model.*;
 import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.drainage.model.enu.*;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
@@ -21,7 +20,7 @@
 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 lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -33,15 +32,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 {
@@ -69,11 +67,12 @@
 	
 	@Resource
 	private TokenUtil tokenUtil;
-	
-	private static Map<Long, Integer> map = new HashMap<>();
-	
+
 	@Resource
 	private ParkingLotClient parkingLotClient;
+	
+	@Resource
+	private ParkingRecordClient parkingRecordClient;
 	
 	
 	
@@ -89,22 +88,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();
@@ -125,7 +110,7 @@
 		}
 		//校验token
 		if(tokenCheck){
-			LoginUser loginUser = tokenUtil.getLoginUser(request);
+			Operator loginUser = tokenUtil.getLoginUser(request);
 			if(null == loginUser){
 				baseResult.setRet(4002);
 				baseResult.setMsg("身份校验失败,无效的token");
@@ -134,15 +119,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;
 	}
 	
@@ -156,10 +141,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();
@@ -168,24 +156,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;
 		}
 		
@@ -193,16 +186,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;
 	}
 	
@@ -216,16 +212,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();
@@ -243,10 +243,12 @@
 		queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
 		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;
 	}
 	
@@ -266,10 +268,10 @@
 		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());
@@ -310,7 +312,7 @@
 			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());
@@ -391,6 +393,7 @@
 			
 			//构建设备接口信息
 			equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
+			equipmentInfo.setPower(tChargingPile.getRatedPower());
 			equipmentInfos.add(equipmentInfo);
 		}
 		return equipmentInfos;
@@ -473,6 +476,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);
@@ -488,15 +494,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();
@@ -547,10 +557,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;
 	}
 	
@@ -564,16 +576,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();
@@ -617,10 +633,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;
 	}
 	
@@ -631,22 +649,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();
 		if(null == tChargingGun){
 			baseResult.setRet(4004);
 			baseResult.setMsg("connectorID 参数无效");
+			log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
 			return baseResult;
 		}
 		QueryEquipAuthResult queryEquipAuthResult = new QueryEquipAuthResult();
@@ -684,10 +707,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;
 	}
 	
@@ -699,16 +724,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);
 		
 		//构建返回结果
@@ -723,10 +752,12 @@
 			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();
@@ -740,10 +771,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<>();
@@ -757,10 +790,12 @@
 		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;
 	}
 	
@@ -809,21 +844,25 @@
 	
 	
 	/**
-	 * 请求定充电
+	 * 请求开始充电
 	 * @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);
 		
 		//构建返回结果
@@ -840,10 +879,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;
 		}
 		//设备离线
@@ -852,10 +893,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;
 		}
 		//调用充电接口
@@ -863,8 +906,8 @@
 		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);
 		//启动失败
@@ -873,20 +916,24 @@
 			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));
 		return baseResult;
 	}
 	
@@ -931,6 +978,22 @@
 				}
 			});
 		}
+
+		//定义定时任务推送订单状态
+		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+		Runnable task = new Runnable() {
+			@Override
+			public void run() {
+				TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(result.getStartChargeSeq()).getData();
+				if(null == chargingOrder || chargingOrder.getStatus() != 3){
+					scheduler.shutdown();
+					return;
+				}
+				notificationEquipChargeStatus(result.getStartChargeSeq(), operator.getId());
+			}
+		};
+		//一分钟执行一次
+		scheduler.scheduleAtFixedRate(task, 1, 1, TimeUnit.MINUTES);
 		return R.ok();
 	}
 	
@@ -942,24 +1005,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;
 	}
 	
@@ -1028,7 +1097,7 @@
 		queryEquipChargeStatusResult.setVoltageA(chargingOrder.getVoltage());
 		queryEquipChargeStatusResult.setSoc(chargingOrder.getTotalElectricity());
 		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());
@@ -1039,7 +1108,7 @@
 		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		
 		LocalDateTime startTime = chargingOrder.getStartTime();
-		LocalDateTime endTime = chargingOrder.getEndTime();
+		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) {
@@ -1075,7 +1144,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);
@@ -1117,16 +1186,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());
@@ -1140,17 +1213,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;
 	}
 	
@@ -1262,11 +1339,17 @@
 		}
 		notificationChargeOrderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
 		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()));
+		notificationChargeOrderInfo.setTotalDelayMoney(BigDecimal.ZERO);
+		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:
@@ -1288,7 +1371,7 @@
 		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		
 		LocalDateTime startTime = chargingOrder.getStartTime();
-		LocalDateTime endTime = chargingOrder.getEndTime();
+		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) {
@@ -1319,13 +1402,56 @@
 	
 	
 	/**
-	 * 二维码查询抢号(快电)
+	 * 二维码查询枪号(快电)
 	 * @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()){
@@ -1336,17 +1462,138 @@
 		Operator operator = baseResult.getOperator();
 		//解密参数
 		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
-		QueryTerminalCode queryTerminalCode = JSON.parseObject(decrypt, QueryTerminalCode.class);
-		String qrCode = queryTerminalCode.getQRCode();
-		String substring = qrCode.substring(qrCode.indexOf("=") + 1);
-		QueryTerminalCodeResult queryTerminalCodeResult = new QueryTerminalCodeResult();
-		queryTerminalCodeResult.setTerminalCode(substring);
+		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 = JSON.toJSONString(queryTerminalCodeResult);
+		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;
+			}
+			OrderInfo orderInfo = new OrderInfo();
+			orderInfo.setStartChargeSeq(chargingOrder.getStartChargeSeq());
+			orderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
+			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;
+	}
 }

--
Gitblit v1.7.1