Files
xgy-oa/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java
Joshi 7b75548da0 feat(crm): 添加合同号字段并优化发货单联查
- 在CrmOrder实体类中新增contractCode字段用于存储合同号
- 在CrmOrderBo业务对象中添加contractCode字段支持
- 在CrmOrderMapper中增加按合同号查询的方法
- 更新CrmOrderMapper.xml映射文件以支持合同号字段映射
- 实现CrmOrderServiceImpl中合同号条件查询功能
- 在CrmOrderVo视图对象中添加合同号字段并支持Excel导出
- 为WmsDeliveryWaybill添加关联订单ID字段建立与CRM订单关联
- 在WMS模块中实现发货单与CRM订单的关联查询功能
- 重构WmsDeliveryWaybillServiceImpl中的查询方法以支持多表关联查询
- 完善WMS发货单查询界面以支持按关联订单筛选功能
2026-02-03 11:26:10 +08:00

186 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.eq(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);
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.eq(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;
}
}