zhibing.pu
2024-08-28 f08a70b0a1e2cd49075c5d5d3f63d07d0b56cef9
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -21,6 +21,10 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
import com.ruoyi.integration.api.model.ChargingHandshake;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
import com.ruoyi.order.api.query.ChargingOrderQuery;
@@ -47,6 +51,7 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
@@ -91,6 +96,15 @@
   
   @Resource
   private RedisService redisService;
   @Resource
   private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
   @Resource
   private ChargingHandshakeClient chargingHandshakeClient;
   /**
    * 获取小程序充电记录列表数据
@@ -164,11 +178,39 @@
                  .orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
      );
      myChargingOrderInfo.setStageCost(stageCost);
      // todo 待完善
      //再MongoDB中获取数据
      myChargingOrderInfo.setCurrentAndVoltage(null);
      //再MongoDB中获取数据
      myChargingOrderInfo.setPower(null);
      List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
      if(null != dataList){
         //在MongoDB中获取数据
         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
         List<String> time = dataList.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList());
         List<BigDecimal> outputVoltage = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList());
         List<BigDecimal> outputCurrent = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList());
         List<Map<String, Object>> currentAndVoltage = new ArrayList<>();
         for (int i = 0; i < time.size(); i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("time", time.get(i));
            //电流
            map.put("electricity", outputCurrent.get(i));
            //电压
            map.put("voltage", outputVoltage.get(i));
            currentAndVoltage.add(map);
         }
         myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
         //在MongoDB中获取数据
         List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
         List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000))).collect(Collectors.toList());
         List<Map<String, Object>> power = new ArrayList<>();
         for (int i = 0; i < time.size(); i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("time", time.get(i));
            //soc
            map.put("soc", soc.get(i));
            //功率
            map.put("power", po.get(i));
            power.add(map);
         }
         myChargingOrderInfo.setPower(power);
      }
      myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
      return myChargingOrderInfo;
   }
@@ -391,7 +433,6 @@
      if(null == one){
         return null;
      }
      // todo 需要完善充电实时数据
      ChargingDetails chargingDetails = new ChargingDetails();
      chargingDetails.setId(one.getId().toString());
      TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
@@ -400,6 +441,27 @@
      chargingDetails.setName(site.getName() + "-" + chargingPile.getName());
      chargingDetails.setCode(one.getCode());
      chargingDetails.setStatus(one.getStatus());
      UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
      if(null != data){
         chargingDetails.setChargeCurrent(data.getOutput_current());
         chargingDetails.setChargeVoltage(data.getOutput_voltage());
         BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000));
         chargingDetails.setChargePower(power);
         chargingDetails.setCompletionRatio(data.getSoc());
         chargingDetails.setRemainingChargeTime(data.getTime_remaining());
         chargingDetails.setChargedDegrees(data.getCharging_degree());
         chargingDetails.setChargedTime(data.getCumulative_charging_time());
         chargingDetails.setChargingCost(data.getPaid_amount());
      }
      ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
      if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
         BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
         TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
         //   续航 = 电池容量 / 续航里程 * soc
         BigDecimal divide = bms_battery_capacity.divide(new BigDecimal(appUserCar.getEndurance()));
         BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(divide);
         chargingDetails.setEndurance(multiply);
      }
      return chargingDetails;
   }
   
@@ -445,14 +507,16 @@
         endTime1 = split[0];
         endTime2 = split[1];
      }
      PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      if (StringUtils.hasLength(dto.getPhone())){
         List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
         if (data.isEmpty()){
            data.add(0L);
            tCharingOrderVO.setList(pageInfo);
            return tCharingOrderVO;
         }
         dto.setUserIds(data);
      }
      PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
       BigDecimal total = new BigDecimal("0");
       long time = 0L;