无关风月
2025-04-28 ee0e9aa82a0d952901b28ec58a2030d97f80f205
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,6 +29,7 @@
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.*;
@@ -84,7 +89,8 @@
   
   @Resource
   private SystemConfigurationClient systemConfigurationClient;
   @Autowired
   private TCECSuperviseUtil tcecSuperviseUtil;
   private final static String operatorId = "906171535";
   
   /**
@@ -101,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("系统异常");
@@ -137,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;
@@ -209,6 +242,48 @@
      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
    * @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;
   }
@@ -1699,19 +1774,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();
@@ -1738,12 +1802,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;
   }
@@ -1757,20 +1826,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();
@@ -1788,13 +1846,17 @@
      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));
      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;
   }
   /**
@@ -1806,18 +1868,9 @@
   @PostMapping("/supervise_query_station_status")
   public BaseResult superviseQueryStationStatus(@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_station_statusData:" + decrypt);
      //解密参数
      String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
      log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
      QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
      List<String> stationIDs = queryStationStatus.getStationIDs();
@@ -1840,13 +1893,13 @@
            for (Integer stationID : stationIDList) {
               StationStatusInfo stationStatusInfo = new StationStatusInfo();
               stationStatusInfo.setOperatorID(operatorID);
               stationStatusInfo.setEquipmentOwnerID("999999999");
               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("999999999");
                  connectorStatusInfo.setEquipmentOwnerID(operatorId);
                  connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
                  connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
                  connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
@@ -1883,15 +1936,34 @@
         }
         queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
      }
      //参数加密
      String jsonString = JacksonUtils.toJson(queryStationStatusResult);
      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(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";
   /**
@@ -1902,7 +1974,7 @@
   public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
      ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
      connectorStatusInfo.setOperatorID(operatorId);
      connectorStatusInfo.setEquipmentOwnerID("999999999");
      connectorStatusInfo.setEquipmentOwnerID(operatorId);
      connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
      connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
      connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
@@ -1933,7 +2005,7 @@
      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);
         tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo);
      }
      return R.ok();
   }
@@ -1945,7 +2017,7 @@
   public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){
      SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
      supEquipChargeStatus.setOperatorID(operatorId);
      supEquipChargeStatus.setEquipmentOwnerID("999999999");
      supEquipChargeStatus.setEquipmentOwnerID(operatorId);
      supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
      supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
      supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
@@ -1997,7 +2069,7 @@
      supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         TCECSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
         tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
      }
      return R.ok();
   }
@@ -2009,7 +2081,7 @@
   public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
      SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
      supChargeOrderInfo.setOperatorID(operatorId);
      supChargeOrderInfo.setEquipmentOwnerID("999999999");
      supChargeOrderInfo.setEquipmentOwnerID(operatorId);
      supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
      supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
      supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
@@ -2044,22 +2116,13 @@
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         TCECSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
         tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
      }
      return R.ok();
   }
   /**
    * 推送充换电站信息
    * @param site
    * @return
    */
   @PostMapping("/supervise_notification_station_info")
   public BaseResult superviseNotificationStationInfo(@RequestBody Site site){
      BaseResult baseResult = new BaseResult();
      return baseResult;
   }
//
//
//   /**