diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java index bdda8e91b..71934fa6d 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java @@ -1,5 +1,6 @@ package com.mhd.oms.domain.reservationStockOutOrder.service; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -108,6 +109,10 @@ public class ReservationStockOutOrderDomainService { if (stockOutOrderDO.getCheckTaskDistribution() == null) { stockOutOrderDO.setCheckTaskDistribution(2); } + List reservationDeliveryDetailsLinkList = stockOutOrderDO.getReservationDeliveryDetailsLinkList(); + if (!CollectionUtils.isEmpty(reservationDeliveryDetailsLinkList)) { + reservationDeliveryDetailsLinkService.saveBatch(reservationDeliveryDetailsLinkList); + } stockOutOrderService.insert(stockOutOrderDO); return outMaterialDetailService.batchInsert(stockOutOrderDO.getOutOrderNumber(), stockOutOrderDO.getMaterialDetailList()); } @@ -185,6 +190,23 @@ public class ReservationStockOutOrderDomainService { // } List reservationDeliveryDetailsLinkList = stockOutOrderDO.getReservationDeliveryDetailsLinkList(); + List oldList = reservationDeliveryDetailsLinkService.list(new LambdaQueryWrapper().eq(ReservationDeliveryDetailsLink::getOrderId, stockOutOrderDO.getOutOrderId())); + // ====================== 核心:取差值 ====================== + // 第一步:把新列表的所有id存入Set(O(1)查找,效率最高) + Set newIdSet = reservationDeliveryDetailsLinkList.stream() + .map(ReservationDeliveryDetailsLink::getId) + .filter(Objects::nonNull) // 过滤null id,避免空指针 + .collect(Collectors.toSet()); + + // 第二步:筛选出旧列表中 不在新列表里的元素(就是要删除的差值) + List deleteList = oldList.stream() + .filter(oldItem -> !newIdSet.contains(oldItem.getId())) + .collect(Collectors.toList()); + + // 第三步:执行删除(如果需要) + if (CollUtil.isNotEmpty(deleteList)) { + reservationDeliveryDetailsLinkService.removeByIds(deleteList); + } if (!CollectionUtils.isEmpty(reservationDeliveryDetailsLinkList)) { reservationDeliveryDetailsLinkService.updateBatchById(reservationDeliveryDetailsLinkList); }