zhangback
2026-01-26 3e3cd7ad6d3787dac450deef5d5173de11abab94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.ruoyi.tms.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.utils.file.DownloadExportUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.tms.domain.TmsDispatchFeeSummaryVi;
import com.ruoyi.tms.domain.TmsPayableFeeItem;
import com.ruoyi.tms.domain.TmsReceivableFeeItem;
import com.ruoyi.tms.domain.TmsTrip;
import com.ruoyi.tms.mapper.TmsDispatchFeeSummaryViMapper;
import com.ruoyi.tms.mapper.TmsPayableFeeItemMapper;
import com.ruoyi.tms.mapper.TmsReceivableFeeItemMapper;
import com.ruoyi.tms.service.ITmsDispatchFeeSummaryViService;
import com.ruoyi.tms.service.ITmsReceivableFeeService;
import com.ruoyi.tms.service.ITmsTripService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
 
@Service
@Transactional(rollbackFor = Exception.class)
public class TmsDispatchFeeSummaryViServiceImpl extends BaseService<TmsDispatchFeeSummaryViMapper, TmsDispatchFeeSummaryVi> implements ITmsDispatchFeeSummaryViService {
    @Autowired
    private RedisCache redisCache;
    @Resource
    private TmsReceivableFeeItemMapper tmsReceivableFeeItemMapper;
    @Resource
    private TmsPayableFeeItemMapper tmsPayableFeeItemMapper;
    @Override
    public Page<TmsDispatchFeeSummaryVi> list(PageDomain pageDomain,TmsDispatchFeeSummaryVi bo) {
        Page<TmsDispatchFeeSummaryVi> pageParam = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
        LambdaQueryWrapper<TmsDispatchFeeSummaryVi> wrapper = new LambdaQueryWrapper<>();
        wrapper.notIn(TmsDispatchFeeSummaryVi::getStatus, 0,5);
        pageParam = baseMapper.selectPage(pageParam,wrapper);
        List<TmsDispatchFeeSummaryVi> records = pageParam.getRecords();
        records.forEach(item -> {
            BigDecimal rTotalRmb = item.getRShippingFeeRmb()
                    .add(item.getRServerFeeRmb())
                    .add(item.getRActualFeeRmb());
            BigDecimal rTotalHkd = item.getRShippingFeeHkd()
                    .add(item.getRServerFeeHkd())
                    .add(item.getRActualFeeHkd());
            item.setRTotalRmb(rTotalRmb);
            item.setRTotalHkd(rTotalHkd);
 
            BigDecimal pTotalRmb = item.getPShippingFeeRmb()
                    .add(item.getPServerFeeRmb())
                    .add(item.getPActualFeeRmb());
            BigDecimal pTotalHkd = item.getPShippingFeeHkd()
                    .add(item.getPServerFeeHkd())
                    .add(item.getPActualFeeHkd());
 
            item.setPTotalRmb(pTotalRmb);
            item.setPTotalHkd(pTotalHkd);
 
            item.setGrossProfitRmb(item.getRTotalRmb().subtract(item.getPTotalRmb()));
            item.setGrossProfitHkd(item.getRTotalHkd().subtract(item.getPTotalHkd()));
 
            if (item.getRTotalRmb() != null && item.getRTotalRmb().compareTo(BigDecimal.ZERO) != 0) {
                item.setGrossProfitRadioRmb(item.getGrossProfitRmb()
                        .divide(item.getRTotalRmb(), 4, RoundingMode.HALF_UP));
            } else {
                item.setGrossProfitRadioRmb(BigDecimal.ZERO); // 设置默认值
            }
 
            if (item.getRTotalHkd() != null && item.getRTotalHkd().compareTo(BigDecimal.ZERO) != 0) {
                item.setGrossProfitRadioHkd(item.getGrossProfitHkd()
                        .divide(item.getRTotalHkd(), 4, RoundingMode.HALF_UP));
            } else {
                item.setGrossProfitRadioHkd(BigDecimal.ZERO); // 设置默认值
            }
        });
        pageParam.setRecords( records);
        return pageParam;
    }
    @Async
    @Override
    public void export(TmsDispatchFeeSummaryVi vi, String exportKey) {
        String fileName = ExcelUtil.encodeFileName("派车台账"+exportKey);
        // 设置当前任务为“下载中”状态
        DownloadExportUtil.deleteDownloadFile(redisCache, exportKey, "0");
        // 只创建一次 ExcelUtil
        ExcelUtil<TmsDispatchFeeSummaryVi> excelUtil =
                new ExcelUtil<>(TmsDispatchFeeSummaryVi.class);
 
        excelUtil.initialize("派车台账", null, Excel.Type.EXPORT);
        Set<String> dispatchNoSet = new HashSet<>();
 
        int pageNum = 1;
        while (true) {
            List<TmsDispatchFeeSummaryVi> records =
                    list(new PageDomain(pageNum, Constants.EXPORT_PATE_SIZE), vi).getRecords();
 
            if (records == null || records.isEmpty()) {
                break;
            }
            // 导出当前页的数据
            excelUtil.exportExcel(records);
            dispatchNoSet.addAll(
                    records.stream()
                            .map(TmsDispatchFeeSummaryVi::getDispatchNo)
                            .collect(Collectors.toSet())
            );
 
            pageNum++;
 
        }
        //切换 Sheet:应收明细
        exportReceivableFeeSheet(excelUtil, dispatchNoSet);
        //切换 Sheet:应付明细
        exportPayableFeeSheet(excelUtil, dispatchNoSet);
        excelUtil.finishExport(fileName);
        DownloadExportUtil.setDownloadFile(redisCache, exportKey, fileName);
 
 
    }
    private void exportReceivableFeeSheet(
            ExcelUtil<?> excelUtil,
            Set<String> dispatchNos
    ) {
        // 切换到第二个 Sheet
        ExcelUtil<TmsReceivableFeeItem> receivableExcel = excelUtil.switchSheet(1, "应收明细" , TmsReceivableFeeItem.class);
        List<TmsReceivableFeeItem> list =
                tmsReceivableFeeItemMapper.selectTmsReceivableFeeItemByDispatchNo(dispatchNos);
        if (list != null && !list.isEmpty()) {
            receivableExcel.exportExcel(list);
        }
    }
    private void exportPayableFeeSheet(
            ExcelUtil<?> excelUtil,
            Set<String> dispatchNos
    ) {
        // 切换到第二个 Sheet
        ExcelUtil<TmsPayableFeeItem> receivableExcel = excelUtil.switchSheet(2, "应付明细" , TmsPayableFeeItem.class);
        List<TmsPayableFeeItem> list =
                tmsPayableFeeItemMapper.selectTmsPayableFeeItemByDispatchNo(dispatchNos);
        if (list != null && !list.isEmpty()) {
            receivableExcel.exportExcel(list);
        }
    }
 
 
}