longz
2026-08-07 e06623341940a5f933bce152b110a6f3fc334aab
fix: 完善收入支付方式统计
3个文件已修改
25 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/PlatformRevenueAnalysisTest.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -2079,7 +2079,7 @@
        boolean partnerView = isPartnerView(sysUser);
        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId, partnerId);
        LocalDate sixBefore = PreviousSixMonths.get();
        return R.ok(chargingOrderService.payTypeCircle(sixBefore, siteIds, false));
        return R.ok(chargingOrderService.payTypeCircle(sixBefore, siteIds, partnerView));
    }
    private boolean isPartnerView(SysUser sysUser) {
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -3844,12 +3844,12 @@
    }
    /**
     * 统计近六月订单收入支付方式占比;服务层聚合避免复杂CASE SQL在当前数据库驱动中转换异常。
     * 统计近六月订单收入支付方式占比;历史订单缺少支付渠道时归入其他支付,避免漏算。
     */
    @Override
    public List<SixIncomeCircleDto> payTypeCircle(LocalDate sixBefore, List<Integer> siteIds, Boolean partnerView) {
        if (siteIds == null || siteIds.isEmpty()) {
            return buildPayTypeCircleData(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
            return buildPayTypeCircleData(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
        }
        if (Boolean.TRUE.equals(partnerView)) {
            return buildPartnerShareCircleData(this.baseMapper.chargingOrderShareIncomeByPayChannel(sixBefore, siteIds));
@@ -3869,28 +3869,31 @@
        BigDecimal wechatAmount = BigDecimal.ZERO;
        BigDecimal alipayAmount = BigDecimal.ZERO;
        BigDecimal balanceAmount = BigDecimal.ZERO;
        BigDecimal otherAmount = BigDecimal.ZERO;
        for (TChargingOrder order : orders) {
            BigDecimal thirdPayAmount = getThirdPayNetAmount(order);
            BigDecimal balancePayAmount = getBalancePayNetAmount(order);
            Integer rechargePaymentType = order.getRechargePaymentType();
            if (Integer.valueOf(1).equals(rechargePaymentType)) {
                wechatAmount = wechatAmount.add(thirdPayAmount);
            }
            if (Integer.valueOf(2).equals(rechargePaymentType) || Integer.valueOf(3).equals(rechargePaymentType)) {
            } else if (Integer.valueOf(2).equals(rechargePaymentType) || Integer.valueOf(3).equals(rechargePaymentType)) {
                alipayAmount = alipayAmount.add(thirdPayAmount);
            } else {
                otherAmount = otherAmount.add(thirdPayAmount);
            }
            Integer payMethod = order.getPayMethod();
            if (Integer.valueOf(1).equals(payMethod) || Integer.valueOf(2).equals(payMethod)) {
                balanceAmount = balanceAmount.add(balancePayAmount);
            }
        }
        return buildPayTypeCircleData(wechatAmount, alipayAmount, balanceAmount);
        return buildPayTypeCircleData(wechatAmount, alipayAmount, balanceAmount, otherAmount);
    }
    private List<SixIncomeCircleDto> buildPartnerShareCircleData(List<Map<String, Object>> rows) {
        BigDecimal wechatAmount = BigDecimal.ZERO;
        BigDecimal alipayAmount = BigDecimal.ZERO;
        BigDecimal balanceAmount = BigDecimal.ZERO;
        BigDecimal otherAmount = BigDecimal.ZERO;
        if (rows != null) {
            for (Map<String, Object> row : rows) {
                String channel = row.get("payChannel") == null ? "" : row.get("payChannel").toString();
@@ -3902,21 +3905,23 @@
                } else if ("BALANCE".equalsIgnoreCase(channel) || "WHITELIST".equalsIgnoreCase(channel)) {
                    balanceAmount = balanceAmount.add(shareAmount);
                } else {
                    wechatAmount = wechatAmount.add(shareAmount);
                    otherAmount = otherAmount.add(shareAmount);
                }
            }
        }
        return buildPayTypeCircleData(wechatAmount, alipayAmount, balanceAmount);
        return buildPayTypeCircleData(wechatAmount, alipayAmount, balanceAmount, otherAmount);
    }
    /**
     * 构造固定三类支付方式数据,保证前端饼图在无订单时也有稳定结构。
     */
    private List<SixIncomeCircleDto> buildPayTypeCircleData(BigDecimal wechatAmount, BigDecimal alipayAmount, BigDecimal balanceAmount) {
    private List<SixIncomeCircleDto> buildPayTypeCircleData(BigDecimal wechatAmount, BigDecimal alipayAmount,
                                                            BigDecimal balanceAmount, BigDecimal otherAmount) {
        List<SixIncomeCircleDto> data = new ArrayList<>();
        data.add(buildIncomeCircleDto("微信支付", wechatAmount));
        data.add(buildIncomeCircleDto("支付宝支付", alipayAmount));
        data.add(buildIncomeCircleDto("余额支付", balanceAmount));
        data.add(buildIncomeCircleDto("其他支付", otherAmount));
        return data;
    }
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/PlatformRevenueAnalysisTest.java
@@ -12,6 +12,7 @@
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -141,4 +142,5 @@
        assertEquals(new BigDecimal("18.60"), amount);
    }
}