From 7a4f9541331bef779a506b38a27ed5c3373c0bec Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 15 五月 2025 13:53:22 +0800
Subject: [PATCH] 开发二级等保功能及心跳消息队列修改

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java |  557 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 472 insertions(+), 85 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 5484a0c..1760e83 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -1,6 +1,7 @@
 package com.ruoyi.integration.drainage;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.JacksonUtils;
 import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.*;
@@ -13,6 +14,9 @@
 import com.ruoyi.integration.drainage.kuaidian.model.*;
 import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.drainage.model.enu.*;
+import com.ruoyi.integration.drainage.util.AesEncryption;
+import com.ruoyi.integration.drainage.util.HMacMD5Util;
+import com.ruoyi.integration.drainage.util.SequenceGenerator;
 import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
@@ -25,12 +29,15 @@
 import com.ruoyi.other.api.feignClient.SystemConfigurationClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -82,8 +89,9 @@
 	
 	@Resource
 	private SystemConfigurationClient systemConfigurationClient;
-	
-	
+	@Autowired
+	private TCECSuperviseUtil tcecSuperviseUtil;
+	private final static String operatorId = "906171535";
 	
 	/**
 	 * 请求校验
@@ -99,19 +107,22 @@
 		Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
 		baseResult.setTimeStamp(mapKey);
 		baseResult.setSeq("0001");
+
 		//校验token和签名
 		String operatorID = baseRequest.getOperatorID();
 		String sig = baseRequest.getSig();
 		Long timeStamp = baseRequest.getTimeStamp();
 		String data = baseRequest.getData();
 		String seq = baseRequest.getSeq();
+
 		if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
 			baseResult.setRet(4003);
 			baseResult.setMsg("参数异常");
 			return baseResult;
 		}
-		
+
 		R<Operator> r = operatorClient.getOperator(operatorID);
+
 		if(200 != r.getCode()){
 			baseResult.setRet(500);
 			baseResult.setMsg("系统异常");
@@ -135,6 +146,30 @@
 		if(!sign.equals(sig)){
 			baseResult.setRet(4001);
 			baseResult.setMsg("签名校验失败");
+			return baseResult;
+		}
+		return baseResult;
+	}
+	public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
+		Operator operator = new Operator();
+		BaseResult baseResult = new BaseResult();
+		baseResult.setRet(0);
+		baseResult.setMsg("成功");
+		baseResult.setOperatorID(baseRequest.getOperatorID());
+		operator.setOperatorId(baseRequest.getOperatorID());
+		Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		baseResult.setTimeStamp(mapKey);
+		baseResult.setSeq("0001");
+		//校验token和签名
+		String operatorID = baseRequest.getOperatorID();
+		String sig = baseRequest.getSig();
+		Long timeStamp = baseRequest.getTimeStamp();
+		String data = baseRequest.getData();
+		String seq = baseRequest.getSeq();
+		baseResult.setOperator(operator);
+		if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
+			baseResult.setRet(4003);
+			baseResult.setMsg("参数异常");
 			return baseResult;
 		}
 		return baseResult;
@@ -210,6 +245,48 @@
 		log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
+	/**
+	 * 获取token
+	 * @return
+	 */
+	@PostMapping("/query_token_jianguan")
+	public BaseResult queryTokenJianguan(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+		log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
+		BaseResult baseResult = requestCheck(false, baseRequest, request);
+		if(0 != baseResult.getRet()){
+			log.info("三方平台获取token响应Data:");
+			baseResult.setData("");
+			baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
+			log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
+			return baseResult;
+		}
+		QueryTokenResult queryTokenResult = new QueryTokenResult();
+		//生成token
+		Operator operator = baseResult.getOperator();
+		Map<String, Object> token = tokenUtil.createToken(operator);
+		String access_token = token.get("access_token").toString();
+		Long expires_in = Long.valueOf(token.get("expires_in").toString());
+
+		queryTokenResult.setOperatorID("906171535");
+		queryTokenResult.setSuccStat(0);
+		queryTokenResult.setFailReason(0);
+		queryTokenResult.setAccessToken(access_token);
+		queryTokenResult.setTokenAvailableTime(expires_in * 60);
+		//参数加密
+		String jsonString = JacksonUtils.toJson(queryTokenResult);
+		log.info("三方平台获取token响应Data:" + jsonString);
+//		String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
+//		baseResult.setData(encrypt);
+		String timeStamp = System.currentTimeMillis() + "";
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+		String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString);
+		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+		baseResult.setData(data);
+		baseResult.setSig(hmacMD5);
+		log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
+		return baseResult;
+	}
 	
 	
 	
@@ -276,6 +353,45 @@
 		List<StationInfo> StationInfos = new ArrayList<>();
 		for (Site datum : sites) {
 			StationInfo stationInfo = new StationInfo();
+			stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside());
+			stationInfo.setStationClassification(datum.getStationClassification());
+			stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType());
+			if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){
+				stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(",")));
+			}
+			stationInfo.setBusineHours(datum.getStartServiceTime());
+			stationInfo.setRoundTheClock(datum.getRoundTheClock());
+			stationInfo.setParkType(datum.getParkType());
+			stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}");
+			stationInfo.setServiceFee("{"+datum.getServiceFee()+"}");
+			stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}");
+			stationInfo.setElectricityType(datum.getElectricityType());
+			stationInfo.setBusinessExpandType(datum.getBusinessExpandType());
+			stationInfo.setCapacity(datum.getCapacity());
+			stationInfo.setRatedPower(datum.getRatedPower());
+			stationInfo.setPeriodFee(datum.getPeriodFee());
+			stationInfo.setOfficialRunTime(datum.getOfficialRunTime());
+			stationInfo.setStationOrientation(datum.getStationOrientation());
+			stationInfo.setStationArea(datum.getStationArea());
+			stationInfo.setHavePerson(datum.getHavePerson());
+			stationInfo.setVideoMonitor(datum.getVideoMonitor());
+			if (StringUtils.isNotEmpty(datum.getSupportingFacilities())){
+				String[] split = datum.getSupportingFacilities().split(",");
+				List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
+				stationInfo.setSupportingFacilities(collect);
+			}
+			stationInfo.setPrinterFlag(datum.getPrinterFlag());
+			stationInfo.setBarrierFlag(datum.getBarrierFlag());
+			stationInfo.setParkingLockFlag(datum.getParkingLockFlag());
+			stationInfo.setEquipmentOwnerName(datum.getEquipmentOwnerName());
+			stationInfo.setResidentNo(datum.getResidentNo());
+			stationInfo.setSupplyType(datum.getSupplyType());
+			stationInfo.setWattHourMeterNo(datum.getWattHourMeterNo());
+			BigDecimal forwardPower = datum.getForwardPower();
+			if (forwardPower!=null){
+				stationInfo.setForwardPower(forwardPower.setScale(4, BigDecimal.ROUND_HALF_UP).toString());
+			}
+			stationInfo.setRecordUniqueNo(datum.getRecordUniqueNo());
 			stationInfo.setStationID(datum.getId().toString());
 			stationInfo.setOperatorID("906171535");
 			stationInfo.setEquipmentOwnerID("906171535");
@@ -283,8 +399,8 @@
 			stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
 			stationInfo.setAreaCode(datum.getDistrictsCode());
 			stationInfo.setAddress(datum.getAddress());
-			stationInfo.setStationTel(datum.getPhone());
-			stationInfo.setServiceTel(serviceTel);
+			stationInfo.setStationTel(StringUtils.isNotEmpty(datum.getPhone()) ? datum.getPhone().split(",")[0] : "");
+			stationInfo.setServiceTel(StringUtils.isNotEmpty(serviceTel) ? serviceTel.split(",")[0] : "");
 			switch (datum.getSiteType()){
 				case 0:
 					stationInfo.setStationType(StationTypeEnum.OTHER.getType());
@@ -324,7 +440,7 @@
 			stationInfo.setPictures(StringUtils.isNotEmpty(datum.getImgUrl()) ? Arrays.asList(datum.getImgUrl().split(",")) : new ArrayList<>());
 			stationInfo.setSiteGuide(datum.getGuide());
 			stationInfo.setMatchCars(datum.getVehicleDescription());
-			stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
+//			stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
 			stationInfo.setElectricityFee(datum.getRateDescription());
 			//添加停车费信息
 			Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst();
@@ -332,7 +448,6 @@
 				TParkingLot tParkingLot = first.get();
 				buildPlaceHolder(tParkingLot, stationInfo);
 			}
-			
 			//构建充电设备信息数据
 			stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
 			StationInfos.add(stationInfo);
@@ -379,6 +494,8 @@
 			equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
 			equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
 			equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
+			equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber());
+			equipmentInfo.setEquipmentClassification(tChargingPile.getEquipmentClassification());
 			if(null != tChargingPile.getProductionDate()){
 				equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
 			}
@@ -397,6 +514,12 @@
 					break;
 				case 4:
 					equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType());
+					break;
+				case 5:
+					equipmentInfo.setEquipmentType(EquipmentTypeEnum.ORDER.getType());
+					break;
+				case 6:
+					equipmentInfo.setEquipmentType(EquipmentTypeEnum.V2G.getType());
 					break;
 			}
 			
@@ -421,6 +544,14 @@
 			ConnectorInfo connectorInfo = new ConnectorInfo();
 			connectorInfo.setConnectorID(chargingGun.getFullNumber());
 			connectorInfo.setConnectorName(chargingGun.getName());
+			connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
+			connectorInfo.setConstantVoltageLowerLimits(chargingGun.getConstantVoltageLowerLimits());
+			connectorInfo.setConstantVoltageUpperLimits(chargingGun.getConstantVoltageUpperLimits());
+			connectorInfo.setConstantCurrentLowerLimits(chargingGun.getConstantCurrentLowerLimits());
+			connectorInfo.setConstantCurrentUpperLimits(chargingGun.getConstantCurrentUpperLimits());
+			connectorInfo.setAuxPower(chargingGun.getAuxPower());
+			connectorInfo.setOpreateStatus(chargingGun.getOpreateStatus());
+			connectorInfo.setOpreateHours(chargingGun.getOpreateHours());
 			switch (chargingGun.getType()){
 				case 0:
 					connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType());
@@ -441,8 +572,6 @@
 					connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType());
 					break;
 			}
-			connectorInfo.setVoltageUpperLimits(chargingGun.getUpperRatedVoltage().intValue());
-			connectorInfo.setVoltageLowerLimits(chargingGun.getLowerLimitOfRatedVoltage().intValue());
 			connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue());
 			connectorInfo.setPower(chargingGun.getRatedPower());
 			connectorInfo.setParkNo(chargingGun.getParkingNumber());
@@ -459,7 +588,7 @@
 	 * @return
 	 */
 	@PostMapping("/pushChargingGunStatus")
-	public R pushChargingGunStatus(@RequestParam("fullNumber") String fullNumber, @RequestParam("status") Integer status){
+	public R pushChargingGunStatus(@RequestParam(value = "fullNumber") String fullNumber, @RequestParam(value = "status") Integer status){
 		ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
 		connectorStatusInfo.setConnectorID(fullNumber);
 		switch (status){
@@ -1153,7 +1282,7 @@
 			}
 			chargeDetail.setElecPrice(datum.getElectrovalence());
 			chargeDetail.setSevicePrice(datum.getServiceCharge());
-			chargeDetail.setDetailPower(datum.getChargingCapacity());
+			chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
 			chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
 			chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
 			chargeDetails.add(chargeDetail);
@@ -1360,6 +1489,7 @@
 		notificationChargeOrderInfo.setStartChargeSeq(startChargeSeq);
 		TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData();
 		if(null == chargingOrder){
+			log.info("三方平台流水号获取订单失败");
 			return null;
 		}
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
@@ -1427,7 +1557,7 @@
 			}
 			chargeDetail.setElecPrice(datum.getElectrovalence());
 			chargeDetail.setSevicePrice(datum.getServiceCharge());
-			chargeDetail.setDetailPower(datum.getChargingCapacity());
+			chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
 			chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
 			chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
 			chargeDetails.add(chargeDetail);
@@ -1622,7 +1752,7 @@
 				}
 				chargeDetail.setElecPrice(datum.getElectrovalence());
 				chargeDetail.setSevicePrice(datum.getServiceCharge());
-				chargeDetail.setDetailPower(datum.getChargingCapacity());
+				chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_EVEN));
 				chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
 				chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
 				chargeDetails.add(chargeDetail);
@@ -1637,8 +1767,6 @@
 	
 	
 	/*********************数据监管平台接口*********************/
-	
-	
 	/**
 	 * 查询运营商信息
 	 * @param baseRequest
@@ -1647,19 +1775,8 @@
 	 */
 	@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());
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
 		log.info("监管平台查询充电站信息请求Data:" + decrypt);
 		SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class);
 		Integer pageNo = superviseQueryOperatorInfo.getPageNo();
@@ -1671,72 +1788,342 @@
 			pageSize = 50;
 		}
 		String operatorTel = systemConfigurationClient.getServerPhone().getData();
+		SuperviseQueryOperatorInfoResultPage superviseQueryOperatorInfoResultPage = new SuperviseQueryOperatorInfoResultPage();
+		superviseQueryOperatorInfoResultPage.setPageNo(1);
+		superviseQueryOperatorInfoResultPage.setPageCount(1);
+		superviseQueryOperatorInfoResultPage.setItemSize(1);
+
 		SuperviseQueryOperatorInfoResult superviseQueryOperatorInfoResult = new SuperviseQueryOperatorInfoResult();
 		superviseQueryOperatorInfoResult.setOperatorID("906171535");
 		superviseQueryOperatorInfoResult.setOperatorUSCID("91510903906171535D");
 		superviseQueryOperatorInfoResult.setOperatorName("四川明星新能源科技有限公司");
 		superviseQueryOperatorInfoResult.setOperatorTel1(operatorTel);
-		
-		//参数加密
-		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));
+		List<SuperviseQueryOperatorInfoResult> superviseQueryOperatorInfoResults = new ArrayList<>();
+		superviseQueryOperatorInfoResults.add(superviseQueryOperatorInfoResult);
+		// 将superviseQueryOperatorInfoResults转化为json数组
+		superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults);
+		String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage);
+		String timeStamp = System.currentTimeMillis() + "";
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+		String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage));
+		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+		BaseResult baseResult = new BaseResult();
+		baseResult.setData(data);
+		baseResult.setSig(hmacMD5);
+		baseResult.setRet(0);
+		baseResult.setMsg("OK");
+		baseResult.setOperatorID(OperatorID);
 		return baseResult;
 	}
+
+
 	
-	
-	
-//	/**
-//	 * 查询充电站信息
-//	 * @param baseRequest
-//	 * @param request
-//	 * @return
-//	 */
-//	@PostMapping("/supervise_query_stations_info")
-//	public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
-//		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 baseRequest
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/supervise_query_stations_info")
+	public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
+		log.info("监管平台supervise_query_stations_infoData:" + decrypt);
+		//解密参数
+		QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class);
+		Integer pageNo = queryStationsInfo.getPageNo();
+		Integer pageSize = queryStationsInfo.getPageSize();
+		List<String> stationIDs = queryStationsInfo.getStationIDs();
+		if(null == pageNo){
+			pageNo = 1;
+		}
+		if(null == pageSize){
+			pageSize = 50;
+		}
+		PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs);
+		List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
+		QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
+		queryStationsInfoResult.setPageNo(pageNo);
+		queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
+		queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
+		queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
+		String timeStamp = System.currentTimeMillis() + "";
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+		String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult));
+		String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
+		BaseResult baseResult = new BaseResult();
+		baseResult.setData(data);
+		baseResult.setSig(hmacMD5);
+		baseResult.setRet(0);
+		baseResult.setMsg("OK");
+		baseResult.setOperatorID(OurOperatorID);
+		return baseResult;
+	}
+	/**
+	 * 查询充换电站状态信息
+	 * @param baseRequest
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/supervise_query_station_status")
+	public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+		log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest));
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
+		log.info("监管平台supervise_query_station_statusData:" + decrypt);
+		//解密参数
+		log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
+		QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
+		List<String> stationIDs = queryStationStatus.getStationIDs();
+		String operatorID = queryStationStatus.getOperatorID();
+
+		List<Integer> stationIDList = new ArrayList<>();
+		for (String stationID : stationIDs) {
+			stationIDList.add(Integer.valueOf(stationID));
+		}
+
+		QueryStationStatusResult queryStationStatusResult = new QueryStationStatusResult();
+		List<StationStatusInfo> stationStatusInfos = new ArrayList<>();
+
+		// 查询站点下的桩信息状态
+		List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
+		if(!CollectionUtils.isEmpty(chargingPiles)){
+			List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
+			List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
+			if(!CollectionUtils.isEmpty(chargingGuns)){
+				for (Integer stationID : stationIDList) {
+					StationStatusInfo stationStatusInfo = new StationStatusInfo();
+					stationStatusInfo.setOperatorID(operatorID);
+					stationStatusInfo.setEquipmentOwnerID(operatorId);
+					stationStatusInfo.setStationID(String.valueOf(stationID));
+					List<ConnectorStatusInfo> connectorStatusInfos = new ArrayList<>();
+					for (TChargingGun chargingGun : chargingGuns) {
+						ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
+						connectorStatusInfo.setOperatorID(operatorId);
+						connectorStatusInfo.setEquipmentOwnerID(operatorId);
+						connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
+						connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
+						connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
+						connectorStatusInfo.setEquipmentClassification(1);
+						switch (chargingGun.getStatus()){
+							case 1:
+								connectorStatusInfo.setStatus(0);
+								break;
+							case 2:
+								connectorStatusInfo.setStatus(1);
+								break;
+							case 3:
+								connectorStatusInfo.setStatus(2);
+								break;
+							case 4:
+								connectorStatusInfo.setStatus(3);
+								break;
+							case 5:
+								connectorStatusInfo.setStatus(3);
+								break;
+							case 6:
+								connectorStatusInfo.setStatus(4);
+								break;
+							case 7:
+								connectorStatusInfo.setStatus(255);
+								break;
+						}
+						connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+						connectorStatusInfos.add(connectorStatusInfo);
+					}
+					stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
+					stationStatusInfos.add(stationStatusInfo);
+				}
+			}
+			queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
+		}
+		String timeStamp = System.currentTimeMillis() + "";
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+		String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult));
+		String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
+		BaseResult baseResult = new BaseResult();
+		baseResult.setData(data);
+		baseResult.setSig(hmacMD5);
+		baseResult.setRet(0);
+		baseResult.setMsg("OK");
+		baseResult.setOperatorID(OurOperatorID);
+		return baseResult;
+	}
+
+	// 测试环境
+	private static final String OperatorID = "MA01H3BQ2";
+	private static final String OperatorSecret = "f1331ef0b37c2d1b";
+	private static final String SigSecret = "a6fedf0e1b27d6f7";
+	private static final String DataSecret = "50a61b93919c9604";
+	private static final String DataSecretIV = "7c8ac6861661d584";
+
+	private static final String OurDataSecret = "50a61b93919c9605";
+	private static final String OurDataSecretIV = "7c8ac6861661d585";
+	private static final String OurSigSecret = "a6fedf0e1b27d6f6";
+	private static final String OurOperatorID = "MA01H3BQ3";
+	private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
+
+
+
+
+	/**
+	 * 推送充电设备接口状态信息
+	 * @param chargingGun
+	 * @return
+	 */
+	public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
+		ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
+		connectorStatusInfo.setOperatorID(operatorId);
+		connectorStatusInfo.setEquipmentOwnerID(operatorId);
+		connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
+		connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
+		connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
+		connectorStatusInfo.setEquipmentClassification(1);
+		switch (chargingGun.getStatus()){
+			case 1:
+				connectorStatusInfo.setStatus(0);
+				break;
+			case 2:
+				connectorStatusInfo.setStatus(1);
+				break;
+			case 3:
+				connectorStatusInfo.setStatus(2);
+				break;
+			case 4:
+				connectorStatusInfo.setStatus(3);
+				break;
+			case 5:
+				connectorStatusInfo.setStatus(3);
+				break;
+			case 6:
+				connectorStatusInfo.setStatus(4);
+				break;
+			case 7:
+				connectorStatusInfo.setStatus(255);
+				break;
+		}
+		connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		List<Operator> operators = operatorClient.getAllOperator().getData();
+		for (Operator operator : operators) {
+			tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo);
+		}
+		return R.ok();
+	}
+	/**
+	 * 推送充电状态信息
+	 * @param chargingOrder
+	 * @return
+	 */
+	public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){
+		SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
+		supEquipChargeStatus.setOperatorID(operatorId);
+		supEquipChargeStatus.setEquipmentOwnerID(operatorId);
+		supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
+		supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+		supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
+		switch (chargingOrder.getStatus()){
+			case 2:
+				supEquipChargeStatus.setConnectorStatus(1);
+				break;
+			case 3:
+				supEquipChargeStatus.setConnectorStatus(2);
+				break;
+			case 4:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 5:
+				supEquipChargeStatus.setConnectorStatus(4);
+				break;
+		}
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber());
+		supEquipChargeStatus.setEquipmentClassification(1);
+		supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		switch (chargingGun.getStatus()){
+			case 1:
+				supEquipChargeStatus.setConnectorStatus(0);
+				break;
+			case 2:
+				supEquipChargeStatus.setConnectorStatus(1);
+				break;
+			case 3:
+				supEquipChargeStatus.setConnectorStatus(2);
+				break;
+			case 4:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 5:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 6:
+				supEquipChargeStatus.setConnectorStatus(4);
+				break;
+			case 7:
+				supEquipChargeStatus.setConnectorStatus(255);
+				break;
+		}
+		supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
+		supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
+		supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
+		List<Operator> operators = operatorClient.getAllOperator().getData();
+		for (Operator operator : operators) {
+			tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
+		}
+		return R.ok();
+	}
+	/**
+	 * 推送充电订单信息
+	 * @param chargingOrder
+	 * @return
+	 */
+	public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
+		SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
+		supChargeOrderInfo.setOperatorID(operatorId);
+		supChargeOrderInfo.setEquipmentOwnerID(operatorId);
+		supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
+		supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+		supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
+		supChargeOrderInfo.setEquipmentClassification(1);
+		supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence());
+		supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
+		supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge());
+		supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount());
+		switch (chargingOrder.getEndMode()){
+			case 0:
+				supChargeOrderInfo.setStopReason(5);
+				supChargeOrderInfo.setStopDesc("异常终止");
+				break;
+			case 1:
+				supChargeOrderInfo.setStopReason(0);
+				supChargeOrderInfo.setStopDesc("用户手动停止充电");
+				break;
+			case 2:
+				supChargeOrderInfo.setStopReason(1);
+				supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电");
+				break;
+			case 3:
+				supChargeOrderInfo.setStopReason(1);
+				supChargeOrderInfo.setStopDesc("费用不足中止");
+				break;
+		}
+
+		List<Operator> operators = operatorClient.getAllOperator().getData();
+		for (Operator operator : operators) {
+			tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
+		}
+		return R.ok();
+	}
+
+
+
 //
 //
 //	/**

--
Gitblit v1.7.1