zhangback
7 天以前 ca412ade3b178fbc8ba0a4b6215a040acdede954
tms/src/main/java/com/ruoyi/tms/service/impl/TmsDispatchOrderServiceImpl.java
@@ -1,9 +1,30 @@
package com.ruoyi.tms.service.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.SystemDataNoEnum;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
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.service.ITmsDriverDispatchService;
import com.ruoyi.tms.service.ITmsFinanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -16,7 +37,6 @@
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.tms.mapper.TmsDispatchOrderMapper;
import com.ruoyi.tms.domain.TmsDispatchOrder;
import com.ruoyi.tms.service.ITmsDispatchOrderService;
import com.ruoyi.common.core.text.Convert;
@@ -33,8 +53,21 @@
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private TmsDispatchOrderMapper tmsDispatchOrderMapper;
    @Autowired
    ISystemDataNoService systemDataNoService;
    @Autowired
    private ISysUserService userService;
    @Autowired
    private ITmsDriverDispatchService tmsDriverDispatchService;
    @Resource
    private TmsQuoteDetailMapper tmsQuoteDetailMapper;
    @Resource
    private TmsQuotePlanMapper tmsQuotePlanMapper;
    @Autowired
    ITmsFinanceService tmsFinanceService;
    /**
     * 查询调度单管理
     *
@@ -47,6 +80,215 @@
    {
        return tmsDispatchOrderMapper.selectTmsDispatchOrderById(id);
    }
    @Override
    public AjaxResult confirmOrder(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(id);
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        if (tmsDispatchOrder.getStatus() != 0){
            return AjaxResult.error("该调度单数据状态异常");
        }
        if (tmsDispatchOrder.getMainDriverId() == null){
            return AjaxResult.error("请先选择主驾司机");
        }
        if (tmsDispatchOrder.getVehicleId() == null){
            return AjaxResult.error("请先选择车辆");
        }
        tmsDispatchOrder.setConfirmTime(DateUtils.getNowDate());
        tmsDispatchOrder.setStatus(1);
        tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
        int i = tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
        TmsDriverDispatch tmsDriverDispatch = new TmsDriverDispatch();
        tmsDriverDispatch.setDriverId(tmsDispatchOrder.getMainDriverId());
        tmsDriverDispatch.setDispatchId(tmsDispatchOrder.getId());
        tmsDriverDispatch.setStatus(0);
        tmsDriverDispatchService.insertTmsDriverDispatch(tmsDriverDispatch);
        if (i > 0){
            return AjaxResult.success("操作成功");
        }
        return AjaxResult.error("操作失败");
    }
    @Override
    public AjaxResult okOrder(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(id);
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        if (tmsDispatchOrder.getStatus() != 2){
            return AjaxResult.error("该调度单数据状态异常");
        }
        tmsDispatchOrder.setStatus(3);
        tmsDispatchOrder.setOkTime(DateUtils.getNowDate());
        tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
        int i = tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
        if (i > 0){
            return AjaxResult.success("操作成功");
        }
        return AjaxResult.error("操作失败");
    }
    @Override
    public AjaxResult copyOrder(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(id);
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        TmsDispatchOrder tmsDispatchOrderNew = BeanUtil.copyProperties(tmsDispatchOrder, TmsDispatchOrder.class);
        tmsDispatchOrderNew.setStatus(0);
        tmsDispatchOrderNew.setMainDriverId(null);
        tmsDispatchOrderNew.setMainDriverName(null);
        tmsDispatchOrderNew.setAssistantDriverId(null);
        tmsDispatchOrderNew.setAssistantDriverName(null);
        tmsDispatchOrderNew.setVehicleId(null);
        tmsDispatchOrderNew.setLicensePlate(null);
        tmsDispatchOrderNew.setUpdateBy(null);
        tmsDispatchOrderNew.setId(null);
        int i = insertTmsDispatchOrder(tmsDispatchOrderNew);
        if (i > 0){
            return AjaxResult.success("操作成功");
        }
        return AjaxResult.error("操作失败");
    }
    @Override
    public AjaxResult dropHook(Integer id) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(id);
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
         tmsDriverDispatchService.update(
                null,
                new LambdaUpdateWrapper<TmsDriverDispatch>()
                        .eq(TmsDriverDispatch::getDispatchId, tmsDispatchOrder.getId())
                        .eq(TmsDriverDispatch::getDriverId, tmsDispatchOrder.getMainDriverId())
                        .set(TmsDriverDispatch::getStatus, 1)
        );
        tmsDispatchOrderMapper.update(new LambdaUpdateWrapper<TmsDispatchOrder>()
                .eq(TmsDispatchOrder::getId, tmsDispatchOrder.getId())
                .set(TmsDispatchOrder::getStatus, 6)
        );
        return AjaxResult.success("操作成功");
    }
    @Override
    public AjaxResult connectHang(TmsDriverDispatch driverDispatch) {
        TmsDispatchOrder tmsDispatchOrder = selectTmsDispatchOrderById(driverDispatch.getDispatchId());
        if (tmsDispatchOrder == null){
            return AjaxResult.error("未找到该数据");
        }
        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
    public AjaxResult assignedItineraryList() {
        Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId());
        if (deviceId == null){
            return AjaxResult.success();
        }
        DriverDispatchVo vo = new DriverDispatchVo();
        vo.setDriverId(deviceId);
        vo.setInStatusList(Arrays.asList(0, 1, 2,4));
        vo.setInTdoStatusList(Arrays.asList(1, 2));
        List<DriverDispatchVo> driverDispatchVos = tmsDispatchOrderMapper.selectAssignedItineraryList(vo);
        if (driverDispatchVos != null && !driverDispatchVos.isEmpty()){
            driverDispatchVos.forEach(item ->{
                if (item.getTddStatus() == 1 ){
                    item.setStatusStr("待甩挂");
                }else if (item.getTddStatus() == 2){
                    item.setStatusStr("待接挂");
                }else if (item.getStatus() == 1){
                    item.setStatusStr("待发车");
                }else if (item.getStatus() == 2){
                    item.setStatusStr("在途");
                }else {
                    item.setStatusStr("完成行程");
                }
            });
        }
        return AjaxResult.success(driverDispatchVos);
    }
    @Override
    public AjaxResult assignedItineraryLogList() {
        Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId());
        if (deviceId == null){
            return AjaxResult.success();
        }
        DriverDispatchVo vo = new DriverDispatchVo();
        vo.setDriverId(deviceId);
        vo.setInStatusList(Arrays.asList(3,5));
//        vo.setInTdoStatusList(Arrays.asList(1, 2));
        List<DriverDispatchVo> driverDispatchVos = tmsDispatchOrderMapper.selectAssignedItineraryList(vo);
        if (driverDispatchVos != null && !driverDispatchVos.isEmpty()){
            driverDispatchVos.forEach(item ->{
                item.setStatusStr("完成行程");
            });
        }
        return AjaxResult.success(driverDispatchVos);
    }
    @Override
    public AjaxResult selectAssignedItineraryDetail(Integer dispatchId) {
        Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId());
        if (deviceId == null){
            return AjaxResult.success();
        }
        DriverDispatchVo vo = new DriverDispatchVo();
        vo.setDriverId(deviceId);
        vo.setDispatchId(dispatchId);
        DriverDispatchVo driverDispatchVo = tmsDispatchOrderMapper.selectAssignedItineraryDetail(vo);
        if (driverDispatchVo != null){
            if (driverDispatchVo.getTddStatus() == 1 ){
                driverDispatchVo.setStatusStr("待甩挂");
            }else if (driverDispatchVo.getTddStatus() == 2){
                driverDispatchVo.setStatusStr("待接挂");
            }else if (driverDispatchVo.getStatus() == 1){
                driverDispatchVo.setStatusStr("待发车");
            }else if (driverDispatchVo.getStatus() == 2){
                driverDispatchVo.setStatusStr("在途");
            }else{
                driverDispatchVo.setStatusStr("完成行程");
            }
        }
        return AjaxResult.success(driverDispatchVo);
    }
    /**
     * 查询调度单管理 记录数
@@ -102,6 +344,10 @@
    @Override
    public int insertTmsDispatchOrder(TmsDispatchOrder tmsDispatchOrder)
    {
        String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.DL);
        tmsDispatchOrder.setDispatchNo(noByKey);
        tmsDispatchOrder.setCreateBy(SecurityUtils.getUsername());
        tmsDispatchOrder.setCreateTime(DateUtils.getNowDate());
        return tmsDispatchOrderMapper.insertTmsDispatchOrder(tmsDispatchOrder);
    }
@@ -128,6 +374,8 @@
    @Override
    public int updateTmsDispatchOrder(TmsDispatchOrder tmsDispatchOrder)
    {
        tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
        tmsDispatchOrder.setUpdateTime(DateUtils.getNowDate());
        return tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
    }
@@ -179,4 +427,151 @@
    {
        return tmsDispatchOrderMapper.deleteTmsDispatchOrderById(id);
    }
    @Override
    public List<TmsDispatchOrder>  initGenerate(List<Integer> ids) {
        List<TmsDispatchOrder> tmsDispatchOrders = tmsDispatchOrderMapper.selectBatchIds(ids);
        if (tmsDispatchOrders != null && !tmsDispatchOrders.isEmpty()){
            tmsDispatchOrders.forEach(tmsDispatchOrder -> {
                // 客户ID
                Integer customerId = tmsDispatchOrder.getCustomerId();
                // 车型
                String actualVehicleType = tmsDispatchOrder.getActualVehicleType();
                // 运输路线 = 发货地行政区域 + 收货地行政区域
                String shipperRegionCode = tmsDispatchOrder.getShipperRegionCode();
                String receiverRegionCode = tmsDispatchOrder.getReceiverRegionCode();
                if (tmsDispatchOrder.getAccountsReceivableStatus() != null && tmsDispatchOrder.getAccountsReceivableStatus() == 1){
                    TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(tmsDispatchOrder.getCollectionPlanId());
                    tmsDispatchOrder.setCollectionPlanId(tmsQuotePlan.getId());
                    tmsDispatchOrder.setCollectionPlanName(tmsQuotePlan.getPlanName());
                }else{
                    // 查询应收规则
                    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){
                        TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(tmsQuoteDetail.getQuotePlanId());
                        tmsDispatchOrder.setCollectionPlanId(tmsQuotePlan.getId());
                        tmsDispatchOrder.setCollectionPlanName(tmsQuotePlan.getPlanName());
                        tmsDispatchOrder.setCollectionPlanDetailId(tmsQuoteDetail.getId());
                        tmsDispatchOrder.setCollectionPlanAmount(tmsQuoteDetail.getFreightPrice());
                    }else{
                        tmsDispatchOrder.setAccountsReceivableStatus(2);
                    }
                }
                if (tmsDispatchOrder.getAccountsPayableStatus() != null && tmsDispatchOrder.getAccountsPayableStatus() == 1){
                    TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(tmsDispatchOrder.getPaymentPlanId());
                    tmsDispatchOrder.setPaymentPlanId(tmsQuotePlan.getId());
                    tmsDispatchOrder.setPaymentPlanName(tmsQuotePlan.getPlanName());
                }else{
                    // 查询应付规则
                    TmsQuoteDetail tmsQuoteDetail2 = tmsQuoteDetailMapper.selectOne(new LambdaQueryWrapper<TmsQuoteDetail>()
                            .eq(TmsQuoteDetail::getCustomerId, customerId)
                            .eq(TmsQuoteDetail::getVehicleType, actualVehicleType)
                            .eq(TmsQuoteDetail::getStartRegionCode, shipperRegionCode)
                            .eq(TmsQuoteDetail::getEndRegionCode, receiverRegionCode)
                            .eq(TmsQuoteDetail::getPlanType, 1)
                            .last("limit 1")
                    );
                    if (tmsQuoteDetail2 != null){
                        TmsQuotePlan tmsQuotePlan = tmsQuotePlanMapper.selectTmsQuotePlanById(tmsQuoteDetail2.getQuotePlanId());
                        tmsDispatchOrder.setPaymentPlanId(tmsQuotePlan.getId());
                        tmsDispatchOrder.setPaymentPlanName(tmsQuotePlan.getPlanName());
                        tmsDispatchOrder.setPaymentPlanDetailId(tmsQuoteDetail2.getId());
                        tmsDispatchOrder.setPaymentPlanAmount(tmsQuoteDetail2.getFreightPrice());
                    }else{
                        tmsDispatchOrder.setAccountsPayableStatus(2);
                    }
                }
            });
        }
        return tmsDispatchOrders;
    }
    @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 -> {
                TmsDispatchOrder tmsDispatchOrder = new TmsDispatchOrder();
                tmsDispatchOrder.setId(item.getId());
                tmsDispatchOrder.setAccountsReceivableStatus(1);
                tmsDispatchOrder.setCollectionPlanId(item.getCollectionPlanId());
                tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
                return tmsDispatchOrder;
            }).collect(Collectors.toList());
            // 1、修改调度
            tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(collect);
            // 2、生成应收账单
            List<TmsFinance> tmsFinances = BeanUtil.copyToList(receivableList, TmsFinance.class);
            tmsFinances.forEach(item ->{
                item.setSystemCode(systemDataNoService.getNoByKey(SystemDataNoEnum.YSD));
                item.setPlanName(item.getCollectionPlanName());
                item.setDispatchId(item.getId());
                item.setCreateBy(SecurityUtils.getUsername());
                item.setCreateTime(new Date());
                item.setUpdateBy(SecurityUtils.getUsername());
                item.setUpdateTime(new Date());
                item.setStatus(0);
                item.setType(0);
                item.setTotalAmount(item.getCollectionPlanAmount());
            });
            tmsFinanceService.insertTmsFinanceYFBatch(tmsFinances);
        }
        List<TmsDispatchOrder> playList = tmsDispatchOrders.stream().filter(item -> item.getAccountsPayableStatus() == 0).collect(Collectors.toList());
        if (!playList.isEmpty()){
            List<TmsDispatchOrder> collect = playList.stream().map(item -> {
                TmsDispatchOrder tmsDispatchOrder = new TmsDispatchOrder();
                tmsDispatchOrder.setId(item.getId());
                tmsDispatchOrder.setAccountsPayableStatus(1);
                tmsDispatchOrder.setPaymentPlanId(item.getPaymentPlanId());
                tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
                return tmsDispatchOrder;
            }).collect(Collectors.toList());
            // 1、修改调度
            tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(collect);
            // 2、生成应付账单
            List<TmsFinance> tmsFinances = BeanUtil.copyToList(receivableList, TmsFinance.class);
            tmsFinances.forEach(item ->{
                item.setSystemCode(systemDataNoService.getNoByKey(SystemDataNoEnum.YFD));
                item.setPlanName(item.getPaymentPlanName());
                item.setDispatchId(item.getId());
                item.setCreateBy(SecurityUtils.getUsername());
                item.setCreateTime(new Date());
                item.setUpdateBy(SecurityUtils.getUsername());
                item.setUpdateTime(new Date());
                item.setStatus(0);
                item.setType(1);
                item.setTotalAmount(item.getPaymentPlanAmount());
            });
            tmsFinanceService.insertTmsFinanceYFBatch(tmsFinances);
        }
        return AjaxResult.success();
    }
}