zhangback
2025-12-29 13796df077a2ccba587667e233f7cb48ea6c73b6
tms/src/main/java/com/ruoyi/tms/service/impl/TmsDispatchOrderServiceImpl.java
@@ -1,11 +1,11 @@
package com.ruoyi.tms.service.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -15,15 +15,15 @@
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.ISystemDataNoService;
import com.ruoyi.tms.domain.*;
import com.ruoyi.tms.domain.vo.DpDriverDispatchVo;
import com.ruoyi.tms.domain.vo.DriverDispatchVo;
import com.ruoyi.tms.mapper.TmsFinanceMapper;
import com.ruoyi.tms.mapper.TmsQuoteDetailMapper;
import com.ruoyi.tms.mapper.TmsQuotePlanMapper;
import com.ruoyi.tms.service.ITmsDriverDispatchService;
import com.ruoyi.tms.service.ITmsFinanceService;
import com.ruoyi.tms.domain.vo.ServiceProviderVo;
import com.ruoyi.tms.mapper.*;
import com.ruoyi.tms.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
@@ -36,8 +36,6 @@
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.tms.mapper.TmsDispatchOrderMapper;
import com.ruoyi.tms.service.ITmsDispatchOrderService;
import com.ruoyi.common.core.text.Convert;
/**
@@ -68,6 +66,27 @@
    @Autowired
    ITmsFinanceService tmsFinanceService;
    @Autowired
    private ITmsFinanceDetailService tmsFinanceDetailService;
    @Autowired
    private ITmsQuoteFeeService tmsQuoteFeeService;
    @Autowired
    ISysDictDataService sysDictDataService;
    @Autowired
    private ITmsReceivableFeeService tmsReceivableFeeService;
    @Autowired
    private ITmsReceivableFeeItemService tmsReceivableFeeItemService;
    @Autowired
    private TmsDriverDispatchServiceImpl tmsDriverDispatchServiceImpl;
    @Resource
    private TmsLoadingServiceProviderMapper tmsLoadingServiceProviderMapper;
    @Resource
    private TmsServiceProviderMapper tmsServiceProviderMapper;
    @Resource
    private TmsCustomsServiceProviderMapper tmsCustomsServiceProviderMapper;
    /**
     * 查询调度单管理
     *
@@ -186,6 +205,26 @@
        driverDispatch.setStatus(2);
        tmsDriverDispatchService.insertTmsDriverDispatch(driverDispatch);
        return AjaxResult.success();
    }
    @Override
    public int customsOrder(TmsDispatchOrder tmsDispatchOrder) {
        return tmsDispatchOrderMapper.update(new LambdaUpdateWrapper<TmsDispatchOrder>()
                .eq(TmsDispatchOrder::getId, tmsDispatchOrder.getId())
                .set(TmsDispatchOrder::getCustomsServiceProviderId, tmsDispatchOrder.getCustomsServiceProviderId())
                .set(TmsDispatchOrder::getCustomsServiceProviderName, tmsDispatchOrder.getCustomsServiceProviderName())
        );
    }
    @Override
    public int loadingOrder(TmsDispatchOrder tmsDispatchOrder) {
        return tmsDispatchOrderMapper.update(new LambdaUpdateWrapper<TmsDispatchOrder>()
                .eq(TmsDispatchOrder::getId, tmsDispatchOrder.getId())
                .set(TmsDispatchOrder::getLoadingServiceProviderId, tmsDispatchOrder.getLoadingServiceProviderId())
                .set(TmsDispatchOrder::getLoadingServiceProviderName, tmsDispatchOrder.getLoadingServiceProviderName())
        );
    }
    @Override
@@ -413,6 +452,10 @@
        List<TmsDispatchOrder> tmsDispatchOrders = tmsDispatchOrderMapper.selectBatchIds(ids);
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(tmsDispatchOrder -> {
                // 1、是否是外协
//                tmsDispatchOrder.is
                // 客户ID
                Integer customerId = tmsDispatchOrder.getCustomerId();
@@ -481,8 +524,398 @@
    }
    @Override
    public List<TmsDispatchOrder> initYSGenerate(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = tmsDispatchOrderMapper.selectBatchIds(ids);
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(tmsDispatchOrder -> {
                List<TmsReceivableFeeItem> tmsReceivableFeeItems = new ArrayList<>();
                if (tmsDispatchOrder.getAccountsReceivableStatus() != null &&
                        tmsDispatchOrder.getAccountsReceivableStatus() == 1){
                    throw new RuntimeException(tmsDispatchOrder.getDispatchNo()+"应收账单已生成,请先作废");
                }
                // 客户ID
                Integer customerId = tmsDispatchOrder.getCustomerId();
                // 1、是否是自营  0 = 是 1 = 否 获取运费
                //if(tmsDispatchOrder.getOperationMode().equals(1)){
                    // 非自营需要有运费
                    // 车辆服务商
                    // 实际车型
                    String actualVehicleType = tmsDispatchOrder.getActualVehicleType();
                    // 出发路线 44,4404,440402,440402102
                    String shipperRegionCode = tmsDispatchOrder.getStartRegionCode();
                    // 目的地路线 81,8100,810000
                    String receiverRegionCode = tmsDispatchOrder.getEndRegionCode();
                    // 查询应收规则
                    TmsQuoteDetail tmsQuoteDetail = tmsQuoteDetailMapper.selectOne(new LambdaQueryWrapper<TmsQuoteDetail>()
                            .eq(TmsQuoteDetail::getCustomerId, customerId)
                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                            .eq(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                            .eq(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                            .eq(TmsQuoteDetail::getPlanType, 0)
                            .last("limit 1")
                    );
                    if (tmsQuoteDetail == null){
                        throw new RuntimeException("调度单"+tmsDispatchOrder.getDispatchNo()+"未维护应收运费报价,请维护数据后再重新生成");
                    }
                    if (tmsQuoteDetail.getIsSegmentedInvoice() == 1){
                        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);
                    }else{
                        TmsReceivableFeeItem tmsReceivableFeeItemOne = new TmsReceivableFeeItem();
                        tmsReceivableFeeItemOne.setFeeType(0);
                        tmsReceivableFeeItemOne.setFeeName("一段运费");
                        tmsReceivableFeeItemOne.setTypeId(tmsQuoteDetail.getId());
                        tmsReceivableFeeItemOne.setRegisterAmount(tmsQuoteDetail.getSegment1FreightQuote());
                        tmsReceivableFeeItemOne.setRegisterTime(tmsDispatchOrder.getConfirmTime());
                        tmsReceivableFeeItemOne.setCurrency(tmsQuoteDetail.getSegment1Currency());
                        tmsReceivableFeeItemOne.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItemOne);
                        TmsReceivableFeeItem tmsReceivableFeeItemTwo = new TmsReceivableFeeItem();
                        tmsReceivableFeeItemTwo.setFeeType(0);
                        tmsReceivableFeeItemTwo.setFeeName("二段运费");
                        tmsReceivableFeeItemTwo.setTypeId(tmsQuoteDetail.getId());
                        tmsReceivableFeeItemTwo.setRegisterAmount(tmsQuoteDetail.getSegment2FreightQuote());
                        tmsReceivableFeeItemTwo.setRegisterTime(tmsDispatchOrder.getConfirmTime());
                        tmsReceivableFeeItemTwo.setCurrency(tmsQuoteDetail.getSegment2Currency());
                        tmsReceivableFeeItemTwo.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItemTwo);
                    }
                //}
                // 2、 获取实报实销费用
                List<TmsFinanceDetail> tmsFinanceDetails = tmsFinanceDetailService.selectTmsFinanceDetailList(new TmsFinanceDetail() {{
                    setDispatchOrderId(tmsDispatchOrder.getId());
                }});
                if (tmsFinanceDetails != null && !tmsFinanceDetails.isEmpty()){
                    tmsFinanceDetails.forEach(tmsFinanceDetail -> {
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.setFeeType(2);
                        String feeName = sysDictDataService.selectDictLabel("fee_type", tmsFinanceDetail.getFeeType());
                        tmsReceivableFeeItem.setFeeName(feeName);
                        tmsReceivableFeeItem.setTypeId(tmsFinanceDetail.getId());
                        tmsReceivableFeeItem.setRegisterAmount(tmsFinanceDetail.getActualFeeAmount());
                        tmsReceivableFeeItem.setRegisterTime(tmsFinanceDetail.getUpdateTime());
                        tmsReceivableFeeItem.setCurrency(tmsFinanceDetail.getCurrency());
                        tmsReceivableFeeItem.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                    });
                }
                // 3、 获取报价费用
//                tmsDispatchOrder.is
                List<TmsQuoteFee> tmsQuoteFees = tmsQuoteFeeService.selectTmsQuoteFeeList(new TmsQuoteFee() {{
                    setDispatchId(tmsDispatchOrder.getId());
                }});
                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.getSum());
                        tmsReceivableFeeItem.setRegisterTime(item.getCreateTime());
                        tmsReceivableFeeItem.setCurrency(item.getCurrency());
                        tmsReceivableFeeItem.setRowKey(IdUtil.objectId());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                    });
                }
                tmsDispatchOrder.setTmsReceivableFeeItems(tmsReceivableFeeItems);
            });
        }
        return tmsDispatchOrders;
    }
    @Override
    public List<TmsDispatchOrder> initYFGenerate(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = tmsDispatchOrderMapper.selectBatchIds(ids);
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(tmsDispatchOrder -> {
                List<TmsReceivableFeeItem> tmsReceivableFeeItems = new ArrayList<>();
                if (tmsDispatchOrder.getAccountsPayableStatus() != null &&
                        tmsDispatchOrder.getAccountsPayableStatus() == 1){
                    throw new RuntimeException(tmsDispatchOrder.getDispatchNo()+"应付账单已生成,请先作废");
                }
                // 客户ID
                Integer customerId = tmsDispatchOrder.getCustomerId();
                // 1、是否是自营  0 = 是 1 = 否 获取运费
                if(tmsDispatchOrder.getOperationMode().equals(1)){
                    // 非自营需要有运费
                    // 车辆服务商
                    Integer vehicleProviderId = tmsDispatchOrder.getVehicleProviderId();
                    // 实际车型
                    String actualVehicleType = tmsDispatchOrder.getActualVehicleType();
                    // 出发路线 44,4404,440402,440402102
                    String shipperRegionCode = tmsDispatchOrder.getStartRegionCode();
                    // 目的地路线 81,8100,810000
                    String receiverRegionCode = tmsDispatchOrder.getEndRegionCode();
                    // 查询应收规则
                    TmsQuoteDetail tmsQuoteDetail =
                            tmsQuoteDetailMapper.selectOne(
                                    new LambdaQueryWrapper<TmsQuoteDetail>()
                                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                                            .eq(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                                            .eq(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                                            .eq(TmsQuoteDetail::getPlanType, 1)
                                            .exists(
                                                    "SELECT 1 " +
                                                            "FROM tms_quote_plan tqp " +
                                                            "WHERE tqp.id = tms_quote_detail.quote_plan_id " +
                                                            "AND tqp.provider_id = {0} " +
                                                            "AND tqp.plan_type = 1 " +
                                                            "AND tqp.provider_type = 0",
                                                    vehicleProviderId
                                            )
                                            .last("LIMIT 1")
                            );
                    if (tmsQuoteDetail == null){
                        throw new RuntimeException("调度单"+tmsDispatchOrder.getDispatchNo()+"未维护应付运费报价,请维护数据后再重新生成");
                    }
                        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);
                }
                // 2、 获取实报实销费用
                List<TmsFinanceDetail> tmsFinanceDetails = tmsFinanceDetailService.selectTmsFinanceDetailList(new TmsFinanceDetail() {{
                    setDispatchOrderId(tmsDispatchOrder.getId());
                    setIsYF(1);
                }});
                if (tmsFinanceDetails != null && !tmsFinanceDetails.isEmpty()){
                    tmsFinanceDetails.forEach(tmsFinanceDetail -> {
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.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);
                    });
                }
                // 3、 获取报价费用
//                tmsDispatchOrder.is
                List<TmsQuoteFee> tmsQuoteFees = tmsQuoteFeeService.selectTmsQuoteFeeList(new TmsQuoteFee() {{
                    setDispatchId(tmsDispatchOrder.getId());
                    setIsYF(1);
                }});
                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());
                        tmsReceivableFeeItems.add(tmsReceivableFeeItem);
                    });
                }
                tmsDispatchOrder.setTmsReceivableFeeItems(tmsReceivableFeeItems);
            });
        }
        return tmsDispatchOrders;
    }
    @Override
    public AjaxResult ysGenerateTmsDispatchOrder(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = initYSGenerate(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<TmsDispatchOrder> collect = tmsDispatchOrders.stream().map(item -> {
            TmsDispatchOrder tmsDispatchOrder = new TmsDispatchOrder();
            tmsDispatchOrder.setId(item.getId());
            tmsDispatchOrder.setAccountsReceivableStatus(1);
            tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
            return tmsDispatchOrder;
        }).collect(Collectors.toList());
        // 1、修改调度
        tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(collect);
        // 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 -> "HKD".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);
         });
        return AjaxResult.success();
    }
    @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<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());
        // 1、修改调度
        tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(collect);
        // 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);
//         });
        return AjaxResult.success();
    }
    @Override
    public AjaxResult generateTmsDispatchOrder(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = initGenerate(ids);
        List<TmsDispatchOrder> collect1 = tmsDispatchOrders.stream().filter(item -> item.getIsCustoms() == 0 && item.getCustomsServiceProviderId() == null).collect(Collectors.toList());
        if (!collect1.isEmpty()){
            String disNos = collect1.stream().map(TmsDispatchOrder::getDispatchNo).collect(Collectors.joining(","));
            return AjaxResult.error("调度单"+disNos+"未补充委托报关信息");
        }
        List<TmsDispatchOrder> collect2 = tmsDispatchOrders.stream().filter(item -> item.getIsLoad() == 0 && item.getLoadingServiceProviderId() == null).collect(Collectors.toList());
        if (!collect2.isEmpty()){
            String disNos = collect2.stream().map(TmsDispatchOrder::getDispatchNo).collect(Collectors.joining(","));
            return AjaxResult.error("调度单"+disNos+"未补充装卸货信息");
        }
        List<TmsDispatchOrder> receivableList = tmsDispatchOrders.stream().filter(item -> item.getAccountsReceivableStatus() == 0).collect(Collectors.toList());
        if (!receivableList.isEmpty()){
            List<TmsDispatchOrder> collect = receivableList.stream().map(item -> {
@@ -544,4 +977,85 @@
        return AjaxResult.success();
    }
    @Override
    public AjaxResult getServiceProvider(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.
                selectTmsDispatchOrderById(id);
        List<ServiceProviderVo> serviceProviderVos = new ArrayList<>();
        if (tmsDispatchOrder != null){
            if (tmsDispatchOrder.getLoadingServiceProviderId() != null){
                serviceProviderVos.add(new ServiceProviderVo(tmsDispatchOrder.getLoadingServiceProviderId(),
                        tmsDispatchOrder.getLoadingServiceProviderName(),
                        "2"));
            }
            if (tmsDispatchOrder.getCustomsServiceProviderId() != null){
                serviceProviderVos.add(new ServiceProviderVo(tmsDispatchOrder.getCustomsServiceProviderId(),
                        tmsDispatchOrder.getCustomsServiceProviderName(),
                        "1"));
            }
            if (tmsDispatchOrder.getVehicleProviderId() != null){
                serviceProviderVos.add(new ServiceProviderVo(tmsDispatchOrder.getVehicleProviderId(),
                        tmsDispatchOrder.getVehicleProviderName(),
                        "0"));
            }
            // 查询
            List<TmsQuoteFee> tmsQuoteFees = tmsQuoteFeeService.selectTmsQuoteFeeList(new TmsQuoteFee() {{
                setDispatchId(id);
            }});
            if (tmsQuoteFees != null && !tmsQuoteFees.isEmpty()){
                List<ServiceProviderVo> collect = tmsQuoteFees.stream()
                        .collect(Collectors.collectingAndThen(
                                Collectors.toMap(
                                        item -> item.getServiceProviderId() + "_" + item.getServiceProviderType(),
                                        item -> new ServiceProviderVo(
                                                item.getServiceProviderId(),
                                                null,
                                                item.getServiceProviderType()
                                        ),
                                        (a, b) -> a
                                ),
                                m -> new ArrayList<>(m.values())
                        ));
                collect.forEach(item -> {
                    if ("0".equals(item.getServiceProviderType())){
                        TmsServiceProvider tmsServiceProvider = tmsServiceProviderMapper.selectTmsServiceProviderById(item.getServiceProviderId());
                        item.setServiceProviderName(tmsServiceProvider.getServiceName());
                    } else   if ("1".equals(item.getServiceProviderType())){
                        TmsCustomsServiceProvider tmsCustomsServiceProvider = tmsCustomsServiceProviderMapper.selectTmsCustomsServiceProviderById(item.getServiceProviderId());
                        item.setServiceProviderName(tmsCustomsServiceProvider.getServiceName());
                    } else   if ("2".equals(item.getServiceProviderType())){
                        TmsLoadingServiceProvider tmsLoadingServiceProvider = tmsLoadingServiceProviderMapper.selectTmsLoadingServiceProviderById(item.getServiceProviderId());
                        item.setServiceProviderName(tmsLoadingServiceProvider.getServiceName());
                    }
                    serviceProviderVos.add(item);
                });
                ArrayList<ServiceProviderVo> collect1 = serviceProviderVos.stream().collect(Collectors.collectingAndThen(
                        Collectors.toMap(
                                item -> item.getServiceProviderId() + "_" + item.getServiceProviderType(),
                                item -> new ServiceProviderVo(
                                        item.getServiceProviderId(),
                                        item.getServiceProviderName(),
                                        item.getServiceProviderType()
                                ),
                                (a, b) -> a
                        ),
                        m -> new ArrayList<>(m.values())
                ));
                return AjaxResult.success(collect1);
            }
        }else{
            return AjaxResult.error("调度单不存在");
        }
        return AjaxResult.success();
    }
    @Override
    public List<DpDriverDispatchVo> selectDpData() {
        return tmsDispatchOrderMapper.selectselectDpData();
    }
}