- 在WmsMaterialCoilVo中新增actualWarehouse字段存储仓库信息 - 为WmsMaterialCoilVo补充WmsActualWarehouse导入声明 - 在物料卷服务实现中设置仓库名称和实际仓库信息 - 为运单查询条件添加按创建时间降序排列功能
187 lines
8.4 KiB
Java
187 lines
8.4 KiB
Java
package com.klp.service.impl;
|
||
|
||
import cn.hutool.core.bean.BeanUtil;
|
||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||
import com.klp.common.core.page.TableDataInfo;
|
||
import com.klp.common.core.domain.PageQuery;
|
||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||
import com.klp.common.utils.StringUtils;
|
||
import com.klp.domain.WmsDeliveryWaybillDetail;
|
||
import lombok.RequiredArgsConstructor;
|
||
import org.springframework.stereotype.Service;
|
||
import com.klp.domain.bo.WmsDeliveryWaybillBo;
|
||
import com.klp.domain.vo.WmsDeliveryWaybillVo;
|
||
import com.klp.domain.WmsDeliveryWaybill;
|
||
import com.klp.mapper.WmsDeliveryWaybillMapper;
|
||
import com.klp.mapper.WmsDeliveryWaybillDetailMapper;
|
||
import com.klp.service.IWmsDeliveryWaybillService;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
import java.util.Collection;
|
||
|
||
/**
|
||
* 发货单主Service业务层处理
|
||
*
|
||
* @author klp
|
||
* @date 2025-11-25
|
||
*/
|
||
@RequiredArgsConstructor
|
||
@Service
|
||
public class WmsDeliveryWaybillServiceImpl implements IWmsDeliveryWaybillService {
|
||
|
||
private final WmsDeliveryWaybillMapper baseMapper;
|
||
private final WmsDeliveryWaybillDetailMapper waybillDetailMapper;
|
||
|
||
/**
|
||
* 查询发货单主
|
||
*/
|
||
@Override
|
||
public WmsDeliveryWaybillVo queryById(Long waybillId){
|
||
return baseMapper.selectVoById(waybillId);
|
||
}
|
||
|
||
/**
|
||
* 查询发货单主列表
|
||
*/
|
||
@Override
|
||
public TableDataInfo<WmsDeliveryWaybillVo> queryPageList(WmsDeliveryWaybillBo bo, PageQuery pageQuery) {
|
||
QueryWrapper<WmsDeliveryWaybill> lqw = buildQueryWrapperPlus(bo);
|
||
Page<WmsDeliveryWaybillVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
|
||
return TableDataInfo.build(result);
|
||
}
|
||
|
||
/**
|
||
* 查询发货单主列表
|
||
*/
|
||
@Override
|
||
public List<WmsDeliveryWaybillVo> queryList(WmsDeliveryWaybillBo bo) {
|
||
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<WmsDeliveryWaybill> lqw = buildQueryWrapperPlus(bo);
|
||
return baseMapper.selectVoListPlus(lqw);
|
||
}
|
||
|
||
private com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<WmsDeliveryWaybill> buildQueryWrapperPlus(WmsDeliveryWaybillBo bo) {
|
||
Map<String, Object> params = bo.getParams();
|
||
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<WmsDeliveryWaybill> qw = Wrappers.query();
|
||
qw.eq(StringUtils.isNotBlank(bo.getWaybillNo()), "wd.waybill_no", bo.getWaybillNo());
|
||
qw.like(StringUtils.isNotBlank(bo.getWaybillName()), "wd.waybill_name", bo.getWaybillName());
|
||
qw.eq(bo.getPlanId() != null, "wd.plan_id", bo.getPlanId());
|
||
qw.eq(bo.getOrderId() != null, "wd.order_id", bo.getOrderId());
|
||
qw.like(StringUtils.isNotBlank(bo.getLicensePlate()), "wd.license_plate", bo.getLicensePlate());
|
||
qw.eq(StringUtils.isNotBlank(bo.getConsigneeUnit()), "wd.consignee_unit", bo.getConsigneeUnit());
|
||
qw.eq(StringUtils.isNotBlank(bo.getSenderUnit()), "wd.sender_unit", bo.getSenderUnit());
|
||
qw.eq(bo.getDeliveryTime() != null, "wd.delivery_time", bo.getDeliveryTime());
|
||
qw.eq(StringUtils.isNotBlank(bo.getWeighbridge()), "wd.weighbridge", bo.getWeighbridge());
|
||
qw.eq(StringUtils.isNotBlank(bo.getSalesPerson()), "wd.sales_person", bo.getSalesPerson());
|
||
qw.eq(StringUtils.isNotBlank(bo.getPrincipal()), "wd.principal", bo.getPrincipal());
|
||
qw.eq(StringUtils.isNotBlank(bo.getPrincipalPhone()), "wd.principal_phone", bo.getPrincipalPhone());
|
||
qw.eq(bo.getStatus() != null, "wd.status", bo.getStatus());
|
||
// 逻辑删除
|
||
qw.eq("wd.del_flag", 0);
|
||
qw.orderByDesc("wd.create_time");
|
||
return qw;
|
||
}
|
||
|
||
private LambdaQueryWrapper<WmsDeliveryWaybill> buildQueryWrapper(WmsDeliveryWaybillBo bo) {
|
||
Map<String, Object> params = bo.getParams();
|
||
LambdaQueryWrapper<WmsDeliveryWaybill> lqw = Wrappers.lambdaQuery();
|
||
lqw.eq(StringUtils.isNotBlank(bo.getWaybillNo()), WmsDeliveryWaybill::getWaybillNo, bo.getWaybillNo());
|
||
lqw.like(StringUtils.isNotBlank(bo.getWaybillName()), WmsDeliveryWaybill::getWaybillName, bo.getWaybillName());
|
||
lqw.eq(bo.getPlanId() != null, WmsDeliveryWaybill::getPlanId, bo.getPlanId());
|
||
lqw.like(StringUtils.isNotBlank(bo.getLicensePlate()), WmsDeliveryWaybill::getLicensePlate, bo.getLicensePlate());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getConsigneeUnit()), WmsDeliveryWaybill::getConsigneeUnit, bo.getConsigneeUnit());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getSenderUnit()), WmsDeliveryWaybill::getSenderUnit, bo.getSenderUnit());
|
||
lqw.eq(bo.getDeliveryTime() != null, WmsDeliveryWaybill::getDeliveryTime, bo.getDeliveryTime());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getWeighbridge()), WmsDeliveryWaybill::getWeighbridge, bo.getWeighbridge());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getSalesPerson()), WmsDeliveryWaybill::getSalesPerson, bo.getSalesPerson());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getPrincipal()), WmsDeliveryWaybill::getPrincipal, bo.getPrincipal());
|
||
lqw.eq(StringUtils.isNotBlank(bo.getPrincipalPhone()), WmsDeliveryWaybill::getPrincipalPhone, bo.getPrincipalPhone());
|
||
lqw.eq(bo.getStatus() != null, WmsDeliveryWaybill::getStatus, bo.getStatus());
|
||
lqw.eq(bo.getOrderId() != null, WmsDeliveryWaybill::getOrderId, bo.getOrderId());
|
||
return lqw;
|
||
}
|
||
|
||
/**
|
||
* 新增发货单主
|
||
*/
|
||
@Override
|
||
public Boolean insertByBo(WmsDeliveryWaybillBo bo) {
|
||
WmsDeliveryWaybill add = BeanUtil.toBean(bo, WmsDeliveryWaybill.class);
|
||
validEntityBeforeSave(add);
|
||
boolean flag = baseMapper.insert(add) > 0;
|
||
if (flag) {
|
||
bo.setWaybillId(add.getWaybillId());
|
||
}
|
||
return flag;
|
||
}
|
||
|
||
/**
|
||
* 修改发货单主
|
||
*/
|
||
@Override
|
||
public Boolean updateByBo(WmsDeliveryWaybillBo bo) {
|
||
// 现根据bo.getWaybillId()查询出数据库中的数据
|
||
// 如果这条数据的status是1 则抛异常为不允许修改
|
||
WmsDeliveryWaybill db = baseMapper.selectById(bo.getWaybillId());
|
||
if (db.getStatus() == 1) {
|
||
throw new RuntimeException("已发货的发货单不能修改");
|
||
}
|
||
WmsDeliveryWaybill update = BeanUtil.toBean(bo, WmsDeliveryWaybill.class);
|
||
validEntityBeforeSave(update);
|
||
return baseMapper.updateById(update) > 0;
|
||
}
|
||
@Override
|
||
public Boolean changeStatus(WmsDeliveryWaybillBo bo) {
|
||
LambdaUpdateWrapper<WmsDeliveryWaybill> updateWrapper = new LambdaUpdateWrapper<>();
|
||
updateWrapper.eq(WmsDeliveryWaybill::getWaybillId, bo.getWaybillId())
|
||
.set(WmsDeliveryWaybill::getStatus, bo.getStatus());
|
||
return baseMapper.update(null, updateWrapper) > 0;
|
||
}
|
||
/**
|
||
* 保存前的数据校验
|
||
*/
|
||
private void validEntityBeforeSave(WmsDeliveryWaybill entity){
|
||
//TODO 做一些数据校验,如唯一约束
|
||
}
|
||
|
||
/**
|
||
* 批量删除发货单主
|
||
*/
|
||
@Override
|
||
@Transactional(rollbackFor = Exception.class)
|
||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||
if(isValid){
|
||
//TODO 做一些业务上的校验,判断是否需要校验
|
||
}
|
||
|
||
// 级联删除发货单明细
|
||
if (ids != null && !ids.isEmpty()) {
|
||
// 检查是否存在已发货的运单(状态为1),如果存在则抛出异常
|
||
LambdaQueryWrapper<WmsDeliveryWaybill> queryWrapper = new LambdaQueryWrapper<>();
|
||
queryWrapper.in(WmsDeliveryWaybill::getWaybillId, ids)
|
||
.eq(WmsDeliveryWaybill::getStatus, 1);
|
||
|
||
// 使用 exists 方法替代 selectList,提高性能
|
||
if (baseMapper.exists(queryWrapper)) {
|
||
throw new RuntimeException("已发货的发货单不能删除");
|
||
}
|
||
// 构建查询条件,查找关联的明细记录
|
||
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper =
|
||
Wrappers.<WmsDeliveryWaybillDetail>lambdaQuery()
|
||
.in(WmsDeliveryWaybillDetail::getWaybillId, ids)
|
||
.eq(WmsDeliveryWaybillDetail::getDelFlag, 0);
|
||
|
||
// 删除相关的发货单明细
|
||
waybillDetailMapper.delete(detailWrapper);
|
||
}
|
||
|
||
return baseMapper.deleteBatchIds(ids) > 0;
|
||
}
|
||
|
||
|
||
}
|