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;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.ruoyi.common.utils.PageUtils;
|
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.annotation.DataSource;
|
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;
|
|
/**
|
* 调度单管理Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2025-11-04
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class TmsDispatchOrderServiceImpl extends BaseService<TmsDispatchOrderMapper, TmsDispatchOrder> implements ITmsDispatchOrderService
|
{
|
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;
|
/**
|
* 查询调度单管理
|
*
|
* @param id 调度单管理ID
|
* @return 调度单管理
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public TmsDispatchOrder selectTmsDispatchOrderById(Integer id)
|
{
|
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.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.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)
|
);
|
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 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);
|
}
|
|
|
|
|
/**
|
* 查询调度单管理 记录数
|
*
|
* @param tmsDispatchOrder 调度单管理
|
* @return 调度单管理集合
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public int selectTmsDispatchOrderCount(TmsDispatchOrder tmsDispatchOrder)
|
{
|
return tmsDispatchOrderMapper.selectTmsDispatchOrderCount(tmsDispatchOrder);
|
}
|
|
/**
|
* 查询调度单管理列表
|
*
|
* @param tmsDispatchOrder 调度单管理
|
* @return 调度单管理
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public List<TmsDispatchOrder> selectTmsDispatchOrderList(TmsDispatchOrder tmsDispatchOrder)
|
{
|
return tmsDispatchOrderMapper.selectTmsDispatchOrderList(tmsDispatchOrder);
|
}
|
|
/**
|
* 查询调度单管理列表 异步 导出
|
*
|
* @param tmsDispatchOrder 调度单管理
|
* @param exportKey 导出功能的唯一标识
|
* @return 调度单管理集合
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Async
|
@Override
|
public void export(TmsDispatchOrder tmsDispatchOrder,String exportKey) {
|
|
super.export(TmsDispatchOrder.class,exportKey,"tmsDispatchOrderData",(pageNum)->{
|
PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
|
return selectTmsDispatchOrderList(tmsDispatchOrder);
|
});
|
}
|
|
|
/**
|
* 新增调度单管理
|
*
|
* @param tmsDispatchOrder 调度单管理
|
* @return 结果
|
*/
|
@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);
|
}
|
|
/**
|
* 新增调度单管理[批量]
|
*
|
* @param tmsDispatchOrders 调度单管理
|
* @return 结果
|
*/
|
@Override
|
public int insertTmsDispatchOrderBatch(List<TmsDispatchOrder> tmsDispatchOrders)
|
{
|
int rows = tmsDispatchOrderMapper.insertTmsDispatchOrderBatch(tmsDispatchOrders);
|
return rows;
|
}
|
|
/**
|
* 修改调度单管理
|
*
|
* @param tmsDispatchOrder 调度单管理
|
* @return 结果
|
*/
|
@Override
|
public int updateTmsDispatchOrder(TmsDispatchOrder tmsDispatchOrder)
|
{
|
tmsDispatchOrder.setUpdateBy(SecurityUtils.getUsername());
|
|
tmsDispatchOrder.setUpdateTime(DateUtils.getNowDate());
|
return tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder);
|
}
|
|
/**
|
* 修改调度单管理[批量]
|
*
|
* @param tmsDispatchOrders 调度单管理
|
* @return 结果
|
*/
|
@Override
|
public int updateTmsDispatchOrderBatch(List<TmsDispatchOrder> tmsDispatchOrders){
|
return tmsDispatchOrderMapper.updateTmsDispatchOrderBatch(tmsDispatchOrders);
|
}
|
|
/**
|
* 删除调度单管理对象
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteTmsDispatchOrderByIds(String ids)
|
{
|
return deleteTmsDispatchOrderByIds(Convert.toIntArray(ids));
|
}
|
|
/**
|
* 删除调度单管理对象
|
*
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteTmsDispatchOrderByIds(Integer[] ids)
|
{
|
return tmsDispatchOrderMapper.deleteTmsDispatchOrderByIds(ids);
|
}
|
|
/**
|
* 删除调度单管理信息
|
*
|
* @param id 调度单管理ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteTmsDispatchOrderById(Integer id)
|
{
|
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> 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();
|
}
|
}
|