diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryPlanServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryPlanServiceImpl.java index 9846d324..f0df70f6 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryPlanServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryPlanServiceImpl.java @@ -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 waybills = waybillMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsDeliveryWaybill::getPlanId, planId) + .eq(WmsDeliveryWaybill::getDelFlag, 0) + ); + + if (!waybills.isEmpty()) { + // 获取所有发货单ID + List waybillIds = waybills.stream() + .map(WmsDeliveryWaybill::getWaybillId) + .collect(Collectors.toList()); + + // 先删除发货单明细 + if (!waybillIds.isEmpty()) { + LambdaQueryWrapper detailWrapper = + Wrappers.lambdaQuery() + .in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds) + .eq(WmsDeliveryWaybillDetail::getDelFlag, 0); + + // 直接删除 + waybillDetailMapper.delete(detailWrapper); + } + + // 再删除发货单主表 + LambdaQueryWrapper waybillWrapper = + Wrappers.lambdaQuery() + .in(WmsDeliveryWaybill::getWaybillId, waybillIds) + .eq(WmsDeliveryWaybill::getDelFlag, 0); + waybillMapper.delete(waybillWrapper); + } + } + } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java index a030f16b..23ab68a8 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsDeliveryWaybillServiceImpl.java @@ -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 ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + + // 级联删除发货单明细 + if (ids != null && !ids.isEmpty()) { + // 构建查询条件,查找关联的明细记录 + LambdaQueryWrapper detailWrapper = + Wrappers.lambdaQuery() + .in(WmsDeliveryWaybillDetail::getWaybillId, ids) + .eq(WmsDeliveryWaybillDetail::getDelFlag, 0); + + // 删除相关的发货单明细 + waybillDetailMapper.delete(detailWrapper); + } + return baseMapper.deleteBatchIds(ids) > 0; }