From db309d67a160394ef16351d232ae3afc7ace2a73 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 10 Dec 2025 14:15:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=A2=9E=E5=8A=A0=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E6=9F=A5=E8=AF=A2=E6=97=B6=E8=BF=87=E6=BB=A4=E5=B7=B2?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 WmsMaterialCoilBo 中新增 onlyUnshippedAndUnplanned 字段用于控制查询条件 - 修改 WmsMaterialCoilServiceImpl,在查询中增加对未发货且未绑定发货计划钢卷的筛选逻辑 - 删除原有的 queryAvailableForDelivery 方法及相关查询构建方法 - 移除了控制器中 /availableForDelivery 接口的独立实现 - 使用 NOT EXISTS + FIND_IN_SET 优化了钢卷是否被发货计划引用的判断逻辑 --- .../controller/WmsMaterialCoilController.java | 10 --- .../com/klp/domain/bo/WmsMaterialCoilBo.java | 2 + .../klp/service/IWmsMaterialCoilService.java | 1 - .../impl/WmsMaterialCoilServiceImpl.java | 89 +++---------------- 4 files changed, 13 insertions(+), 89 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index 201b440d..57836e8f 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -188,16 +188,6 @@ public class WmsMaterialCoilController extends BaseController { - /** - * 查询未被任何发货计划引用的钢卷列表 - * 用于发货计划选择钢卷时,避免选择已经被其他发货计划引用的钢卷 - */ - @GetMapping("/availableForDelivery") - public TableDataInfo getAvailableCoilsForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) { - return iWmsMaterialCoilService.queryAvailableForDelivery(bo, pageQuery); - } - - /** * 批量更新钢卷发货状态 * diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index e7cf5004..c8242be5 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -176,5 +176,7 @@ public class WmsMaterialCoilBo extends BaseEntity { // 锌层厚度(两表通用字段名:zinc_layer) private String itemZincLayer; + private Boolean onlyUnshippedAndUnplanned; + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index 46426266..b8101b42 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -100,7 +100,6 @@ public interface IWmsMaterialCoilService { int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId); - TableDataInfo queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery); Boolean batchUpdateDeliveryStatus(List coilIdList, Integer status); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index cc65113d..fe4580c6 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -450,6 +450,17 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { qw.in("mc.coil_id", coilIdList); } } + + // 仅查询未发货且未绑定在发货计划里的钢卷 + if (Boolean.TRUE.equals(bo.getOnlyUnshippedAndUnplanned())) { + // 未发货:排除状态=1(已出库/已发货) + qw.ne("mc.status", 1); + // 未绑定在任一有效发货计划:计划未删除,coil 字段包含当前 coil_id + // 这里使用 NOT EXISTS + FIND_IN_SET,避免将所有计划加载到内存 + qw.apply("NOT EXISTS (SELECT 1 FROM wms_delivery_plan dp " + + "WHERE dp.del_flag = 0 AND dp.coil IS NOT NULL AND dp.coil <> '' " + + "AND FIND_IN_SET(CAST(mc.coil_id AS CHAR), dp.coil))"); + } //逻辑删除 qw.eq("mc.del_flag", 0); //把team字段作为筛选条件 @@ -1856,84 +1867,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return lqw; } - /** - * 查询可用于发货计划的钢卷(未被任何发货计划引用的钢卷) - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 钢卷分页列表 - */ - @Override - public TableDataInfo queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) { - // 构建查询条件 - LambdaQueryWrapper lqw = buildAvailableCoilQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 构建可用于发货计划的钢卷查询条件 - * 排除已被任何发货计划引用的钢卷 - * - * @param bo 查询条件 - * @return 查询构造器 - */ - private LambdaQueryWrapper buildAvailableCoilQueryWrapper(WmsMaterialCoilBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - - // 基础查询条件 - lqw.eq(WmsMaterialCoil::getDelFlag, 0); // 未删除 - lqw.eq(WmsMaterialCoil::getStatus, 0); // 在库状态 - lqw.eq(WmsMaterialCoil::getDataType, 1); // 当前数据 - - // 应用传入的查询条件 - if (StringUtils.isNotBlank(bo.getEnterCoilNo())) { - lqw.like(WmsMaterialCoil::getEnterCoilNo, bo.getEnterCoilNo()); - } - if (StringUtils.isNotBlank(bo.getCurrentCoilNo())) { - lqw.like(WmsMaterialCoil::getCurrentCoilNo, bo.getCurrentCoilNo()); - } - if (StringUtils.isNotBlank(bo.getSupplierCoilNo())) { - lqw.like(WmsMaterialCoil::getSupplierCoilNo, bo.getSupplierCoilNo()); - } - if (bo.getWarehouseId() != null) { - lqw.eq(WmsMaterialCoil::getWarehouseId, bo.getWarehouseId()); - } - if (bo.getItemId() != null) { - lqw.eq(WmsMaterialCoil::getItemId, bo.getItemId()); - } - if (StringUtils.isNotBlank(bo.getItemType())) { - lqw.eq(WmsMaterialCoil::getItemType, bo.getItemType()); - } - - // 排除已被发货计划引用的钢卷 - LambdaQueryWrapper planQuery =Wrappers.lambdaQuery(); - planQuery.eq(WmsDeliveryPlan::getDelFlag, 0) // 过滤已删除的计划 - .isNotNull(WmsDeliveryPlan::getCoil) // 只查有钢卷ID的计划 - .ne(WmsDeliveryPlan::getCoil, ""); // 排除空字符串 - List plans = deliveryPlanMapper.selectList(planQuery); - if (!plans.isEmpty()) { - Set usedCoilIds = new HashSet<>(); - for (WmsDeliveryPlan plan : plans) { - if (StringUtils.isNotBlank(plan.getCoil())) { - String[] coilIds = plan.getCoil().split(","); - for (String coilIdStr : coilIds) { - try { - usedCoilIds.add(Long.parseLong(coilIdStr.trim())); - } catch (NumberFormatException ignored) { - // 忽略无效的ID - } - } - } - } - - if (!usedCoilIds.isEmpty()) { - lqw.notIn(WmsMaterialCoil::getCoilId, usedCoilIds); - } - } - - return lqw; - } /**