zhangback
2026-03-10 68b27795ae929f5300fc6fb301b31aada74a2e2f
tms/src/main/java/com/ruoyi/tms/service/impl/TmsDispatchOrderServiceImpl.java
@@ -8,21 +8,26 @@
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.annotation.Excel;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.SysUserImport;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.SystemDataNoEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.DownloadExportUtil;
import com.ruoyi.common.utils.poi.ExcelUtil;
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.DriverDispatchVo;
import com.ruoyi.tms.mapper.TmsFinanceMapper;
import com.ruoyi.tms.mapper.TmsQuoteDetailMapper;
import com.ruoyi.tms.mapper.TmsQuotePlanMapper;
import com.ruoyi.tms.domain.vo.*;
import com.ruoyi.tms.mapper.*;
import com.ruoyi.tms.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -36,7 +41,6 @@
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.tms.mapper.TmsDispatchOrderMapper;
import com.ruoyi.common.core.text.Convert;
/**
@@ -64,6 +68,8 @@
    @Resource
    private TmsQuotePlanMapper tmsQuotePlanMapper;
    @Autowired
    private RedisCache redisCache;
    @Autowired
    ITmsFinanceService tmsFinanceService;
@@ -79,6 +85,42 @@
    private ITmsReceivableFeeService tmsReceivableFeeService;
    @Autowired
    private ITmsReceivableFeeItemService tmsReceivableFeeItemService;
    @Autowired
    private TmsDriverDispatchServiceImpl tmsDriverDispatchServiceImpl;
    @Resource
    private TmsLoadingServiceProviderMapper tmsLoadingServiceProviderMapper;
    @Resource
    private TmsServiceProviderMapper tmsServiceProviderMapper;
    @Resource
    private TmsCustomsServiceProviderMapper tmsCustomsServiceProviderMapper;
    @Resource
    private  TmsTripMapper tmsTripMapper;
    @Resource
    private TmsPayableFeeMapper tmsPayableFeeMapper;
    @Resource
    private TmsPayableFeeItemMapper tmsPayableFeeItemMapper;
    @Resource
    private TmsProjectMapper tmsProjectMapper;
    @Resource
    TransportRouteViMapper transportRouteViMapper;
    @Resource
    private TmsDriverMapper tmsDriverMapper;
    @Resource
    private TmsVehicleMapper tmsVehicleMapper;
    @Resource
    private TmsConsignorMapper tmsConsignorMapper;
    @Resource
    private TmsContainerMapper tmsContainerMapper;
    @Resource
    private TmsShelfMapper tmsShelfMapper;
    @Autowired
    private ITmsDispatchOrderImportLogService tmsDispatchOrderImportLogService;
    /**
     * 查询调度单管理
@@ -158,6 +200,9 @@
        tmsDispatchOrderNew.setLicensePlate(null);
        tmsDispatchOrderNew.setUpdateBy(null);
        tmsDispatchOrderNew.setId(null);
        tmsDispatchOrderNew.setAccountsReceivableStatus(0);
        tmsDispatchOrderNew.setAccountsPayableStatus(0);
        int i = insertTmsDispatchOrder(tmsDispatchOrderNew);
@@ -188,6 +233,27 @@
        return AjaxResult.success("操作成功");
    }
    @Override
    public AjaxResult close(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(id);
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        if (tmsDispatchOrder.getIsfk() == 0){
            return AjaxResult.success();
        }
        TmsTrip tmsTrip = tmsTripMapper.selectOne(new LambdaQueryWrapper<TmsTrip>().eq(TmsTrip::getDispatchOrderId, id)
                .eq(TmsTrip::getTripType, 0)
                .orderByDesc(TmsTrip::getId)
                .last("limit 1")
        );
        if (tmsTrip != null){
            return AjaxResult.error("该调度单状态为【在途】,且司机于【"+DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tmsTrip.getTripTime())+"】已发车,不允许作废,如需取消行程," +
                    "请通知司机操作返空即可。");
        }
        return AjaxResult.success("操作成功");
    }
    @Override
    public AjaxResult connectHang(TmsDriverDispatch driverDispatch) {
@@ -200,6 +266,27 @@
        return AjaxResult.success();
    }
    @Override
    public AjaxResult closeOrder(TmsDispatchOrder order) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(order.getId());
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        AjaxResult close = close(tmsDispatchOrder.getId());
        if (close.isSuccess()){
            tmsDispatchOrder.setStatus(5);
            tmsDispatchOrder.setCloseBy(SecurityUtils.getUsername());
            tmsDispatchOrder.setCloseTime(DateUtils.getNowDate());
            tmsDispatchOrder.setCloseRemark(tmsDispatchOrder.getCloseRemark());
            tmsDispatchOrder.setCloseWhy(tmsDispatchOrder.getCloseWhy());
            tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
            // TODO 加日志
            return AjaxResult.success("操作成功");
        }else{
            return close;
        }
    }
    @Override
    public int customsOrder(TmsDispatchOrder tmsDispatchOrder) {
@@ -346,6 +433,342 @@
        });
    }
    @Override
    public void importTemplate(String exportKey) {
        String fileName = ExcelUtil.encodeFileName("tmsDispatchOrderDataTemplate");
        DownloadExportUtil.deleteDownloadFile(redisCache, exportKey, "0");
        try {
            ExcelUtil<TmsDispatchOrderImport> excelUtil = new ExcelUtil<>(TmsDispatchOrderImport.class);
            excelUtil.initialize("tmsDispatchOrderDataTemplate", null, Excel.Type.EXPORT);
            TmsDispatchOrderImport tmsDispatchOrderImport = new TmsDispatchOrderImport();
            tmsDispatchOrderImport.setProjectName("XXX项目");
            tmsDispatchOrderImport.setTransportLine("广东省/珠海市/香洲区->香港特别行政区");
            tmsDispatchOrderImport.setRequiredVehicleTypes("10T");
            tmsDispatchOrderImport.setOrderType("基础订单");
            tmsDispatchOrderImport.setIsCustoms("是");
            tmsDispatchOrderImport.setIsLoad("是");
            tmsDispatchOrderImport.setIsUrgent("是");
            tmsDispatchOrderImport.setOrderTime(DateUtils.getNowDate());
            tmsDispatchOrderImport.setLatestDeparture(DateUtils.getNowDate());
            tmsDispatchOrderImport.setLatestArrival(DateUtils.getNowDate());
            tmsDispatchOrderImport.setOperationMode("是");
            tmsDispatchOrderImport.setCommissionModel("一日游");
            tmsDispatchOrderImport.setMainDriverName("张三");
            tmsDispatchOrderImport.setLicensePlate("粤C12345");
            tmsDispatchOrderImport.setShipperRegionLabel("ZXH202512110002");
            tmsDispatchOrderImport.setReceiverRegionLabel("ZXH202512110001");
            excelUtil.exportExcel(Collections.singletonList(tmsDispatchOrderImport));
            excelUtil.finishExport(fileName);
            // 设置下载完成状态
            DownloadExportUtil.setDownloadFile(redisCache, exportKey, fileName);
            logger.info("Export completed for key: {}, file: {}", exportKey, fileName);
        } catch (Exception e) {
            logger.error("Export failed for key: {}, error: {}", exportKey, e.getMessage(), e);
            DownloadExportUtil.deleteDownloadFile(redisCache, exportKey, "1"); // 设置失败状态
            throw e;
        }
    }
    private String verRequired(int line,TmsDispatchOrderImport tmsDispatchOrderImport){
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getProjectName())){
            return "第 "+line+" 行 项目名称 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getTransportLine())){
            return "第 "+line+" 行 运输线路 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getRequiredVehicleTypes())){
            return "第 "+line+" 行 下单车型 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getOrderType())){
            return "第 "+line+" 行 订单类型 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getIsCustoms())){
            return "第 "+line+" 行 委托报关 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getIsLoad())){
            return "第 "+line+" 行 委托装卸 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getIsUrgent())){
            return "第 "+line+" 行 是否紧急 不能为空!";
        }
        if (tmsDispatchOrderImport.getOrderTime() == null){
            return "第 "+line+" 行 下单时间 不能为空!";
        }
        if (tmsDispatchOrderImport.getLatestArrival() == null){
            return "第 "+line+" 行 要求最晚到达时间 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getOperationMode())){
            return "第 "+line+" 行 是否是自营车队 不能为空!";
        }
        if ("0".equals(tmsDispatchOrderImport.getOperationMode())){
            if (StringUtils.isEmpty(tmsDispatchOrderImport.getCommissionModel())){
                throw new ServiceException("第"+line+"行自营车队必填提成模式!");
            }
        }
        if ("1".equals(tmsDispatchOrderImport.getOperationMode())){
            if (StringUtils.isEmpty(tmsDispatchOrderImport.getVehicleProviderName())){
                throw new ServiceException("第"+line+"行 非自营车队 必填车辆服务商名称!");
            }
        }
        if ( StringUtils.isEmpty(tmsDispatchOrderImport.getProjectName())){
            return "第 "+line+" 行 下单时间 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getMainDriverName())){
            return "第 "+line+" 行 主驾驶员 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getLicensePlate())){
            return "第 "+line+" 行 车牌号 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getShipperRegionLabel())){
            return "第 "+line+" 行 装货点编码 不能为空!";
        }
        if (StringUtils.isEmpty(tmsDispatchOrderImport.getReceiverRegionLabel())){
            return "第 "+line+" 行 卸货地编码 不能为空!";
        }
        return null;
    }
    @Override
    public String importData(List<TmsDispatchOrderImport> list) {
        if (StringUtils.isNull(list) || list.isEmpty())
        {
            throw new ServiceException("导入调度单数据不能为空!");
        }
        int failureNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        StringBuilder failureDescription = new StringBuilder();
        int line = 1;
        // 创建导入日志对象
        TmsDispatchOrderImportLog importLog = new TmsDispatchOrderImportLog();
        importLog.setImportTime(DateUtils.getNowDate());
        importLog.setFileName("调度单导入文件"); // 这里需要根据实际情况获取文件名
        importLog.setOperator(SecurityUtils.getUsername());
        importLog.setCreateBy(SecurityUtils.getUsername());
        importLog.setCreateTime(DateUtils.getNowDate());
        for (TmsDispatchOrderImport tmsDispatchOrderImport : list){
            try
            {
                String s = verRequired(line, tmsDispatchOrderImport);
                if (s != null){
                    throw new ServiceException(s);
                }
                TmsDispatchOrder tmsDispatchOrder = new TmsDispatchOrder();
                String projectName = tmsDispatchOrderImport.getProjectName();
                TmsProject tmsProject = tmsProjectMapper.selectOne(new LambdaQueryWrapper<TmsProject>().
                        eq(TmsProject::getProjectName, projectName)
                        .last("limit 1"));
                if (tmsProject == null){
                    throw new ServiceException("第"+line+"行项目不存在!");
                }
                TransportRouteVi transportRouteVi = transportRouteViMapper.selectOne(new LambdaQueryWrapper<TransportRouteVi>()
                        .eq(TransportRouteVi::getTransportRoute, tmsDispatchOrderImport.getTransportLine())
                        .eq(TransportRouteVi::getProjectId, tmsProject.getId())
                        .eq(TransportRouteVi::getCustomerId, tmsProject.getRelatedCustomerId())
                        .eq(TransportRouteVi::getVehicleType, tmsDispatchOrderImport.getRequiredVehicleTypes())
                        .last("limit 1")
                );
                if (transportRouteVi == null){
                    throw new ServiceException("第"+line+"行线路信息不存在!");
                }
                tmsDispatchOrder.setQuoteDetailId(transportRouteVi.getQuoteDetailId());
                tmsDispatchOrder.setTransportLine(transportRouteVi.getTransportRoute());
                tmsDispatchOrder.setStartRegionCode(transportRouteVi.getStartRegionCode());
                tmsDispatchOrder.setEndRegionCode(transportRouteVi.getEndRegionCode());
                tmsDispatchOrder.setProjectName(transportRouteVi.getProjectName());
                tmsDispatchOrder.setProjectId(transportRouteVi.getProjectId());
                // 关联客户
                tmsDispatchOrder.setCustomerId(transportRouteVi.getCustomerId());
                tmsDispatchOrder.setCustomerName(transportRouteVi.getCustomerFullName());
                tmsDispatchOrder.setCustomerCode(transportRouteVi.getCustomerCode());
                tmsDispatchOrder.setContractId(transportRouteVi.getContractId());
                tmsDispatchOrder.setContractName(transportRouteVi.getContractName());
                tmsDispatchOrder.setRequiredVehicleTypes(tmsDispatchOrderImport.getRequiredVehicleTypes());
                tmsDispatchOrder.setQuotePlanId(transportRouteVi.getQuotePlanId());
                tmsDispatchOrder.setOrderType(Integer.valueOf(tmsDispatchOrderImport.getOrderType()));
                tmsDispatchOrder.setIsCustoms(Integer.valueOf(tmsDispatchOrderImport.getIsCustoms()));
                tmsDispatchOrder.setIsLoad(Integer.valueOf(tmsDispatchOrderImport.getIsLoad()));
                tmsDispatchOrder.setIsUrgent(Integer.valueOf(tmsDispatchOrderImport.getIsUrgent()));
                tmsDispatchOrder.setOrderTime(tmsDispatchOrderImport.getOrderTime());
                tmsDispatchOrder.setLatestDeparture(tmsDispatchOrderImport.getLatestDeparture());
                tmsDispatchOrder.setLatestArrival(tmsDispatchOrderImport.getLatestArrival());
                tmsDispatchOrder.setOperationMode(Integer.valueOf(tmsDispatchOrderImport.getOperationMode()));
                if (tmsDispatchOrder.getOperationMode() == 0){
                   tmsDispatchOrder.setCommissionModel(Integer.valueOf(tmsDispatchOrderImport.getCommissionModel()));
                } else {
                    TmsServiceProvider tmsServiceProvider = tmsServiceProviderMapper.selectOne(new LambdaQueryWrapper<TmsServiceProvider>().
                            eq(TmsServiceProvider::getServiceName,
                                    tmsDispatchOrderImport.getVehicleProviderName())
                            .last("limit 1")
                    );
                    if (tmsServiceProvider == null){
                        throw new ServiceException("第"+line+"行车辆服务商不存在!");
                    }
                    tmsDispatchOrder.setVehicleProviderId(tmsServiceProvider.getId());
                    tmsDispatchOrder.setVehicleProviderName(tmsServiceProvider.getServiceName());
                }
                TmsDriver tmsDriver = tmsDriverMapper.selectOne(new LambdaQueryWrapper<TmsDriver>().
                        eq(TmsDriver::getDriverName, tmsDispatchOrderImport.getMainDriverName())
                        .last("limit 1")
                );
                if (tmsDriver == null){
                    throw new ServiceException("第"+line+"行主驾驶员不存在!");
                }
                tmsDispatchOrder.setMainDriverId(tmsDriver.getId());
                tmsDispatchOrder.setMainDriverName(tmsDriver.getDriverName());
                if (!StringUtils.isEmpty(tmsDispatchOrderImport.getAssistantDriverName())){
                    TmsDriver tmsDriver1 = tmsDriverMapper.selectOne(new LambdaQueryWrapper<TmsDriver>().
                        eq(TmsDriver::getDriverName, tmsDispatchOrderImport.getAssistantDriverName())
                        .last("limit 1")
                    );
                    if (tmsDriver1 != null){
                        tmsDispatchOrder.setAssistantDriverId(tmsDriver1.getId());
                        tmsDispatchOrder.setAssistantDriverName(tmsDriver1.getDriverName());
                    }
                }
                TmsVehicle tmsVehicle = tmsVehicleMapper.selectOne(new LambdaQueryWrapper<TmsVehicle>()
                        .eq(TmsVehicle::getLicensePlate, tmsDispatchOrderImport.getLicensePlate())
                        .last("limit 1")
                );
                if (tmsVehicle == null){
                    throw new ServiceException("第"+line+"行车牌号不存在!");
                }
                tmsDispatchOrder.setVehicleId(tmsVehicle.getId());
                tmsDispatchOrder.setLicensePlate(tmsVehicle.getLicensePlate());
                tmsDispatchOrder.setActualVehicleType(tmsVehicle.getVehicleType());
                TmsConsignor shipper = tmsConsignorMapper.selectOne(new LambdaQueryWrapper<TmsConsignor>()
                        .eq(TmsConsignor::getConsignorCode,
                                tmsDispatchOrderImport.getShipperRegionLabel())
                        .eq(TmsConsignor::getCustomerId, tmsDispatchOrder.getCustomerId())
                        .last("limit 1")
                );
                if (shipper == null){
                    throw new ServiceException("第"+line+"行装货点不存在!");
                }
                tmsDispatchOrder.setShipperId(shipper.getId());
                tmsDispatchOrder.setShipperName(shipper.getConsignorName());
                tmsDispatchOrder.setShipperRegionLabel(shipper.getRegionLabel());
                tmsDispatchOrder.setShipperAddress(shipper.getAddressDetail());
                tmsDispatchOrder.setShipperMobile(shipper.getContactPhone());
                tmsDispatchOrder.setShipperRegionCode(shipper.getRegion());
                TmsConsignor receiver = tmsConsignorMapper.selectOne(new LambdaQueryWrapper<TmsConsignor>()
                        .eq(TmsConsignor::getConsignorCode,
                                tmsDispatchOrderImport.getReceiverRegionLabel())
                        .eq(TmsConsignor::getCustomerId, tmsDispatchOrder.getCustomerId())
                        .last("limit 1")
                );
                if (receiver == null){
                    throw new ServiceException("第"+line+"行卸货地不存在!");
                }
                tmsDispatchOrder.setReceiverId(receiver.getId());
                tmsDispatchOrder.setReceiverName(receiver.getConsignorName());
                tmsDispatchOrder.setReceiverRegionLabel(receiver.getRegionLabel());
                tmsDispatchOrder.setReceiverAddress(receiver.getAddressDetail());
                tmsDispatchOrder.setReceiverMobile(receiver.getContactPhone());
                tmsDispatchOrder.setReceiverRegionCode(receiver.getRegion());
                if (!StringUtils.isEmpty(tmsDispatchOrderImport.getContainerNo())){
                    TmsContainer tmsContainer = tmsContainerMapper.selectOne(new LambdaQueryWrapper<TmsContainer>()
                            .eq(TmsContainer::getContainerCode, tmsDispatchOrderImport.getContainerNo())
                            .last("limit 1")
                    );
                    if (tmsContainer == null){
                        throw new ServiceException("第"+line+"行集装箱不存在!");
                    }
                    tmsDispatchOrder.setContainerId(tmsContainer.getId());
                    tmsDispatchOrder.setContainerNo(tmsContainer.getContainerCode());
                }
                if (!StringUtils.isEmpty(tmsDispatchOrderImport.getShelfCode())){
                    TmsShelf tmsShelf = tmsShelfMapper.selectOne(new LambdaQueryWrapper<TmsShelf>()
                        .eq(TmsShelf::getShelfCode, tmsDispatchOrderImport.getShelfCode())
                        .last("limit 1")
                    );
                    if (tmsShelf == null){
                        throw new ServiceException("第"+line+"行托架不存在!");
                    }
                    tmsDispatchOrder.setShelfId(tmsShelf.getId());
                    tmsDispatchOrder.setShelfCode(tmsShelf.getShelfCode());
                }
                String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.DL);
                tmsDispatchOrder.setDispatchNo(noByKey);
                tmsDispatchOrder.setCreateBy(SecurityUtils.getUsername());
                tmsDispatchOrder.setCreateTime(DateUtils.getNowDate());
                tmsDispatchOrderMapper.insertTmsDispatchOrder(tmsDispatchOrder);
            }catch (Exception e) {
                failureNum++;
                String msg = "<br/>" +  "调度单第"+line+"行导入失败:";
                failureMsg.append(msg + e.getMessage());
                // 记录失败说明,包含行号和失败原因
                failureDescription.append("第" + line + "行:" + e.getMessage()).append("\n");
                log.error(msg, e);
            }finally {
                line++;
            }
        }
        // 设置导入日志的统计信息
        importLog.setSuccessCount(list.size() - failureNum);
        importLog.setFailureCount(failureNum);
        importLog.setFailureDescription(failureDescription.toString());
        // 保存导入日志
        try {
            tmsDispatchOrderImportLogService.insertTmsDispatchOrderImportLog(importLog);
        } catch (Exception e) {
            log.error("保存导入日志失败:", e);
        }
        if (failureNum > 0)
        {
            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
            throw new ServiceException(failureMsg.toString());
        }
        else
        {
            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + list.size() + " 条");
        }
        return successMsg.toString() ;
    }
    /**
     * 新增调度单管理
@@ -390,6 +813,52 @@
        tmsDispatchOrder.setUpdateTime(DateUtils.getNowDate());
        return tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
    }
    @Override
    public int updateTmsDispatchOrder(YpdddjDispatchOrderVo dispatchOrderVo)
    {
        return tmsDispatchOrderMapper.update(new LambdaUpdateWrapper<TmsDispatchOrder>()
                .in(TmsDispatchOrder::getDispatchNo,dispatchOrderVo.getDispatchNos())
                .set(dispatchOrderVo.getShipperId()!=null,TmsDispatchOrder::getShipperId,dispatchOrderVo.getShipperId())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getShipperName()),TmsDispatchOrder::getShipperName,dispatchOrderVo.getShipperName())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getShipperRegionLabel()),TmsDispatchOrder::getShipperRegionLabel,dispatchOrderVo.getShipperRegionLabel())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getShipperAddress()),TmsDispatchOrder::getShipperAddress,dispatchOrderVo.getShipperAddress())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getShipperMobile()),TmsDispatchOrder::getShipperMobile,dispatchOrderVo.getShipperMobile())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getShipperRegionCode()),TmsDispatchOrder::getShipperRegionCode,dispatchOrderVo.getShipperRegionCode())
                .set(dispatchOrderVo.getReceiverId()!=null,TmsDispatchOrder::getReceiverId,dispatchOrderVo.getReceiverId())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getReceiverName()),TmsDispatchOrder::getReceiverName,dispatchOrderVo.getReceiverName())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getReceiverRegionLabel()),TmsDispatchOrder::getReceiverRegionLabel,dispatchOrderVo.getReceiverRegionLabel())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getReceiverAddress()),TmsDispatchOrder::getReceiverAddress,dispatchOrderVo.getReceiverAddress())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getReceiverMobile()),TmsDispatchOrder::getReceiverMobile,dispatchOrderVo.getReceiverMobile())
                .set(StringUtils.isNotEmpty(dispatchOrderVo.getReceiverRegionCode()),TmsDispatchOrder::getReceiverRegionCode,dispatchOrderVo.getReceiverRegionCode())
                .set(TmsDispatchOrder::getUpdateBy,SecurityUtils.getUsername())
                .set(TmsDispatchOrder::getUpdateTime,DateUtils.getNowDate())
        );
    }
    @Override
    public int printDispatchOrder(TmsDispatchOrder tmsDispatchOrder)
    {
        return tmsDispatchOrderMapper.update(null,new LambdaUpdateWrapper<TmsDispatchOrder>()
                .eq(TmsDispatchOrder::getId,tmsDispatchOrder.getId())
                .set(TmsDispatchOrder::getIsPrint,0)
                        .setSql("print_count = IFNULL(print_count, 0) + 1")
                        .set(TmsDispatchOrder::getPrintTime,new Date())
                        .set(TmsDispatchOrder::getPrintBy,SecurityUtils.getUsername())
                        .set(TmsDispatchOrder::getSixLinkNo,tmsDispatchOrder.getSixLinkNo())
                        .set(TmsDispatchOrder::getPortName,tmsDispatchOrder.getPortName())
                        .set(TmsDispatchOrder::getBillNo,tmsDispatchOrder.getBillNo())
                        .set(TmsDispatchOrder::getTerminalName,tmsDispatchOrder.getTerminalName())
                        .set(TmsDispatchOrder::getCargoName,tmsDispatchOrder.getCargoName())
                        .set(TmsDispatchOrder::getPieceCount,tmsDispatchOrder.getPieceCount())
                        .set(TmsDispatchOrder::getWeight,tmsDispatchOrder.getWeight())
                        .set(TmsDispatchOrder::getContactName,tmsDispatchOrder.getContactName())
                        .set(TmsDispatchOrder::getContactPhone,tmsDispatchOrder.getContactPhone())
                );
    }
    /**
@@ -533,18 +1002,18 @@
                    // 非自营需要有运费
                    // 车辆服务商
                    // 实际车型
                    String actualVehicleType = tmsDispatchOrder.getActualVehicleType();
                    String actualVehicleType = tmsDispatchOrder.getRequiredVehicleTypes();
                    // 出发路线 44,4404,440402,440402102
                    String shipperRegionCode = tmsDispatchOrder.getStartRegionCode();
                    // 目的地路线 81,8100,810000
                    String receiverRegionCode = tmsDispatchOrder.getReceiverRegionCode();
                    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)
                            .likeRight(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                            .likeRight(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                            .eq(TmsQuoteDetail::getPlanType, 0)
                            .last("limit 1")
                    );
@@ -555,7 +1024,7 @@
                        throw new RuntimeException("调度单"+tmsDispatchOrder.getDispatchNo()+"未维护应收运费报价,请维护数据后再重新生成");
                    }
                    if (tmsQuoteDetail.getIsSegmentedInvoice() == 0){
                    if (tmsQuoteDetail.getIsSegmentedInvoice() == 1){
                        TmsReceivableFeeItem tmsReceivableFeeItem = new TmsReceivableFeeItem();
                        tmsReceivableFeeItem.setFeeType(0);
                        tmsReceivableFeeItem.setFeeName("运费");
@@ -646,11 +1115,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()+"应付账单已生成,请先作废");
@@ -667,33 +1136,48 @@
                    // 出发路线 44,4404,440402,440402102
                    String shipperRegionCode = tmsDispatchOrder.getStartRegionCode();
                    // 目的地路线 81,8100,810000
                    String receiverRegionCode = tmsDispatchOrder.getReceiverRegionCode();
                    String receiverRegionCode = tmsDispatchOrder.getEndRegionCode();
                    // 查询应收规则
                    TmsQuoteDetail tmsQuoteDetail = tmsQuoteDetailMapper.selectOne(new LambdaQueryWrapper<TmsQuoteDetail>()
                            .eq(TmsQuoteDetail::getVehicleProviderId, vehicleProviderId)
                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                            .eq(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                            .eq(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                            .eq(TmsQuoteDetail::getPlanType, 1)
                            .last("limit 1")
                    );
                    TmsQuoteDetail tmsQuoteDetail =
                            tmsQuoteDetailMapper.selectOne(
                                    new LambdaQueryWrapper<TmsQuoteDetail>()
                                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                                            .likeRight(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                                            .likeRight(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()+"未维护应付运费报价,请维护数据后再重新生成");
                    }
                    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、 获取实报实销费用
@@ -704,18 +1188,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);
                    });
                }
@@ -729,25 +1215,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
@@ -797,7 +1337,7 @@
            BigDecimal totalHkbAmount = tmsReceivableFeeItems.stream()
                    .filter(cItem -> "HKB".equals(cItem.getCurrency()))
                    .filter(cItem -> "HKD".equals(cItem.getCurrency()))
                    .map(TmsReceivableFeeItem::getRegisterAmount)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            tmsReceivableFee.setReceivableHKBAmount(totalHkbAmount);
@@ -819,69 +1359,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();
    }
@@ -959,4 +1459,110 @@
        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();
    }
    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();
    }
    @Override
    public DpDriverDispatchItemVo selectDataByNo(String no) {
        return tmsDispatchOrderMapper.selectDataByNo(no);
    }
    @Override
    public List<DpItineraryLogVo> selectItineraryLog() {
        return tmsDispatchOrderMapper.selectItineraryLog();
    }
}