From 82065a03737fa1370eb9f4f01ab5332933baf08a Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 05 三月 2026 09:23:37 +0800
Subject: [PATCH] 云仓WMS+RCS+自动入库临时方法配置
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 144 +++++++++++++++++++++++++++++++++++++++---------
1 files changed, 117 insertions(+), 27 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 29bbfa0..13c551f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -28,7 +28,12 @@
import com.vincent.rsf.server.api.utils.SlaveProperties;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.manager.controller.params.PakinItem;
+import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
+import com.vincent.rsf.server.system.constant.GlobalConfigCode;
+import com.vincent.rsf.server.system.entity.Config;
+import com.vincent.rsf.server.system.service.ConfigService;
import com.vincent.rsf.server.system.utils.SystemAuthUtils;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.manager.enums.LocStsType;
@@ -88,6 +93,16 @@
private RestTemplate restTemplate;
@Autowired
private RemotesInfoProperties.RcsApi rcsApi;
+ @Autowired
+ private ConfigService configService;
+ @Autowired
+ private MatnrService matnrService;
+ @Autowired
+ private AsnOrderService asnOrderService;
+ @Autowired
+ private AsnOrderItemService asnOrderItemService;
+ @Autowired
+ private com.vincent.rsf.server.api.service.MobileService mobileService;
@Override
@@ -307,6 +322,16 @@
// 2. 鑻ユ湭鍛戒腑鎷f枡/鐩樼偣鍏ュ簱锛屽啀鏍¢獙缁勬墭骞剁户缁叾浠栧叆搴撻�昏緫
if (pickInTask == null && checkInTask == null) {
+ waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .eq(WaitPakin::getBarcode, param.getBarcode())
+ .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+ // 绌烘墭鐩樻棤缁勬墭鏃讹細鑻ラ厤缃惎鐢ㄥ垯鎸� AUTO_FULL_OUT_MATNR_CODE 鑷姩缁勬墭骞剁敓鎴愬叆搴撳崟锛屽啀缁х画鍏ュ簱浠诲姟閫昏緫
+ if (waitPakin == null) {
+ tryAutoPakinForBarcode(param.getBarcode());
+ waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .eq(WaitPakin::getBarcode, param.getBarcode())
+ .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+ }
waitPakin = validateWaitPakin(param.getBarcode());
waitPakinItems = waitPakinItemService.list(
new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
@@ -376,6 +401,9 @@
throw new RuntimeException(e);
}
+ if (waitPakin == null) {
+ throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�");
+ }
// 鍒涘缓骞朵繚瀛樹换鍔�
Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
@@ -398,6 +426,93 @@
return locNo;
}
+
+ /**
+ * RCS 鍏ュ簱鐢宠鏃惰嫢 barcode 鏃犵粍鎵樹笖閰嶇疆鍚敤锛氭寜 AUTO_FULL_OUT_MATNR_CODE 鏃犺鍗曠粍鎵樺苟鐢熸垚鍏ュ簱鍗曪紝渚夸簬鍚庣画鐢熸垚鍏ュ簱浠诲姟銆�
+ */
+ private void tryAutoPakinForBarcode(String barcode) {
+ Config enabledConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_PAKIN_ON_ASN_ENABLED));
+ if (enabledConfig == null || !Boolean.parseBoolean(enabledConfig.getVal())) {
+ return;
+ }
+ Config matnrConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_FULL_OUT_MATNR_CODE));
+ if (matnrConfig == null || StringUtils.isBlank(matnrConfig.getVal())) {
+ return;
+ }
+ Config qtyConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_PAKIN_QTY));
+ double autoQty = 1.0;
+ if (qtyConfig != null && StringUtils.isNotBlank(qtyConfig.getVal())) {
+ try {
+ autoQty = Double.parseDouble(qtyConfig.getVal().trim());
+ if (autoQty <= 0) autoQty = 1.0;
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+ }
+ String matnrCode = matnrConfig.getVal().trim();
+ Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, matnrCode));
+ if (matnr == null) {
+ log.warn("[RCS鍏ュ簱鐢宠-鑷姩缁勬墭] 鐗╂枡涓嶅瓨鍦�: {}", matnrCode);
+ return;
+ }
+ List<PakinItem> pakinItems = new ArrayList<>();
+ PakinItem pi = new PakinItem();
+ pi.setMatnrId(matnr.getId());
+ pi.setReceiptQty(autoQty);
+ pi.setAsnCode(null);
+ pi.setId(null);
+ pakinItems.add(pi);
+ WaitPakinParam param = new WaitPakinParam();
+ param.setBarcode(barcode);
+ param.setItems(pakinItems);
+ WaitPakin waitPakin;
+ try {
+ waitPakin = mobileService.mergeItems(param, 1L);
+ } catch (Exception e) {
+ log.warn("[RCS鍏ュ簱鐢宠-鑷姩缁勬墭] 缁勬墭澶辫触, barcode={}: {}", barcode, e.getMessage());
+ return;
+ }
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ log.warn("[RCS鍏ュ簱鐢宠-鑷姩缁勬墭] 鍏ュ簱鍗曠紪鐮佽鍒欐湭閰嶇疆");
+ return;
+ }
+ WkOrder order = new WkOrder();
+ order.setCode(ruleCode)
+ .setType(OrderType.ORDER_IN.type)
+ .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)
+ .setAnfme(autoQty)
+ .setWorkQty(0.0)
+ .setQty(0.0)
+ .setCreateBy(1L)
+ .setUpdateBy(1L);
+ if (!asnOrderService.save(order)) {
+ throw new CoolException("鍏ュ簱涓诲崟淇濆瓨澶辫触");
+ }
+ WkOrderItem orderItem = new WkOrderItem();
+ orderItem.setOrderId(order.getId())
+ .setOrderCode(order.getCode())
+ .setMatnrId(matnr.getId())
+ .setMatnrCode(matnr.getCode())
+ .setMaktx(matnr.getName())
+ .setAnfme(autoQty)
+ .setWorkQty(0.0)
+ .setQty(0.0)
+ .setStockUnit(matnr.getStockUnit() != null ? matnr.getStockUnit() : "涓�")
+ .setPurUnit(matnr.getPurUnit() != null ? matnr.getPurUnit() : "涓�")
+ .setFieldsIndex(matnr.getFieldsIndex())
+ .setCreateBy(1L)
+ .setUpdateBy(1L);
+ if (!asnOrderItemService.save(orderItem)) {
+ throw new CoolException("鍏ュ簱鏄庣粏淇濆瓨澶辫触");
+ }
+ waitPakinItemService.update(new LambdaUpdateWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin.getId())
+ .set(WaitPakinItem::getAsnId, order.getId())
+ .set(WaitPakinItem::getAsnCode, order.getCode())
+ .set(WaitPakinItem::getAsnItemId, orderItem.getId()));
+ log.info("[RCS鍏ュ簱鐢宠-鑷姩缁勬墭] 宸茬粍鎵樺苟鐢熸垚鍏ュ簱鍗�: {}, barcode: {}, 鐗╂枡: {}, 鏁伴噺: {}", order.getCode(), barcode, matnrCode, autoQty);
+ }
/**
* 楠岃瘉璁惧绔欑偣
@@ -878,6 +993,7 @@
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_IN.id);
}
log.info("鍏ュ簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+ // 鍏ュ簱瀹屾暣闂幆鐢卞畾鏃朵换鍔″畬鎴愶細TaskSchedules.completeInStock 鎵弿 COMPLETE_IN锛屾墽琛屽簱浣�/缁勬墭/涓婃姤浜戜粨
}
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
@@ -920,33 +1036,7 @@
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_OUT.id);
}
log.info("鍑哄簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
-
- // 鍏ㄧ増鍑哄簱鍦≧CS鍥炶皟鍚庡鐞嗗簱瀛樺苟璁剧疆涓�199锛岀瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200
- if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
- log.info("鍏ㄧ増鍑哄簱浠诲姟锛屽紑濮嬪鐞嗗簱瀛樺苟鏇存柊鐘舵�佷负199 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
- try {
- // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙198锛�
- task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
-
- // 璋冪敤completeTask澶勭悊搴撳瓨锛堜細璁剧疆涓�199锛�
- List<Task> taskList = new ArrayList<>();
- taskList.add(task);
- taskService.completeTask(taskList);
-
- // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙199锛�
- task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
-
- if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
- log.info("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佸凡鏇存柊涓�199锛堢瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200锛� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
- } else {
- log.warn("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佹洿鏂颁负199澶辫触 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}",
- task.getTaskCode(), task.getTaskStatus());
- }
- } catch (Exception e) {
- log.error("鍏ㄧ増鍑哄簱浠诲姟澶勭悊澶辫触 - 浠诲姟缂栫爜锛歿}锛岄敊璇細{}", task.getTaskCode(), e.getMessage(), e);
- // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷RCS鍥炶皟鐨勬甯歌繑鍥�
- }
- }
+ // 鍑哄簱瀹屾暣闂幆锛堝簱瀛樸�佸嚭搴撳崟銆�9.1 涓婃姤浜戜粨锛夌敱瀹氭椂浠诲姟 TaskSchedules.complateOutStock 缁熶竴鎵ц
}
}
} else {
--
Gitblit v1.9.1