From 371462edc6b3ee1de97c235d4a019b544badda0d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期六, 14 二月 2026 22:09:37 +0800
Subject: [PATCH] AGV工作档界面和逻辑调整
---
src/main/java/com/zy/asrs/task/handler/AgvHandler.java | 109 ++++++++++++++++++++++++++++++++++++------------------
1 files changed, 72 insertions(+), 37 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
index d475681..1a0006c 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -3,27 +3,20 @@
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;
-import com.zy.asrs.entity.Task;
-import com.zy.asrs.entity.TaskLog;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.entity.BasDevp;
-import com.zy.asrs.entity.LocCache;
+import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.mapper.BasStationMapper;
import com.zy.asrs.mapper.WrkMastMapper;
-import com.zy.asrs.service.ApiLogService;
-import com.zy.asrs.service.LocCacheService;
-import com.zy.asrs.service.TaskLogService;
-import com.zy.asrs.service.TaskService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.asrs.service.WrkMastLogService;
-import com.zy.asrs.entity.WrkMastLog;
+import com.zy.asrs.service.*;
import com.zy.common.constant.ApiInterfaceConstant;
import com.zy.common.properties.AgvProperties;
+import com.zy.common.utils.AgvUtils;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -71,7 +64,8 @@
@Resource
private WrkMastLogService wrkMastLogService;
-
+ @Resource
+ private LocMastService locMastService;
/**
* 绔欑偣杞璁℃暟鍣紝鐢ㄤ簬骞冲潎鍒嗛厤绔欑偣
* Key: 绔欑偣缁勬爣璇嗭紙濡� "east" 鎴� "west"锛夛紝Value: 褰撳墠杞绱㈠紩
@@ -90,6 +84,7 @@
* @param taskList 浠诲姟鍒楄〃锛堥�氬父鍙寘鍚竴涓换鍔★級
* @return 鏄惁鎴愬姛澶勭悊浜嗕换鍔★紙鎴愬姛鍛煎彨AGV锛岀姸鎬佷粠7鍙樹负8锛�
*/
+ @Transactional(rollbackFor = Exception.class)
public boolean callAgv(List<Task> taskList) {
// 璁板綍璋冪敤鍫嗘爤锛岀‘淇濆彧鑳戒粠瀹氭椂浠诲姟璋冪敤
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
@@ -514,24 +509,36 @@
WrkMast wrkMast = null;
if (agvTask.getWrkNo() != null) {
wrkMast = wrkMastService.selectOne(
- new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
+ new EntityWrapper<WrkMast>()
+ .eq("barcode", agvTask.getBarcode())
);
}
// 妫�鏌ュ巻鍙叉。鏄惁瀛樺湪
WrkMastLog wrkMastLog = null;
- if (agvTask.getWrkNo() != null) {
- wrkMastLog = wrkMastLogService.selectOne(
- new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
+ if (agvTask.getBarcode() != null) {
+ Wrapper<WrkMastLog> wrkMastLogMapper = new EntityWrapper<WrkMastLog>()
+ .eq("barcode", agvTask.getBarcode());
+ if (agvTask.getAppeTime() != null) {
+ // 璁$畻AGV鍒涘缓鏃堕棿涔嬪悗6灏忔椂鐨勬椂闂�
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(agvTask.getAppeTime());
+ calendar.add(Calendar.HOUR_OF_DAY, 6); // 鍔�6灏忔椂
+ Date endTime = calendar.getTime();
+ // 鏌ヨ鏉′欢锛氬巻鍙叉。鍒涘缓鏃堕棿 >= AGV璁㈠崟鍒涘缓鏃堕棿 涓� <= AGV鍒涘缓鏃堕棿涔嬪悗6灏忔椂
+ wrkMastLogMapper = wrkMastLogMapper.ge("appe_time", agvTask.getAppeTime())
+ .le("appe_time", endTime).eq("barcode", agvTask.getBarcode()).orderBy("appe_time DESC");
+ }
+ List<WrkMastLog> wrkMastLogList = wrkMastLogService.selectList(
+ wrkMastLogMapper
);
- }
- // 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
- if (wrkMastLog == null && !Cools.isEmpty(agvTask.getBarcode())) {
- List<WrkMastLog> logList = wrkMastLogService.selectList(
- new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
- );
- if (!logList.isEmpty()) {
- wrkMastLog = logList.get(0);
+ if(wrkMastLogList.size()==1){
+ wrkMastLog=wrkMastLogList.get(0);
+ }else if(wrkMastLogList.size()>1){
+ int locmastCount = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("barcode", agvTask.getBarcode()));
+ if(locmastCount>0){
+ wrkMastLog=wrkMastLogList.get(0);
+ }
}
}
@@ -669,14 +676,26 @@
return result;
}
+
/**
* 鏋勯�犺姹傚唴瀹癸紙浠欏伐M4鏍煎紡锛�
*/
public String getRequest(Task task, String nameSpace) {
JSONObject object = new JSONObject();
- // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝鏍煎紡锛歍 + 宸ヤ綔鍙�
- // 濡傛灉宸ヤ綔鍙蜂负绌猴紝鍒欎娇鐢ㄤ换鍔D浣滀负澶囬��
- String taskIdValue = (task.getWrkNo() != null) ? "T" + task.getWrkNo() : "T" + task.getId();
+ // taskId浣跨敤agvWrkNo瀛楁锛屽鏋滀负绌哄垯鐢熸垚鏂扮殑agvWrkNo
+ String taskIdValue = task.getAgvWrkNo();
+ if (taskIdValue == null || taskIdValue.isEmpty()) {
+ // 濡傛灉agvWrkNo涓虹┖锛岀敓鎴愭柊鐨刟gvWrkNo
+ if (task.getWrkNo() != null) {
+ taskIdValue = AgvUtils.generateAgvWrkNo(task.getWrkNo());
+ // 鏇存柊浠诲姟鐨刟gvWrkNo瀛楁
+ task.setAgvWrkNo(taskIdValue);
+ taskService.updateById(task);
+ } else {
+ // 濡傛灉宸ヤ綔鍙蜂篃涓虹┖锛屼娇鐢ㄤ换鍔D浣滀负澶囬�夛紙鍚戝悗鍏煎锛�
+ taskIdValue = "T" + task.getId();
+ }
+ }
object.put("taskId", taskIdValue);
// fromBin浣跨敤婧愬簱浣嶇紪鍙凤紙sourceLocNo锛夛紝濡傛灉涓虹┖鍒欎娇鐢ㄦ簮绔欑偣缂栧彿锛坰ourceStaNo锛変綔涓哄閫�
String fromBin = task.getSourceLocNo();
@@ -1042,8 +1061,12 @@
// todo 璁$畻agv鐩爣鏆傚瓨浣�
int endSite = 2004;
+ // 鐢熸垚AGV宸ヤ綔鍙�
+ String agvWrkNo = AgvUtils.generateAgvWrkNo(wrkMast.getWrkNo());
+
// 鎻掑叆agv浠诲姟
Task task = new Task(wrkMast.getWrkNo(), 7L, wrkMast.getIoType(), String.valueOf(wrkMast.getStaNo()), String.valueOf(endSite), null, wrkMast.getBarcode());
+ task.setAgvWrkNo(agvWrkNo); // 璁剧疆AGV宸ヤ綔鍙�
taskService.insert(task);
// 鏇存柊浠诲姟妗gv鎼繍鏍囪瘑
wrkMast.setCallAgv(2);
@@ -1058,16 +1081,16 @@
* 鍙栨秷AGV浠诲姟锛堜粰宸4鎺ュ彛锛�
*
* @param task 浠诲姟瀵硅薄
- * @return 鏄惁鎴愬姛
+ * @return 鎴愬姛杩斿洖 null锛屽け璐ヨ繑鍥為敊璇師鍥�
*/
- public boolean cancelAgvTask(Task task) {
+ public String cancelAgvTask(Task task) {
if (!agvProperties.isSendTask()) {
- return false;
+ return "鏈惎鐢ˋGV浠诲姟涓嬪彂";
}
if (task == null || task.getId() == null) {
log.error("鍙栨秷AGV浠诲姟澶辫触锛氫换鍔℃垨浠诲姟ID涓虹┖");
- return false;
+ return "浠诲姟鎴栦换鍔D涓虹┖";
}
String response = "";
@@ -1102,10 +1125,16 @@
// 鏋勯�犲彇娑堜换鍔¤姹�
JSONObject cancelRequest = new JSONObject();
- // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝鏍煎紡锛歍 + 宸ヤ綔鍙�
- // 濡傛灉宸ヤ綔鍙蜂负绌猴紝鍒欎娇鐢ㄤ换鍔D浣滀负澶囬��
- String taskIdValue = (task.getWrkNo() != null) ? "T" + task.getWrkNo() : "T" + task.getId();
- cancelRequest.put("taskId", taskIdValue);
+ // taskId浣跨敤agvWrkNo瀛楁锛屽鏋滀负绌哄垯浣跨敤宸ヤ綔鍙锋垨浠诲姟ID浣滀负澶囬��
+ String taskIdValue = task.getAgvWrkNo();
+ if (taskIdValue == null || taskIdValue.isEmpty()) {
+ if (task.getWrkNo() != null) {
+ taskIdValue = AgvUtils.generateAgvWrkNo(task.getWrkNo());
+ } else {
+ taskIdValue = "T" + task.getId();
+ }
+ }
+ cancelRequest.put("taskId", task.getAgvWrkNo());
cancelRequest.put("kind", kind);
String body = cancelRequest.toJSONString();
@@ -1124,10 +1153,16 @@
String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
log.info(namespace + "鍙栨秷AGV浠诲姟鎴愬姛锛歿}", displayTaskId);
} else {
+ String errMsg = jsonObject.getString("message");
+ if (errMsg == null || errMsg.isEmpty()) {
+ errMsg = "response: " + response;
+ }
log.error(namespace + "鍙栨秷AGV浠诲姟澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, body, response);
+ return errMsg;
}
} catch (Exception e) {
log.error(namespace + "鍙栨秷AGV浠诲姟寮傚父", e);
+ return e.getMessage() != null ? e.getMessage() : "鍙栨秷AGV浠诲姟寮傚父";
} finally {
try {
// 淇濆瓨鎺ュ彛鏃ュ織
@@ -1145,6 +1180,6 @@
}
}
- return success;
+ return success ? null : "鍙栨秷AGV浠诲姟澶辫触";
}
}
--
Gitblit v1.9.1