From ff86e3738197b49ed20910501e1fe3f356e2a6e0 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 08 五月 2026 11:51:05 +0800
Subject: [PATCH] 重发优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 7 ++-
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java | 38 +++++++++++++++++--
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java | 35 +++++++++++++++++
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java | 14 ++++++-
4 files changed, 86 insertions(+), 8 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
index eace48f..2b32a84 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
@@ -12,6 +12,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vincent.rsf.httpaudit.support.HttpAuditSupport;
+import com.vincent.rsf.openApi.service.RcsTvCallbackService;
import com.vincent.rsf.openApi.service.WmsRcsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -36,7 +37,7 @@
@RequestMapping("/rcs")
public class WmsRcsController {
- private static final String API_AGV_ERROR = "RCS-AGV寮傚父涓婃姤锛堜粎鎺ユ敹锛�";
+ private static final String API_AGV_ERROR = "RCS-AGV寮傚父涓婃姤锛堝啓鐢佃鎶ヨ锛�";
private static final String API_PUB_TASK = "璋冨害浠诲姟涓嬪彂";
private static final String API_CANCEL_TASK = "鍙栨秷璋冨害浠诲姟";
private static final String API_CALLBACK_EVENT = "鐘舵�佷笂鎶ュ洖璋�";
@@ -48,11 +49,14 @@
@Autowired
private WmsRcsService wmsRcsService;
+ @Autowired
+ private RcsTvCallbackService rcsTvCallbackService;
+
@Resource
private ObjectMapper objectMapper;
/**
- * RCS AGV 寮傚父涓婃姤锛氬師鏍锋帴鏀惰姹備綋锛屾墦鏃ュ織锛沨ttp-audit 闇�閰嶇疆 URI 鐧藉悕鍗曡 version/db
+ * RCS AGV 寮傚父涓婃姤锛氭墦鏃ュ織锛涜В鏋� JSON 鍚� SET tvManualErrorMsg锛堣鐩栵級锛沨ttp-audit 瑙� version/db
*/
@ApiOperation(API_AGV_ERROR)
@PostMapping("/api/open/agvError")
@@ -65,6 +69,12 @@
charset.name(),
body.getBytes(charset).length,
formatBodyForLog(body));
+ try {
+ JsonNode node = objectMapper.readTree(body);
+ rcsTvCallbackService.publishAgvErrorToTv(node);
+ } catch (Exception e) {
+ log.warn("AGV 寮傚父鏈啓 Redis锛歜ody 闈� JSON", e);
+ }
return CommonResponse.ok();
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
index 1abbb22..e515c6e 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
@@ -10,6 +10,9 @@
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@@ -80,6 +83,38 @@
return rcsOk(value);
}
+ /** AGV 寮傚父鏁存鍐欏叆 tvManualErrorMsg锛屽悗娆¤鐩栧墠娆� */
+ public void publishAgvErrorToTv(JsonNode body) {
+ if (body == null || !body.isObject()) {
+ return;
+ }
+ String agvId = text(body.get("agvId"));
+ String faultName = text(body.get("faultName"));
+ String faultNo = text(body.get("faultNo"));
+ if ("undefined".equalsIgnoreCase(faultName)) {
+ faultName = "";
+ }
+ String prefix = StringUtils.hasText(agvId) ? ("銆怉GV" + agvId + "銆�") : "銆怉GV銆�";
+ String desc = StringUtils.hasText(faultName) ? faultName : "寮傚父";
+ StringBuilder sb = new StringBuilder(prefix).append(desc);
+ if (StringUtils.hasText(faultNo)) {
+ sb.append(" ").append(faultNo);
+ }
+ JsonNode tsNode = body.get("timestamp");
+ if (tsNode != null && tsNode.isNumber()) {
+ long ts = tsNode.asLong();
+ if (ts > 0) {
+ sb.append(" ")
+ .append(Instant.ofEpochMilli(ts)
+ .atZone(ZoneId.systemDefault())
+ .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ }
+ }
+ String value = sb.toString();
+ tvMonitorStringRedisTemplate.opsForValue().set(TvMonitorRedisKeys.TV_MANUAL_ERROR_MSG, value);
+ log.info("AGV 鎶ヨ宸插啓鍏� Redis tvManualErrorMsg agvId={}", agvId);
+ }
+
private static JsonNode resolveErrorArray(JsonNode body) {
if (body == null || body.isNull()) {
return null;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index 3f175aa..a11a932 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -154,10 +154,9 @@
}
List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
for (TaskItem ti : items) {
- if (ti.getQty() == null || ti.getQty().compareTo(0.0) <= 0) {
- ti.setQty(ti.getAnfme() != null ? ti.getAnfme() : 0.0);
- }
- taskService.enqueueCloudWmsOutNotifyLogEarly(task, ti, QuantityUtils.toScaledBigDecimal(ti.getQty()));
+ double cloudOutQty = resolvePickQtyForCloudWmsOut(ti);
+ ti.setQty(cloudOutQty);
+ taskService.enqueueCloudWmsOutNotifyLogEarly(task, ti, QuantityUtils.toScaledBigDecimal(cloudOutQty));
ti.setUpdateBy(loginUserId);
ti.setUpdateTime(new Date());
taskItemService.updateById(ti);
@@ -672,6 +671,37 @@
return R.ok();
}
+ /** 浜戜粨 9.1 鍑哄簱鏁伴噺锛氬凡鎷� qty锛涘惁鍒� workQty銆佽 anfme锛涗笉瓒呰繃閫氱煡鍗曡 anfme锛堥伩鍏嶈鐢ㄦ墭鐩樺簱瀛橈級 */
+ private double resolvePickQtyForCloudWmsOut(TaskItem ti) {
+ WkOrderItem oi = ti.getOrderItemId() != null ? asnOrderItemService.getById(ti.getOrderItemId()) : null;
+ double outQty;
+ if (ti.getQty() != null && QuantityUtils.isPositive(ti.getQty())) {
+ outQty = ti.getQty();
+ } else {
+ outQty = pickQtyFromOrderItemForCloud(oi);
+ if (!QuantityUtils.isPositive(outQty)) {
+ outQty = ti.getAnfme() != null ? ti.getAnfme() : 0.0;
+ }
+ }
+ if (oi != null && oi.getAnfme() != null && QuantityUtils.isPositive(oi.getAnfme())
+ && QuantityUtils.compare(outQty, oi.getAnfme()) > 0) {
+ outQty = oi.getAnfme();
+ }
+ return outQty;
+ }
+
+ private static double pickQtyFromOrderItemForCloud(WkOrderItem oi) {
+ if (oi == null) {
+ return 0.0;
+ }
+ if (oi.getWorkQty() != null && QuantityUtils.isPositive(oi.getWorkQty())) {
+ return oi.getWorkQty();
+ }
+ if (oi.getAnfme() != null && QuantityUtils.isPositive(oi.getAnfme())) {
+ return oi.getAnfme();
+ }
+ return 0.0;
+ }
/**
* 娉㈡鎷h揣锛氫换鍔℃槑缁嗕笌璁㈠崟琛屽搴旓紙orderItemId 浼樺厛锛屽惁鍒欒鍐呯爜 platItemId锛夛紝閬垮厤鍚屽崟鍚屾枡澶氳鍙懡涓竴鏉�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 48b828f..36f9df2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -994,8 +994,11 @@
if (!taskService.updateById(task)) {
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
- // 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛氭嫞鏂欏啀鍏ュ簱/鐩樼偣鍐嶅叆搴撳畬鎴愬悗閫氱煡浜戜粨锛堜笌瀹氭椂浠诲姟闂幆涓�鑷达級
- reportInOutResultToCloud(task, loc, taskItems, null, true);
+ // 鐩樼偣鍐嶅叆搴撲笂鎶ヤ簯浠撳叆搴撳畬鎴愶紱鎷f枡鍐嶅叆搴撹烦杩囷紙鍏ュ簱渚� qty 鍙� anfme 涓烘墭鐩樹綑閲忥紱浜戜粨鍑哄簱瀹炲彂鍦ㄥ嚭搴撳畬鎴愪晶锛�
+ // reportInOutResultToCloud(task, loc, taskItems, null, true);
+ if (!TaskType.TASK_TYPE_PICK_IN.type.equals(task.getTaskType())) {
+ reportInOutResultToCloud(task, loc, taskItems, null, true);
+ }
}
/**
--
Gitblit v1.9.1