From 5d818f39c862884b7087488d588fef5b7ce47386 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 28 十月 2026 18:33:55 +0800
Subject: [PATCH] feat(mes): 增加销售退货单与出库单关联功能
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedQualityServiceImpl.java | 37 +++++++++++++++++++++++++++++--------
1 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedQualityServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedQualityServiceImpl.java
index 45248cf..67f0fc5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedQualityServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedQualityServiceImpl.java
@@ -193,6 +193,8 @@
if (qualifiedWarehouse == null) throw exception(WM_WAREHOUSE_NOT_EXISTS);
if (!MesWmWarehouseTypeEnum.QUALIFIED.getType().equals(qualifiedWarehouse.getType()))
throw exception(WM_WAREHOUSE_TYPE_NOT_QUALIFIED);
+ // 鎻愬墠鏍¢獙鍚堟牸搴撳凡閰嶇疆搴撳尯/搴撲綅锛岄伩鍏嶅妫�瀹℃牳鏀捐鏃舵墠澶辫触
+ resolveQualifiedLocation(qualifiedWarehouse);
LocalDateTime now = LocalDateTime.now();
Long operatorId = getLoginUserId();
@@ -252,6 +254,8 @@
if (!MesWmWarehouseTypeEnum.QUALIFIED.getType().equals(qualifiedWarehouse.getType())) {
throw exception(WM_WAREHOUSE_TYPE_NOT_QUALIFIED);
}
+ // 鎻愬墠鏍¢獙鍚堟牸搴撳凡閰嶇疆搴撳尯/搴撲綅锛岄伩鍏嶅妫�瀹℃牳鏀捐鏃舵墠澶辫触
+ resolveQualifiedLocation(qualifiedWarehouse);
Set<String> codes = new HashSet<>();
boolean passed = true;
MesQcSeedQualityDO quality = MesQcSeedQualityDO.builder().code(bag.getCode()).itemId(batch.getItemId())
@@ -296,12 +300,10 @@
Long qualifiedLocationId = null;
Long qualifiedAreaId = null;
if (passed) {
- List<MesWmWarehouseLocationDO> locations = warehouseLocationService.getWarehouseLocationList(qualifiedWarehouse.getId());
- if (CollUtil.isNotEmpty(locations)) {
- qualifiedLocationId = locations.get(0).getId();
- List<MesWmWarehouseAreaDO> areas = warehouseAreaService.getWarehouseAreaList(qualifiedLocationId);
- if (CollUtil.isNotEmpty(areas)) qualifiedAreaId = areas.get(0).getId();
- }
+ // 搴撳瓨浜嬪姟蹇呴』钀藉埌搴撳尯銆佸簱浣嶏紝鍚堟牸搴撶己灏戦厤缃椂鎻愬墠缁欏嚭鍙搷浣滅殑鎻愮ず
+ Long[] target = resolveQualifiedLocation(qualifiedWarehouse);
+ qualifiedLocationId = target[0];
+ qualifiedAreaId = target[1];
}
// 鎸夎鐮佺矑搴︽祦杞簱瀛橈細閿佸畾璇ヨ鍦ㄦ殏瀛樺簱涓殑娲诲姩鏄庣粏锛岀姝㈡寜鎵规浠绘剰鎵e噺
MesWmMaterialStockBagDO stockBag = materialStockBagMapper.selectActiveByBagCode(bag.getCode());
@@ -688,8 +690,8 @@
*
* @param tempStock 浠庢殏瀛樺簱鎵e噺鍚庤繑鍥炵殑鏆傚瓨璁板綍锛堟惡甯� item/batch/vendor 缁村害锛�
* @param qualifiedWarehouseId 鐩爣鍚堟牸搴撲粨搴撶紪鍙�
- * @param qualifiedLocationId 鐩爣鍚堟牸搴撳簱鍖虹紪鍙凤紙鏈厤缃垯涓� null锛�
- * @param qualifiedAreaId 鐩爣鍚堟牸搴撳簱浣嶇紪鍙凤紙鏈厤缃垯涓� null锛�
+ * @param qualifiedLocationId 鐩爣鍚堟牸搴撳簱鍖虹紪鍙�
+ * @param qualifiedAreaId 鐩爣鍚堟牸搴撳簱浣嶇紪鍙�
*/
private MesWmMaterialStockBagDO getOrCreateStockBag(MesProBagCodeDO bag, MesWmMaterialStockDO tempStock) {
MesWmMaterialStockBagDO stockBag = materialStockBagMapper.selectByBagCode(bag.getCode());
@@ -706,6 +708,25 @@
return stockBag;
}
+ /**
+ * 瑙f瀽鍚堟牸搴撶殑榛樿鍏ュ簱搴撳尯涓庡簱浣嶏細鍙栫涓�涓悓鏃堕厤缃簡搴撲綅鐨勯潪鍐荤粨搴撳尯銆�
+ *
+ * 璐ㄦ鎸変粨搴撶淮搴﹂�夋嫨鍏ュ簱鐩爣锛屽簱鍖�/搴撲綅鐢辩郴缁熻嚜鍔ㄨ惤鐐癸紱鍚堟牸搴撶己灏戝彲鐢ㄥ簱鍖烘垨搴撲綅鏃讹紝
+ * 搴撳瓨浜嬪姟鏃犳硶鍐欏叆锛岀洿鎺ユ彁绀虹鐞嗗憳瀹屽杽浠撳簱閰嶇疆銆�
+ */
+ private Long[] resolveQualifiedLocation(MesWmWarehouseDO qualifiedWarehouse) {
+ List<MesWmWarehouseLocationDO> locations = warehouseLocationService.getWarehouseLocationList(qualifiedWarehouse.getId())
+ .stream().filter(location -> !Boolean.TRUE.equals(location.getFrozen())).toList();
+ if (CollUtil.isEmpty(locations))
+ throw new IllegalArgumentException("鍚堟牸搴撱��" + qualifiedWarehouse.getName() + "銆嶆湭閰嶇疆鍙敤搴撳尯锛岃鍏堝湪浠撳簱绠$悊涓畬鍠勫簱鍖轰笌搴撲綅");
+ for (MesWmWarehouseLocationDO location : locations) {
+ List<MesWmWarehouseAreaDO> areas = warehouseAreaService.getWarehouseAreaList(location.getId())
+ .stream().filter(area -> !Boolean.TRUE.equals(area.getFrozen())).toList();
+ if (CollUtil.isNotEmpty(areas)) return new Long[]{location.getId(), areas.get(0).getId()};
+ }
+ throw new IllegalArgumentException("鍚堟牸搴撱��" + qualifiedWarehouse.getName() + "銆嶆湭閰嶇疆鍙敤搴撲綅锛岃鍏堝湪浠撳簱绠$悊涓畬鍠勫簱鍖轰笌搴撲綅");
+ }
+
private MesWmMaterialStockDO getOrCreateQualifiedStock(MesWmMaterialStockDO tempStock, Long qualifiedWarehouseId,
Long qualifiedLocationId, Long qualifiedAreaId) {
MesWmMaterialStockDO qualified = materialStockMapper.selectQualifiedByCompositeKey(
--
Gitblit v1.9.3