无关风月
2025-02-17 dfd423f90894d24081e7d7da08d09498898ee9c2
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -8,10 +8,12 @@
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil;
import com.ruoyi.integration.drainage.kuaidian.model.*;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
@@ -20,6 +22,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.other.api.feignClient.SystemConfigurationClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
@@ -32,9 +35,7 @@
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;
/**
@@ -68,6 +69,9 @@
   private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient;
   
   @Resource
   private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
   @Resource
   private TokenUtil tokenUtil;
   @Resource
@@ -75,6 +79,9 @@
   
   @Resource
   private ParkingRecordClient parkingRecordClient;
   @Resource
   private SystemConfigurationClient systemConfigurationClient;
   
   
   
@@ -265,7 +272,7 @@
      List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
      List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
      List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
      String serviceTel = systemConfigurationClient.getServerPhone().getData();
      List<StationInfo> StationInfos = new ArrayList<>();
      for (Site datum : sites) {
         StationInfo stationInfo = new StationInfo();
@@ -273,11 +280,11 @@
         stationInfo.setOperatorID("906171535");
         stationInfo.setEquipmentOwnerID("906171535");
         stationInfo.setStationName(datum.getName());
         stationInfo.setCountryCode(datum.getCountryCode());
         stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
         stationInfo.setAreaCode(datum.getDistrictsCode());
         stationInfo.setAddress(datum.getAddress());
         stationInfo.setStationTel(datum.getPhone());
         stationInfo.setServiceTel(datum.getServicePhone());
         stationInfo.setServiceTel(serviceTel);
         switch (datum.getSiteType()){
            case 0:
               stationInfo.setStationType(StationTypeEnum.OTHER.getType());
@@ -395,6 +402,7 @@
         
         //构建设备接口信息
         equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
         equipmentInfo.setPower(tChargingPile.getRatedPower());
         equipmentInfos.add(equipmentInfo);
      }
      return equipmentInfos;
@@ -411,7 +419,7 @@
      List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
      for (TChargingGun chargingGun : collect) {
         ConnectorInfo connectorInfo = new ConnectorInfo();
         connectorInfo.setConnectorID(chargingGun.getId().toString());
         connectorInfo.setConnectorID(chargingGun.getFullNumber());
         connectorInfo.setConnectorName(chargingGun.getName());
         switch (chargingGun.getType()){
            case 0:
@@ -451,9 +459,9 @@
    * @return
    */
   @PostMapping("/pushChargingGunStatus")
   public R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status){
   public R pushChargingGunStatus(@RequestParam("fullNumber") String fullNumber, @RequestParam("status") Integer status){
      ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
      connectorStatusInfo.setConnectorID(id.toString());
      connectorStatusInfo.setConnectorID(fullNumber);
      switch (status){
         case 1:
            connectorStatusInfo.setStatus(0);
@@ -477,6 +485,9 @@
            connectorStatusInfo.setStatus(255);
            break;
      }
      ConnectorStatusInfo connectorStatusInfo1 = new ConnectorStatusInfo();
      BeanUtils.copyProperties(connectorStatusInfo, connectorStatusInfo1);
      connectorStatusInfo.setConnectorStatusInfo(connectorStatusInfo1);
      List<Operator> operators = operatorClient.getAllOperator().getData();
      for (Operator operator : operators) {
         TCECUtil.notificationStationStatus(operator, connectorStatusInfo);
@@ -524,7 +535,7 @@
         List<TChargingGun> collect2 = chargingGunList.stream().filter(s -> s.getSiteId().equals(datum.getId())).collect(Collectors.toList());
         for (TChargingGun chargingGun : collect2) {
            ConnectorStatusInfo info = new ConnectorStatusInfo();
            info.setConnectorID(chargingGun.getId().toString());
            info.setConnectorID(chargingGun.getFullNumber());
            switch (chargingGun.getStatus()){
               case 1:
                  info.setStatus(0);
@@ -620,8 +631,9 @@
            List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
            BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
            
            TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
            ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
            connectorStatsInfo.setConnectorID(integer1.toString());
            connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
            connectorStatsInfo.setConnectorElectricity(reduce2);
            ConnectorStatsInfos.add(connectorStatsInfo);
         }
@@ -663,7 +675,7 @@
      log.info("三方平台设备认证请求Data:" + decrypt);
      QueryEquipAuth queryEquipAuth = JSON.parseObject(decrypt, QueryEquipAuth.class);
      String connectorID = queryEquipAuth.getConnectorID();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
      if(null == tChargingGun){
         baseResult.setRet(4004);
         baseResult.setMsg("connectorID 参数无效");
@@ -745,7 +757,7 @@
      queryEquipBusinessPolicyResult.setSuccStat(0);
      queryEquipBusinessPolicyResult.setFailReason(0);
      String connectorID = queryEquipBusinessPolicy.getConnectorID();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
      if(null == tChargingGun){
         baseResult.setRet(4004);
         baseResult.setMsg("connectorID 参数无效");
@@ -868,7 +880,7 @@
      result.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
      result.setConnectorID(queryStartCharge.getConnectorID());
      String connectorID = queryStartCharge.getConnectorID();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
      TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
      //设备不存在
      if(null == tChargingGun){
         baseResult.setRet(4004);
@@ -904,7 +916,7 @@
      addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
      addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId());
      addTripartitePlatformOrder.setOperatorId(operator.getOperatorId());
      addTripartitePlatformOrder.setPaymentAmount(queryStartCharge.getChargingAmt());
      addTripartitePlatformOrder.setPaymentAmount(null == queryStartCharge.getChargingAmt() ? new BigDecimal(9999) : queryStartCharge.getChargingAmt());
      addTripartitePlatformOrder.setRechargePaymentType(0);
      addTripartitePlatformOrder.setPlateNum(queryStartCharge.getPlateNum());
      R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder);
@@ -932,6 +944,27 @@
      baseResult.setData(encrypt);
      baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
      log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
      //定义定时任务推送订单状态
      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
      Runnable task = new Runnable() {
         @Override
         public void run() {
            try {
               TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(result.getStartChargeSeq()).getData();
               if(chargingOrder.getStatus() != 3){
                  scheduler.shutdown();
                  return;
               }
               log.info("开始执行三方平台定时推送");
               notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
            }catch (Exception e){
               e.printStackTrace();
            }
         }
      };
      //一分钟执行一次
      scheduler.scheduleAtFixedRate(task, 10, 10, TimeUnit.SECONDS);
      return baseResult;
   }
   
@@ -1049,8 +1082,8 @@
            queryEquipChargeStatusResult.setStartChargeSeqStat(4);
            break;
      }
      queryEquipChargeStatusResult.setConnectorID(chargingOrder.getChargingGunId().toString());
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      queryEquipChargeStatusResult.setConnectorID(chargingGun.getFullNumber());
      //1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障
      switch (chargingGun.getStatus()){
         case 1:
@@ -1077,20 +1110,30 @@
      }
      queryEquipChargeStatusResult.setCurrentA(chargingOrder.getCurrent());
      queryEquipChargeStatusResult.setVoltageA(chargingOrder.getVoltage());
      queryEquipChargeStatusResult.setSoc(chargingOrder.getTotalElectricity());
      UploadRealTimeMonitoringData timeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
      queryEquipChargeStatusResult.setSoc(null == timeMonitoringData ? BigDecimal.ZERO : new BigDecimal(timeMonitoringData.getSoc()));
      queryEquipChargeStatusResult.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      queryEquipChargeStatusResult.setTotalPower(chargingOrder.getElectricity());
      queryEquipChargeStatusResult.setElecMoney(chargingOrder.getTotalElectricity());
      queryEquipChargeStatusResult.setSeviceMoney(chargingOrder.getServiceCharge());
      queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
      List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
      if(data.size() > 0){
         BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         queryEquipChargeStatusResult.setElecMoney(totalElectricity);
         queryEquipChargeStatusResult.setSeviceMoney(serviceCharge);
         queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount());
      }else{
         queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
         queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
         queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
      }
      
      //构建充电明细
      List<ChargeDetail> chargeDetails = new ArrayList<>();
      List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
      
      LocalDateTime startTime = chargingOrder.getStartTime();
      LocalDateTime endTime = chargingOrder.getEndTime();
      LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime();
      LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime();
      String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
      String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
      for (TChargingOrderAccountingStrategy datum : data) {
@@ -1126,7 +1169,7 @@
    * @return
    */
   @PostMapping("/notificationEquipChargeStatus")
   public R notificationEquipChargeStatus(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){
   public R notificationEquipChargeStatus(@RequestParam(value = "startChargeSeq") String startChargeSeq, @RequestParam(value = "operatorId") Integer operatorId){
      QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(startChargeSeq);
      Operator operator = operatorClient.getOperatorById(operatorId).getData();
      NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult);
@@ -1319,14 +1362,26 @@
      if(null == chargingOrder){
         return null;
      }
      notificationChargeOrderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
      notificationChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
      notificationChargeOrderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      notificationChargeOrderInfo.setEndTime((null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      notificationChargeOrderInfo.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      notificationChargeOrderInfo.setTotalPower(chargingOrder.getElectricity());
      notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getTotalElectricity());
      notificationChargeOrderInfo.setTotalSeviceMoney(chargingOrder.getServiceCharge());
      notificationChargeOrderInfo.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
      notificationChargeOrderInfo.setTotalDelayMoney(BigDecimal.ZERO);
      List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
      if(data.size() > 0){
         BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         notificationChargeOrderInfo.setTotalElecMoney(totalElectricity.setScale(2, RoundingMode.HALF_EVEN));
         notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge.setScale(2, RoundingMode.HALF_EVEN));
         notificationChargeOrderInfo.setTotalMoney(chargingOrder.getPaymentAmount());
      }else{
         notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
         notificationChargeOrderInfo.setTotalSeviceMoney(BigDecimal.ZERO);
         notificationChargeOrderInfo.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
      }
      TParkingRecord parkingRecord = parkingRecordClient.getParkingRecordByChargingOrderId(chargingOrder.getId()).getData();
      if(null != parkingRecord && parkingRecord.getStatus() == 3){
         notificationChargeOrderInfo.setTotalDelayMoney(parkingRecord.getPayment());
@@ -1350,10 +1405,9 @@
      
      //构建充电明细
      List<ChargeDetail> chargeDetails = new ArrayList<>();
      List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
      
      LocalDateTime startTime = chargingOrder.getStartTime();
      LocalDateTime endTime = chargingOrder.getEndTime();
      LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime();
      LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime();
      String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
      String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
      for (TChargingOrderAccountingStrategy datum : data) {
@@ -1408,8 +1462,11 @@
      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();
      queryTerminalCodeResult.setTerminalCode(substring);
      if(null != chargingGun){
         queryTerminalCodeResult.setTerminalCode(chargingGun.getId().toString());
      }
      
      //参数加密
      String jsonString = JacksonUtils.toJson(queryTerminalCodeResult);
@@ -1515,11 +1572,12 @@
         if(null == chargingOrder){
            return null;
         }
         TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
         OrderInfo orderInfo = new OrderInfo();
         orderInfo.setStartChargeSeq(chargingOrder.getStartChargeSeq());
         orderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
         orderInfo.setConnectorID(chargingGun.getFullNumber());
         orderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         orderInfo.setEndTime((null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).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());
@@ -1544,7 +1602,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) {