无关风月
2024-08-31 5ed829e38c34659c9fc9dc6eeb11d72aa19e2403
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -33,6 +33,8 @@
import com.ruoyi.order.api.model.TChargingOrderRefund;
import com.ruoyi.order.api.model.TOrderEvaluate;
import com.ruoyi.order.api.query.ChargingOrderQuery;
import com.ruoyi.order.api.vo.ChargingOrderListVO;
import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
import com.ruoyi.order.api.vo.ChargingOrderVO;
import com.ruoyi.order.api.vo.TCharingOrderVO;
import com.ruoyi.order.dto.*;
@@ -82,6 +84,10 @@
   private AppUserClient appUserClient;
   
   @Resource
   private ChargingPileClient chargingPileClient;
   @Resource
   private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
   
   @Resource
@@ -92,9 +98,6 @@
   
   @Resource
   private AliPaymentClient aliPaymentClient;
   @Resource
   private ChargingPileClient chargingPileClient;
   
   @Resource
@@ -569,6 +572,12 @@
       BigDecimal electronicMoney = new BigDecimal("0");
       BigDecimal serviceMoney = new BigDecimal("0");
      for (ChargingOrderVO chargingOrderVO : list) {
         TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
         TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
         if (data2!=null && data3!=null){
            chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
         }
         if (chargingOrderVO.getChargingCapacity()!=null){
            total = total.add(chargingOrderVO.getChargingCapacity());
         }
@@ -579,14 +588,8 @@
         BigDecimal electronicMoney1 = new BigDecimal("0");
         // 单个订单累计服务费
         BigDecimal serviceMoney1 = new BigDecimal("0");
         LocalDateTime startTime = chargingOrderVO.getStartTime();
         LocalDateTime endTime = chargingOrderVO.getEndTime();
         // 计算时间差 秒 充电时长
         if (startTime!=null && endTime!=null){
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            chargingOrderVO.setChargingSecond(between);
            time += between;
         }
         // todo 调用第三方获取充电时长 秒
         // 总收入
         if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){
            income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount()));
@@ -651,4 +654,166 @@
      return R.ok(pageInfo);
   }
   @Override
   public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
      String startTime1 = null;
      String startTime2 = null;
      String endTime1 = null;
      String endTime2 = null;
      if (StringUtils.hasLength(dto.getStartTime())){
         String[] split = dto.getStartTime().split(" - ");
         startTime1 = split[0];
         startTime2 = split[1];
      }
      if (StringUtils.hasLength(dto.getEndTime())){
         String[] split = dto.getEndTime().split(" - ");
         endTime1 = split[0];
         endTime2 = split[1];
      }
      ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
      PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      for (ChargingOrderListVO chargingOrderListVO : list) {
         List<Integer> integers = new ArrayList<>();
         integers.add(chargingOrderListVO.getSiteId());
         List<Site> data = siteClient.getSiteByIds(integers).getData();
         if (!data.isEmpty()) {
            chargingOrderListVO.setSiteName(data.get(0).getName());
         }
         TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrderListVO.getChargingGunId()).getData();
         TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderListVO.getChargingPileId()).getData();
         if (data2 != null && data1 != null) {
            chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
         }
         // todo 充电时长 调用第三方获取
         TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
         List<Long> carId = new ArrayList<>();
         if (chargingOrderListVO.getAppUserCarId() != null) {
            carId.add(chargingOrderListVO.getAppUserCarId());
            List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
            if (!data4.isEmpty()) chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
         }
         if (data3 != null) chargingOrderListVO.setPhone(data3.getPhone());
         List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
         // 尖峰平谷充电量 度数
         BigDecimal jian = new BigDecimal("0");
         BigDecimal feng = new BigDecimal("0");
         BigDecimal ping = new BigDecimal("0");
         BigDecimal gu = new BigDecimal("0");
         BigDecimal total = new BigDecimal("0");
         for (TChargingOrderAccountingStrategy temp : list2) {
            switch (temp.getType()) {
               case 1:
                  jian = jian.add(temp.getChargingCapacity());
                  break;
               case 2:
                  feng = feng.add(temp.getChargingCapacity());
                  break;
               case 3:
                  ping = ping.add(temp.getChargingCapacity());
                  break;
               case 4:
                  gu = gu.add(temp.getChargingCapacity());
                  break;
            }
         }
         total = total.add(jian).add(feng).add(ping).add(gu);
         chargingOrderListVO.setElectronicProportion(
               jian.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(尖)/"
               +feng.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(峰)/"
               +ping.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(平)/"
               +gu.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(谷)");
      }
      // 不分页
      List<ChargingOrderListVO> list1 = this.baseMapper.chargingList1(dto,startTime1,startTime2,endTime1,endTime2);
      chargingOrderTimeVO.setOrderCount(list1.size());
      // 计算充电总度数
      BigDecimal electronic = new BigDecimal("0");
      // 支付金额
      BigDecimal paymentAmount = new BigDecimal("0");
      // 电费
      BigDecimal electrovalence = new BigDecimal("0");
      // 服务费
      BigDecimal serviceCharge = new BigDecimal("0");
      // 尖峰平谷充电到账
      BigDecimal jianElectronic = new BigDecimal("0");
      BigDecimal fengElectronic = new BigDecimal("0");
      BigDecimal pingElectronic = new BigDecimal("0");
      BigDecimal guElectronic   = new BigDecimal("0");
      // 尖峰平谷服务费
      BigDecimal jianService = new BigDecimal("0");
      BigDecimal fengService = new BigDecimal("0");
      BigDecimal pingService = new BigDecimal("0");
      BigDecimal guService = new BigDecimal("0");
      // 尖峰平谷充电量 度数
      BigDecimal jian = new BigDecimal("0");
      BigDecimal feng = new BigDecimal("0");
      BigDecimal ping = new BigDecimal("0");
      BigDecimal gu = new BigDecimal("0");
      for (ChargingOrderListVO chargingOrderListVO : list1) {
         electronic = electronic.add(chargingOrderListVO.getChargingCapacity());
         paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
         electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
         serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
         List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
         for (TChargingOrderAccountingStrategy temp : list2) {
            switch (temp.getType()){
               case 1:
                  jian = jian.add(temp.getChargingCapacity());
                  jianElectronic = jianElectronic.add(temp.getChargingCapacity());
                  jianService = jianService.add(temp.getChargingCapacity());
                  break;
               case 2:
                  feng = feng.add(temp.getChargingCapacity());
                  fengElectronic = fengElectronic.add(temp.getChargingCapacity());
                  fengService = fengService.add(temp.getChargingCapacity());
                  break;
               case 3:
                  ping = ping.add(temp.getChargingCapacity());
                  pingElectronic = pingElectronic.add(temp.getChargingCapacity());
                  pingService = pingService.add(temp.getChargingCapacity());
                  break;
               case 4:
                  gu = gu.add(temp.getChargingCapacity());
                  guElectronic = guElectronic.add(temp.getChargingCapacity());
                  guService = guService.add(temp.getChargingCapacity());
                  break;
            }
         }
      }
      chargingOrderTimeVO.setChargingCapacity(electronic);
      chargingOrderTimeVO.setPaymentAmount(paymentAmount);
      chargingOrderTimeVO.setElectrovalence(electrovalence);
      chargingOrderTimeVO.setServiceCharge(serviceCharge);
      // 计算尖峰平谷充电量占比
      BigDecimal add = jianElectronic.add(fengElectronic).add(pingElectronic).add(guElectronic);
      // 计算尖峰平谷服务费占比
      BigDecimal add1 = jianService.add(fengService).add(pingService).add(guService);
      // 计算尖峰平谷充电到账占比
      BigDecimal add2 = jian.add(feng).add(ping).add(gu);
      chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
            +jianElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +fengElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +pingElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +guElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
      chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
            +jianService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +fengService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +pingService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +guService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
      chargingOrderTimeVO.setElectronicProportion(jian+"元/"+feng+"元/"+ping+"元/"+gu+"元-"
            +jian.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +feng.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +ping.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
            +gu.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
      chargingOrderTimeVO.setList(pageInfo);
      return chargingOrderTimeVO;
   }
}