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