From 74951023b54f1789d1244fe923219d467487d771 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期一, 26 一月 2026 09:03:42 +0800
Subject: [PATCH] agv增加一个新单号防重复  ,增加一个手动呼叫agv

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |   81 ++++++++++++++++++++++++++++++----------
 1 files changed, 60 insertions(+), 21 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 70d664c..862b709 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,35 +60,34 @@
     @Resource
     private TaskService taskService;
 
+    @Resource
+    private AgvHandler agvHandler;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R agvCallback(AgvCallbackDto param) {
-        log.debug("agvCallback param:{}", 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涓嶈兘涓虹┖");
         }
         
-        log.info("鏀跺埌AGV浠诲姟鍥炶皟璇锋眰锛宼askId锛歿}锛宖romBin锛歿}锛宼oBin锛歿}锛宺obotGroup锛歿}锛宬ind锛歿}", 
-            taskId, param.getFromBin(), param.getToBin(), 
-            Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup(), 
+        log.info("鏀跺埌AGV浠诲姟鍥炶皟璇锋眰锛宼askId锛歿}锛宖romBin锛歿}锛宼oBin锛歿}锛宺obotGroup锛歿}锛宬ind锛歿}",
+            taskId, param.getFromBin(), param.getToBin(),
+            Cools.isEmpty(param.getRobotGroup()) ? param.getRobotName() : param.getRobotGroup(),
             param.getKind());
         
         // 鏍规嵁taskId鏌ヨ浠诲姟
         Task task = null;
-        try {
-            // 灏濊瘯灏唗askId瑙f瀽涓篖ong绫诲瀷鐨刬d
-            Long taskIdLong = Long.parseLong(taskId);
-            task = taskService.selectById(taskIdLong);
-        } catch (NumberFormatException e) {
-            // 濡傛灉涓嶆槸鏁板瓧锛屽皾璇曢�氳繃鍏朵粬瀛楁鏌ヨ锛堝sheetNo绛夛級
-            log.debug("taskId涓嶆槸鏁板瓧鏍煎紡锛屽皾璇曢�氳繃鍏朵粬瀛楁鏌ヨ锛宼askId锛歿}", taskId);
-            task = taskService.selectOne(
-                new EntityWrapper<Task>().eq("sheet_no", taskId)
-            );
+        // 浼樺厛閫氳繃agvWrkNo瀛楁鏌ヨ锛堟柊鏍煎紡锛歍+wrk_no+骞存湀鏃ユ椂鍒嗙锛�
+        task = taskService.selectOne(
+            new EntityWrapper<Task>().eq("agv_wrk_no", taskId).eq("is_deleted", 0)
+        );
+        if (task != null) {
+            log.debug("閫氳繃agvWrkNo锛坅gv_wrk_no={}锛夋壘鍒颁换鍔★紝taskId锛歿}", taskId, task.getId());
         }
-        
+
         if (task == null) {
             log.warn("鏈壘鍒板搴旂殑浠诲姟锛宼askId锛歿}", taskId);
             return R.error("浠诲姟涓嶅瓨鍦紝taskId锛�" + taskId);
@@ -108,16 +109,46 @@
         
         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":
-                    task.setWrkSts(9L);
+                    // 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":
@@ -126,18 +157,26 @@
             }
         }
         
-        // 鏍规嵁浠诲姟绫诲瀷杩涜鐩稿簲澶勭悊
+        // 鏍规嵁浠诲姟绫诲瀷杩涜鐩稿簲澶勭悊锛堣褰曟棩蹇楋紝浣嗕笉鍦ㄦ澶勭粨鏉熶换鍔★紝浠诲姟缁撴潫缁熶竴鐢眘tatus="Done"澶勭悊锛�
         if (!Cools.isEmpty(param.getKind())) {
             String kind = param.getKind();
             if ("璐х墿杞繍".equals(kind)) {
-                log.info("澶勭悊璐х墿杞繍浠诲姟锛宼askId锛歿}", taskId);
-            } else if ("瀹炴墭鍏ュ簱".equals(kind)) {
-                log.info("澶勭悊瀹炴墭鍏ュ簱浠诲姟锛宼askId锛歿}", taskId);
+                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锛歿}", taskId);
+                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);

--
Gitblit v1.9.1