feat(delivery): 实现发货计划和发货明细的级联删除功能

- 在WmsDeliveryPlanServiceImpl中添加LambdaUpdateWrapper导入
- 为发货计划删除操作添加级联删除逻辑,遍历计划ID并删除相关发货单及明细
- 新增cascadeDeleteDeliveryWaybillsByPlanId方法处理发货单及其明细的级联删除
- 在WmsDeliveryWaybillServiceImpl中添加WmsDeliveryWaybillDetail和WmsDeliveryWaybillDetailMapper依赖
- 为发货单删除操作添加级联删除发货单明细的功能
- 使用LambdaQueryWrapper构建查询条件删除关联的发货单明细记录
This commit is contained in:
2026-01-28 11:00:32 +08:00
parent d05f2f6629
commit 83b11860cc
2 changed files with 69 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.exception.ServiceException;
import com.klp.common.utils.StringUtils;
@@ -176,6 +177,17 @@ public class WmsDeliveryPlanServiceImpl implements IWmsDeliveryPlanService {
}
}
}
// 对于发货计划planType = 0需要先级联删除相关的发货单及明细
// 遍历所有要删除的计划,对发货计划进行级联删除
for (Long planId : ids) {
WmsDeliveryPlan plan = baseMapper.selectById(planId);
if (plan != null && plan.getPlanType() != null && plan.getPlanType() == 0) { // 发货计划
// 删除关联的发货单及明细
cascadeDeleteDeliveryWaybillsByPlanId(planId);
}
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@@ -281,4 +293,43 @@ public class WmsDeliveryPlanServiceImpl implements IWmsDeliveryPlanService {
return coilMapper.selectVoListWithDynamicJoin(qw);
}
/**
* 级联删除发货单及其明细数据
*
* @param planId 计划ID
*/
private void cascadeDeleteDeliveryWaybillsByPlanId(Long planId) {
// 先查询该计划下的所有发货单
List<WmsDeliveryWaybill> waybills = waybillMapper.selectList(
Wrappers.<WmsDeliveryWaybill>lambdaQuery()
.eq(WmsDeliveryWaybill::getPlanId, planId)
.eq(WmsDeliveryWaybill::getDelFlag, 0)
);
if (!waybills.isEmpty()) {
// 获取所有发货单ID
List<Long> waybillIds = waybills.stream()
.map(WmsDeliveryWaybill::getWaybillId)
.collect(Collectors.toList());
// 先删除发货单明细
if (!waybillIds.isEmpty()) {
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper =
Wrappers.<WmsDeliveryWaybillDetail>lambdaQuery()
.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds)
.eq(WmsDeliveryWaybillDetail::getDelFlag, 0);
// 直接删除
waybillDetailMapper.delete(detailWrapper);
}
// 再删除发货单主表
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper =
Wrappers.<WmsDeliveryWaybill>lambdaQuery()
.in(WmsDeliveryWaybill::getWaybillId, waybillIds)
.eq(WmsDeliveryWaybill::getDelFlag, 0);
waybillMapper.delete(waybillWrapper);
}
}
}

View File

@@ -8,13 +8,16 @@ 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;
@@ -31,6 +34,7 @@ import java.util.Collection;
public class WmsDeliveryWaybillServiceImpl implements IWmsDeliveryWaybillService {
private final WmsDeliveryWaybillMapper baseMapper;
private final WmsDeliveryWaybillDetailMapper waybillDetailMapper;
/**
* 查询发货单主
@@ -124,10 +128,24 @@ public class WmsDeliveryWaybillServiceImpl implements IWmsDeliveryWaybillService
* 批量删除发货单主
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
// 级联删除发货单明细
if (ids != null && !ids.isEmpty()) {
// 构建查询条件,查找关联的明细记录
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper =
Wrappers.<WmsDeliveryWaybillDetail>lambdaQuery()
.in(WmsDeliveryWaybillDetail::getWaybillId, ids)
.eq(WmsDeliveryWaybillDetail::getDelFlag, 0);
// 删除相关的发货单明细
waybillDetailMapper.delete(detailWrapper);
}
return baseMapper.deleteBatchIds(ids) > 0;
}