From 1b31d14e361c01fcd4e5c2dcfe0b6fb3a63c92fc Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期五, 13 三月 2026 14:56:14 +0800
Subject: [PATCH] erp下发停止出库任务,wms取消wcs任务
---
src/main/java/com/zy/api/controller/params/StopOutTaskParams.java | 2
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java | 37 +++++---
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 183 +++++++++++++++++++++++++++++++++++++--------
src/main/resources/application.yml | 2
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java | 1
5 files changed, 175 insertions(+), 50 deletions(-)
diff --git a/src/main/java/com/zy/api/controller/params/StopOutTaskParams.java b/src/main/java/com/zy/api/controller/params/StopOutTaskParams.java
index e422f83..0b9c994 100644
--- a/src/main/java/com/zy/api/controller/params/StopOutTaskParams.java
+++ b/src/main/java/com/zy/api/controller/params/StopOutTaskParams.java
@@ -1,5 +1,6 @@
package com.zy.api.controller.params;
+import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -20,6 +21,7 @@
@ApiModelProperty("pause reason")
private Integer reason;
+ @JSONField(name = "taskList")
@ApiModelProperty("task list")
private List<TaskItem> tasks = new ArrayList<>();
diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
index 49454fa..c76c863 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -24,6 +24,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -181,17 +182,10 @@
if (!wrkMastService.updateById(mast)) {
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
+ //wcs浠诲姟鍙栨秷鎺ュ彛
} else if (params.getMsgType().equals("task_cancel")) {
- if (mast.getIoType() != null && mast.getIoType() > 100 && mast.getWrkSts() < 14) {
- mast.setPauseMk("Y");
-// mast.setUpdMk("WCS_CANCELLED");
-// mast.setManuType("WCS_CANCELLED");
- mast.setModiTime(new Date());
- if (!wrkMastService.updateById(mast)) {
- throw new CoolException("task cancel update fail");
- }
- }
- }else if (params.getMsgType().equals("task_arrive")) {
+ workService.cancelWrkMast(String.valueOf(mast.getWrkNo()), 9955L);
+ } else if (params.getMsgType().equals("task_arrive")) {
//鍒拌揪鐩殑鍦�
//濡傛灉鍑哄簱浠诲姟鏄法鍖哄垯闇�瑕佺敓鎴愭柊鐨勫叆搴撲换鍔″叆搴�
if(!Cools.isEmpty(mast.getLocNo())){
@@ -219,13 +213,14 @@
@Override
public R pauseOutTasks(StopOutTaskParams params) {
if (params == null || params.getTasks() == null || params.getTasks().isEmpty()) {
- return R.ok("no tasks to stop");
+ return R.ok("鏃犱换鍔¢渶瑕佸彇娑�");
}
if (!Boolean.parseBoolean(String.valueOf(switchValue))) {
- return R.ok("wcs switch off");
+ return R.ok("WCS寮�鍏冲叧闂�");
}
String response;
try {
+ log.info("璋冪敤WCS鍙栨秷鍑哄簱浠诲姟, request={}", JSON.toJSONString(params));
response = new HttpHandler.Builder()
.setUri(wcs_address)
.setPath(stopOutTask)
@@ -235,15 +230,27 @@
.build()
.doPost();
JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response);
+ log.info("WCS鍙栨秷鍑哄簱浠诲姟杩斿洖, response={}", response);
Integer code = jsonObject.getInteger("code");
if (code == null || !Objects.equals(code, 200)) {
String msg = jsonObject.getString("msg");
- throw new CoolException(Cools.isEmpty(msg) ? "WCS stop out task failed" : msg);
+ throw new CoolException(Cools.isEmpty(msg) ? "WCS鍙栨秷鍑哄簱浠诲姟澶辫触" : msg);
}
+ JSONObject data = jsonObject.getJSONObject("data");
+ List<String> successList = data == null || data.getJSONArray("successList") == null
+ ? Collections.emptyList()
+ : data.getJSONArray("successList").toJavaList(String.class);
+ List<String> failList = data == null || data.getJSONArray("failList") == null
+ ? Collections.emptyList()
+ : data.getJSONArray("failList").toJavaList(String.class);
+ R result = R.ok(Cools.isEmpty(jsonObject.getString("msg")) ? "鎿嶄綔鎴愬姛" : jsonObject.getString("msg"));
+ result.put("data", data);
+ result.put("successList", successList);
+ result.put("failList", failList);
+ return result;
} catch (IOException e) {
- throw new CoolException("call WCS stop out task fail: " + e.getMessage());
+ throw new CoolException("璋冪敤WCS鍙栨秷鍑哄簱浠诲姟澶辫触: " + e.getMessage());
}
- return R.ok();
}
}
diff --git a/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java b/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java
index 380622d..f9b094a 100644
--- a/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java
@@ -7,5 +7,6 @@
private String orderId;
+ //鎵ц浠诲姟锛�1 鍑哄簱锛�2 鏆傚仠锛涙殏鍋滄寚鍓╀綑鏈搷浣滄墭鐩樹笉鍐嶆墽琛屽嚭搴擄紱
private Integer reason;
}
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 47ea86e..58e8d31 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -375,47 +375,123 @@
@Transactional
public R pakoutOrderPause(OpenOrderPakoutPauseParam param) {
if (param == null || Cools.isEmpty(param.getOrderId())) {
- throw new CoolException("orderNo is empty");
+ throw new CoolException("orderNo涓嶈兘涓虹┖");
+ }
+ if (param.getReason() == null) {
+ throw new CoolException("reason涓嶈兘涓虹┖");
}
List<WrkMast> activeTasks = findActiveOutboundTasks(param.getOrderId());
- Map<String, Object> result = new HashMap<>();
- result.put("orderNo", param.getOrderId());
- result.put("taskCount", activeTasks.size());
- if (activeTasks.isEmpty()) {
- result.put("confirmedCount", 0);
- return R.ok("no active out tasks").add(result);
- }
-
- Date now = new Date();
- int confirmedCount = 0;
- for (WrkMast wrkMast : activeTasks) {
- if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPdcType())) {
- continue;
+ if (Objects.equals(param.getReason(), 1)) {
+ // ERP纭绔嬪嵆鎵ц锛屼粎澶勭悊寰呬笅鍙戠殑鍑哄簱浠诲姟銆�
+ List<WrkMast> pendingTasks = activeTasks.stream()
+ .filter(wrkMast -> wrkMast != null && Objects.equals(wrkMast.getWrkSts(), 11L))
+ .collect(Collectors.toList());
+ Map<String, Object> result = new HashMap<>();
+ result.put("orderNo", param.getOrderId());
+ result.put("taskCount", pendingTasks.size());
+ if (pendingTasks.isEmpty()) {
+ result.put("confirmedCount", 0);
+ return R.ok("鏃犳湁鏁堝嚭搴撲换鍔�").add(result);
}
- wrkMast.setPdcType("Y");
+
+ Date now = new Date();
+ int confirmedCount = 0;
+ for (WrkMast wrkMast : pendingTasks) {
+ if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPdcType())) {
+ continue;
+ }
+ wrkMast.setPdcType("Y");
// wrkMast.setUpdMk("ERP_CONFIRMED");
// wrkMast.setManuType("ERP_CONFIRM_OUT");
- wrkMast.setModiTime(now);
- wrkMast.setModiUser(9527L);
- if (!wrkMastService.updateById(wrkMast)) {
- throw new CoolException("confirm out task failed: " + wrkMast.getWrkNo());
+ wrkMast.setModiTime(now);
+ wrkMast.setModiUser(9527L);
+ if (!wrkMastService.updateById(wrkMast)) {
+ throw new CoolException("纭鎵ц鍑哄簱浠诲姟澶辫触: " + wrkMast.getWrkNo());
+ }
+ confirmedCount++;
}
- confirmedCount++;
- }
- result.put("confirmedCount", confirmedCount);
- return R.ok(confirmedCount == 0 ? "tasks already confirmed" : "erp confirm out success").add(result);
+ result.put("confirmedCount", confirmedCount);
+ return R.ok(confirmedCount == 0 ? "浠诲姟宸茬‘璁ゆ墽琛�" : "ERP纭鎵ц鍑哄簱鎴愬姛").add(result);
+ }
+ if (Objects.equals(param.getReason(), 2)) {
+ // ERP璇锋眰鍙栨秷浠诲姟锛氭湭涓嬪彂浠诲姟鐩存帴鏈湴鍙栨秷锛屽凡涓嬪彂浠诲姟浜ょ粰WCS鍒ゅ畾鍙彇娑堟竻鍗曘��
+ Map<String, Object> result = new HashMap<>();
+ result.put("orderNo", param.getOrderId());
+ result.put("reason", param.getReason());
+ result.put("taskCount", activeTasks.size());
+ if (activeTasks.isEmpty()) {
+ result.put("successList", Collections.emptyList());
+ result.put("failList", Collections.emptyList());
+ result.put("cancelledCount", 0);
+ return R.ok("鏃犳湁鏁堝嚭搴撲换鍔�").add(result);
+ }
+
+ Map<String, WrkMast> taskIndex = activeTasks.stream()
+ .filter(wrkMast -> wrkMast != null && wrkMast.getWrkNo() != null)
+ .collect(Collectors.toMap(
+ wrkMast -> String.valueOf(wrkMast.getWrkNo()),
+ wrkMast -> wrkMast,
+ (left, right) -> left,
+ LinkedHashMap::new
+ ));
+ List<WrkMast> directCancelTasks = activeTasks.stream()
+ .filter(wrkMast -> wrkMast != null && !needNotifyWcsStop(wrkMast))
+ .collect(Collectors.toList());
+ List<WrkMast> wcsCancelTasks = activeTasks.stream()
+ .filter(this::needNotifyWcsStop)
+ .collect(Collectors.toList());
+
+ LinkedHashSet<String> successTaskNos = new LinkedHashSet<>();
+ LinkedHashSet<String> failTaskNos = new LinkedHashSet<>();
+ cancelOutboundTasks(directCancelTasks.stream()
+ .map(WrkMast::getWrkNo)
+ .filter(Objects::nonNull)
+ .map(String::valueOf)
+ .collect(Collectors.toList()), taskIndex, successTaskNos);
+
+ List<String> wcsSuccessList = Collections.emptyList();
+ List<String> wcsFailList = Collections.emptyList();
+ if (!wcsCancelTasks.isEmpty()) {
+ R wcsResult = wcsApiService.pauseOutTasks(buildStopOutTaskParams(param, wcsCancelTasks));
+ wcsSuccessList = extractTaskNoList(wcsResult, "successList");
+ wcsFailList = extractTaskNoList(wcsResult, "failList");
+ cancelOutboundTasks(wcsSuccessList, taskIndex, successTaskNos);
+
+ LinkedHashSet<String> wcsFailTaskNos = new LinkedHashSet<>(wcsFailList);
+ if (wcsFailTaskNos.isEmpty()) {
+ for (WrkMast wrkMast : wcsCancelTasks) {
+ String taskNo = String.valueOf(wrkMast.getWrkNo());
+ if (!successTaskNos.contains(taskNo)) {
+ wcsFailTaskNos.add(taskNo);
+ }
+ }
+ }
+ failTaskNos.addAll(wcsFailTaskNos);
+ wcsFailList = new ArrayList<>(wcsFailTaskNos);
+ }
+
+ result.put("wcsTaskCount", wcsCancelTasks.size());
+ result.put("wcsSuccessList", wcsSuccessList);
+ result.put("wcsFailList", wcsFailList);
+ result.put("successList", new ArrayList<>(successTaskNos));
+ result.put("failList", new ArrayList<>(failTaskNos));
+ result.put("cancelledCount", successTaskNos.size());
+ result.put("failCount", failTaskNos.size());
+ return R.ok(successTaskNos.isEmpty() ? "娌℃湁鍙彇娑堜换鍔�" : "鍙栨秷鍑哄簱浠诲姟鎴愬姛").add(result);
+ }
+ throw new CoolException("reason浠呮敮鎸�1鎴�2");
}
@Override
@Transactional
public R pakoutOrderExecute(OpenOrderPakoutExecuteParam param) {
if (param == null || Cools.isEmpty(param.getOrderId())) {
- throw new CoolException("orderId is empty");
+ throw new CoolException("orderId涓嶈兘涓虹┖");
}
if (param.getExecute() == null) {
- throw new CoolException("execute is empty");
+ throw new CoolException("execute涓嶈兘涓虹┖");
}
if (Objects.equals(param.getExecute(), 1)) {
return createPakoutTasks(param.getOrderId());
@@ -423,10 +499,10 @@
if (Objects.equals(param.getExecute(), 2)) {
OpenOrderPakoutPauseParam pauseParam = new OpenOrderPakoutPauseParam();
pauseParam.setOrderId(param.getOrderId());
-// pauseParam.setReason("OPEN_API_CONFIRM_OUT");
+ pauseParam.setReason(2);
return pakoutOrderPause(pauseParam);
}
- throw new CoolException("execute only supports 1 or 2");
+ throw new CoolException("execute浠呮敮鎸�1鎴�2");
}
private List<WrkMast> findActiveOutboundTasks(String orderNo) {
@@ -444,7 +520,7 @@
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
.in("wrk_no", wrkNos)
.in("io_type", Arrays.asList(101, 103, 104, 107, 108, 110))
- .eq("wrk_sts", 11L));
+ .in("wrk_sts", Arrays.asList(11L, 12L, 13L)));
if (wrkMasts == null || wrkMasts.isEmpty()) {
return Collections.emptyList();
}
@@ -564,20 +640,59 @@
private StopOutTaskParams buildStopOutTaskParams(OpenOrderPakoutPauseParam param, List<WrkMast> wrkMasts) {
StopOutTaskParams stopParams = new StopOutTaskParams();
- stopParams.setOrderNo(param.getOrderId());
- stopParams.setReason(param.getReason());
+ // WCS鍙栨秷鎺ュ彛浠呮帴鏀� taskList.taskNo銆�
for (WrkMast wrkMast : wrkMasts) {
StopOutTaskParams.TaskItem item = new StopOutTaskParams.TaskItem();
item.setTaskNo(String.valueOf(wrkMast.getWrkNo()));
- if (wrkMast.getStaNo() != null) {
- item.setStaNo(String.valueOf(wrkMast.getStaNo()));
- }
- item.setLocNo(wrkMast.getSourceLocNo());
stopParams.getTasks().add(item);
}
return stopParams;
}
+ private List<String> extractTaskNoList(R result, String key) {
+ if (result == null) {
+ return Collections.emptyList();
+ }
+ List<String> taskNos = toTaskNoList(result.get(key));
+ if (!taskNos.isEmpty()) {
+ return taskNos;
+ }
+ Object data = result.get("data");
+ if (data instanceof Map) {
+ return toTaskNoList(((Map<?, ?>) data).get(key));
+ }
+ if (data instanceof JSONObject) {
+ return toTaskNoList(((JSONObject) data).get(key));
+ }
+ return Collections.emptyList();
+ }
+
+ private List<String> toTaskNoList(Object value) {
+ if (value == null) {
+ return Collections.emptyList();
+ }
+ if (value instanceof Collection) {
+ List<String> taskNos = new ArrayList<>();
+ for (Object item : (Collection<?>) value) {
+ if (item != null) {
+ taskNos.add(String.valueOf(item));
+ }
+ }
+ return taskNos;
+ }
+ return JSON.parseArray(JSON.toJSONString(value), String.class);
+ }
+
+ private void cancelOutboundTasks(List<String> taskNos, Map<String, WrkMast> taskIndex, Set<String> successTaskNos) {
+ for (String taskNo : taskNos) {
+ if (Cools.isEmpty(taskNo) || successTaskNos.contains(taskNo) || !taskIndex.containsKey(taskNo)) {
+ continue;
+ }
+ workService.cancelWrkMast(taskNo, 9527L);
+ successTaskNos.add(taskNo);
+ }
+ }
+
@Override
public List<OpenOrderCompeteResult> pakoutOrderComplete(OpenOrderCompleteParam param) {
List<OpenOrderCompeteResult> results = new ArrayList<>();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c9a4ea6..066ccf0 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -113,4 +113,4 @@
#绉诲簱浠诲姟涓嬪彂鍦板潃
createLocMoveTask: /openapi/createLocMoveTask
#pause out task
- stopOutTask: /openapi/stopOutTask
+ stopOutTask: /openapi/createOutTaskBatch
--
Gitblit v1.9.1