无关风月
2025-04-07 422b10242d0e1c3164eb96a10379b9d638b169ee
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
File was renamed from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java
@@ -1,26 +1,25 @@
package com.ruoyi.integration.drainage;
package com.ruoyi.integration.drainage.util;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
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.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.HttpUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.api.vo.StartChargeResult;
import com.ruoyi.integration.drainage.AESUtil;
import com.ruoyi.integration.drainage.TCECSuperviseUtil;
import com.ruoyi.integration.drainage.TCECUtil;
import com.ruoyi.integration.drainage.TokenUtil;
import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil;
import com.ruoyi.integration.drainage.kuaidian.model.*;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
@@ -32,16 +31,17 @@
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;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@@ -52,13 +52,12 @@
 */
@Slf4j
@RestController
@RequestMapping("/evcs/v1.0")
public class TCECController1 {
@RequestMapping("/evcs/v2.0")
public class TCECCJianGuanontroller {
   
   @Resource
   private SiteClient siteClient;
   @Autowired
   private TCECSuperviseUtil tcecSuperviseUtil;
   @Resource
   private ChargingPileClient chargingPileClient;
   
@@ -91,15 +90,9 @@
   
   @Resource
   private SystemConfigurationClient systemConfigurationClient;
   // 监管平台密钥 向量 地址
   private static String ourDataSecret = "";
   private static String ourDataSecretIv = "";
   private static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/";// 测试
//   private static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0/";// 正式
   private static String operatorSecret = "f1331ef0b37c2d1b";// 测试
//   private static String operatorSecret = "a762796b2a8989b8";// 正式
   @Autowired
   private TCECSuperviseUtil tcecSuperviseUtil;
   private final static String operatorId = "906171535";
   
   /**
    * 请求校验
@@ -115,19 +108,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("系统异常");
@@ -155,11 +151,36 @@
      }
      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;
   }
   
   
   
   
   
   /**
    * 获取token
    * @return
@@ -167,7 +188,7 @@
   @PostMapping("/query_token")
   public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
      log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
      BaseResult baseResult = requestCheck(false, baseRequest, request);
      BaseResult baseResult = requestCheckJianGuan(false, baseRequest, request);
      if(0 != baseResult.getRet()){
         log.info("三方平台获取token响应Data:");
         baseResult.setData("");
@@ -176,38 +197,8 @@
         return baseResult;
      }
      QueryTokenResult queryTokenResult = new QueryTokenResult();
      Operator operator = baseResult.getOperator();
      if(null == operator){
         queryTokenResult.setSuccStat(1);
         queryTokenResult.setFailReason(1);
         //参数加密
         String jsonString = JacksonUtils.toJson(queryTokenResult);
         log.info("三方平台获取token响应Data:" + jsonString);
         String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
         baseResult.setData(encrypt);
         baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
         log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
         return baseResult;
      }
      //解密参数
      String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
      log.info("三方平台获取token请求Data:" + decrypt);
      QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class);
      if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){
         queryTokenResult.setSuccStat(1);
         queryTokenResult.setFailReason(2);
         //参数加密
         String jsonString = JacksonUtils.toJson(queryTokenResult);
         log.info("三方平台获取token响应Data:" + jsonString);
         String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
         baseResult.setData(encrypt);
         baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
         log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
         return baseResult;
      }
      //生成token
      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());
@@ -220,9 +211,15 @@
      //参数加密
      String jsonString = JacksonUtils.toJson(queryTokenResult);
      log.info("三方平台获取token响应Data:" + jsonString);
      String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
      baseResult.setData(encrypt);
      baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
//      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;
   }
@@ -239,7 +236,7 @@
   public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
      log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
      //校验token和签名
      BaseResult baseResult = requestCheck(true, baseRequest, request);
      BaseResult baseResult = requestCheckJianGuan(true, baseRequest, request);
      if(0 != baseResult.getRet()){
         log.info("三方平台查询充电站信息响应Data:");
         baseResult.setData("");
@@ -292,12 +289,14 @@
      List<StationInfo> StationInfos = new ArrayList<>();
      for (Site datum : sites) {
         StationInfo stationInfo = new StationInfo();
         stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside());
         stationInfo.setStationUniqueNumber(datum.getCode());
         stationInfo.setAreaCodeCountryside(datum.getCountryCode());
         stationInfo.setStationClassification(datum.getStationClassification());
         stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType());
         if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){
            stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(",")));
         }
         stationInfo.setSiteGuide(datum.getGuide());
         stationInfo.setBusineHours(datum.getStartServiceTime());
         stationInfo.setRoundTheClock(datum.getRoundTheClock());
         stationInfo.setParkType(datum.getParkType());
@@ -431,6 +430,7 @@
         EquipmentInfo equipmentInfo = new EquipmentInfo();
         equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
         equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
         equipmentInfo.setEquipmentName(tChargingPile.getName());
         equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
         equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
         equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber());
@@ -1713,19 +1713,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();
@@ -1752,12 +1741,17 @@
      // 将superviseQueryOperatorInfoResults转化为json数组
      superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults);
      String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage);
      //参数加密
      log.info("监管平台查询充电站信息响应Data:" + jsonString);
      String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
      baseResult.setData(encrypt);
      baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
      log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
      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;
   }
@@ -1771,20 +1765,9 @@
    */
   @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(), OurDataSecret, OurDataSecretIV);
      log.info("监管平台supervise_query_stations_infoData:" + decrypt);
      //解密参数
      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();
@@ -1795,6 +1778,9 @@
      if(null == pageSize){
         pageSize = 50;
      }
      if(stationIDs==null){
         stationIDs = new ArrayList<String>();
      }
      PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs);
      List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
      QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
@@ -1802,18 +1788,416 @@
      queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
      queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
      queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
      //参数加密
      String jsonString = JacksonUtils.toJson(queryStationsInfoResult);
      log.info("监管平台查询充电站信息响应Data:" + jsonString);
      String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
      baseResult.setData(encrypt);
      baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
      log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
      for (StationInfo stationInfo : queryStationsInfoResult.getStationInfos()) {
         stationInfo.setStationClassification(stationInfo.getStationClassification()==null?1:stationInfo.getStationClassification());
         stationInfo.setGeneralApplicationType(stationInfo.getGeneralApplicationType()==null?1:stationInfo.getGeneralApplicationType());
         stationInfo.setSiteGuide(org.springframework.util.StringUtils.hasLength(stationInfo.getSiteGuide()) ?stationInfo.getSiteGuide():"站点引导");
         if (stationInfo.getConstruction()!=null){
            stationInfo.setConstruction(stationInfo.getConstruction() == 0 ? ConstructionEnum.OTHER.getType() : stationInfo.getConstruction());
         }else{
            stationInfo.setConstruction(255);
         }
         stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock());
         stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType());
         stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}");
         stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}");
         stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType());
         stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType());
         stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity());
         stationInfo.setRatedPower(stationInfo.getCapacity()==null?new BigDecimal("40.0000"):stationInfo.getCapacity());
         stationInfo.setPeriodFee(1);
         stationInfo.setOfficialRunTime(org.springframework.util.StringUtils.hasLength(stationInfo.getOfficialRunTime())?stationInfo.getOfficialRunTime():"2025-01-01");
         stationInfo.setVideoMonitor(stationInfo.getVideoMonitor()==null?1:stationInfo.getVideoMonitor());
         int i = 0;
         for (EquipmentInfo equipmentInfo : stationInfo.getEquipmentInfos()) {
            i++;
            equipmentInfo.setManufacturerID("906171534");
            equipmentInfo.setEquipmentUniqueNumber(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentUniqueNumber())?equipmentInfo.getEquipmentUniqueNumber():"OIX123"+i);
            equipmentInfo.setManufacturerName(org.springframework.util.StringUtils.hasLength(equipmentInfo.getManufacturerName())?equipmentInfo.getManufacturerName():"生产商");
            equipmentInfo.setEquipmentModel(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentModel())?equipmentInfo.getEquipmentModel():"DEVICE"+i);
            equipmentInfo.setProductionDate(org.springframework.util.StringUtils.hasLength(equipmentInfo.getProductionDate())?equipmentInfo.getProductionDate():"2024-01-01");
            equipmentInfo.setEquipmentType(equipmentInfo.getEquipmentType()==null?1:equipmentInfo.getEquipmentType());
            for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) {
               connectorInfo.setEquipmentClassification(connectorInfo.getEquipmentClassification()==null?1:connectorInfo.getEquipmentClassification());
               connectorInfo.setVoltageUpperLimits(connectorInfo.getConstantVoltageUpperLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageUpperLimits());
               connectorInfo.setVoltageLowerLimits(connectorInfo.getConstantVoltageLowerLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageLowerLimits());
               connectorInfo.setCurrent(connectorInfo.getCurrent()==null?1:connectorInfo.getCurrent());
               connectorInfo.setPower(connectorInfo.getPower()==null?new BigDecimal("1.0000"):connectorInfo.getPower());
               connectorInfo.setNationalStandard(connectorInfo.getNationalStandard()==null?1:connectorInfo.getNationalStandard());
               connectorInfo.setAuxPower(connectorInfo.getAuxPower()==null?1:connectorInfo.getAuxPower());
               connectorInfo.setOpreateStatus(connectorInfo.getOpreateStatus()==null?50:connectorInfo.getOpreateStatus());
            }
            equipmentInfo.setPower(equipmentInfo.getPower()==null?new BigDecimal("1.0000"):equipmentInfo.getPower());
            equipmentInfo.setEquipmentClassification(equipmentInfo.getEquipmentClassification()==null?1:equipmentInfo.getEquipmentClassification());
         }
         stationInfo.setEquipmentOwnerName("明星新能源");
         stationInfo.setResidentNo("A1234");
         stationInfo.setSupplyType(stationInfo.getSupplyType()==null?1:stationInfo.getSupplyType());
         stationInfo.setWattHourMeterNo(org.springframework.util.StringUtils.hasLength(stationInfo.getWattHourMeterNo())?stationInfo.getWattHourMeterNo():UUID.randomUUID().toString().replaceAll("-", ""));
         stationInfo.setForwardPower(stationInfo.getForwardPower()==null?"1.3654":stationInfo.getForwardPower());
         String uuid = UUID.randomUUID().toString();
         String randomString = uuid.replaceAll("-", ""); // 去除'-'
         stationInfo.setRecordUniqueNo(randomString);
      }
      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("906171535");
      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("906171535");
      return baseResult;
   }
   // 测试环境
   private static final String OperatorID = "MA01H3BQ2";
   private static final String OperatorSecret = "f1331ef0b37c2d1b";
   private static final String SigSecret = "a6fedf0e1b27d6f7";
   private static final String DataSecret = "50a61b93919c9604";
   private static final String DataSecretIV = "7c8ac6861661d584";
   private static final String OurDataSecret = "50a61b93919c9605";
   private static final String OurDataSecretIV = "7c8ac6861661d585";
   private static final String OurSigSecret = "a6fedf0e1b27d6f6";
   private static final String OurOperatorID = "MA01H3BQ3";
   private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
   /**
    * 推送充电设备接口状态信息
    * @param chargingGun
    * @return
    */
   public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
      ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
      connectorStatusInfo.setOperatorID(operatorId);
      connectorStatusInfo.setEquipmentOwnerID(operatorId);
      connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
      connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
      connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
      connectorStatusInfo.setEquipmentClassification(1);
      switch (chargingGun.getStatus()){
         case 1:
            connectorStatusInfo.setStatus(0);
            break;
         case 2:
            connectorStatusInfo.setStatus(1);
            break;
         case 3:
            connectorStatusInfo.setStatus(2);
            break;
         case 4:
            connectorStatusInfo.setStatus(3);
            break;
         case 5:
            connectorStatusInfo.setStatus(3);
            break;
         case 6:
            connectorStatusInfo.setStatus(4);
            break;
         case 7:
            connectorStatusInfo.setStatus(255);
            break;
      }
      connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo);
      }
      return R.ok();
   }
   /**
    * 推送充电状态信息
    * @param chargingOrder
    * @return
    */
   public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){
      SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
      supEquipChargeStatus.setOperatorID(operatorId);
      supEquipChargeStatus.setEquipmentOwnerID(operatorId);
      supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
      supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
      supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
      switch (chargingOrder.getStatus()){
         case 2:
            supEquipChargeStatus.setConnectorStatus(1);
            break;
         case 3:
            supEquipChargeStatus.setConnectorStatus(2);
            break;
         case 4:
            supEquipChargeStatus.setConnectorStatus(3);
            break;
         case 5:
            supEquipChargeStatus.setConnectorStatus(4);
            break;
      }
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber());
      supEquipChargeStatus.setEquipmentClassification(1);
      supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      switch (chargingGun.getStatus()){
         case 1:
            supEquipChargeStatus.setConnectorStatus(0);
            break;
         case 2:
            supEquipChargeStatus.setConnectorStatus(1);
            break;
         case 3:
            supEquipChargeStatus.setConnectorStatus(2);
            break;
         case 4:
            supEquipChargeStatus.setConnectorStatus(3);
            break;
         case 5:
            supEquipChargeStatus.setConnectorStatus(3);
            break;
         case 6:
            supEquipChargeStatus.setConnectorStatus(4);
            break;
         case 7:
            supEquipChargeStatus.setConnectorStatus(255);
            break;
      }
      supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
      supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
      supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
      supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
      }
      return R.ok();
   }
   /**
    * 推送充电订单信息
    * @param chargingOrder
    * @return
    */
   public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
      SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
      supChargeOrderInfo.setOperatorID(operatorId);
      supChargeOrderInfo.setEquipmentOwnerID(operatorId);
      supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
      supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
      supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
      supChargeOrderInfo.setEquipmentClassification(1);
      supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
      supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
      supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence());
      supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
      supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge());
      supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount());
      switch (chargingOrder.getEndMode()){
         case 0:
            supChargeOrderInfo.setStopReason(5);
            supChargeOrderInfo.setStopDesc("异常终止");
            break;
         case 1:
            supChargeOrderInfo.setStopReason(0);
            supChargeOrderInfo.setStopDesc("用户手动停止充电");
            break;
         case 2:
            supChargeOrderInfo.setStopReason(1);
            supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电");
            break;
         case 3:
            supChargeOrderInfo.setStopReason(1);
            supChargeOrderInfo.setStopDesc("费用不足中止");
            break;
      }
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
      }
      return R.ok();
   }
   /**
    * 推送充换电站信息
    * @param id
    * @return
    */
   @PostMapping("/supervise_notification_station_info")
   public R superviseNotificationStationInfo(@RequestParam("id") Integer id){
      String serviceTel = systemConfigurationClient.getServerPhone().getData();
      Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site());
      List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(site.getId())).getData();
      List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
      List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
      SupStationInfo supStationInfo = new SupStationInfo();
      supStationInfo.setStationID(site.getId().toString());
      supStationInfo.setStationUniqueNumber(site.getDistrictsCode() + "906171535" + site.getId());
      supStationInfo.setOperatorID("906171535");
      supStationInfo.setEquipmentOwnerID("906171535");
      supStationInfo.setStationName(site.getName());
      supStationInfo.setCountryCode(site.getCountryCode());
      supStationInfo.setAreaCode(site.getCityCode());
      supStationInfo.setAddress(site.getAddress());
      supStationInfo.setAreaCodeCountryside(site.getAreaCodeCountryside());
      supStationInfo.setStationTel(site.getPhone());
      supStationInfo.setServiceTel(serviceTel);
      supStationInfo.setStationClassification(site.getStationClassification());
      supStationInfo.setGeneralApplicationType(site.getGeneralApplicationType());
      supStationInfo.setStationType(site.getSiteType());
      supStationInfo.setStationStatus(site.getStatus());
      supStationInfo.setParkNums(site.getParkingSpace());
      supStationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.DOWN));
      supStationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.DOWN));
      supStationInfo.setSiteGuide(site.getGuide());
      supStationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite());
      supStationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>());
      supStationInfo.setMatchCars(site.getVehicleDescription());
      if (org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars())){
         supStationInfo.setSwapMatchCars(Arrays.asList(site.getSwapMatchCars().split(",")));
      }
      supStationInfo.setBusineHours(site.getStartServiceTime());
      supStationInfo.setRoundTheClock(site.getRoundTheClock());
      supStationInfo.setParkType(site.getParkType());
      supStationInfo.setParkFee("{\"rules\":"+site.getParkFee()+","+"\"freeDuration\":"+site.getParkFeeFree()+"}");
      supStationInfo.setElectricityType(site.getElectricityType());
      supStationInfo.setBusinessExpandType(site.getBusinessExpandType());
      supStationInfo.setCapacity(site.getCapacity());
      supStationInfo.setRatedPower(site.getRatedPower());
      supStationInfo.setPeriodFee(site.getPeriodFee());
      supStationInfo.setOfficialRunTime(site.getOfficialRunTime());
      supStationInfo.setStationOrientation(site.getStationOrientation());
      supStationInfo.setStationArea(site.getStationArea());
      supStationInfo.setHavePerson(site.getHavePerson());
      supStationInfo.setVideoMonitor(site.getVideoMonitor());
      if (StringUtils.isNotEmpty(site.getSupportingFacilities())){
         String[] split = site.getSupportingFacilities().split(",");
         List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
         supStationInfo.setSupportingFacilities(collect);
      }
      supStationInfo.setPrinterFlag(site.getPrinterFlag());
      supStationInfo.setBarrierFlag(site.getBarrierFlag());
      supStationInfo.setParkingLockFlag(site.getParkingLockFlag());
      supStationInfo.setEquipmentInfos(buildEquipmentInfo(site.getId(), tChargingPiles, chargingGunList));
//      supStationInfo.setSwapEquipmentInfos();
      supStationInfo.setElectricityFee("{"+site.getElectricityFee()+"}");
      supStationInfo.setEquipmentOwnerName(site.getEquipmentOwnerName());
      supStationInfo.setResidentNo(site.getResidentNo());
      supStationInfo.setSupplyType(site.getSupplyType());
      supStationInfo.setWattHourMeterNo(site.getWattHourMeterNo());
      supStationInfo.setForwardPower(site.getForwardPower());
      supStationInfo.setServiceFee("{"+site.getServiceFee()+"}");
      supStationInfo.setRecordUniqueNo(site.getRecordUniqueNo());
      BaseResult baseResult = new BaseResult();
      SupStationInfoResult supStationInfoResult = new SupStationInfoResult();
      supStationInfoResult.setSupStationInfo(supStationInfo);
      tcecSuperviseUtil.superviseNotificationStationInfo(supStationInfoResult);
      return R.ok(baseResult);
   }
//
//
//   /**