zhangback
2026-01-13 487ef37ec34860b255986d8716d193369024e000
tms/src/main/java/com/ruoyi/tms/service/impl/TmsDispatchOrderServiceImpl.java
@@ -19,10 +19,7 @@
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.ISystemDataNoService;
import com.ruoyi.tms.domain.*;
import com.ruoyi.tms.domain.vo.DpDriverDispatchItemVo;
import com.ruoyi.tms.domain.vo.DpDriverDispatchVo;
import com.ruoyi.tms.domain.vo.DriverDispatchVo;
import com.ruoyi.tms.domain.vo.ServiceProviderVo;
import com.ruoyi.tms.domain.vo.*;
import com.ruoyi.tms.mapper.*;
import com.ruoyi.tms.service.*;
import org.springframework.beans.factory.annotation.Autowired;
@@ -89,7 +86,10 @@
    private TmsCustomsServiceProviderMapper tmsCustomsServiceProviderMapper;
    @Resource
    private  TmsTripMapper tmsTripMapper;
    @Resource
    private TmsPayableFeeMapper tmsPayableFeeMapper;
    @Resource
    private TmsPayableFeeItemMapper tmsPayableFeeItemMapper;
    /**
     * 查询调度单管理
     *
@@ -722,11 +722,11 @@
    @Override
    public List<TmsDispatchOrder> initYFGenerate(List<Integer> ids) {
    public List<TmsPayableFee> initYFGenerate(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = tmsDispatchOrderMapper.selectBatchIds(ids);
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(tmsDispatchOrder -> {
                List<TmsReceivableFeeItem> tmsReceivableFeeItems = new ArrayList<>();
                List<TmsPayableFeeItem> tmsPayableFeeItems = new ArrayList<>();
                if (tmsDispatchOrder.getAccountsPayableStatus() != null &&
                        tmsDispatchOrder.getAccountsPayableStatus() == 1){
                    throw new RuntimeException(tmsDispatchOrder.getDispatchNo()+"应付账单已生成,请先作废");
@@ -750,8 +750,8 @@
                            tmsQuoteDetailMapper.selectOne(
                                    new LambdaQueryWrapper<TmsQuoteDetail>()
                                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                                            .eq(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                                            .eq(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                                            .likeRight(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                                            .likeRight(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                                            .eq(TmsQuoteDetail::getPlanType, 1)
                                            .exists(
                                                    "SELECT 1 " +
@@ -771,16 +771,20 @@
                    if (tmsQuoteDetail == null){
                        throw new RuntimeException("调度单"+tmsDispatchOrder.getDispatchNo()+"未维护应付运费报价,请维护数据后再重新生成");
                    }
                    TmsPayableFeeItem tmsPayableFeeItem = new TmsPayableFeeItem();
                    tmsPayableFeeItem.setFeeType(0);
                    tmsPayableFeeItem.setFeeName("运费");
                    tmsPayableFeeItem.setTypeId(tmsQuoteDetail.getId());
                    tmsPayableFeeItem.setRegisterAmount(tmsQuoteDetail.getFreightPrice());
                    tmsPayableFeeItem.setRegisterTime(tmsDispatchOrder.getConfirmTime());
                    tmsPayableFeeItem.setCurrency(tmsQuoteDetail.getCurrency());
                    tmsPayableFeeItem.setRowKey(IdUtil.objectId());
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.setFeeType(0);
                        tmsReceivableFeeItem.setFeeName("运费");
                        tmsReceivableFeeItem.setTypeId(tmsQuoteDetail.getId());
                        tmsReceivableFeeItem.setRegisterAmount(tmsQuoteDetail.getFreightPrice());
                        tmsReceivableFeeItem.setRegisterTime(tmsDispatchOrder.getConfirmTime());
                        tmsReceivableFeeItem.setCurrency(tmsQuoteDetail.getCurrency());
                        tmsReceivableFeeItem.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                    tmsPayableFeeItem.setServiceProviderId(vehicleProviderId);
                    tmsPayableFeeItem.setServiceProviderName(tmsDispatchOrder.getVehicleProviderName());
                    tmsPayableFeeItem.setServiceProviderType("0");
                    tmsPayableFeeItems.add(tmsPayableFeeItem);
                }
                // 2、 获取实报实销费用
@@ -791,18 +795,20 @@
                if (tmsFinanceDetails != null && !tmsFinanceDetails.isEmpty()){
                    tmsFinanceDetails.forEach(tmsFinanceDetail -> {
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.setFeeType(2);
                        TmsPayableFeeItem tmsPayableFeeItem = new TmsPayableFeeItem();
                        tmsPayableFeeItem.setFeeType(2);
                        String feeName = sysDictDataService.selectDictLabel("fee_type", tmsFinanceDetail.getFeeType());
                        tmsReceivableFeeItem.setFeeName(feeName);
                        tmsReceivableFeeItem.setTypeId(tmsFinanceDetail.getId());
                        tmsReceivableFeeItem.setRegisterAmount(tmsFinanceDetail.getYfPrice());
                        tmsReceivableFeeItem.setRegisterTime(tmsFinanceDetail.getUpdateTime());
                        tmsReceivableFeeItem.setCurrency(tmsFinanceDetail.getYfCurrency());
                        tmsReceivableFeeItem.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                        tmsPayableFeeItem.setFeeName(feeName);
                        tmsPayableFeeItem.setTypeId(tmsFinanceDetail.getId());
                        tmsPayableFeeItem.setRegisterAmount(tmsFinanceDetail.getYfPrice());
                        tmsPayableFeeItem.setRegisterTime(tmsFinanceDetail.getUpdateTime());
                        tmsPayableFeeItem.setCurrency(tmsFinanceDetail.getYfCurrency());
                        tmsPayableFeeItem.setRowKey(IdUtil.objectId());
                        tmsPayableFeeItem.setServiceProviderId(tmsFinanceDetail.getYfServiceProviderId());
                        tmsPayableFeeItem.setServiceProviderName(tmsFinanceDetail.getYfServiceProviderName());
                        tmsPayableFeeItem.setServiceProviderType(tmsFinanceDetail.getYfServiceProviderType());
                        tmsPayableFeeItems.add(tmsPayableFeeItem);
                    });
                }
@@ -816,25 +822,79 @@
                if (tmsQuoteFees != null && !tmsQuoteFees.isEmpty()){
                    tmsQuoteFees.forEach(item -> {
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.setFeeType(1);
                        tmsReceivableFeeItem.setFeeName(item.getFreeName());
                        tmsReceivableFeeItem.setTypeId(item.getId());
                        tmsReceivableFeeItem.setRegisterAmount(item.getYfSum());
                        tmsReceivableFeeItem.setRegisterTime(item.getCreateTime());
                        tmsReceivableFeeItem.setCurrency(item.getYfCurrency());
                        tmsReceivableFeeItem.setRowKey(IdUtil.objectId());
                        TmsPayableFeeItem tmsPayableFeeItem = new TmsPayableFeeItem();
                        tmsPayableFeeItem.setFeeType(1);
                        tmsPayableFeeItem.setFeeName(item.getFreeName());
                        tmsPayableFeeItem.setTypeId(item.getId());
                        tmsPayableFeeItem.setRegisterAmount(item.getYfSum());
                        tmsPayableFeeItem.setRegisterTime(item.getCreateTime());
                        tmsPayableFeeItem.setCurrency(item.getYfCurrency());
                        tmsPayableFeeItem.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                        tmsPayableFeeItem.setServiceProviderId(item.getServiceProviderId());
                        tmsPayableFeeItem.setServiceProviderName(getServiceProviderName(item.getServiceProviderType(),item.getServiceProviderId()));
                        tmsPayableFeeItem.setServiceProviderType(item.getServiceProviderType());
                        tmsPayableFeeItems.add(tmsPayableFeeItem);
                    });
                }
                tmsDispatchOrder.setTmsReceivableFeeItems(tmsReceivableFeeItems);
                tmsDispatchOrder.setTmsPayableFeeItems(tmsPayableFeeItems);
            });
        }
        return tmsDispatchOrders;
        List<TmsPayableFee> tmsPayableFeeList = new ArrayList<>();
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(item -> {
                List<TmsPayableFeeItem> tmsPayableFeeItems = item.getTmsPayableFeeItems();
                Map<String, List<TmsPayableFeeItem>> map =
                        tmsPayableFeeItems.stream()
                                .collect(Collectors.groupingBy(cItem ->
                                        cItem.getServiceProviderId() + "_" + cItem.getServiceProviderType()
                                ));
                map.forEach((customerId, customerItems) -> {
                    TmsPayableFeeItem tmsPayableFeeItem = customerItems.get(0);
                    TmsPayableFee tmsPayableFee = new TmsPayableFee();
                    tmsPayableFee.setDispatchId(item.getId());
                    tmsPayableFee.setDispatchNo(item.getDispatchNo());
                    tmsPayableFee.setServiceProviderId(tmsPayableFeeItem.getServiceProviderId());
                    tmsPayableFee.setServiceProviderName(tmsPayableFeeItem.getServiceProviderName());
                    tmsPayableFee.setServiceProviderType(tmsPayableFeeItem.getServiceProviderType());
                    tmsPayableFee.setProjectId(item.getProjectId());
                    tmsPayableFee.setProjectName(item.getProjectName());
                    BigDecimal totalRmbAmount = customerItems.stream()
                            .filter(cItem -> "RMB".equals(cItem.getCurrency()))
                            .map(TmsPayableFeeItem::getRegisterAmount)
                            .reduce(BigDecimal.ZERO, BigDecimal::add);
                    tmsPayableFee.setPayableRmbAmount(totalRmbAmount);
                    BigDecimal totalHkbAmount = customerItems.stream()
                            .filter(cItem -> "HKD".equals(cItem.getCurrency()))
                            .map(TmsPayableFeeItem::getRegisterAmount)
                            .reduce(BigDecimal.ZERO, BigDecimal::add);
                    tmsPayableFee.setPayableHkbAmount(totalHkbAmount);
                    tmsPayableFee.setDispatchConfirmTime(item.getConfirmTime());
                    tmsPayableFee.setStatus(0);
                    tmsPayableFee.setPayableFeeItems(customerItems);
                    tmsPayableFeeList.add(tmsPayableFee);
                });
            });
        }
        return tmsPayableFeeList;
    }
    @Override
@@ -906,69 +966,29 @@
    }
    @Override
    public AjaxResult yfGenerateTmsDispatchOrder(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = initYFGenerate(ids);
        List<TmsDispatchOrder> collect1 = tmsDispatchOrders.stream().filter(item -> item.getTmsReceivableFeeItems() == null || item.getTmsReceivableFeeItems().isEmpty()).collect(Collectors.toList());
        if (!collect1.isEmpty()){
            String disNos = collect1.stream().map(TmsDispatchOrder::getDispatchNo).collect(Collectors.joining(","));
            return AjaxResult.error("调度单"+disNos+"未有应付信息");
        }
        List<TmsPayableFee> tmsPayableFeeList = initYFGenerate(ids);
        List<TmsDispatchOrder> collect = tmsDispatchOrders.stream().map(item -> {
            TmsDispatchOrder tmsDispatchOrder = new TmsDispatchOrder();
            tmsDispatchOrder.setId(item.getId());
            tmsDispatchOrder.setAccountsPayableStatus(1);
            tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
            return tmsDispatchOrder;
        }).collect(Collectors.toList());
        Set<Integer> dispatchIds = tmsPayableFeeList.stream().map(TmsPayableFee::getDispatchId).collect(Collectors.toSet());
        // 1、修改调度
        tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(collect);
       tmsDispatchOrderMapper.update(new LambdaUpdateWrapper<TmsDispatchOrder>()
                .in(TmsDispatchOrder::getId, dispatchIds)
                .set(TmsDispatchOrder::getAccountsPayableStatus, 1)
                .set(TmsDispatchOrder::getUpdateBy, SecurityUtils.getUsername())
               .set(TmsDispatchOrder::getUpdateTime, DateUtils.getNowDate())
       );
        // 2、生成应收单
//         tmsDispatchOrders.stream().forEach(item -> {
//            TmsReceivableFee tmsReceivableFee = new TmsReceivableFee();
//            String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YSFY);
//
//            tmsReceivableFee.setSystemNo(noByKey);
//            tmsReceivableFee.setDispatchId(item.getId());
//            tmsReceivableFee.setDispatchNo(item.getDispatchNo());
//            tmsReceivableFee.setCustomerId(item.getCustomerId());
//            tmsReceivableFee.setCustomerName(item.getCustomerName());
//            tmsReceivableFee.setProjectId(item.getProjectId());
//            tmsReceivableFee.setProjectName(item.getProjectName());
//
//             List<TmsReceivableFeeItem> tmsReceivableFeeItems = item.getTmsReceivableFeeItems();
//
//
//             BigDecimal totalRmbAmount = tmsReceivableFeeItems.stream()
//                    .filter(cItem -> "RMB".equals(cItem.getCurrency()))
//                    .map(TmsReceivableFeeItem::getRegisterAmount)
//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
//            tmsReceivableFee.setReceivableRMBAmount(totalRmbAmount);
//
//
//            BigDecimal totalHkbAmount = tmsReceivableFeeItems.stream()
//                    .filter(cItem -> "HKB".equals(cItem.getCurrency()))
//                    .map(TmsReceivableFeeItem::getRegisterAmount)
//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
//            tmsReceivableFee.setReceivableHKBAmount(totalHkbAmount);
//
//
//            tmsReceivableFee.setDispatchConfirmTime(item.getConfirmTime());
//            tmsReceivableFee.setCostGenerateTime(new Date());
//            tmsReceivableFee.setStatus(0);
//            tmsReceivableFee.setCreateBy(SecurityUtils.getUsername());
//             tmsReceivableFeeService.insertTmsReceivableFee(tmsReceivableFee);
//
//
//             tmsReceivableFeeItems.forEach(kItem -> {
//                 kItem.setHeadId(tmsReceivableFee.getId());
//             });
//             tmsReceivableFeeItemService.insertTmsReceivableFeeItemBatch(tmsReceivableFeeItems);
//         });
        tmsPayableFeeList.forEach(tmsPayableFee ->{
            String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YFFY);
            tmsPayableFee.setSystemNo(noByKey);
            tmsPayableFee.setCostGenerateTime(new Date());
            tmsPayableFee.setCreateBy(SecurityUtils.getUsername());
            tmsPayableFeeMapper.insertTmsPayableFee(tmsPayableFee);
            List<TmsPayableFeeItem> customerItems = tmsPayableFee.getPayableFeeItems();
            customerItems.forEach(kItem -> {
                kItem.setHeadId(tmsPayableFee.getId());
            });
            tmsPayableFeeItemMapper.insertTmsPayableFeeItemBatch(customerItems);
        });
        return AjaxResult.success();
    }
@@ -1123,6 +1143,21 @@
        return AjaxResult.success();
    }
    public String getServiceProviderName(String serviceProviderType,Integer serviceProviderId){
        if ("0".equals(serviceProviderType)){
            TmsServiceProvider tmsServiceProvider = tmsServiceProviderMapper.selectTmsServiceProviderById(serviceProviderId);
            return tmsServiceProvider.getServiceName();
        } else   if ("1".equals(serviceProviderType)){
            TmsCustomsServiceProvider tmsCustomsServiceProvider = tmsCustomsServiceProviderMapper.selectTmsCustomsServiceProviderById(serviceProviderId);
            return tmsCustomsServiceProvider.getServiceName();
        } else   if ("2".equals(serviceProviderType)){
            TmsLoadingServiceProvider tmsLoadingServiceProvider = tmsLoadingServiceProviderMapper.selectTmsLoadingServiceProviderById(serviceProviderId);
            return tmsLoadingServiceProvider.getServiceName();
        }
        return null;
    }
    @Override
    public List<DpDriverDispatchVo> selectDpData() {
        return tmsDispatchOrderMapper.selectselectDpData();
@@ -1132,4 +1167,9 @@
    public DpDriverDispatchItemVo selectDataByNo(String no) {
        return tmsDispatchOrderMapper.selectDataByNo(no);
    }
    @Override
    public List<DpItineraryLogVo> selectItineraryLog() {
        return tmsDispatchOrderMapper.selectItineraryLog();
    }
}