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);
|
}
|
}
|
|
|
}
|