From 1ba0dbfde5634c8bf2ec20891d6b226b996f6b59 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 02 九月 2026 14:24:38 +0800
Subject: [PATCH] refactor(mes): 优化MES生产扫码入库功能支持多类型扫码
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java | 133 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 129 insertions(+), 4 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
index 3086782..d3a7a25 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
@@ -6,6 +6,7 @@
import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
+import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockStateEnum;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper;
@@ -22,16 +23,19 @@
default PageResult<MesWmMaterialStockDO> selectPage(MesWmMaterialStockPageReqVO reqVO,
Collection<Long> itemTypeIds,
Collection<Long> itemIds,
- Long virtualWarehouseId) {
+ Long virtualWarehouseId,
+ Collection<Long> warehouseIds) {
LambdaQueryWrapperX<MesWmMaterialStockDO> wrapper = new LambdaQueryWrapperX<MesWmMaterialStockDO>()
.inIfPresent(MesWmMaterialStockDO::getItemTypeId, itemTypeIds)
.inIfPresent(MesWmMaterialStockDO::getItemId, itemIds)
.likeIfPresent(MesWmMaterialStockDO::getBatchCode, reqVO.getBatchCode())
.eqIfPresent(MesWmMaterialStockDO::getBatchId, reqVO.getBatchId())
.eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId())
+ .inIfPresent(MesWmMaterialStockDO::getWarehouseId, warehouseIds)
.eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId())
.eqIfPresent(MesWmMaterialStockDO::getAreaId, reqVO.getAreaId())
.eqIfPresent(MesWmMaterialStockDO::getVendorId, reqVO.getVendorId())
+ .eqIfPresent(MesWmMaterialStockDO::getStockState, reqVO.getStockState())
.eqIfPresent(MesWmMaterialStockDO::getFrozen, reqVO.getFrozen());
wrapper.ne(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO)
.orderByAsc(MesWmMaterialStockDO::getReceiptTime);
@@ -137,23 +141,81 @@
} else {
wrapper.isNull(MesWmMaterialStockDO::getBatchId);
}
- // vendorId=null 鏃剁簿纭尮閰� is null
+ // vendorId=null 鏃朵笉闄愬埗锛屽尮閰嶄换鎰忎緵搴斿晢鐨勫簱瀛�
+ // 锛堥伩鍏嶅洜渚涘簲鍟嗙淮搴︽媶鍒嗭紝OUT 浜嬪姟鎵句笉鍒扮湡姝f湁搴撳瓨鐨勮褰曡�屾墸閿欏埌 vendor_id IS NULL 鐨勮褰曪級
if (vendorId != null) {
wrapper.eq(MesWmMaterialStockDO::getVendorId, vendorId);
- } else {
- wrapper.isNull(MesWmMaterialStockDO::getVendorId);
}
+ // 澶氳褰曟椂浼樺厛鍙栧簱瀛橀噺鏈�澶氱殑锛堥伩鍏嶆墸鍒伴浂搴撳瓨鎴栬礋搴撳瓨鐨勮褰曪級
+ wrapper.last("ORDER BY quantity DESC LIMIT 1");
+ return selectOne(wrapper);
+ }
+
+ /**
+ * 鎸夌粍鍚堥敭鏌ヨ搴撳瓨璁板綍锛堝拷鐣ヤ緵搴斿晢缁村害锛屼粎鍚堟牸搴擄級
+ *
+ * 鐢ㄤ簬绉诲簱鍦烘櫙锛氱Щ搴撴椂灏嗗悎鏍煎簱瀛樺悎骞跺埌鐩爣搴撲綅宸叉湁鍚堟牸搴撳瓨锛屼笉鍖哄垎渚涘簲鍟�
+ * 鍙尮閰嶅悎鏍煎簱(20)锛岄伩鍏嶅皢绉诲叆鏁伴噺鍚堝苟鍒板悓鎵规鐨勬殏瀛樺簱璁板綍
+ */
+ default MesWmMaterialStockDO selectByCompositeKeyIgnoreVendor(Long itemId, Long warehouseId, Long locationId,
+ Long areaId, Long batchId) {
+ LambdaQueryWrapperX<MesWmMaterialStockDO> wrapper = new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getItemId, itemId)
+ .eq(MesWmMaterialStockDO::getWarehouseId, warehouseId)
+ .eq(MesWmMaterialStockDO::getLocationId, locationId)
+ .eq(MesWmMaterialStockDO::getAreaId, areaId)
+ .eq(MesWmMaterialStockDO::getStockState, MesWmStockStateEnum.QUALIFIED.getState());
+ // batchId=null 鏃剁簿纭尮閰� is null
+ if (batchId != null) {
+ wrapper.eq(MesWmMaterialStockDO::getBatchId, batchId);
+ } else {
+ wrapper.isNull(MesWmMaterialStockDO::getBatchId);
+ }
+ wrapper.last("LIMIT 1");
+ return selectOne(wrapper);
+ }
+
+ /**
+ * 鎸夌粍鍚堥敭鏌ヨ鍚堟牸搴撳簱瀛樿褰曪紙鐢ㄤ簬鍑哄簱浜嬪姟鍖归厤锛�
+ *
+ * 鍚屾壒娆″彲鑳藉悓鏃跺瓨鍦ㄦ殏瀛樺簱(10)涓庡悎鏍煎簱(20)涓ゆ潯璁板綍锛堢瀛愯川妫�鎸夎鎷嗘暟閲忥級锛�
+ * 鍑哄簱蹇呴』鍙粠鍚堟牸搴撳尮閰嶏紝閬垮厤鎵e埌鏈川妫�鐨勬殏瀛樺簱瀛樸��
+ */
+ default MesWmMaterialStockDO selectQualifiedByCompositeKey(Long itemId, Long warehouseId, Long locationId,
+ Long areaId, Long batchId, Long vendorId) {
+ LambdaQueryWrapperX<MesWmMaterialStockDO> wrapper = new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getItemId, itemId)
+ .eq(MesWmMaterialStockDO::getWarehouseId, warehouseId)
+ .eq(MesWmMaterialStockDO::getLocationId, locationId)
+ .eq(MesWmMaterialStockDO::getAreaId, areaId)
+ .eq(MesWmMaterialStockDO::getStockState, MesWmStockStateEnum.QUALIFIED.getState());
+ // batchId=null 鏃剁簿纭尮閰� is null
+ if (batchId != null) {
+ wrapper.eq(MesWmMaterialStockDO::getBatchId, batchId);
+ } else {
+ wrapper.isNull(MesWmMaterialStockDO::getBatchId);
+ }
+ if (vendorId != null) {
+ wrapper.eq(MesWmMaterialStockDO::getVendorId, vendorId);
+ }
+ wrapper.last("ORDER BY quantity DESC LIMIT 1");
return selectOne(wrapper);
}
default List<MesWmMaterialStockDO> selectList(MesWmMaterialStockListReqVO reqVO) {
+ return selectList(reqVO, null);
+ }
+
+ default List<MesWmMaterialStockDO> selectList(MesWmMaterialStockListReqVO reqVO, Collection<Long> warehouseIds) {
return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
.eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId())
+ .inIfPresent(MesWmMaterialStockDO::getWarehouseId, warehouseIds)
.eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId())
.eqIfPresent(MesWmMaterialStockDO::getAreaId, reqVO.getAreaId())
.eqIfPresent(MesWmMaterialStockDO::getItemId, reqVO.getItemId())
.eqIfPresent(MesWmMaterialStockDO::getBatchId, reqVO.getBatchId())
.eqIfPresent(MesWmMaterialStockDO::getVendorId, reqVO.getVendorId())
+ .eqIfPresent(MesWmMaterialStockDO::getStockState, reqVO.getStockState())
.likeIfPresent(MesWmMaterialStockDO::getBatchCode, reqVO.getBatchCode())
.geIfPresent(MesWmMaterialStockDO::getUpdateTime, reqVO.getStartTime())
.leIfPresent(MesWmMaterialStockDO::getUpdateTime, reqVO.getEndTime())
@@ -161,4 +223,67 @@
.orderByAsc(MesWmMaterialStockDO::getReceiptTime));
}
+ /**
+ * 鎸夌墿鏂欑紪鍙锋壒閲忔煡璇㈠簱瀛樿褰曪紙鐢ㄤ簬鐗╂枡闇�姹傚簱瀛樻牎楠岋級
+ */
+ default List<MesWmMaterialStockDO> selectListByItemAndBatch(Long itemId, Long batchId) {
+ return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getItemId, itemId)
+ .eqIfPresent(MesWmMaterialStockDO::getBatchId, batchId)
+ .gt(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO)
+ .orderByAsc(MesWmMaterialStockDO::getReceiptTime));
+ }
+
+ /**
+ * 鎸夌墿鏂�/鎵规鏌ヨ鍚堟牸搴撳簱瀛樿褰曪紙浠� stock_state=20锛屼笖浠呴檺鍚堟牸浠撳簱锛�
+ *
+ * <p>鍚屾壒娆″彲鑳藉悓鏃跺瓨鍦ㄦ殏瀛樺簱(10)涓庡悎鏍煎簱(20)涓ゆ潯璁板綍锛堢瀛愯川妫�鎸夎鎷嗘暟閲忥級锛�
+ * 閿�鍞嚭搴撻�夊簱瀛樺彧鑳戒粠鍚堟牸搴撹褰曚腑閫夛紝鏉滅粷閫変腑鏈川妫�鐨勬殏瀛樺簱瀛橈紱
+ * 鍚屾椂闄愬畾鍚堟牸浠撳簱锛坱ype=20锛夛紝閬垮厤浠庢殏瀛樹粨搴撲腑璇�夊悎鏍兼�佸簱瀛樸��</p>
+ */
+ default List<MesWmMaterialStockDO> selectQualifiedListByItemAndBatch(Long itemId, Long batchId,
+ Collection<Long> qualifiedWarehouseIds) {
+ return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getItemId, itemId)
+ .eqIfPresent(MesWmMaterialStockDO::getBatchId, batchId)
+ .eq(MesWmMaterialStockDO::getStockState, MesWmStockStateEnum.QUALIFIED.getState())
+ .in(MesWmMaterialStockDO::getWarehouseId, qualifiedWarehouseIds)
+ .gt(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO)
+ .orderByAsc(MesWmMaterialStockDO::getReceiptTime));
+ }
+
+ /**
+ * 鎸変粨搴撴壒娆℃煡璇㈠叏閮ㄥ簱瀛樿褰曪紙鍚殏瀛樺簱涓庡悎鏍煎簱锛宷uantity>0锛�
+ *
+ * <p>鐢ㄤ簬绉嶅瓙璐ㄦ鎸夎鐮佹祦杞細瀹氫綅璇ユ壒娆℃殏瀛樺簱璁板綍鎵e噺 1 琚嬶紝浠ュ強瀹氫綅/鏂板缓鍚堟牸搴撹褰曠疮鍔� 1 琚嬨��</p>
+ */
+ default List<MesWmMaterialStockDO> selectStockListByBatchId(Long batchId) {
+ return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getBatchId, batchId)
+ .gt(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO)
+ .orderByAsc(MesWmMaterialStockDO::getReceiptTime));
+ }
+
+ default List<MesWmMaterialStockDO> selectListByItemIds(Collection<Long> itemIds) {
+ if (itemIds == null || itemIds.isEmpty()) {
+ return java.util.Collections.emptyList();
+ }
+ return selectList(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .in(MesWmMaterialStockDO::getItemId, itemIds)
+ .ne(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO));
+ }
+
+ /**
+ * 缁熻鎵规鍦ㄦ殏瀛樺簱涓殑搴撳瓨璁板綍鏁帮紙鐢ㄤ簬绉嶅瓙璐ㄦ鍓嶆牎楠岃鐮�/鎵规鏄惁澶勪簬寰呰川妫�鐘舵�侊級
+ *
+ * @param batchId 浠撳簱鎵规ID
+ * @return 鏆傚瓨搴撳簱瀛樿褰曟暟
+ */
+ default Long selectTempStockCountByBatchId(Long batchId) {
+ return selectCount(new LambdaQueryWrapperX<MesWmMaterialStockDO>()
+ .eq(MesWmMaterialStockDO::getBatchId, batchId)
+ .eq(MesWmMaterialStockDO::getStockState, MesWmStockStateEnum.TEMP.getState())
+ .gt(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO));
+ }
+
}
--
Gitblit v1.9.3