From b4a8575d667c5629c340c9555377c6bde6945513 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Wed, 3 Sep 2025 16:47:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E4=BC=98=E5=8C=96=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E4=BB=BB=E5=8A=A1=E6=8C=89=E7=89=A9=E6=96=99=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E8=BF=87=E6=BB=A4=E5=BA=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增按物料类型过滤库存的方法 queryInventoryByLocationAndMaterialType - 在 RemoteInventoryCheckServiceImpl 中根据任务类型和物料类型查询库存- 修改 WmsCheckTaskServiceImpl 中的任务名称生成逻辑 - 优化 WmsInventoryCheckServiceImpl 中的检查单号生成逻辑 --- .../RemoteInventoryCheckServiceImpl.java | 11 ++++++- .../service/impl/WmsCheckTaskServiceImpl.java | 19 ++++++++--- .../impl/WmsInventoryCheckServiceImpl.java | 17 +++++----- .../service/impl/WmsInventoryServiceImpl.java | 32 +++++++++++++++++++ 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/dubbo/RemoteInventoryCheckServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/dubbo/RemoteInventoryCheckServiceImpl.java index 1bc3bb4d..5294f365 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/dubbo/RemoteInventoryCheckServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/dubbo/RemoteInventoryCheckServiceImpl.java @@ -90,7 +90,16 @@ public class RemoteInventoryCheckServiceImpl implements RemoteInventoryCheckServ for (WmsBaseLocationVo location : locations) { WmsInventoryBo invBo = new WmsInventoryBo(); invBo.setLocationCode(location.getLocationCode()); - List inventories = wmsInventoryService.queryList(invBo); + + // 当抽检任务且指定了物料类型时,需要关联查询对应物料类型的库存 + List inventories; + if ("0".equals(task.getWmsCheckTaskType()) && task.getMaterialTypeId() != null) { + // 抽检模式且指定了物料类型,需要过滤物料类型 + inventories = wmsInventoryService.queryInventoryByLocationAndMaterialType(location.getLocationCode(), task.getMaterialTypeId()); + } else { + // 全盘或未指定物料类型 + inventories = wmsInventoryService.queryList(invBo); + } // 遍历当前库位下的所有库存记录 for (WmsInventoryVo inventory : inventories) { diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsCheckTaskServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsCheckTaskServiceImpl.java index 202f8da1..28c77abb 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsCheckTaskServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsCheckTaskServiceImpl.java @@ -125,11 +125,17 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { public Boolean insertByBo(WmsCheckTaskBo bo) { WmsCheckTask add = MapstructUtils.convert(bo, WmsCheckTask.class); validEntityBeforeSave(add); + String jobName = null; + if (bo.getWmsCheckTaskType().equals("0")) { + jobName = "WMS抽检任务" + bo.getTaskCode() + bo.getTaskName(); + }else { + jobName = "WMS盘点任务" + bo.getTaskCode() + bo.getTaskName(); + } // 创建SnailJob任务 DmsJobEntity job = new DmsJobEntity(); job.setRouteKey(AllocationAlgorithmEnum.ROUND) - .setJobName("WMS盘点任务" + bo.getTaskCode()) + .setJobName(jobName) .setExecutorInfo("wsmCheckTsk")//执行器名称 .setExecutorTimeout(30)//执行超时时间 .setBlockStrategy(JobBlockStrategyEnum.DISCARD)//阻塞策略:丢弃后续任务,避免重复执行 @@ -144,7 +150,7 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { R jobResp = remoteJobService.addClusterJob(job); Long jobId = jobResp != null ? jobResp.getData() : null;//任务ID add.setJobId(jobId); - if(ObjectUtils.isNotEmpty(jobId)){ + if (ObjectUtils.isNotEmpty(jobId)) { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setTaskId(add.getTaskId()); @@ -170,10 +176,15 @@ public class WmsCheckTaskServiceImpl implements IWmsCheckTaskService { WmsCheckTask update = MapstructUtils.convert(bo, WmsCheckTask.class); validEntityBeforeSave(update); - + String jobName = null; + if (bo.getWmsCheckTaskType().equals("0")) { + jobName = "WMS抽检任务" + bo.getTaskCode() + bo.getTaskName(); + }else { + jobName = "WMS盘点任务" + bo.getTaskCode() + bo.getTaskName(); + } DmsJobEntity job = new DmsJobEntity(); job.setRouteKey(AllocationAlgorithmEnum.ROUND) - .setJobName("WMS盘点任务" + bo.getTaskCode())//任务名称 + .setJobName(jobName)//任务名称 .setExecutorInfo("wsmCheckTsk")//执行器名称 .setExecutorTimeout(30)//执行超时时间 .setBlockStrategy(JobBlockStrategyEnum.DISCARD)//阻塞策略:丢弃后续任务,避免重复执行 diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryCheckServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryCheckServiceImpl.java index 3cdefe4a..0ed37f27 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryCheckServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryCheckServiceImpl.java @@ -1,20 +1,17 @@ package org.dromara.wms.service.impl; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.wms.domain.BaseMaterialCategory; import org.dromara.wms.domain.WmsBaseWarehouse; -import org.dromara.wms.domain.WmsInstockOrder; import org.dromara.wms.domain.WmsInventoryCheck; -import org.dromara.wms.domain.bo.WmsInstockOrderBo; import org.dromara.wms.domain.bo.WmsInventoryCheckBo; import org.dromara.wms.domain.vo.WmsInventoryCheckVo; import org.dromara.wms.mapper.WmsInventoryCheckMapper; @@ -22,10 +19,10 @@ import org.dromara.wms.service.IWmsInventoryCheckService; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.Collection; import java.util.concurrent.atomic.AtomicInteger; /** @@ -151,7 +148,9 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService { } String stockingOrder = order + orderDate + orderLast; WmsInventoryCheck add = MapstructUtils.convert(bo, WmsInventoryCheck.class); - add.setCheckCode(stockingOrder); + if (add != null && add.getCheckCode() == null) { + add.setCheckCode(stockingOrder); + } add.setCreateBy(LoginHelper.getUserId()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryServiceImpl.java index 2f1e51ab..5e2c5937 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryServiceImpl.java @@ -230,6 +230,38 @@ public class WmsInventoryServiceImpl implements IWmsInventoryService { return baseMapper.deleteByIds(ids) > 0; } + /** + * 根据库位编码和物料类型查询库存列表 + * 用于盘点任务中按物料类型过滤库存 + * + * @param locationCode 库位编码 + * @param materialTypeId 物料类型ID + * @return 库存列表 + */ + @Override + public List queryInventoryByLocationAndMaterialType(String locationCode, Long materialTypeId) { + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInventory.class) + .selectAll(WmsInventory.class) + + // 关联表查询物料信息 + .select(BaseMaterialInfo::getMaterialCode, BaseMaterialInfo::getMaterialName, BaseMaterialInfo::getMaterialTypeId) + .leftJoin(BaseMaterialInfo.class, BaseMaterialInfo::getMaterialId, WmsInventory::getMaterialId) + // 关联表查询物料大类名称 + .select(BaseMaterialCategory::getMaterialCategoryName) + .leftJoin(BaseMaterialCategory.class, BaseMaterialCategory::getMaterialCategoryId, WmsInventory::getMaterialCategoryId) + + // 按库位编码过滤 + .eq(StringUtils.isNotBlank(locationCode), WmsInventory::getLocationCode, locationCode) + // 按物料类型过滤 + .eq(materialTypeId != null, BaseMaterialInfo::getMaterialTypeId, materialTypeId) + // 只查询有库存的记录 + .gt(WmsInventory::getInventoryQty, BigDecimal.ZERO) + // 只查询正常库存 +// .eq(WmsInventory::getInventoryStatus, "1") + .orderByDesc(WmsInventory::getCreateTime); + + return baseMapper.selectVoList(lqw); + } /** * 根据批次码查询库存