From 9611dc686299be640ce5e5f5990c747765161ec7 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期三, 21 一月 2026 10:59:38 +0800
Subject: [PATCH] agv逻辑调整2
---
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 162 insertions(+), 14 deletions(-)
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 f101f9c..b86ad49 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
+import com.zy.asrs.task.handler.AgvHandler;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.NodeUtils;
@@ -22,6 +23,7 @@
import javax.annotation.Resource;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -58,22 +60,168 @@
@Resource
private TaskService taskService;
- @Override
- public R agvCallback(AgvCallbackDto param) {
- String id = param.getId();
- Task task = taskService.selectById(id);
- if (task == null) {
- return R.parse(id +":id涓嶅瓨鍦�");
- }
+ @Resource
+ private AgvHandler agvHandler;
- switch (param.getStatus()) {
- case "Assigned":task.setSheetNo(param.getRobotName());break;
- case "Done":task.setWrkSts(9L);break;
- case "Failed":
- case "Cancelled":
- default:
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R agvCallback(AgvCallbackDto param) {
+ log.debug("agv鍥炶皟 param:{}", param);
+ // 浼樺厛浣跨敤taskId锛屽鏋滄病鏈夊垯浣跨敤id锛堝悜鍚庡吋瀹癸級
+ String taskId = Cools.isEmpty(param.getTaskId()) ? param.getId() : param.getTaskId();
+ if (Cools.isEmpty(taskId)) {
+ return R.error("浠诲姟id涓嶈兘涓虹┖");
}
- taskService.updateById(task);
+
+ log.info("鏀跺埌AGV浠诲姟鍥炶皟璇锋眰锛宼askId锛歿}锛宖romBin锛歿}锛宼oBin锛歿}锛宺obotGroup锛歿}锛宬ind锛歿}",
+ taskId, param.getFromBin(), param.getToBin(),
+ Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup(),
+ param.getKind());
+
+ // 鏍规嵁taskId鏌ヨ浠诲姟
+ // taskId鏍煎紡锛歍 + 宸ヤ綔鍙凤紙濡�"T5299"锛夋垨 T + 浠诲姟ID锛堝悜鍚庡吋瀹癸級
+ Task task = null;
+ try {
+ // 澶勭悊"T"鍓嶇紑鏍煎紡锛堝"T5299"鎴�"T130"锛�
+ String numericId = taskId;
+ if (taskId.startsWith("T") && taskId.length() > 1) {
+ numericId = taskId.substring(1);
+ log.debug("妫�娴嬪埌T鍓嶇紑鏍煎紡鐨則askId锛屾彁鍙栨暟瀛楋細{}", numericId);
+ }
+
+ // 鍏堝皾璇曢�氳繃宸ヤ綔鍙凤紙wrk_no锛夋煡璇紙浼樺厛锛屽洜涓虹幇鍦ㄤ娇鐢ㄥ伐浣滃彿浣滀负taskId锛�
+ try {
+ Integer wrkNo = Integer.parseInt(numericId);
+ task = taskService.selectOne(
+ new EntityWrapper<Task>().eq("wrk_no", wrkNo)
+ );
+ if (task != null) {
+ log.debug("閫氳繃宸ヤ綔鍙凤紙wrk_no={}锛夋壘鍒颁换鍔★紝taskId锛歿}", wrkNo, task.getId());
+ }
+ } catch (NumberFormatException e) {
+ log.debug("鏃犳硶瑙f瀽涓哄伐浣滃彿锛宼askId锛歿}", taskId);
+ }
+
+ // 濡傛灉閫氳繃宸ヤ綔鍙锋病鎵惧埌锛屽皾璇曢�氳繃浠诲姟ID鏌ヨ锛堝悜鍚庡吋瀹癸級
+ if (task == null) {
+ try {
+ Long taskIdLong = Long.parseLong(numericId);
+ task = taskService.selectById(taskIdLong);
+ if (task != null) {
+ log.debug("閫氳繃浠诲姟ID锛坕d={}锛夋壘鍒颁换鍔★紝taskId锛歿}", taskIdLong, taskId);
+ }
+ } catch (NumberFormatException e) {
+ log.debug("鏃犳硶瑙f瀽涓轰换鍔D锛宼askId锛歿}", taskId);
+ }
+ }
+ } catch (Exception e) {
+ log.debug("瑙f瀽taskId寮傚父锛宼askId锛歿}锛屽紓甯革細{}", taskId, e.getMessage());
+ }
+
+ // 濡傛灉杩樻槸娌℃壘鍒帮紝灏濊瘯閫氳繃鍏朵粬瀛楁鏌ヨ锛堝sheetNo绛夛紝鍚戝悗鍏煎锛�
+ if (task == null) {
+ log.debug("閫氳繃宸ヤ綔鍙峰拰浠诲姟ID閮芥病鎵惧埌锛屽皾璇曢�氳繃鍏朵粬瀛楁鏌ヨ锛宼askId锛歿}", taskId);
+ task = taskService.selectOne(
+ new EntityWrapper<Task>().eq("sheet_no", taskId)
+ );
+ }
+
+ if (task == null) {
+ log.warn("鏈壘鍒板搴旂殑浠诲姟锛宼askId锛歿}", taskId);
+ return R.error("浠诲姟涓嶅瓨鍦紝taskId锛�" + taskId);
+ }
+
+ // 鏇存柊浠诲姟淇℃伅
+ if (!Cools.isEmpty(param.getFromBin())) {
+ task.setSourceStaNo(param.getFromBin());
+ }
+ if (!Cools.isEmpty(param.getToBin())) {
+ task.setLocNo(param.getToBin());
+ }
+
+ // 浼樺厛浣跨敤robotGroup锛屽鏋滄病鏈夊垯浣跨敤robotName锛堝悜鍚庡吋瀹癸級
+ String robotGroup = Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup();
+ if (!Cools.isEmpty(robotGroup)) {
+ task.setInvWh(robotGroup);
+ }
+
+ task.setModiTime(new Date());
+
+ // 鏍囪浠诲姟鏄惁宸茬粡琚浆绉诲埌鍘嗗彶琛�
+ boolean taskMovedToHistory = false;
+
+ // 濡傛灉鏈塻tatus瀛楁锛屾寜鍘熸湁閫昏緫澶勭悊锛堝悜鍚庡吋瀹癸級
+ if (!Cools.isEmpty(param.getStatus())) {
+ switch (param.getStatus()) {
+ case "Assigned":
+ // AGV宸叉淳杞︼紝纭鎺ユ敹鍛戒护锛岃褰曠‘璁ゆ椂闂�
+ if (task.getPlcStrTime() == null) {
+ task.setPlcStrTime(new Date());
+// log.info("AGV宸茬‘璁ゆ帴鏀跺懡浠わ紝璁板綍纭鏃堕棿锛宼askId锛歿}", taskId);
+ }
+ if (Cools.isEmpty(robotGroup)) {
+ task.setInvWh(param.getRobotName());
+ }
+ break;
+ case "Done":
+ // status="Done" 鎵嶇畻鎼繍瀹屾垚锛岀粨鏉熸帀AGV浠诲姟锛堥�傜敤浜庢墍鏈変换鍔$被鍨嬶細鍏ュ簱銆佸嚭搴撱�佽浆绉伙級
+ if (task.getWrkSts() != null && task.getWrkSts() == 8L) {
+ task.setWrkSts(9L);
+ task.setModiTime(new Date());
+ String taskTypeName = "";
+ if (!Cools.isEmpty(param.getKind())) {
+ taskTypeName = param.getKind();
+ }
+ log.info("AGV鍥炶皟鎼繍瀹屾垚锛坰tatus=Done锛夛紝瀹岀粨AGV鍛煎彨鍗曪紝taskId锛歿}锛屼换鍔$被鍨嬶細{}", taskId, taskTypeName);
+ // 淇濆瓨浠诲姟鏇存柊鍚庯紝杞Щ鍒板巻鍙茶〃
+ if (taskService.updateById(task)) {
+ try {
+ agvHandler.moveTaskToHistory(Collections.singletonList(task));
+ taskMovedToHistory = true;
+ log.info("AGV鍥炶皟鎼繍瀹屾垚锛屽凡灏嗕换鍔¤浆绉诲埌鍘嗗彶琛紝taskId锛歿}", taskId);
+ } catch (Exception e) {
+ log.error("AGV鍥炶皟鎼繍瀹屾垚锛岃浆绉讳换鍔″埌鍘嗗彶琛ㄥけ璐ワ紝taskId锛歿}", taskId, e);
+ }
+ }
+ } else {
+ log.debug("AGV鍥炶皟status=Done锛屼絾浠诲姟鐘舵�佷笉鏄�8锛堝綋鍓嶇姸鎬侊細{}锛夛紝涓嶇粨鏉熶换鍔★紝taskId锛歿}",
+ task.getWrkSts(), taskId);
+ }
+ break;
+ case "Failed":
+ case "Cancelled":
+ default:
+ break;
+ }
+ }
+
+ // 鏍规嵁浠诲姟绫诲瀷杩涜鐩稿簲澶勭悊锛堣褰曟棩蹇楋紝浣嗕笉鍦ㄦ澶勭粨鏉熶换鍔★紝浠诲姟缁撴潫缁熶竴鐢眘tatus="Done"澶勭悊锛�
+ if (!Cools.isEmpty(param.getKind())) {
+ String kind = param.getKind();
+ if ("璐х墿杞繍".equals(kind)) {
+ log.info("澶勭悊璐х墿杞繍浠诲姟锛宼askId锛歿}锛宻tatus锛歿}", taskId, param.getStatus());
+ } else if ("瀹炴墭鍏ュ簱".equals(kind) || "绌烘墭鍏ュ簱".equals(kind)) {
+ log.info("澶勭悊鍏ュ簱浠诲姟锛宼askId锛歿}锛宻tatus锛歿}", taskId, param.getStatus());
+ // 娉ㄦ剰锛氫换鍔$粨鏉熺粺涓�鐢� status="Done" 澶勭悊锛屾澶勪笉鍐嶉噸澶嶅鐞�
+ } else if ("瀹炴墭鍑哄簱".equals(kind)) {
+ log.info("澶勭悊瀹炴墭鍑哄簱浠诲姟锛宼askId锛歿}锛宻tatus锛歿}", taskId, param.getStatus());
+ // 娉ㄦ剰锛氫换鍔$粨鏉熺粺涓�鐢� status="Done" 澶勭悊锛屾澶勪笉鍐嶉噸澶嶅鐞�
+ }
+ }
+
+ // 濡傛灉浠诲姟宸茬粡琚浆绉诲埌鍘嗗彶琛紝鐩存帴杩斿洖鎴愬姛
+ if (taskMovedToHistory) {
+ log.info("AGV浠诲姟鍥炶皟澶勭悊鎴愬姛锛屼换鍔″凡杞Щ鍒板巻鍙茶〃锛宼askId锛歿}", taskId);
+ return R.ok();
+ }
+
+ // 淇濆瓨浠诲姟鏇存柊
+ if (!taskService.updateById(task)) {
+ log.error("鏇存柊浠诲姟澶辫触锛宼askId锛歿}", taskId);
+ return R.error("鏇存柊浠诲姟澶辫触");
+ }
+
+ log.info("AGV浠诲姟鍥炶皟澶勭悊鎴愬姛锛宼askId锛歿}", taskId);
return R.ok();
}
--
Gitblit v1.9.1