Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java
Joshi 112cdce0d0 feat(wms): 完善物料卷VO结构并优化运单查询排序
- 在WmsMaterialCoilVo中新增actualWarehouse字段存储仓库信息
- 为WmsMaterialCoilVo补充WmsActualWarehouse导入声明
- 在物料卷服务实现中设置仓库名称和实际仓库信息
- 为运单查询条件添加按创建时间降序排列功能
2026-03-28 18:10:21 +08:00

187 lines
8.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}