puzhibing
2024-10-24 3b533f35c37e990d8ef6de1c8ee7c0cd7ffc6dbf
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -708,6 +708,9 @@
         preChargeCheck1.setStartupSuccess(2);
         order.setStatus(3);
         order.setStartTime(LocalDateTime.now());
         TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
         chargingGun.setStatus(4);
         chargingGunClient.updateChargingGunById(chargingGun);
      }
      redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
      this.updateById(order);
@@ -1663,6 +1666,8 @@
      
      //获取订单的计费策略
      List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
      //开始处理计费明细数据和优惠数据
      chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
      for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
         Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
@@ -1705,22 +1710,23 @@
            BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
            BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
            BigDecimal serviceCharge = originalServicePrice;
            BigDecimal vipDiscountAmount = BigDecimal.ZERO;
            //计算优惠金额
            if(null != chargingOrder.getVipDiscount()){
               vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN);
               serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
            }
            chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
            chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
            chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
            chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
            chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
            chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
            chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
            
            BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
            BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
            periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
            periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
            total = total.add(periodElectricPrice.add(periodServicePrice));
            periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
            periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
            total = total.add(electrovalenc.add(originalServicePrice));
         } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
         } catch (InvocationTargetException e) {
@@ -1743,21 +1749,19 @@
      //折扣金额
      BigDecimal discountAmount = BigDecimal.ZERO;
      if(null != chargingOrder.getVipDiscount()){
         //服务费折扣
         discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
         periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
         TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
         if(null != appUser.getVipId()){
            //判断会员是否还有充电优惠次数
            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);
            }
         //判断会员是否还有充电优惠次数
         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())));
            periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
            
            TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
            BigDecimal maximumDeduction = vip.getMaximumDeduction();
@@ -1766,8 +1770,8 @@
               discountAmount = maximumDeduction;
            }
         }
         payAmount = payAmount.subtract(discountAmount);
      }
      payAmount = payAmount.subtract(discountAmount);
      
      TChargingOrder order = new TChargingOrder();
      order.setId(chargingOrder.getId());
@@ -1784,7 +1788,6 @@
      order.setStatus(5);
      order.setOrderAmount(orderAmount);
      order.setVipDiscountAmount(discountAmount);
      order.setServiceCharge(periodServicePrice_total);
      order.setElectrovalence(periodElectricPrice_total);
      order.setChargingCapacity(vo.getTotal_electricity());
      order.setElectricity(vo.getTotal_electricity());
@@ -1805,10 +1808,12 @@
                  refundAmount = refundAmount.add(periodServicePrice_total);
                  order.setCouponDiscountAmount(periodServicePrice_total);
                  payAmount = payAmount.subtract(periodServicePrice_total);
                  periodServicePrice_total = BigDecimal.ZERO;
               }else{
                  refundAmount = refundAmount.add(couponDiscountAmount);
                  order.setCouponDiscountAmount(couponDiscountAmount);
                  payAmount = payAmount.subtract(couponDiscountAmount);
                  periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount);
               }
               
               appCoupon.setStatus(2);
@@ -1830,10 +1835,12 @@
                  refundAmount = refundAmount.add(periodServicePrice_total);
                  order.setCouponDiscountAmount(periodServicePrice_total);
                  payAmount = payAmount.subtract(periodServicePrice_total);
                  periodServicePrice_total = BigDecimal.ZERO;
               }else{
                  refundAmount = refundAmount.add(divide);
                  order.setCouponDiscountAmount(divide);
                  payAmount = payAmount.subtract(divide);
                  periodServicePrice_total = periodServicePrice_total.subtract(divide);
               }
               
               appCoupon.setStatus(2);
@@ -1845,11 +1852,27 @@
            }
         }
      }
      order.setServiceCharge(periodServicePrice_total);
      order.setPaymentAmount(payAmount);
      order.setRefundAmount(refundAmount);
      order.setRefundStatus(1);
      this.updateById(order);
      chargingOrder = this.getById(order.getId());
      //开始将优惠券优惠的金额添加到明细中
      BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
      if(couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
         List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
         for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
            BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
            BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(periodServicePrice_total, new MathContext(4, RoundingMode.HALF_EVEN)));
            periodServicePrice = periodServicePrice.subtract(multiply);
            chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
            chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
         }
         chargingOrderAccountingStrategyService.updateBatchById(list);
      }
      
      // 将枪状态重置为空闲
      TChargingGun chargingGun = new TChargingGun();
@@ -2058,7 +2081,7 @@
               model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
               WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
               amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
               amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
               amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
               amount.setCurrency("CNY");
               model.setAmount(amount);
               R<String> orderR = wxPaymentClient.refundOrderR(model);