zhangback
2026-03-30 0bafa6aa253c9ef6f5cb24e9a24c5282860e4c59
tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java
@@ -1,13 +1,12 @@
package com.ruoyi.tms.service.impl;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.SystemDataNoEnum;
import com.ruoyi.common.exception.ServiceException;
@@ -110,7 +109,6 @@
            return null;
        }
        LambdaQueryWrapper<TmsFinanceDetail> eq = new LambdaQueryWrapper<TmsFinanceDetail>()
                .eq(TmsFinanceDetail::getFinanceType, 2)
                .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId());
        if (dispatchId !=null){
@@ -118,17 +116,82 @@
        }
        List<TmsFinanceDetail> tmsFinanceDetails = tmsFinanceDetailMapper.selectList(eq);
        if (tmsFinanceDetails != null && !tmsFinanceDetails.isEmpty()){
            tmsFinanceDetails.forEach(tmsFinanceDetail -> {
                TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.selectById(tmsFinanceDetail.getDispatchOrderId());
                if (tmsDispatchOrder != null){
                    tmsFinanceDetail.setDispatchNo(tmsDispatchOrder.getDispatchNo());
                    tmsFinanceDetail.setCustomerName(tmsDispatchOrder.getCustomerName());
                }
            });
            enrichDispatchInfo(tmsFinanceDetails);
        }
        return tmsFinanceDetails;
    }
    @Override
    public Map<String, Object> getTmsFinanceDetailListPage(Integer dispatchId, Integer pageNum, Integer pageSize) {
        Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId());
        if (deviceId == null) {
            Map<String, Object> empty = new HashMap<>();
            empty.put("rows", Collections.emptyList());
            empty.put("total", 0);
            empty.put("totalAmount", BigDecimal.ZERO);
            return empty;
        }
        LambdaQueryWrapper<TmsFinanceDetail> wrapper = new LambdaQueryWrapper<TmsFinanceDetail>()
                .eq(TmsFinanceDetail::getFinanceType, 2)
                .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId());
        if (dispatchId != null) {
            wrapper.eq(TmsFinanceDetail::getDispatchOrderId, dispatchId);
        }
        // 按创建时间倒序
        wrapper.orderByDesc(TmsFinanceDetail::getFeeCreateTime);
        // 查总金额(不分页)
        List<TmsFinanceDetail> allRecords = tmsFinanceDetailMapper.selectList(
                new LambdaQueryWrapper<TmsFinanceDetail>()
                        .select(TmsFinanceDetail::getActualFeeAmount)
                        .eq(TmsFinanceDetail::getFinanceType, 2)
                        .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId())
                        .eq(dispatchId != null, TmsFinanceDetail::getDispatchOrderId, dispatchId)
        );
        BigDecimal totalAmount = allRecords.stream()
                .map(TmsFinanceDetail::getActualFeeAmount)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        // 分页查询
        Page<TmsFinanceDetail> page = new Page<>(pageNum, pageSize);
        Page<TmsFinanceDetail> result = tmsFinanceDetailMapper.selectPage(page, wrapper);
        List<TmsFinanceDetail> rows = result.getRecords();
        if (rows != null && !rows.isEmpty()) {
            enrichDispatchInfo(rows);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("rows", rows);
        map.put("total", result.getTotal());
        map.put("totalAmount", totalAmount);
        return map;
    }
    /**
     * 填充调度单信息(调度单号、客户名称)
     */
    private void enrichDispatchInfo(List<TmsFinanceDetail> list) {
        // 批量查询调度单,避免 N+1
        Set<Integer> orderIds = new HashSet<>();
        list.forEach(d -> { if (d.getDispatchOrderId() != null) orderIds.add(d.getDispatchOrderId()); });
        if (orderIds.isEmpty()) return;
        List<TmsDispatchOrder> orders = tmsDispatchOrderMapper.selectBatchIds(orderIds);
        Map<Integer, TmsDispatchOrder> orderMap = new HashMap<>();
        orders.forEach(o -> orderMap.put(o.getId(), o));
        list.forEach(d -> {
            TmsDispatchOrder order = orderMap.get(d.getDispatchOrderId());
            if (order != null) {
                d.setDispatchNo(order.getDispatchNo());
                d.setCustomerName(order.getCustomerName());
            }
        });
    }
    /**
     * 查询费用明细列表 异步 导出
     *