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; - } /**