From cab68adde8ecec4e4e780cd8ab894cdbdf87e9e4 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 8 Dec 2025 13:08:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9E=E5=8F=AF?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E9=92=A2=E5=8D=B7=E6=9F=A5=E8=AF=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在IWmsMaterialCoilService接口中新增queryAvailableForDelivery方法 - 在WmsMaterialCoilController中新增/availableForDelivery接口 - 在WmsMaterialCoilServiceImpl中实现查询逻辑 - 构建排除已被发货计划引用钢卷的查询条件 - 支持按入库号、当前卷号、供应商卷号等条件筛选 - 实现分页查询和钢卷状态过滤 - 关联WmsDeliveryPlanMapper以获取发货计划数据 - 处理发货计划中钢卷ID的解析和去重逻辑 --- .../controller/WmsMaterialCoilController.java | 11 +++ .../klp/service/IWmsMaterialCoilService.java | 2 + .../impl/WmsMaterialCoilServiceImpl.java | 82 +++++++++++++++++++ 3 files changed, 95 insertions(+) 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 fde0053f..1dd9771c 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -184,5 +184,16 @@ public class WmsMaterialCoilController extends BaseController { List distribution = iWmsMaterialCoilService.getDistributionByActualItemType(itemType, itemId); return R.ok(distribution); } + + + + /** + * 查询未被任何发货计划引用的钢卷列表 + * 用于发货计划选择钢卷时,避免选择已经被其他发货计划引用的钢卷 + */ + @GetMapping("/availableForDelivery") + public TableDataInfo getAvailableCoilsForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery) { + return iWmsMaterialCoilService.queryAvailableForDelivery(bo, pageQuery); + } } 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 43c8b9b9..34a8dab0 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -99,5 +99,7 @@ public interface IWmsMaterialCoilService { List queryExportList(WmsMaterialCoilBo bo); int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId); + + TableDataInfo queryAvailableForDelivery(WmsMaterialCoilBo bo, PageQuery pageQuery); } 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 17cf1392..d5d894a3 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 @@ -12,8 +12,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.helper.LoginHelper; import com.klp.common.utils.StringUtils; import com.klp.common.utils.spring.SpringUtils; +import com.klp.domain.WmsDeliveryPlan; import com.klp.domain.bo.*; import com.klp.domain.vo.*; +import com.klp.mapper.WmsDeliveryPlanMapper; import com.klp.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -56,6 +58,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { private final IWmsBomItemService bomItemService; private final IWmsProductService productService; private final ISysUserService userService; + private final WmsDeliveryPlanMapper deliveryPlanMapper; /** * 查询钢卷物料表 @@ -1752,4 +1755,83 @@ 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; + } }