无关风月
2025-03-04 7fffe9efd9e363941f5506f6476f86ffa0500deb
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -915,9 +915,15 @@
            amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<String> orderR = wxPaymentClient.refundOrderR(model);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if(200 == orderR.getCode()){
               chargingOrderRefundService.save(chargingOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
               Object refund_fee1 = amount1.get("refund_fee");
               BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
               chargingOrderRefund.setRefundFee(refund_fee);
               chargingOrderRefundService.updateById(chargingOrderRefund);
            }
         }
         if(2 == rechargePaymentType){
@@ -1378,7 +1384,9 @@
      for (ChargingOrderVO chargingOrderVO : list1) {
         paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
         commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount()!=null?chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
         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"));
         }
@@ -1399,7 +1407,6 @@
      }
      tCharingOrderVO.setTotal(total);
      tCharingOrderVO.setTime(time);
      // todo 临时只累加
//      tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
      tCharingOrderVO.setIncome(paymentMoney);
      tCharingOrderVO.setElectronicMoney(electronicMoney);
@@ -2012,10 +2019,10 @@
      if(null == chargingOrder){
         return R.ok();
      }
      Integer status = chargingOrder.getStatus();
      if(status == 5){
         return R.ok();
      }
//      Integer status = chargingOrder.getStatus();
//      if(status == 5){
//         return R.ok();
//      }
      
      //如果使用优惠券需要判断优惠券是否满足使用条件
      //根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
@@ -2078,7 +2085,7 @@
               AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
               BeanUtils.copyProperties(strategyDetail, vo1);
               vo1.setChargingCapacity(sharp_peak_charge);
               lists.add(vo1);
               lists.add(0, vo1);
            }
            
            //第二天的
@@ -2205,42 +2212,19 @@
         total = total.add(electrovalenc.add(originalServicePrice));
      }
      
      BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
      //折扣金额
      BigDecimal discountAmount = chargingOrder.getVipDiscountAmount();
      //原金额
      BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
      BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
      //总金额(充值金额+会员折扣金额)
      BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
      BigDecimal decimal = rechargeAmount.add(discountAmount);
      //退款金额(已经计算了折扣优惠部分)
      //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
      BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
      BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
      BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue());
      //折扣金额
      BigDecimal discountAmount = BigDecimal.ZERO;
      if(null != chargingOrder.getVipDiscount()){
         TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
         //判断会员是否还有充电优惠次数
         GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
         getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
         getAppUserVipDetail.setVipId(appUser.getVipId());
         TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
         if(null != data && data.getChargeNum() > 0){
            data.setChargeNum(data.getChargeNum() - 1);
            appUserVipDetailClient.updateAppUserVipDetail(data);
            //服务费折扣
            discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
            BigDecimal maximumDeduction = vip.getMaximumDeduction();
            //普通会员有最高优惠限制
            if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
               discountAmount = maximumDeduction;
            }
         }
      }
      //会员折扣金额
      discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
      payAmount = payAmount.subtract(discountAmount);
      //支付金额
      BigDecimal payAmount = rechargeAmount.subtract(refundAmount);
      //实际充值服务费-会员折扣
      periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
      TChargingOrder order = new TChargingOrder();
@@ -2262,10 +2246,12 @@
      order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
      order.setStatus(5);
      order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
      order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
      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.setVipDiscount(BigDecimal.valueOf(1));
      }
      
      //计算优惠券
      BigDecimal couponDiscount = BigDecimal.ZERO;
@@ -2319,7 +2305,9 @@
      }
      //优惠券优惠金额
      couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
      //退款金额+优惠券
      refundAmount = refundAmount.add(couponDiscount);
      //实际支付金额-优惠券
      payAmount = payAmount.subtract(couponDiscount);
      if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
         periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
@@ -2433,9 +2421,15 @@
               amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
               amount.setCurrency("CNY");
               model.setAmount(amount);
               R<String> orderR = wxPaymentClient.refundOrderR(model);
               if(200 == orderR.getCode()){
               R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
               if(200 == result.getCode()){
                  chargingOrderRefundService.save(chargingOrderRefund);
                  //手续费
                  Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
                  Object refund_fee1 = amount1.get("refund_fee");
                  BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
                  chargingOrderRefund.setRefundFee(refund_fee);
                  chargingOrderRefundService.updateById(chargingOrderRefund);
               }
            }
            if(2 == rechargePaymentType){
@@ -2591,12 +2585,18 @@
               amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
               amount.setCurrency("CNY");
               model.setAmount(amount);
               R<String> orderR = wxPaymentClient.refundOrderR(model);
               R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
               if(200 == orderR.getCode()){
                  tChargingOrder.setRefundStatus(2);
                  tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  this.baseMapper.updateById(tChargingOrder);
                  chargingOrderRefundService.save(chargingOrderRefund);
                  //手续费
                  Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
                  Object refund_fee1 = amount1.get("refund_fee");
                  BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
                  chargingOrderRefund.setRefundFee(refund_fee);
                  chargingOrderRefundService.updateById(chargingOrderRefund);
               }
            }
@@ -2653,12 +2653,18 @@
               amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
               amount.setCurrency("CNY");
               model.setAmount(amount);
               R<String> orderR = wxPaymentClient.refundOrderR(model);
               R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
               if(200 == orderR.getCode()){
                  tChargingOrder.setRefundStatus(2);
                  tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
                  shoppingOrderService.updateById(tChargingOrder);
                  shoppingOrderRefundService.save(chargingOrderRefund);
                  //手续费
                  Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
                  Object refund_fee1 = amount1.get("refund_fee");
                  BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
                  chargingOrderRefund.setRefundFee(refund_fee);
                  shoppingOrderRefundService.updateById(chargingOrderRefund);
               }
            }
@@ -2712,12 +2718,18 @@
            amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
            amount.setCurrency("CNY");
            model.setAmount(amount);
            R<String> orderR = wxPaymentClient.refundOrderR(model);
            R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
            if(200 == orderR.getCode()){
               tChargingOrder.setRefundStatus(2);
               tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
               vipOrderService.updateById(tChargingOrder);
               vipOrderRefundService.save(chargingOrderRefund);
               //手续费
               Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
               Object refund_fee1 = amount1.get("refund_fee");
               BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
               chargingOrderRefund.setRefundFee(refund_fee);
               vipOrderRefundService.updateById(chargingOrderRefund);
            }
         }