From b003a49794f49a329e2702918ecfc8d14b371d0d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 04 三月 2026 14:51:25 +0800
Subject: [PATCH] 云仓WMS接口流程
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 149 ++++++++++++++++++++++---------------------------
1 files changed, 67 insertions(+), 82 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 f71d431..58ea573 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
@@ -45,8 +45,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
-import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -124,75 +124,79 @@
// 楠岃瘉璁惧绔欑偣
DeviceSite deviceSite = validateDeviceSite(param);
- // 鎻愬墠瀹氫箟waitPakin锛岄伩鍏嶄綔鐢ㄥ煙闂
+ // 鎻愬墠瀹氫箟 waitPakin / waitPakinItems锛屼緵鍚庣画鍏朵粬鍏ュ簱閫昏緫浣跨敤
WaitPakin waitPakin = null;
+ List<WaitPakinItem> waitPakinItems = Collections.emptyList();
- // 鍏堥獙璇佺粍鎷栫姸鎬侊紝鑾峰彇缁勬墭鏄庣粏淇℃伅锛堢敤浜庢壒鍙峰尮閰嶅拰鍗曞彿妫�鏌ワ級
- waitPakin = validateWaitPakin(param.getBarcode());
- List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(
- new LambdaQueryWrapper<WaitPakinItem>()
- .eq(WaitPakinItem::getPakinId, waitPakin.getId()));
-
- // 鍏堟鏌ユ槸鍚︽湁鎷f枡鍏ュ簱浠诲姟锛堥渶瑕佸悓鏃跺尮閰嶇鍙峰拰鎵瑰彿锛�
+ // 1. 鍏堟煡璇换鍔$鐞嗕腑鐨勬嫞鏂欏叆搴撲换鍔°�佺洏鐐瑰叆搴撲换鍔★紙浠呮寜绠卞彿+绫诲瀷+鐘舵�侊紝涓嶄緷璧栫粍鎵橈級
Task pickInTask = null;
- // 妫�鏌ユ槸鍚︽湁鐩樼偣鍏ュ簱浠诲姟锛堥渶瑕佸悓鏃跺尮閰嶇鍙峰拰鎵瑰彿锛�
Task checkInTask = null;
-
- if (!waitPakinItems.isEmpty()) {
- // 鑾峰彇缁勬墭鏄庣粏涓殑鎵瑰彿鍒楄〃锛堝幓閲嶏級
- List<String> batchList = waitPakinItems.stream()
+ // 鍙�夛細鑻ユ湁缁勬墭鍒欏彇鎵瑰彿锛岀敤浜庡浠诲姟鏃朵紭鍏堟寜鎵瑰彿鍖归厤
+ WaitPakin waitPakinForBatch = 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));
+ List<String> batchList = Collections.emptyList();
+ if (waitPakinForBatch != null) {
+ List<WaitPakinItem> itemsForBatch = waitPakinItemService.list(
+ new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakinForBatch.getId()));
+ batchList = itemsForBatch.stream()
.map(WaitPakinItem::getBatch)
.filter(Objects::nonNull)
.filter(batch -> !batch.trim().isEmpty())
.distinct()
.collect(Collectors.toList());
-
if (!batchList.isEmpty()) {
- log.info("妫�鏌ョ粍鎵樻槑缁嗘壒鍙� - 鎵瑰彿鍒楄〃锛歿}", batchList);
+ log.info("妫�鏌ョ粍鎵樻槑缁嗘壒鍙凤紙鐢ㄤ簬鍖归厤鎷f枡/鐩樼偣鍏ュ簱浠诲姟锛� - 鎵瑰彿鍒楄〃锛歿}", batchList);
+ }
+ }
- // 鏌ヨ鎷f枡鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1銆�2鎴�199锛圧CS鐢宠鍏ュ簱鏃讹紝鐘舵��199闇�瑕佸彉鎴�2锛�
- List<Task> pickInTasks = taskService.list(new LambdaQueryWrapper<Task>()
- .eq(Task::getBarcode, param.getBarcode())
- .eq(Task::getTaskType, TaskType.TASK_TYPE_PICK_IN.type)
- .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WAVE_SEED.id)
- .orderByDesc(Task::getCreateTime));
+ // 鏌ヨ浠诲姟绠$悊锛氭嫞鏂欏叆搴撲换鍔★紙绠卞彿+绫诲瀷53+鐘舵��1/2/199锛�
+ List<Task> pickInTasks = taskService.list(new LambdaQueryWrapper<Task>()
+ .eq(Task::getBarcode, param.getBarcode())
+ .eq(Task::getTaskType, TaskType.TASK_TYPE_PICK_IN.type)
+ .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
+ .orderByDesc(Task::getCreateTime));
+ for (Task task : pickInTasks) {
+ if (batchList.isEmpty()) {
+ pickInTask = task;
+ log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙鎸夌鍙凤級 - 浠诲姟缂栫爜锛歿}锛岀鍙凤細{}", task.getTaskCode(), param.getBarcode());
+ break;
+ }
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+ .eq(TaskItem::getTaskId, task.getId())
+ .in(TaskItem::getBatch, batchList));
+ if (!taskItems.isEmpty()) {
+ pickInTask = task;
+ log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}", task.getTaskCode(), batchList);
+ break;
+ }
+ }
- // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
- for (Task task : pickInTasks) {
- List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
- .eq(TaskItem::getTaskId, task.getId())
- .in(TaskItem::getBatch, batchList));
-
- if (!taskItems.isEmpty()) {
- pickInTask = task;
- log.info("鎵惧埌鍖归厤鐨勬嫞鏂欏叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}",
- task.getTaskCode(), batchList);
- break;
- }
+ // 鏌ヨ浠诲姟绠$悊锛氱洏鐐瑰叆搴撲换鍔★紙绠卞彿+绫诲瀷+鐘舵��1/2/199锛�
+ if (pickInTask == null) {
+ List<Task> checkInTasks = taskService.list(new LambdaQueryWrapper<Task>()
+ .eq(Task::getBarcode, param.getBarcode())
+ .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_IN.type)
+ .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
+ .orderByDesc(Task::getCreateTime));
+ for (Task task : checkInTasks) {
+ if (batchList.isEmpty()) {
+ checkInTask = task;
+ log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙鎸夌鍙凤級 - 浠诲姟缂栫爜锛歿}锛岀鍙凤細{}", task.getTaskCode(), param.getBarcode());
+ break;
}
-
- // 鏌ヨ鐩樼偣鍏ュ簱浠诲姟锛氱鍙峰尮閰嶄笖鐘舵�佷负1銆�2鎴�199锛圧CS鐢宠鍏ュ簱鏃讹紝鐘舵��199闇�瑕佸彉鎴�2锛�
- List<Task> checkInTasks = taskService.list(new LambdaQueryWrapper<Task>()
- .eq(Task::getBarcode, param.getBarcode())
- .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_IN.type)
- .in(Task::getTaskStatus, TaskStsType.GENERATE_IN.id, TaskStsType.WCS_EXECUTE_IN.id, TaskStsType.WAVE_SEED.id)
- .orderByDesc(Task::getCreateTime));
-
- // 閫氳繃TaskItem鐨刡atch瀛楁鍖归厤鎵瑰彿
- for (Task task : checkInTasks) {
- List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
- .eq(TaskItem::getTaskId, task.getId())
- .in(TaskItem::getBatch, batchList));
-
- if (!taskItems.isEmpty()) {
- checkInTask = task;
- log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}",
- task.getTaskCode(), batchList);
- break;
- }
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+ .eq(TaskItem::getTaskId, task.getId())
+ .in(TaskItem::getBatch, batchList));
+ if (!taskItems.isEmpty()) {
+ checkInTask = task;
+ log.info("鎵惧埌鍖归厤鐨勭洏鐐瑰叆搴撲换鍔★紙绠卞彿鍜屾壒鍙烽兘鍖归厤锛� - 浠诲姟缂栫爜锛歿}锛屾壒鍙凤細{}", task.getTaskCode(), batchList);
+ break;
}
}
}
+
+
// 濡傛灉鏄嫞鏂欏叆搴撲换鍔★紝鐩存帴杩斿洖锛屼笉鏍¢獙缁勬墭
if (Objects.nonNull(pickInTask)) {
@@ -300,6 +304,12 @@
return msgDto;
}
+ // 2. 鑻ユ湭鍛戒腑鎷f枡/鐩樼偣鍏ュ簱锛屽啀鏍¢獙缁勬墭骞剁户缁叾浠栧叆搴撻�昏緫
+ if (pickInTask == null && checkInTask == null) {
+ waitPakin = validateWaitPakin(param.getBarcode());
+ waitPakinItems = waitPakinItemService.list(
+ new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+ }
// 妫�鏌ュ叾浠栧叆搴撲换鍔$被鍨嬶紙鐢ㄧ鍙锋煡璇紝鐘舵�佷负1鎴�2锛�
// 娉ㄦ剰锛氱洏鐐瑰叆搴撳凡鍗曠嫭澶勭悊锛屼笉鍐嶅寘鍚湪姝ゅ垪琛ㄤ腑
List<Integer> otherInboundTaskTypes = Arrays.asList(
@@ -408,7 +418,7 @@
private WaitPakin validateWaitPakin(String barcode) {
WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
.eq(WaitPakin::getBarcode, barcode)
- .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+ .in(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
if (Cools.isEmpty(waitPakin)) {
throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�");
@@ -867,6 +877,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)
@@ -909,33 +920,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