Pu Zhibing
2024-10-24 58e039cc6b9cb2067e113c553948ccb88b9c6eba
合并代码
2个文件已修改
54 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java
@@ -82,6 +82,14 @@
    @TableField("period_original_service_price")
    private BigDecimal periodOriginalServicePrice;
    
    @ApiModelProperty(value = "优惠券抵扣金额")
    @TableField("coupon_discount_amount")
    private BigDecimal couponDiscountAmount;
    @ApiModelProperty(value = "会员优惠金额")
    @TableField("vip_discount_amount")
    private BigDecimal vipDiscountAmount;
    @ApiModelProperty(value = "首次添加时间")
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1663,6 +1663,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 +1707,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,12 +1746,7 @@
        //折扣金额
        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());
@@ -1757,7 +1755,10 @@
                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 +1767,8 @@
                    discountAmount = maximumDeduction;
                }
            }
            payAmount = payAmount.subtract(discountAmount);
        }
        payAmount = payAmount.subtract(discountAmount);
        
        TChargingOrder order = new TChargingOrder();
        order.setId(chargingOrder.getId());
@@ -1784,7 +1785,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 +1805,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 +1832,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,12 +1849,28 @@
                }
            }
        }
        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();
        chargingGun.setId(chargingOrder.getChargingGunId());