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/service/impl/TaskServiceImpl.java | 196 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 195 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index cc85e5f..e146d15 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -8,6 +8,8 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.TaskMapper;
import com.zy.asrs.service.*;
+import com.zy.asrs.task.handler.AgvHandler;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -17,6 +19,7 @@
import java.util.Objects;
import java.util.concurrent.TimeUnit;
+@Slf4j
@Service("taskService")
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
@@ -36,6 +39,8 @@
private OrderPakoutService orderPakoutService;
@Autowired
private OrderDetlPakoutService orderDetlPakoutService;
+ @Autowired
+ private AgvHandler agvHandler;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -143,6 +148,35 @@
if (Cools.isEmpty(wrkMast)) {
throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
}
+
+ // 濡傛灉鏄疉GV浠诲姟锛屾牴鎹换鍔$姸鎬佸喅瀹氭槸鍚﹂渶瑕佽皟鐢ˋGV鎺ュ彛鍙栨秷浠诲姟
+ // 浠呯姸鎬�7锛堟柊寤篈GV浠诲姟锛変笉璁块棶AGV鐩存帴鍙栨秷锛涘叾浠栫姸鎬佸繀椤诲厛璋冪敤AGV鍙栨秷鎺ュ彛锛孉GV杩斿洖鎴愬姛鎵嶈兘鍙栨秷
+ if ("agv".equals(wrkMast.getTaskType())) {
+ Long wrkSts = wrkMast.getWrkSts();
+ if (wrkSts != null && wrkSts == 7L) {
+ // 鐘舵��7锛氭柊寤篈GV浠诲姟锛屾湭鍙戦�佺粰AGV锛屾棤闇�璋冪敤AGV鎺ュ彛锛岀洿鎺ュ彇娑�
+ String displayTaskId = (wrkMast.getWrkNo() != null) ? String.valueOf(wrkMast.getWrkNo()) : String.valueOf(wrkMast.getId());
+ log.info("鍙栨秷AGV浠诲姟锛氫换鍔D锛歿}锛岀姸鎬侊細7锛堟柊寤篈GV浠诲姟锛夛紝鏃犻渶璋冪敤AGV鎺ュ彛锛岀洿鎺ュ彇娑�", displayTaskId);
+ } else {
+ // 闈炵姸鎬�7锛堝惈8銆�9銆�10绛夛級锛氬繀椤诲厛璋冪敤AGV鍙栨秷鎺ュ彛锛孉GV杩斿洖鎴愬姛鎵嶈兘鍙栨秷
+ if (wrkMast.getId() == null) {
+ throw new CoolException("鍙栨秷AGV浠诲姟澶辫触锛氫换鍔D涓虹┖");
+ }
+ String agvWrkNo = wrkMast.getAgvWrkNo();
+ Integer wrkNo = wrkMast.getWrkNo();
+ Long taskId = wrkMast.getId();
+ if ((agvWrkNo == null || agvWrkNo.isEmpty()) && wrkNo == null && taskId == null) {
+ throw new CoolException("鍙栨秷AGV浠诲姟澶辫触锛氭棤娉曡幏鍙栨湁鏁堢殑浠诲姟鏍囪瘑锛坅gvWrkNo銆亀rkNo鍜宨d閮戒负绌猴級");
+ }
+ String errorMsg = agvHandler.cancelAgvTask(wrkMast);
+ if (errorMsg != null) {
+ log.warn("鍙栨秷AGV浠诲姟澶辫触锛孉GV鏈繑鍥炴垚鍔� - 浠诲姟ID锛歿}锛岄敊璇細{}",
+ (wrkMast.getWrkNo() != null) ? String.valueOf(wrkMast.getWrkNo()) : String.valueOf(wrkMast.getId()), errorMsg);
+ throw new CoolException("鍙栨秷AGV浠诲姟澶辫触锛�" + errorMsg);
+ }
+ }
+ }
+
String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
// 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
@@ -226,7 +260,7 @@
// 淇敼搴撲綅鐘舵�侊紙濡傛灉搴撲綅涓嶄负绌猴級
boolean locMastRes = true;
- if (!Cools.isEmpty(locNo)) {
+ if (!Cools.isEmpty(locNo)&&wrkMast.getIoType() > 100) {
LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
if (Cools.isEmpty(locMast)) {
throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:" + locNo);
@@ -244,6 +278,166 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteWrkMast(String workNo, Long userId) {
+ Date now = new Date();
+ Task wrkMast = this.selectOne(new EntityWrapper<Task>()
+ .eq("wrk_no", workNo)
+ .andNew("(is_deleted = 0)"));
+ if (Cools.isEmpty(wrkMast)) {
+ throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+ }
+
+ String displayTaskId = (wrkMast.getWrkNo() != null) ? String.valueOf(wrkMast.getWrkNo()) : String.valueOf(wrkMast.getId());
+
+ // 濡傛灉鏄疉GV浠诲姟锛屽皾璇曞悓姝ョ敵璇稟GV鍙栨秷锛堜絾涓嶄細琚獳GV杩斿洖鐨勯敊璇牎楠屾嫤鎴紝浼氱户缁垹闄わ級
+ if ("agv".equals(wrkMast.getTaskType())) {
+ Long wrkSts = wrkMast.getWrkSts();
+ // 鐘舵��8鍜�9锛氬凡鍙戦�佺粰AGV浠诲姟锛屽皾璇曡皟鐢ˋGV鎺ュ彛鍙栨秷浠诲姟
+ // 鐘舵��10锛欰GV鍛煎彨寮傚父锛屽彲浠ュ彇娑堬紝浣嗕笉浼氳姹侫GV鍙栨秷鎺ュ彛
+ // 鐘舵��7鎴栨洿鏃╋細杩樻湭鍙戦�佺粰AGV锛屾棤闇�璋冪敤AGV鎺ュ彛
+ if (wrkSts != null && wrkSts >= 8L && wrkSts != 10L) {
+ try {
+ // 楠岃瘉浠诲姟淇℃伅鏄惁瀹屾暣
+ if (wrkMast.getId() != null) {
+ // 楠岃瘉taskId鏄惁鍙敤锛坅gvWrkNo銆亀rkNo鎴杋d鑷冲皯鏈変竴涓級
+ String agvWrkNo = wrkMast.getAgvWrkNo();
+ Integer wrkNo = wrkMast.getWrkNo();
+ Long taskId = wrkMast.getId();
+ if ((agvWrkNo != null && !agvWrkNo.isEmpty()) || wrkNo != null || taskId != null) {
+ // 鍚屾鐢宠AGV鍙栨秷锛屼絾涓嶆姏鍑哄紓甯革紙涓嶄細琚敊璇牎楠屾嫤鎴級
+ String errorMsg = agvHandler.cancelAgvTask(wrkMast);
+ if (errorMsg != null) {
+ log.warn("鍒犻櫎AGV浠诲姟锛氬皾璇曞彇娑圓GV浠诲姟澶辫触锛屼絾缁х画鎵ц鍒犻櫎鎿嶄綔锛屼换鍔D锛歿}锛岄敊璇細{}", displayTaskId, errorMsg);
+ } else {
+ log.info("鍒犻櫎AGV浠诲姟锛氭垚鍔熷彇娑圓GV浠诲姟锛屼换鍔D锛歿}", displayTaskId);
+ }
+ } else {
+ log.warn("鍒犻櫎AGV浠诲姟锛氭棤娉曡幏鍙栨湁鏁堢殑浠诲姟鏍囪瘑锛坅gvWrkNo銆亀rkNo鍜宨d閮戒负绌猴級锛岃烦杩嘇GV鍙栨秷锛岀户缁墽琛屽垹闄ゆ搷浣滐紝浠诲姟ID锛歿}", displayTaskId);
+ }
+ } else {
+ log.warn("鍒犻櫎AGV浠诲姟锛氫换鍔D涓虹┖锛岃烦杩嘇GV鍙栨秷锛岀户缁墽琛屽垹闄ゆ搷浣滐紝浠诲姟ID锛歿}", displayTaskId);
+ }
+ } catch (Exception e) {
+ // 鎹曡幏鎵�鏈夊紓甯革紝璁板綍鏃ュ織浣嗕笉闃绘鍒犻櫎鎿嶄綔锛堜笉浼氳AGV杩斿洖鐨勯敊璇牎楠屾嫤鎴級
+ log.error("鍒犻櫎AGV浠诲姟锛氬皾璇曞彇娑圓GV浠诲姟鏃跺彂鐢熷紓甯革紝浣嗙户缁墽琛屽垹闄ゆ搷浣滐紝浠诲姟ID锛歿}", displayTaskId, e);
+ }
+ } else {
+ // 鐘舵��10锛圓GV鍛煎彨寮傚父锛夋垨鐘舵��7鎴栨洿鏃╋紝鏃犻渶璋冪敤AGV鎺ュ彛
+ if (wrkSts != null && wrkSts == 10L) {
+ log.info("鍒犻櫎AGV浠诲姟锛氫换鍔D锛歿}锛岀姸鎬侊細{}锛圓GV鍛煎彨寮傚父锛夛紝鏃犻渶璋冪敤AGV鎺ュ彛锛岀洿鎺ュ垹闄�", displayTaskId, wrkSts);
+ } else {
+ log.info("鍒犻櫎AGV浠诲姟锛氫换鍔D锛歿}锛岀姸鎬侊細{}锛堝緟鍛煎彨AGV鎴栨洿鏃╋級锛屾棤闇�璋冪敤AGV鎺ュ彛锛岀洿鎺ュ垹闄�", displayTaskId, wrkSts);
+ }
+ }
+ }
+
+ // 閲婃斁搴撲綅绛夎祫婧愶紙绫讳技cancelWrkMast鐨勯�昏緫锛�
+ String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
+ String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
+ // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
+ if (wrkMast.getIoType() < 100) {
+ locNo = wrkMast.getLocNo();
+ locSts = "O";
+
+ // 搴撲綅杞Щ
+ if (wrkMast.getIoType() == 11) {
+ // 搴撲綅杞Щ锛氭簮搴撲綅
+ LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
+ if (!Cools.isEmpty(locMast)) {
+ locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
+ locMast.setModiTime(now);
+ locMast.setModiUser(userId);
+ locCacheService.updateById(locMast);
+ }
+ }
+ // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
+ } else {
+ locNo = wrkMast.getSourceLocNo();
+ // 鍑哄簱 ===>> F.鍦ㄥ簱
+ if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
+ locSts = "F";
+ // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
+ } else if (wrkMast.getIoType() == 110) {
+ locSts = "D";
+ // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
+ } else if (wrkMast.getIoType() == 11) {
+ locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
+ // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
+ LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+ if (!Cools.isEmpty(locMast)) {
+ locMast.setLocSts("O");
+ locMast.setModiTime(now);
+ locMast.setModiUser(userId);
+ locCacheService.updateById(locMast);
+ }
+ }
+ }
+
+ //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
+ if (wrkMast.getIoType() == 1) {
+ List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
+ for (WaitPakin waitPakin : waitPakins) {
+ if (!Cools.isEmpty(waitPakin)) {
+ waitPakin.setIoStatus("N");
+ waitPakin.setLocNo("");
+ waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
+ .eq("zpallet", waitPakin.getZpallet())
+ .eq("matnr", waitPakin.getMatnr())
+ .eq("batch", waitPakin.getBatch()));
+ }
+ }
+ }
+
+ // 鍒犻櫎鎿嶄綔浜哄憳璁板綍
+ wrkMast.setManuType("鎵嬪姩鍒犻櫎");
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(now);
+ // 閫昏緫鍒犻櫎宸ヤ綔涓绘。
+ wrkMast.setIsDeleted(1);
+ if (!taskService.updateById(wrkMast)) {
+ throw new CoolException("鍒犻櫎宸ヤ綔妗eけ璐�");
+ }
+
+ if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
+ // 鍒犻櫎宸ヤ綔妗f槑缁�
+ taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
+ }
+
+ // 淇敼搴撲綅鐘舵�侊紙濡傛灉搴撲綅涓嶄负绌猴級
+ if (!Cools.isEmpty(locNo) && wrkMast.getIoType() > 100) {
+ LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
+ if (!Cools.isEmpty(locMast) && !Cools.isEmpty(locSts)) {
+ locMast.setLocSts(locSts);
+ locMast.setModiTime(now);
+ locMast.setModiUser(userId);
+ locCacheService.updateById(locMast);
+ }
+ }
+
+ // 濡傛灉鏄叆搴撲换鍔★紝閲婃斁棰勭害搴撲綅
+ if (wrkMast.getIoType() != null && wrkMast.getIoType() < 100 && !Cools.isEmpty(wrkMast.getLocNo())) {
+ try {
+ LocCache locCache = locCacheService.selectOne(
+ new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo())
+ );
+ if (locCache != null && "S".equals(locCache.getLocSts())) {
+ // 搴撲綅鐘舵�佷负S锛堝叆搴撻绾︼級锛岄噴鏀句负O锛堥棽缃級
+ locCache.setLocSts("O");
+ locCache.setModiTime(now);
+ locCache.setModiUser(userId);
+ locCacheService.updateById(locCache);
+ log.info("鍒犻櫎AGV浠诲姟锛氬凡閲婃斁棰勭害搴撲綅锛歿}锛圫鈫扥锛夛紝浠诲姟ID锛歿}", wrkMast.getLocNo(), displayTaskId);
+ }
+ } catch (Exception e) {
+ log.warn("鍒犻櫎AGV浠诲姟锛氶噴鏀鹃绾﹀簱浣嶅け璐ワ紝搴撲綅锛歿}锛屼换鍔D锛歿}", wrkMast.getLocNo(), displayTaskId, e);
+ }
+ }
+
+ log.info("鍒犻櫎AGV浠诲姟鎴愬姛锛氫换鍔D锛歿}锛屽伐浣滃彿锛歿}", displayTaskId, workNo);
+ }
+
+ @Override
public List<Task> selectToBeHistoryData() {
return this.baseMapper.selectToBeHistoryData();
}
--
Gitblit v1.9.1