liujie
2026-07-30 280ef5100bece9b40ac51736aef037704a52a4ca
backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java
@@ -57,7 +57,7 @@
        Page<TourOrder> result = orderMapper.selectPage(new Page<TourOrder>(page, size), query);
        PlatformSettingsResponse settings = settingsService.getSettings();
        Map<Long, GuideUser> guides = loadGuides(result.getRecords());
        Map<Long, String> teams = loadTeams(guides.values());
        Map<Long, String> teams = loadTeams(result.getRecords(), guides.values());
        List<FinanceLedgerResponse> records = result.getRecords().stream()
                .map(order -> toLedger(order, refund, settings, guides.get(order.getGuideId()), teams))
                .collect(Collectors.toList());
@@ -133,9 +133,17 @@
    private FinanceLedgerResponse toLedger(TourOrder order, boolean refund, PlatformSettingsResponse settings,
                                            GuideUser guide, Map<Long, String> teams) {
        BigDecimal amount = refund ? safeAmount(order.getRefundAmount()) : paymentAmount(order);
        BigDecimal orderAmount = paymentAmount(order);
        BigDecimal guideIncome;
        BigDecimal platformIncome;
        if (order.getGuideEarningAmount() != null) {
            guideIncome = order.getGuideEarningAmount().setScale(2, RoundingMode.HALF_UP);
            platformIncome = orderAmount.subtract(guideIncome).setScale(2, RoundingMode.HALF_UP);
        } else {
        BigDecimal commissionRate = settings.getCommissionRate().movePointLeft(2);
        BigDecimal platformIncome = amount.multiply(commissionRate).setScale(2, RoundingMode.HALF_UP);
        BigDecimal guideIncome = amount.subtract(platformIncome).setScale(2, RoundingMode.HALF_UP);
            platformIncome = orderAmount.multiply(commissionRate).setScale(2, RoundingMode.HALF_UP);
            guideIncome = orderAmount.subtract(platformIncome).setScale(2, RoundingMode.HALF_UP);
        }
        if (refund) {
            platformIncome = platformIncome.negate();
            guideIncome = guideIncome.negate();
@@ -143,7 +151,10 @@
        }
        LocalDateTime settledAt = order.getCompletedAt() == null ? null
                : order.getCompletedAt().plusDays(settings.getSettlementDays());
        String teamName = guide == null || guide.getTeamId() == null ? "个人导游" : teams.get(guide.getTeamId());
        Long teamId = order.getCommissionTeamId() != null
                ? order.getCommissionTeamId()
                : guide == null ? null : guide.getTeamId();
        String teamName = teamId == null ? "个人导游" : teams.get(teamId);
        return new FinanceLedgerResponse(order.getId(),
                refund ? order.getRefundOrderNo() : "IN" + order.getOrderNo(), order.getOrderNo(),
                paymentAmount(order), platformIncome, guideIncome, order.getGuideName(), order.getGuideMobile(),
@@ -160,9 +171,11 @@
                .collect(Collectors.toMap(GuideUser::getId, guide -> guide));
    }
    private Map<Long, String> loadTeams(java.util.Collection<GuideUser> guides) {
    private Map<Long, String> loadTeams(List<TourOrder> orders, java.util.Collection<GuideUser> guides) {
        Set<Long> teamIds = guides.stream().map(GuideUser::getTeamId)
                .filter(id -> id != null).collect(Collectors.toSet());
        orders.stream().map(TourOrder::getCommissionTeamId)
                .filter(id -> id != null).forEach(teamIds::add);
        if (teamIds.isEmpty()) return new HashMap<Long, String>();
        return guideTeamMapper.selectBatchIds(teamIds).stream()
                .collect(Collectors.toMap(GuideTeam::getId, GuideTeam::getTeamName));