Pu Zhibing
2025-04-16 7cb8a6506062d0489dcd601a375f9dc89cbf6b4a
ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -1,15 +1,42 @@
package com.ruoyi.integration;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.barrierGate.model.CloudParkingOrder;
import com.ruoyi.integration.barrierGate.server.ParkingOrderService;
import com.ruoyi.integration.drainage.TCECSuperviseUtil;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.other.api.domain.Operator;
import com.ruoyi.other.api.feignClient.OperatorClient;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cglib.core.Local;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiIntegrationApplication.class)
public class RuoYiIntegrationApplicationTests {
@@ -18,10 +45,341 @@
   
   @Resource
   private ParkingOrderService parkingOrderService;
   @Resource
   private SiteClient siteClient;
   @Resource
   private ChargingGunClient chargingGunClient;
   @Resource
   private ChargingOrderClient chargingOrderClient;
   @Resource
   private OperatorClient operatorClient;
   @Test
   public void test(){
      String json = "{\"appkey\":\"842ae0c027e64b3590af9eea6\",\"enterChannel\":\"001\",\"enterChannelName\":\"进口\",\"enterDateTime\":\"2024-11-01T11:25:15.677Z\",\"id\":\"17B51DA0983C11EFA99CA979A8A8386B\",\"kind\":\"临时卡\",\"name\":\"临时识别\",\"plate\":\"川JD34056\",\"plateColor\":\"绿色\",\"sign\":\"29A902820C2657C51FBE90235152534F\"}";
      CloudParkingOrder order = JSON.parseObject(json, CloudParkingOrder.class);
      parkingOrderService.cloudParkingInOrder(order);
      /**
       * 推送充电设备接口状态信息
       * @param chargingGun
       * @return
       */
      List<TChargingGun> data = chargingGunClient.getAllGun().getData();
      TChargingGun chargingGun = data.stream().filter(e -> e.getId() == 61).findFirst().orElse(new TChargingGun());
      ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
         connectorStatusInfo.setOperatorID("906171535");
         connectorStatusInfo.setEquipmentOwnerID("906171535");
         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(new Operator(), connectorStatusInfo);
//         }
   }
   @Autowired
   private TCECSuperviseUtil tcecSuperviseUtil;
   private final static String operatorId = "906171535";
   @Test
   public void test1(){
      TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData();
      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(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1"));
      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());
      tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus);
   }
   @Test
   public void test2(){
      TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData();
      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());
      supChargeOrderInfo.setOrderStatus(chargingOrder.getStatus());
      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;
      }
      tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo);
   }
   @Test
   public void test3(){
      StationStatsInfoResult res = new StationStatsInfoResult();
      List<Site> data = siteClient.getSiteAll().getData();
      LocalDateTime now = LocalDateTime.now();
      LocalDateTime startLocalDateTime = now.minusDays(1);
      LocalDateTime endLocalDateTime = now.minusDays(1);
      LocalDateTime localDateTime1 = LocalDateTime.of(2025, 2, 3, 0, 0, 0);
      LocalDateTime localDateTime2 = LocalDateTime.of(2025, 2, 3, 23, 59, 59);
      // 获取今天凌晨
      startLocalDateTime.withHour(0);
      startLocalDateTime.withMinute(0);
      startLocalDateTime.withSecond(0);
      startLocalDateTime.withMonth(1);
      startLocalDateTime.withDayOfMonth(28);
      String start = DateUtils.localDateTimeToString(startLocalDateTime);
      endLocalDateTime.withHour(23);
      endLocalDateTime.withMinute(59);
      endLocalDateTime.withSecond(59);
      startLocalDateTime.withMonth(1);
      startLocalDateTime.withDayOfMonth(28);
      String end = DateUtils.localDateTimeToString(endLocalDateTime);
      ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
      chargingStatisticeDTO.setStartTime(localDateTime1);
      chargingStatisticeDTO.setEndTime(localDateTime2);
      List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
      List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
      String start1 = DateUtils.localDateTimeToString(localDateTime1);
      String start2 = DateUtils.localDateTimeToString(localDateTime2);
      for (Site datum : data) {
         StationStatsInfo stationStatsInfo = new StationStatsInfo();
         stationStatsInfo.setStationID(datum.getId().toString());
         stationStatsInfo.setEquipmentOwnerID("906171535");
         stationStatsInfo.setOperatorID("906171535");
         stationStatsInfo.setStationClassification(1);
         stationStatsInfo.setStartTime(start1);
         stationStatsInfo.setEndTime(start2);
         List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList());
         // 充电电量
         BigDecimal electricity = new BigDecimal("0");
         int chargingCount = 0;
         for (TChargingOrder chargingOrder : chargingOrders) {
            if (chargingOrder.getElectricity()!=null){
               electricity = electricity.add(chargingOrder.getElectricity());
               chargingCount++;
            }
         }
         stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24"),4, BigDecimal.ROUND_DOWN));
         stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN));
         stationStatsInfo.setStationTotalWarningNum(0);
         stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0"));
         stationStatsInfo.setStationTotalChargeNum(chargingCount);
         //构建设备统计数据
         List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
         Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
         for (Integer integer : collect.keySet()) {
            List<TChargingOrder> tChargingOrders = collect.get(integer);
            BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
            EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
            equipmentStatsInfo.setEquipmentClassification(1);
            long chargingTime = 0L;
            for (TChargingOrder tChargingOrder : tChargingOrders) {
               // 累加充电时长
               LocalDateTime startTime = tChargingOrder.getStartTime();
               LocalDateTime endTime = tChargingOrder.getEndTime();
               // 计算时间差 单位分钟
               chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
            }
            equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime);
            equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size());
            equipmentStatsInfo.setEquipmentTotalWarningNum(0);
            equipmentStatsInfo.setEquipmentID(integer.toString());
            equipmentStatsInfo.setEquipmentElectricity(reduce1);
            //构建设备接口统计数据
            Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
            List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
            for (Integer integer1 : collect2.keySet()) {
               List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
               BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
               long chargingTime1 = 0L;
               for (TChargingOrder chargingOrder : tChargingOrders1) {
                  // 累加充电时长
                  LocalDateTime startTime = chargingOrder.getStartTime();
                  LocalDateTime endTime = chargingOrder.getEndTime();
                  // 计算时间差 单位分钟
                  chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
               }
               TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
               ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
               connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
               connectorStatsInfo.setConnectorElectricity(reduce2);
               connectorStatsInfo.setConnectorTotalChargeTime(Integer.valueOf(chargingTime+""));
               connectorStatsInfo.setConnectorTotalChargeNum(tChargingOrders1.size());
               connectorStatsInfo.setConnectorTotalWarningNum(0);
               ConnectorStatsInfos.add(connectorStatsInfo);
            }
            equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
            EquipmentStatsInfos.add(equipmentStatsInfo);
         }
         stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
         stationStatsInfos.add(stationStatsInfo);
      }
      res.setStationStatsInfos(stationStatsInfos);
      tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
   }
   @Resource
   private ChargingPileClient chargingPileClient;
   @Test
   public void test4(){
      List<Site> data = siteClient.getSiteAll().getData();
      List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
      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();
      SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
      List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
      LocalDateTime now = LocalDateTime.of(2025, 2, 3, 23, 30, 0);
      LocalDateTime startLocalDateTime = LocalDateTime.of(2025, 2, 3, 20, 0, 0);
      ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
      chargingStatisticeDTO.setStartTime(startLocalDateTime);
      chargingStatisticeDTO.setEndTime(now);
      List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
      for (Site datum : data) {
         List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())
               &&e.getChargingPower()!=null).collect(Collectors.toList());
         SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
         supStationPowerInfo.setOperatorID("906171535");
         supStationPowerInfo.setEquipmentOwnerID("906171535");
         supStationPowerInfo.setStationID(datum.getId().toString());
         supStationPowerInfo.setStationClassification(1);
         supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
         if (collect.isEmpty()){
            supStationPowerInfo.setStationRealTimePower(new BigDecimal("0"));
         }else{
            BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal.ZERO,BigDecimal::add).divide(new BigDecimal(collect.size()),4,BigDecimal.ROUND_DOWN);
            supStationPowerInfo.setStationRealTimePower(divide);
         }
         supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList));
         stationStatsInfos.add(supStationPowerInfo);
      }
      supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos);
      tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
   }
   /**
    * 构建桩数据
    * @param tChargingPiles
    * @return
    */
   public List<SupEquipmentPowerInfo> buildEquipmentPowerInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){
      List<SupEquipmentPowerInfo> equipmentInfos = new ArrayList<>();
      List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList());
      for (TChargingPile tChargingPile : collect) {
         SupEquipmentPowerInfo equipmentInfo = new SupEquipmentPowerInfo();
         equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
         equipmentInfo.setEquipmentClassification(1);
         equipmentInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
         equipmentInfo.setEquipRealTimePower(tChargingPile.getRatedPower());
         //构建设备接口信息
         equipmentInfo.setConnectorPowerInfos(buildConnectorPowerInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
         equipmentInfos.add(equipmentInfo);
      }
      return equipmentInfos;
   }
   public List<SupConnectorPowerInfo> buildConnectorPowerInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
      List<SupConnectorPowerInfo> connectorInfos = new ArrayList<>();
      List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
      for (TChargingGun chargingGun : collect) {
         SupConnectorPowerInfo connectorInfo = new SupConnectorPowerInfo();
         connectorInfo.setConnectorID(chargingGun.getFullNumber());
         connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
         connectorInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
         connectorInfo.setConnectorRealTimePower(chargingGun.getChargingPower());
         connectorInfos.add(connectorInfo);
      }
      return connectorInfos;
   }
}