无关风月
2025-03-19 17b48b4731e2ac2b6d571049718be724eb31972b
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1287,7 +1287,6 @@
         endTime2 = split[1];
      }
      PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
      PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,999999999);
      if (StringUtils.hasLength(dto.getPhone())){
         List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
@@ -1333,7 +1332,7 @@
      if (siteIds.isEmpty())siteIds.add(-1);
      dto.setSiteIds(siteIds);
      List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
      List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
      List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
       BigDecimal total = new BigDecimal("0");
       long time = 0L;
       BigDecimal electronicMoney = new BigDecimal("0");
@@ -1351,7 +1350,6 @@
               chargingOrderVO.setAuthRecord(t1.get(0));
            }
         }
         chargingOrderVO.setSharingAmount(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
         chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
         chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
         chargingOrderVO.setUid(chargingOrderVO.getId()+"");
@@ -1374,7 +1372,17 @@
            // 计算时间差 单位秒
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            chargingOrderVO.setChargingSecond(between);
            BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            chargingOrderVO.setElectrovalence(electronic_reduce);
            BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            if (!chargingOrderVO.getOrderSource().equals(2)){
               chargingOrderVO.setServiceCharge(service_reduce);
               chargingOrderVO.setSharingAmount(BigDecimal.ZERO);
            }else{
               chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8")));
               chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2")));
            }
         }
         // 充电时段数
         int size = chargingOrderId.size();
@@ -1403,15 +1411,17 @@
            .eq(TChargingOrderRefund::getRefundStatus,2).list();
      for (ChargingOrderVO chargingOrderVO : list1) {
         List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
         BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         if (!chargingOrderVO.getOrderSource().equals(2)) {
            paymentMoney = paymentMoney.add(chargingOrderVO.getPaymentAmount() != null ? chargingOrderVO.getPaymentAmount() : new BigDecimal("0"));
         }else{
            paymentMoney = paymentMoney.add(chargingOrderVO.getServiceCharge() != null ? chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
            paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
         }
         if (chargingOrderVO.getRechargeAmount()!=null){
            commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
         }
//         if (chargingOrderVO.getRechargeAmount()!=null){
//            commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
//         }
         if (chargingOrderVO.getChargingCapacity()!=null){
            total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
         }
@@ -1425,18 +1435,19 @@
         List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
               .collect(Collectors.toList());
         for (TChargingOrderRefund tChargingOrderRefund : list2) {
               refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
            refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
         }
         electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0"));
         //充电明细
         electronicMoney = electronicMoney.add(electronic_reduce);
         if (!chargingOrderVO.getOrderSource().equals(2)){
            serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
            serviceMoney = serviceMoney.add(service_reduce);
         }else{
            serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
            serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
         }
      }
      tCharingOrderVO.setTotal(total);
      tCharingOrderVO.setTime(time);
//      tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
      tCharingOrderVO.setIncome(paymentMoney);
      tCharingOrderVO.setElectronicMoney(electronicMoney);
      tCharingOrderVO.setServiceMoney(serviceMoney);
@@ -1494,28 +1505,38 @@
   }
   @Override
   public List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds) {
      return this.baseMapper.getSumByType(chargingOrderIds);
   public List<Map<String, Object>> getSumByType(LocalDate start,LocalDate end,List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getSumByType(start1,end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getDateData(List<Long> chargingOrderIds) {
      return this.baseMapper.getDateData(chargingOrderIds);
   public List<Map<String, Object>> getDateData(LocalDate start,LocalDate end,List<Integer> siteIds) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getDateData(start1,end1, siteIds);
   }
   @Override
   public List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds) {
      return this.baseMapper.getWeekData(chargingOrderIds);
   public List<Map<String, Object>> getWeekData(LocalDate start,LocalDate end) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getWeekData(start1,end1);
   }
   @Override
   public List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds) {
      return this.baseMapper.getMonthData(chargingOrderIds);
   public List<Map<String, Object>> getMonthData(LocalDate start,LocalDate end) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getMonthData(start1,end1);
   }
   @Override
   public List<Map<String, Object>> getYearData(List<Long> chargingOrderIds) {
      return this.baseMapper.getYearData(chargingOrderIds);
   public List<Map<String, Object>> getYearData(LocalDate start,LocalDate end) {
      LocalDateTime start1 = start.atStartOfDay();
      LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getYearData(start1,end1);
   }
   @Resource
@@ -2107,10 +2128,11 @@
      }
      
      //如果使用优惠券需要判断优惠券是否满足使用条件
      //根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
      //退款金额=优惠券金额+剩余充电金额
      BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
      BigDecimal periodServicePrice_total = BigDecimal.ZERO;
      BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
      BigDecimal serviceCharge_total = BigDecimal.ZERO;
      BigDecimal total = BigDecimal.ZERO;
      
      //获取订单的计费策略
@@ -2288,26 +2310,25 @@
         chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
         chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
         chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
         //电费
         periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
         //服务费(含折扣)
         serviceCharge_total = serviceCharge_total.add(serviceCharge);
         //服务费(不含折扣)
         periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
         //会员折扣优惠金额
         vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
         //原始总金额(不含折扣)
         total = total.add(electrovalenc.add(originalServicePrice));
      }
      
      BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
      //折扣金额
      BigDecimal discountAmount = chargingOrder.getVipDiscountAmount();
      //原金额
      BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
      //总金额(充值金额+会员折扣金额)
      BigDecimal decimal = rechargeAmount.add(discountAmount);
      //退款金额(已经计算了折扣优惠部分)
      //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
      BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
      //支付金额
      BigDecimal payAmount = rechargeAmount.subtract(refundAmount);
      //实际充值服务费-会员折扣
      periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
      BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
      //退款金额=充值金额-实际支付金额
      BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
      TChargingOrder order = new TChargingOrder();
      order.setId(chargingOrder.getId());
@@ -2331,7 +2352,8 @@
      order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
      order.setChargingCapacity(vo.getTotal_electricity());
      order.setElectricity(vo.getTotal_electricity());
      if(discountAmount.compareTo(BigDecimal.ZERO) == 0){
      order.setVipDiscountAmount(vipDiscountAmount_total);
      if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){
         order.setVipDiscount(BigDecimal.valueOf(1));
      }
      
@@ -2348,9 +2370,9 @@
            if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
               BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
               //如果优惠金额大于服务费金额,以服务费作为最大限制
               if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
                  couponDiscount = periodServicePrice_total;
                  periodServicePrice_total = BigDecimal.ZERO;
               if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){
                  couponDiscount = serviceCharge_total;
                  serviceCharge_total = BigDecimal.ZERO;
               }else{
                  couponDiscount = couponDiscountAmount;
               }
@@ -2369,9 +2391,9 @@
               BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
               divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
               //如果优惠金额大于服务费金额,以服务费作为最大限制
               if(periodServicePrice_total.compareTo(divide) < 0){
                  couponDiscount = periodServicePrice_total;
                  periodServicePrice_total = BigDecimal.ZERO;
               if(serviceCharge_total.compareTo(divide) < 0){
                  couponDiscount = serviceCharge_total;
                  serviceCharge_total = BigDecimal.ZERO;
               }else{
                  couponDiscount = divide;
               }
@@ -2391,11 +2413,11 @@
      refundAmount = refundAmount.add(couponDiscount);
      //实际支付金额-优惠券
      payAmount = payAmount.subtract(couponDiscount);
      if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
         periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
      if(serviceCharge_total.compareTo(BigDecimal.ZERO) > 0){
         serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
      }
      order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
      order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
      order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
      order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
      order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
      order.setRefundStatus(1);
@@ -2536,8 +2558,11 @@
   
   
   @Override
   public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) {
      return this.baseMapper.getByDate(chargingOrderIds);
   public List<Map<String, Object>> getByDate(LocalDate start,LocalDate end) {
         LocalDateTime start1 = start.atStartOfDay();
         LocalDateTime end1 = end.atTime(LocalTime.MAX);
      return this.baseMapper.getByDate(start1,end1);
   }
   @Override