From cea1758e1f540e3f5f807951f128b7385b32afe6 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 24 一月 2026 17:03:04 +0800
Subject: [PATCH] agv增加主动查询状态
---
src/main/java/com/zy/asrs/task/AgvScheduler.java | 657 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 557 insertions(+), 100 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
index 4139ec6..727dd07 100644
--- a/src/main/java/com/zy/asrs/task/AgvScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -1,5 +1,7 @@
package com.zy.asrs.task;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
@@ -11,7 +13,9 @@
import com.zy.asrs.service.WrkMastLogService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.handler.AgvHandler;
+import com.zy.common.constant.ApiInterfaceConstant;
import com.zy.common.properties.SchedulerProperties;
+import com.zy.common.utils.HttpHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
@@ -19,10 +23,15 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author pang.jiabao
@@ -55,23 +64,175 @@
private SchedulerProperties schedulerProperties;
/**
- * 鍛煎彨agv鎼繍
+ * 璁板綍涓婃澶勭悊鐨勪换鍔D锛岀敤浜庤疆璇㈠鐞�
+ * 纭繚姣忔澶勭悊涓嶅悓鐨勪换鍔★紝閬垮厤涓�鐩村鐞嗗悓涓�涓换鍔�
+ */
+ private Long lastProcessedTaskId = null;
+
+ /**
+ * 璁板綍涓婃鍒嗛厤绔欑偣鐨勪换鍔D锛岀敤浜庤疆璇㈠鐞�
+ */
+ private Long lastAllocatedTaskId = null;
+
+ /**
+ * 鍒嗛厤绔欑偣浠诲姟鎵ц鏍囧織锛岀‘淇濆悓涓�鏃堕棿鍙湁涓�涓嚎绋嬪湪鎵ц鍒嗛厤绔欑偣寰幆
+ */
+ private final AtomicBoolean isAllocateSite = new AtomicBoolean(false);
+ /**
+ * 鍛煎彨AGV瀹氭椂浠诲姟鎵ц鏍囧織锛岀‘淇濆悓涓�鏃堕棿鍙湁涓�涓嚎绋嬪湪鎵ц鍒嗛厤绔欑偣寰幆
+ */
+ private final AtomicBoolean iscallAgv = new AtomicBoolean(false);
+
+ /**
+ * agv宸ヤ綔妗e垎閰嶇珯鐐瑰畾鏃朵换鍔�
+ * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変絾娌℃湁鍒嗛厤绔欑偣鐨勪换鍔★紝涓哄叾鍒嗛厤鍙敤绔欑偣
+ * 鍙礋璐e垎閰嶇珯鐐癸紝涓嶅懠鍙獳GV
+ * 姣忔鍙鐞嗕竴涓换鍔★紝閬垮厤楂樺苟鍙戞墽琛�
+ * 浣跨敤AtomicBoolean纭繚鍗曠嚎绋嬫墽琛屽惊鐜�
+ */
+ @Scheduled(cron = "0/5 * * * * ? ")
+ private void allocateSite() {
+ if (!schedulerProperties.isEnabled()) {
+ log.debug("瀹氭椂浠诲姟allocateSite锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
+ return;
+ }
+ if (!isAllocateSite.compareAndSet(false, true)) {
+ log.debug("瀹氭椂浠诲姟allocateSite锛氫笂涓�娆″垎閰嶇珯鐐逛换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
+ return;
+ }
+ // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈡墍鏈夊緟鍛煎彨AGV浣嗘病鏈夊垎閰嶇珯鐐圭殑浠诲姟
+ EntityWrapper<Task> wrapper = new EntityWrapper<Task>();
+ wrapper.eq("wrk_sts", 7); // 寰呭懠鍙獳GV鐘舵��
+ wrapper.eq("task_type", "agv"); // AGV浠诲姟绫诲瀷
+ wrapper.eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
+ wrapper.andNew()
+ .isNull("sta_no")
+ .or()
+ .eq("sta_no", "")
+ .or()
+ .eq("sta_no", "0");
+ wrapper.orderBy("id", true); // 鎸塱d鍗囧簭鎺掑簭
+ wrapper.last("OFFSET 0 ROWS FETCH NEXT 21 ROWS ONLY");
+ List<Task> taskList = taskService.selectList(wrapper);
+
+
+ if (taskList.isEmpty()) {
+ log.debug("瀹氭椂浠诲姟allocateSite锛氭病鏈夊緟鍒嗛厤绔欑偣鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓虹┖锛�");
+ isAllocateSite.set(false);
+ return;
+ }
+
+
+ try {
+ for (Task task : taskList) {
+ String errorMsg = agvHandler.allocateSiteForTask(task);
+ // 璋冪敤鍒嗛厤绔欑偣閫昏緫
+
+ String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+ log.info("瀹氭椂浠诲姟allocateSite锛氬紑濮嬩负浠诲姟ID锛歿}鍒嗛厤绔欑偣锛坵rk_no={}锛宨oType={}锛�",
+ displayTaskId, task.getWrkNo(), task.getIoType());
+
+ // 妫�鏌ユ槸鍚︽垚鍔熷垎閰嶄簡绔欑偣
+ String staNo = task.getStaNo();
+ if (errorMsg == null && staNo != null && !staNo.isEmpty() && !staNo.equals("0")) {
+ // 鍒嗛厤绔欑偣鎴愬姛
+ lastAllocatedTaskId = task.getId();
+ log.info("瀹氭椂浠诲姟allocateSite锛氫换鍔D锛歿}鎴愬姛鍒嗛厤绔欑偣锛歿}锛屾洿鏂發astAllocatedTaskId涓簕}",
+ displayTaskId, staNo, lastAllocatedTaskId);
+ } else {
+ // 鏃犳硶鍒嗛厤绔欑偣锛屼笉鏇存柊lastAllocatedTaskId锛屼笅娆′細閲嶆柊灏濊瘯
+ log.info("瀹氭椂浠诲姟allocateSite锛氫换鍔D锛歿}鏃犳硶鍒嗛厤绔欑偣锛歿}锛屼笉鏇存柊lastAllocatedTaskId锛堝綋鍓嶏細{}锛夛紝涓嬫灏嗛噸鏂板皾璇�",
+ displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�", lastAllocatedTaskId);
+ }
+
+ // 姣忎釜浠诲姟澶勭悊瀹屽悗绛夊緟1绉掞紝
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ log.warn("瀹氭椂浠诲姟allocateSite锛氬欢杩熻涓柇", e);
+ isAllocateSite.set(false);
+ break; // 濡傛灉琚腑鏂紝閫�鍑哄惊鐜�
+ }
+ }
+ } finally {
+ // 纭繚鏍囧織浣嶈閲嶇疆锛屽嵆浣垮彂鐢熷紓甯镐篃鑳介噴鏀鹃攣
+ isAllocateSite.set(false);
+ }
+
+
+ }
+
+ /**
+ * 鍛煎彨AGV瀹氭椂浠诲姟
+ * 鏌ヨ鐘舵��7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟锛屽懠鍙獳GV
+ * 鍛煎彨鎴愬姛鍚庯紝鐘舵�佷粠7锛堝緟鍛煎彨AGV锛夊彉涓�8锛堟鍦ㄦ惉杩愶級
*/
@Scheduled(cron = "0/5 * * * * ? ")
private void callAgv() {
if (!schedulerProperties.isEnabled()) {
+ log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氳皟搴﹀櫒鏈惎鐢紝璺宠繃鎵ц");
return;
}
- // 鏌ヨ寰呭懠鍙玜gv浠诲姟锛屾寜id鍗囧簭鎺掑簭锛坕d鏈�灏忕殑浼樺厛鍛煎彨锛�
- List<Task> taskList = taskService.selectList(
- new EntityWrapper<Task>()
- .eq("wrk_sts", 7)
- .orderBy("id", true) // 鎸塱d鍗囧簭锛宨d鏈�灏忕殑浼樺厛
- );
- if(taskList.isEmpty()) {
+ if (!iscallAgv.compareAndSet(false, true)) {
+ log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氫笂涓�娆″垎閰嶇珯鐐逛换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
return;
}
- agvHandler.callAgv(taskList);
+ try {
+ // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈢姸鎬�7锛堝緟鍛煎彨AGV锛変笖宸插垎閰嶇珯鐐圭殑浠诲姟
+ EntityWrapper<Task> wrapper = new EntityWrapper<Task>();
+ wrapper.eq("wrk_sts", 7); // 寰呭懠鍙獳GV鐘舵��
+ wrapper.eq("task_type", "agv"); // AGV浠诲姟绫诲瀷
+ wrapper.eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
+ wrapper.isNotNull("sta_no"); // 蹇呴』鏈夌珯鐐瑰垎閰�
+ wrapper.ne("sta_no", ""); // 绔欑偣涓嶈兘涓虹┖瀛楃涓�
+ wrapper.ne("sta_no", "0"); // 绔欑偣涓嶈兘涓�0
+ wrapper.orderBy("id", true); // 鎸塱d鍗囧簭鎺掑簭
+ wrapper.last("OFFSET 0 ROWS FETCH NEXT 22 ROWS ONLY");
+ // 濡傛灉涓婃澶勭悊杩囦换鍔★紝浠庝笅涓�涓换鍔″紑濮嬫煡璇紙杞锛�
+// if (lastProcessedTaskId != null) {
+// wrapper.gt("id", lastProcessedTaskId);
+// }
+
+ // 鏌ヨ寰呭懠鍙玜gv浠诲姟
+ List<Task> taskList = taskService.selectList(wrapper);
+
+
+ if (taskList.isEmpty()) {
+ log.debug("鍛煎彨AGV瀹氭椂浠诲姟锛氭病鏈夊緟鍛煎彨AGV鐨勪换鍔★紙wrk_sts=7锛宼ask_type=agv锛宻ta_no涓嶄负绌猴級");
+ iscallAgv.set(false);
+ return;
+ }
+ for (Task task : taskList) {
+ // 璋冪敤澶勭悊閫昏緫锛氬懠鍙獳GV锛屾垚鍔熷悗鐘舵�佷粠7鍙樹负8
+ String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+ log.info("鍛煎彨AGV瀹氭椂浠诲姟锛氬紑濮嬪鐞嗕换鍔D锛歿}锛坵rk_no={}锛宨oType={}锛宻ta_no={}锛�",
+ displayTaskId, task.getWrkNo(), task.getIoType(), task.getStaNo());
+ boolean processed = agvHandler.callAgv(Collections.singletonList(task));
+
+ // 濡傛灉浠诲姟琚烦杩囷紙绔欑偣琚崰鐢ㄧ瓑锛夛紝涓嶆洿鏂發astProcessedTaskId锛屼笅娆′細閲嶆柊灏濊瘯
+ if (processed) {
+ lastProcessedTaskId = task.getId();
+ log.info("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}鎴愬姛鍛煎彨AGV锛岀姸鎬佸凡浠�7鍙樹负8锛屾洿鏂發astProcessedTaskId涓簕}锛屼笅娆″皢澶勭悊涓嬩竴涓换鍔�",
+ displayTaskId, lastProcessedTaskId);
+ } else {
+ log.info("瀹氭椂浠诲姟callAgv锛氫换鍔D锛歿}琚烦杩囷紝涓嶆洿鏂發astProcessedTaskId锛堝綋鍓嶏細{}锛夛紝涓嬫灏嗛噸鏂板皾璇曞鐞嗘浠诲姟",
+ displayTaskId, lastProcessedTaskId);
+ }
+ // 姣忎釜浠诲姟澶勭悊瀹屽悗绛夊緟1绉掞紝
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ log.warn("鍛煎彨AGV瀹氭椂浠诲姟锛氬欢杩熻涓柇", e);
+ isAllocateSite.set(false);
+ break; // 濡傛灉琚腑鏂紝閫�鍑哄惊鐜�
+ }
+ }
+ } finally {
+ // 纭繚鏍囧織浣嶈閲嶇疆锛屽嵆浣垮彂鐢熷紓甯镐篃鑳介噴鏀鹃攣
+ iscallAgv.set(false);
+ }
}
/**
@@ -85,22 +246,22 @@
// 鑾峰彇鍛煎彨agv閰嶇疆
List<Config> configs = configService.selectList(new EntityWrapper<Config>().in("code", "eastCallAgvControl", "westCallAgvControl").eq("status", 1));
- if(configs.isEmpty()) {
+ if (configs.isEmpty()) {
return;
}
// 鑾峰彇agv鍑哄簱鍙敤绔欑偣
List<String> sites = new ArrayList<>();
- for(Config config: configs) {
+ for (Config config : configs) {
String value = config.getValue();
- if(Cools.isEmpty(value)) {
+ if (Cools.isEmpty(value)) {
continue;
}
String[] split = value.split(";");
sites.addAll(Arrays.asList(split));
}
- if(sites.isEmpty()) {
+ if (sites.isEmpty()) {
return;
}
@@ -115,8 +276,8 @@
if (!schedulerProperties.isEnabled()) {
return;
}
- List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9));
- if(taskList.isEmpty()) {
+ List<Task> taskList = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 9).eq("is_deleted", 0));
+ if (taskList.isEmpty()) {
return;
}
agvHandler.moveTaskToHistory(taskList);
@@ -134,55 +295,61 @@
try {
// 鏌ヨ鍏ュ簱鎴愬姛鐨勫伐浣滄。锛堢姸鎬�4锛氬叆搴撳畬鎴愶紝鍏ュ簱绫诲瀷锛�1,10,53,57锛�
List<WrkMast> completedWrkMasts = wrkMastService.selectList(
- new EntityWrapper<WrkMast>()
- .eq("wrk_sts", 4L) // 鍏ュ簱瀹屾垚
- .in("io_type", 1, 10, 53, 57) // 鍏ュ簱绫诲瀷
- .isNotNull("wrk_no")
+ new EntityWrapper<WrkMast>()
+ .eq("wrk_sts", 4L) // 鍏ュ簱瀹屾垚
+ .in("io_type", 1, 10, 53, 57) // 鍏ュ簱绫诲瀷
+ .isNotNull("wrk_no")
);
-
+
if (completedWrkMasts.isEmpty()) {
return;
}
-
+
Date now = new Date();
int completedCount = 0;
List<Task> completedTasks = new ArrayList<>();
-
+
for (WrkMast wrkMast : completedWrkMasts) {
// 鏌ユ壘瀵瑰簲鐨凙GV浠诲姟锛堜紭鍏堥�氳繃wrk_no鏌ヨ锛�
Wrapper<Task> taskWrapper1 = new EntityWrapper<Task>()
- .eq("task_type", "agv")
- .eq("wrk_sts", 8L) // 宸插懠鍙獳GV鐘舵��
- .eq("wrk_no", wrkMast.getWrkNo());
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 宸插懠鍙獳GV鐘舵��
+ .eq("wrk_no", wrkMast.getWrkNo())
+ .eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
List<Task> agvTasks = taskService.selectList(taskWrapper1);
-
+
// 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
if (agvTasks.isEmpty() && !Cools.isEmpty(wrkMast.getBarcode())) {
Wrapper<Task> taskWrapper2 = new EntityWrapper<Task>()
- .eq("task_type", "agv")
- .eq("wrk_sts", 8L)
- .eq("barcode", wrkMast.getBarcode());
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L)
+ .eq("barcode", wrkMast.getBarcode())
+ .eq("is_deleted", 0); // 鎺掗櫎宸插垹闄ょ殑浠诲姟
agvTasks = taskService.selectList(taskWrapper2);
}
-
+
for (Task agvTask : agvTasks) {
// 纭繚鏄叆搴撲换鍔�
- if (agvTask.getIoType() != null &&
- (agvTask.getIoType() == 1 || agvTask.getIoType() == 10 ||
- agvTask.getIoType() == 53 || agvTask.getIoType() == 57)) {
+ if (agvTask.getIoType() != null &&
+ (agvTask.getIoType() == 1 || agvTask.getIoType() == 10 ||
+ agvTask.getIoType() == 53 || agvTask.getIoType() == 57)) {
+
+ // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
+ String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
+
// 鏇存柊AGV浠诲姟鐘舵�佷负瀹屾垚
agvTask.setWrkSts(9L);
agvTask.setModiTime(now);
if (taskService.updateById(agvTask)) {
completedTasks.add(agvTask);
completedCount++;
- log.info("鍏ュ簱浠诲姟宸ヤ綔妗e凡鍏ュ簱鎴愬姛锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}",
- agvTask.getId(), wrkMast.getWrkNo(), wrkMast.getBarcode());
+ log.info("鍏ュ簱浠诲姟宸ヤ綔妗e凡鍏ュ簱鎴愬姛锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}",
+ displayTaskId, wrkMast.getWrkNo(), wrkMast.getBarcode());
}
}
}
}
-
+
// 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
if (!completedTasks.isEmpty()) {
try {
@@ -192,7 +359,7 @@
log.error("鍏ュ簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
}
}
-
+
if (completedCount > 0) {
log.info("鏈妫�鏌ュ畬缁撲簡{}涓叆搴揂GV鍛煎彨鍗�", completedCount);
}
@@ -202,11 +369,131 @@
}
/**
+ * 妫�鏌ュ苟淇寮傚父鐘舵�佺殑AGV浠诲姟锛氭鍦ㄦ惉杩愪絾娌℃湁鍒嗛厤绔欑偣
+ * 杩欑鎯呭喌鍙兘鏄暟鎹紓甯告垨骞跺彂闂瀵艰嚧鐨�
+ */
+ @Scheduled(cron = "0/30 * * * * ? ")
+ private void checkAbnormalTasksWithoutSite() {
+ if (!schedulerProperties.isEnabled()) {
+ return;
+ }
+ try {
+ // 鏌ヨ鐘舵�佷负8锛堟鍦ㄦ惉杩愶級浣嗘病鏈夊垎閰嶇珯鐐圭殑浠诲姟
+ List<Task> abnormalTasks = taskService.selectList(
+ new EntityWrapper<Task>()
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 姝e湪鎼繍
+ .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
+ .andNew()
+ .isNull("sta_no")
+ .or()
+ .eq("sta_no", "")
+ .or()
+ .eq("sta_no", "0")
+ );
+
+ if (abnormalTasks.isEmpty()) {
+ return;
+ }
+
+ log.warn("妫�娴嬪埌{}涓紓甯哥姸鎬佺殑AGV浠诲姟锛氭鍦ㄦ惉杩愪絾娌℃湁鍒嗛厤绔欑偣锛屽紑濮嬩慨澶�", abnormalTasks.size());
+
+ Date now = new Date();
+ int fixedCount = 0;
+ int completedCount = 0;
+
+ for (Task task : abnormalTasks) {
+ String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
+
+ // 妫�鏌ュ伐浣滄。鍜屽巻鍙叉。鐘舵��
+ WrkMast wrkMast = null;
+ WrkMastLog wrkMastLog = null;
+
+ if (task.getWrkNo() != null) {
+ wrkMast = wrkMastService.selectOne(
+ new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo())
+ );
+ wrkMastLog = wrkMastLogService.selectOne(
+ new EntityWrapper<WrkMastLog>().eq("wrk_no", task.getWrkNo())
+ );
+ }
+
+ // 濡傛灉宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛岀洿鎺ョ粨鏉熶换鍔�
+ boolean shouldComplete = false;
+ String reason = "";
+
+ if (wrkMastLog != null) {
+ shouldComplete = true;
+ reason = "宸ヤ綔妗e凡杞巻鍙叉。";
+ } else if (wrkMast != null) {
+ Long wrkSts = wrkMast.getWrkSts();
+ Integer ioType = task.getIoType();
+
+ if (wrkSts != null && ioType != null) {
+ // 鍏ュ簱浠诲姟锛氱姸鎬�4鎴�5
+ if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
+ (wrkSts == 4L || wrkSts == 5L)) {
+ shouldComplete = true;
+ reason = String.format("宸ヤ綔妗e凡瀹屾垚锛堝叆搴擄級锛岀姸鎬侊細%d", wrkSts);
+ }
+ // 鍑哄簱浠诲姟锛氱姸鎬�14鎴�15
+ else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
+ (wrkSts == 14L || wrkSts == 15L)) {
+ shouldComplete = true;
+ reason = String.format("宸ヤ綔妗e凡瀹屾垚锛堝嚭搴擄級锛岀姸鎬侊細%d", wrkSts);
+ }
+ }
+ }
+
+ if (shouldComplete) {
+ // 宸ヤ綔妗e凡瀹屾垚锛岀洿鎺ョ粨鏉熶换鍔�
+ task.setWrkSts(9L);
+ task.setModiTime(now);
+ if (taskService.updateById(task)) {
+ try {
+ agvHandler.moveTaskToHistory(Collections.singletonList(task));
+ completedCount++;
+ log.info("淇寮傚父浠诲姟锛歿}锛寋}锛屽凡缁撴潫浠诲姟骞惰浆绉诲埌鍘嗗彶琛紝taskId锛歿}",
+ reason, displayTaskId, displayTaskId);
+ } catch (Exception e) {
+ log.error("淇寮傚父浠诲姟锛氳浆绉讳换鍔″埌鍘嗗彶琛ㄥけ璐ワ紝taskId锛歿}", displayTaskId, e);
+ }
+ }
+ }/* else {
+ // 宸ヤ綔妗f湭瀹屾垚锛屽皾璇曞垎閰嶇珯鐐规垨閲嶇疆鐘舵��
+ // 鍏堝皾璇曞垎閰嶇珯鐐�
+ String errorMsg = agvHandler.allocateSiteForTask(task);
+ if (errorMsg == null && task.getStaNo() != null && !task.getStaNo().isEmpty() && !task.getStaNo().equals("0")) {
+ // 鍒嗛厤绔欑偣鎴愬姛
+ fixedCount++;
+ log.info("淇寮傚父浠诲姟锛氬凡涓轰换鍔″垎閰嶇珯鐐癸紝taskId锛歿}锛岀珯鐐癸細{}", displayTaskId, task.getStaNo());
+ } else {
+ // 鏃犳硶鍒嗛厤绔欑偣锛岄噸缃姸鎬佷负7锛堝緟鍛煎彨AGV锛夛紝绛夊緟涓嬫鍒嗛厤
+ task.setWrkSts(7L);
+ task.setModiTime(now);
+ if (taskService.updateById(task)) {
+ fixedCount++;
+ log.warn("淇寮傚父浠诲姟锛氭棤娉曞垎閰嶇珯鐐癸紝閲嶇疆鐘舵�佷负7锛堝緟鍛煎彨AGV锛夛紝taskId锛歿}锛屽師鍥狅細{}",
+ displayTaskId, errorMsg != null ? errorMsg : "鎵�鏈夌珯鐐归兘琚崰鐢�");
+ }
+ }
+ }*/
+ }
+
+ if (fixedCount > 0 || completedCount > 0) {
+ log.info("淇寮傚父浠诲姟瀹屾垚锛氫慨澶嶄簡{}涓换鍔★紝缁撴潫浜唟}涓凡瀹屾垚宸ヤ綔妗g殑浠诲姟", fixedCount, completedCount);
+ }
+ } catch (Exception e) {
+ log.error("妫�鏌ュ苟淇寮傚父鐘舵�佺殑AGV浠诲姟寮傚父", e);
+ }
+ }
+
+ /**
* 妫�鏌GV浠诲姟瀵瑰簲鐨勫伐浣滄。鏄惁宸插畬鎴愭垨宸茶浆鍘嗗彶妗e苟瀹岀粨
* 澶勭悊琚烦杩囩殑AGV浠诲姟锛�
- * 1. 濡傛灉宸ヤ綔妗e凡瀹屾垚锛坵rk_sts=4,5,14,15锛夋垨宸茶浆鍘嗗彶妗e苟瀹岀粨锛屽垯瀹岀粨AGV浠诲姟
- * 2. 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屼絾鏄疉GV宸茬‘璁ゆ帴鏀跺懡浠ゅ悗瓒呰繃1灏忔椂澶勪簬鎼繍涓紙鐘舵��8锛夛紝涔熺粨鏉烝GV浠诲姟
- * 娉ㄦ剰锛氬彧鏈堿GV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃讹紝濡傛灉AGV鎺ュ彈鍛戒护澶辫触锛屼細缁х画鍛煎彨AGV
+ * 1. 濡傛灉宸ヤ綔妗e凡瀹屾垚锛坵rk_sts=4,5,14,15锛夛紝鍒欏畬缁揂GV浠诲姟
+ * 2. 濡傛灉宸ヤ綔妗h繘鍏ュ巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟
+ * 3. 濡傛灉鍏ュ簱鎴愬姛锛屼篃缁撴潫鎺夋惉杩愪换鍔★紙宸插湪checkInboundCompletedTasks涓疄鐜帮級
*/
@Scheduled(cron = "0/10 * * * * ? ")
private void checkCompletedTasksInHistory() {
@@ -216,111 +503,77 @@
try {
// 鏌ヨ鐘舵�佷负8锛堝凡鍛煎彨AGV锛夌殑AGV浠诲姟
List<Task> agvTasks = taskService.selectList(
- new EntityWrapper<Task>()
- .eq("task_type", "agv")
- .eq("wrk_sts", 8L) // 宸插懠鍙獳GV鐘舵��
+ new EntityWrapper<Task>()
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 宸插懠鍙獳GV鐘舵��
+ .eq("is_deleted", 0) // 鎺掗櫎宸插垹闄ょ殑浠诲姟
);
-
+
if (agvTasks.isEmpty()) {
return;
}
-
+
Date now = new Date();
int completedCount = 0;
List<Task> completedTasks = new ArrayList<>();
- // 1灏忔椂鐨勬绉掓暟锛堜粠AGV纭鎺ユ敹鍛戒护寮�濮嬭鏃讹級
- long oneHourInMillis = 60 * 60 * 1000L;
-
+
for (Task agvTask : agvTasks) {
boolean isCompleted = false;
String reason = "";
-
+
// 妫�鏌ュ伐浣滄。鏄惁瀛樺湪
WrkMast wrkMast = null;
if (agvTask.getWrkNo() != null) {
wrkMast = wrkMastService.selectOne(
- new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
);
}
-
+
// 妫�鏌ュ巻鍙叉。鏄惁瀛樺湪锛堟棤璁哄伐浣滄。鏄惁瀛樺湪閮介渶瑕佹鏌ワ級
WrkMastLog wrkMastLog = null;
// 浼樺厛閫氳繃wrk_no鏌ヨ鍘嗗彶妗�
if (agvTask.getWrkNo() != null) {
wrkMastLog = wrkMastLogService.selectOne(
- new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
);
}
// 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
if (wrkMastLog == null && !Cools.isEmpty(agvTask.getBarcode())) {
List<WrkMastLog> logList = wrkMastLogService.selectList(
- new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
+ new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
);
if (!logList.isEmpty()) {
wrkMastLog = logList.get(0); // 鍙栫涓�涓�
}
}
-
+
// 濡傛灉宸ヤ綔妗e瓨鍦紝妫�鏌ユ槸鍚﹀凡瀹屾垚
if (wrkMast != null) {
Long wrkSts = wrkMast.getWrkSts();
Integer ioType = agvTask.getIoType();
-
+
if (wrkSts != null && ioType != null) {
// 鍏ュ簱浠诲姟锛氱姸鎬�4锛堝叆搴撳畬鎴愶級鎴�5锛堝簱瀛樻洿鏂板畬鎴愶級
if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
- (wrkSts == 4L || wrkSts == 5L)) {
+ (wrkSts == 4L || wrkSts == 5L)) {
isCompleted = true;
reason = String.format("宸ヤ綔妗e凡瀹屾垚锛岀姸鎬侊細%d", wrkSts);
}
// 鍑哄簱浠诲姟锛氱姸鎬�14锛堝凡鍑哄簱鏈‘璁わ級鎴�15锛堝嚭搴撴洿鏂板畬鎴愶級
else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
- (wrkSts == 14L || wrkSts == 15L)) {
+ (wrkSts == 14L || wrkSts == 15L)) {
isCompleted = true;
reason = String.format("宸ヤ綔妗e凡瀹屾垚锛岀姸鎬侊細%d", wrkSts);
}
}
}
-
- // 濡傛灉宸ヤ綔妗d笉瀛樺湪鎴栨湭瀹屾垚锛屾鏌ュ巻鍙叉。鏄惁宸插畬缁�
+
+ // 1. 濡傛灉宸ヤ綔妗h繘鍏ュ巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛堝彧瑕佸巻鍙叉。瀛樺湪灏辩粨鏉燂級
if (!isCompleted && wrkMastLog != null) {
- Integer ioType = agvTask.getIoType();
- long logWrkSts = wrkMastLog.getWrkSts();
-
- if (ioType != null) {
- // 鍏ュ簱浠诲姟锛氱姸鎬�5锛堝簱瀛樻洿鏂板畬鎴愶級
- if ((ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) &&
- logWrkSts == 5L) {
- isCompleted = true;
- reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
- }
- // 鍑哄簱浠诲姟锛氱姸鎬�15锛堝嚭搴撴洿鏂板畬鎴愶級
- else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) &&
- logWrkSts == 15L) {
- isCompleted = true;
- reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。骞跺畬缁擄紝鍘嗗彶妗g姸鎬侊細%d", logWrkSts);
- }
- }
+ isCompleted = true;
+ reason = String.format("宸ヤ綔妗e凡杞巻鍙叉。锛岀珛鍗崇粨鏉烝GV浠诲姟锛屽巻鍙叉。鐘舵�侊細%d", wrkMastLog.getWrkSts());
}
-
- // 濡傛灉宸ヤ綔妗e拰鍘嗗彶妗i兘娌℃湁鏁版嵁锛屾鏌ユ槸鍚﹁秴杩�1灏忔椂锛堜粠AGV纭鎺ユ敹鍛戒护寮�濮嬭鏃讹級
- if (!isCompleted && wrkMast == null && wrkMastLog == null) {
- // 鍙湁AGV纭鎺ユ敹鍛戒护鍚庯紙plcStrTime涓嶄负绌猴級鎵嶅紑濮嬭鏃�
- // 濡傛灉plcStrTime涓虹┖锛岃鏄嶢GV杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝浼氱户缁懠鍙紝涓嶇粨鏉熶换鍔�
- Date agvConfirmedTime = agvTask.getPlcStrTime();
-
- if (agvConfirmedTime != null) {
- long timeDiff = now.getTime() - agvConfirmedTime.getTime();
- if (timeDiff >= oneHourInMillis) {
- isCompleted = true;
- long hours = timeDiff / (60 * 60 * 1000L);
- long minutes = (timeDiff % (60 * 60 * 1000L)) / (60 * 1000L);
- reason = String.format("宸ヤ綔妗e拰鍘嗗彶妗i兘涓嶅瓨鍦紝AGV纭鎺ユ敹鍛戒护鍚庤秴杩�1灏忔椂锛堝疄闄咃細%d灏忔椂%d鍒嗛挓锛夊浜庢惉杩愪腑锛岃嚜鍔ㄧ粨鏉�", hours, minutes);
- }
- }
- // 濡傛灉plcStrTime涓虹┖锛岃鏄嶢GV杩樻病鏈夌‘璁ゆ帴鏀跺懡浠わ紝涓嶇粨鏉熶换鍔★紝缁х画绛夊緟鍛煎彨
- }
-
+
// 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵�佸苟鏀堕泦鍒板垪琛�
if (isCompleted) {
agvTask.setWrkSts(9L);
@@ -328,12 +581,44 @@
if (taskService.updateById(agvTask)) {
completedTasks.add(agvTask);
completedCount++;
- log.info("{}锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}",
- reason, agvTask.getId(), agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
+ // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
+ String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
+ log.info("{}锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}",
+ reason, displayTaskId, agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
}
}
+
+
+
+ // 妫�鏌ヨ鍗曞垱寤烘椂闂达紝瓒呰繃浜斿垎閽熷悗鎵嶆煡璇GV璁㈠崟鐘舵��
+ Date appeTime = agvTask.getAppeTime();
+ boolean shouldCheckAgvStatus = false;
+ if (appeTime != null) {
+ long timeDiff = now.getTime() - appeTime.getTime();
+ long fiveMinutesInMillis = 5 * 60 * 1000; // 5鍒嗛挓
+ if (timeDiff >= fiveMinutesInMillis) {
+ shouldCheckAgvStatus = true;
+ }
+ } else {
+ // 濡傛灉娌℃湁鍒涘缓鏃堕棿锛岄粯璁ゆ鏌�
+ shouldCheckAgvStatus = true;
+ }
+ // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝濡傛灉宸ヤ綔鍙蜂负绌哄垯浣跨敤浠诲姟ID
+ String displayTaskId = (agvTask.getWrkNo() != null) ? String.valueOf(agvTask.getWrkNo()) : String.valueOf(agvTask.getId());
+ // 濡傛灉璁㈠崟鍒涘缓瓒呰繃浜斿垎閽燂紝鏌ヨAGV璁㈠崟鐘舵��
+ if (shouldCheckAgvStatus) {
+ String agvOrderStatus = queryAgvOrderStatus(agvTask, displayTaskId);
+ if (agvOrderStatus != null) {
+ // 鏍规嵁璁㈠崟鐘舵�佸鐞�
+ boolean shouldComplete = processAgvOrderStatus(agvTask, agvOrderStatus, displayTaskId, now);
+ if (shouldComplete) {
+ completedTasks.add(agvTask);
+ }
+ }
+ }
+
}
-
+
// 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
if (!completedTasks.isEmpty()) {
try {
@@ -343,14 +628,186 @@
log.error("鍏ュ簱/鍑哄簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
}
}
-
+
if (completedCount > 0) {
- log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。鎴栫‘璁ゆ帴鏀跺悗瓒呮椂锛�", completedCount);
+ log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛�", completedCount);
}
} catch (Exception e) {
log.error("妫�鏌ュ伐浣滄。宸插畬鎴愭垨鍘嗗彶妗e畬缁撲换鍔″苟瀹岀粨AGV鍛煎彨鍗曞紓甯�", e);
}
}
+ /**
+ * 鏌ヨAGV璁㈠崟鐘舵��
+ * @param agvTask AGV浠诲姟
+ * @param displayTaskId 鏄剧ず鐨勪换鍔D
+ * @return 璁㈠崟鐘舵�侊紙Building/Created/Assigned/Failed/Done/Cancelled锛夛紝濡傛灉鏌ヨ澶辫触杩斿洖null
+ */
+ private String queryAgvOrderStatus(Task agvTask, String displayTaskId) {
+ try {
+ // 鏋勫缓璁㈠崟ID锛屾牸寮忎负 "T" + wrkNo
+ String orderId = null;
+ if (agvTask.getWrkNo() != null) {
+ orderId = "T" + agvTask.getWrkNo();
+ } else {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�佸け璐ワ細浠诲姟ID锛�%s锛寃rkNo涓虹┖", displayTaskId);
+ log.warn("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛寋}", displayTaskId, errorMsg);
+ agvTask.setErrorMemo(errorMsg);
+ agvTask.setErrorTime(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+
+ // 鏋勫缓璇锋眰JSON
+ JSONObject requestJson = new JSONObject();
+ requestJson.put("entityName", "ContainerTransportOrder");
+ requestJson.put("id", orderId);
+ String requestBody = requestJson.toJSONString();
+
+ // 鏋勫缓璇锋眰澶�
+ Map<String, Object> headers = new HashMap<>();
+ headers.put("xyy-app-id", "seer");
+ headers.put("xyy-app-key", "123456");
+
+ // 鍙戦�佽姹�
+ String response = null;
+ try {
+ response = new HttpHandler.Builder()
+ .setUri(ApiInterfaceConstant.AGV_IP)
+ .setPath(ApiInterfaceConstant.AGV_FIND_ONE_PATH)
+ .setJson(requestBody)
+ .setHeaders(headers)
+ .build()
+ .doPost();
+ } catch (IOException e) {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�丄PI璋冪敤澶辫触锛�%s锛岃姹傦細%s", e.getMessage(), requestBody);
+ log.error("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛寋}", displayTaskId, orderId, errorMsg, e);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+
+ // 瑙f瀽鍝嶅簲
+ if (response == null || response.trim().isEmpty()) {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�丄PI杩斿洖涓虹┖锛岃姹傦細%s", requestBody);
+ log.warn("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛寋}", displayTaskId, orderId, errorMsg);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+
+ try {
+ JSONObject responseJson = JSON.parseObject(response);
+
+ // 妫�鏌ユ槸鍚︽湁閿欒鐮�
+ String code = responseJson.getString("code");
+ if (code != null && "errNoSuchEntity".equals(code)) {
+ // 鎵句笉鍒颁笟鍔″璞★紝璁板綍鍒癳rrorMemo浣嗗拷鐣ワ紙涓嶉樆姝㈠悗缁鐞嗭級
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�侊細鎵句笉鍒拌鍗曪紙errNoSuchEntity锛夛紝璇锋眰锛�%s锛屽搷搴旓細%s", requestBody, response);
+ log.debug("鏌ヨAGV璁㈠崟鐘舵�侊細鎵句笉鍒拌鍗� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}", displayTaskId, orderId);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+
+ // 鑾峰彇璁㈠崟淇℃伅
+ JSONObject entityValue = responseJson.getJSONObject("entityValue");
+ if (entityValue != null) {
+ String status = entityValue.getString("status");
+ if (status != null) {
+ log.info("鏌ヨAGV璁㈠崟鐘舵�佹垚鍔� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛岀姸鎬侊細{}", displayTaskId, orderId, status);
+ return status;
+ } else {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�佸搷搴斾腑缂哄皯status瀛楁锛岃姹傦細%s锛屽搷搴旓細%s", requestBody, response);
+ log.warn("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛寋}", displayTaskId, orderId, errorMsg);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+ } else {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�佸搷搴斾腑缂哄皯entityValue瀛楁锛岃姹傦細%s锛屽搷搴旓細%s", requestBody, response);
+ log.warn("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛寋}", displayTaskId, orderId, errorMsg);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+ } catch (com.alibaba.fastjson.JSONException e) {
+ String errorMsg = String.format("瑙f瀽AGV璁㈠崟鐘舵�佸搷搴擩SON澶辫触锛�%s锛岃姹傦細%s锛屽搷搴旓細%s", e.getMessage(), requestBody, response);
+ log.error("鏌ヨAGV璁㈠崟鐘舵�佸け璐� - 浠诲姟ID锛歿}锛岃鍗旾D锛歿}锛寋}", displayTaskId, orderId, errorMsg, e);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+ } catch (Exception e) {
+ String errorMsg = String.format("鏌ヨAGV璁㈠崟鐘舵�佸紓甯革細%s", e.getMessage());
+ log.error("鏌ヨAGV璁㈠崟鐘舵�佸紓甯� - 浠诲姟ID锛歿}锛寋}", displayTaskId, errorMsg, e);
+ agvTask.setErrorMemo2(errorMsg);
+ agvTask.setErrorTime2(new Date());
+ taskService.updateById(agvTask);
+ return null;
+ }
+ }
+
+ /**
+ * 澶勭悊AGV璁㈠崟鐘舵��
+ * @param agvTask AGV浠诲姟
+ * @param status 璁㈠崟鐘舵��
+ * @param displayTaskId 鏄剧ず鐨勪换鍔D
+ * @param now 褰撳墠鏃堕棿
+ * @return true琛ㄧず搴旇瀹岀粨璁㈠崟锛宖alse琛ㄧず涓嶅簲璇ュ畬缁擄紙璺宠繃锛�
+ */
+ private boolean processAgvOrderStatus(Task agvTask, String status, String displayTaskId, Date now) {
+ if (status == null) {
+ return false; // 鐘舵�佷负绌猴紝璺宠繃
+ }
+
+ switch (status) {
+ case "Building":
+ // Building=鏈彁浜わ紝姝e父娌℃湁姝ょ姸鎬侊紝蹇界暐
+ log.debug("AGV璁㈠崟鐘舵�佷负Building锛堟湭鎻愪氦锛夛紝蹇界暐 - 浠诲姟ID锛歿}", displayTaskId);
+ return true; // 缁х画澶勭悊
+ case "Created":
+ // Created=宸叉彁浜わ紝绛夊緟鏈熼棿锛屼笉澶勭悊
+ log.debug("AGV璁㈠崟鐘舵�佷负Created锛堝凡鎻愪氦锛夛紝绛夊緟鏈熼棿锛屼笉澶勭悊 - 浠诲姟ID锛歿}", displayTaskId);
+ return false; // 涓嶅鐞嗭紝璺宠繃
+ case "Assigned":
+ case "Assined":
+ // Assigned=宸叉淳杞︼紝姝e父鐘舵�侊紝涓嶅鐞�
+ log.debug("AGV璁㈠崟鐘舵�佷负{}锛堝凡娲捐溅锛夛紝姝e父鐘舵�侊紝涓嶅鐞� - 浠诲姟ID锛歿}", status, displayTaskId);
+ return false; // 涓嶅鐞嗭紝璺宠繃
+ case "Failed":
+ case "Failde":
+ // Failed=澶辫触锛屾爣璁颁负澶辫触璁㈠崟
+ log.warn("AGV璁㈠崟鐘舵�佷负{}锛堝け璐ワ級锛屾爣璁颁负澶辫触璁㈠崟 - 浠诲姟ID锛歿}", status, displayTaskId);
+ agvTask.setWrkSts(10L);
+ agvTask.setErrorTime(now);
+ agvTask.setErrorMemo(String.format("AGV璁㈠崟鐘舵�佷负%s锛堝け璐ワ級", status));
+ taskService.updateById(agvTask);
+ return false; // 涓嶅鐞嗭紝璺宠繃
+ case "Done":
+ // Done=宸插畬鎴愶紝瀹岀粨璁㈠崟
+ log.info("AGV璁㈠崟鐘舵�佷负Done锛堝凡瀹屾垚锛夛紝瀹岀粨璁㈠崟 - 浠诲姟ID锛歿}", displayTaskId);
+ return true; // 缁х画澶勭悊锛屽畬缁撹鍗�
+ case "Cancelled":
+ // Cancelled=鍙栨秷锛屽彇娑堣鍗�
+ log.warn("AGV璁㈠崟鐘舵�佷负Cancelled锛堝彇娑堬級锛屽彇娑堣鍗� - 浠诲姟ID锛歿}", displayTaskId);
+ agvTask.setWrkSts(10L);
+ agvTask.setErrorTime(now);
+ agvTask.setErrorMemo("AGV璁㈠崟鐘舵�佷负Cancelled锛堝彇娑堬級");
+ taskService.updateById(agvTask);
+ return false; // 涓嶅鐞嗭紝璺宠繃
+ default:
+ // 鏈煡鐘舵�侊紝璁板綍鏃ュ織浣嗙户缁鐞�
+ log.warn("AGV璁㈠崟鐘舵�佹湭鐭ワ細{}锛岀户缁鐞� - 浠诲姟ID锛歿}", status, displayTaskId);
+ return true; // 缁х画澶勭悊
+ }
+ }
+
}
--
Gitblit v1.9.1