From 46168fbb7c925b0ec04def176095e967720e684a Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期五, 16 一月 2026 15:22:07 +0800
Subject: [PATCH] agv查询修复
---
src/main/java/com/zy/asrs/task/handler/AgvHandler.java | 135 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 108 insertions(+), 27 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 60afb65..4349f98 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -87,19 +87,38 @@
log.info("浠诲姟ID锛歿}宸插垎閰嶇珯鐐癸細{}", task.getId(), staNo);
}
- // 妫�鏌ョ洰鏍囩珯鐐规槸鍚︽湁鏈畬鎴愮殑AGV浠诲姟
- // 濡傛灉绔欑偣鏈夋湭瀹屾垚鐨勪换鍔★紝鍒欒烦杩囨湰娆″彂閫侊紝绛夊緟涓嬫
- if (staNo != null && !staNo.isEmpty()) {
- List<Task> unfinishedTasks = taskService.selectList(new EntityWrapper<Task>()
+ // 妫�鏌ョ洰鏍囩珯鐐规槸鍚︽湁姝e湪鎼繍鐨勫悓绫诲瀷AGV浠诲姟锛堝嚭搴撳拰鍏ュ簱浜掍笉骞叉壈锛�
+ // 鍙湁鐘舵��8锛堝凡鍛煎彨AGV锛屾鍦ㄦ惉杩愶級鐨勪换鍔℃墠浼氶樆濉烇紝鐘舵��7锛堝緟鍛煎彨锛夌殑浠诲姟涓嶉樆濉�
+ // 杩欐牱鍙互閬垮厤鎵�鏈変换鍔¢兘鍗″湪鍛煎彨鐘舵�侊紝鎸塱d鏈�灏忕殑浼樺厛鍛煎彨
+ if (staNo != null && !staNo.isEmpty() && task.getIoType() != null) {
+ // 鏍规嵁褰撳墠浠诲姟绫诲瀷锛屽彧妫�鏌ュ悓绫诲瀷鐨勬鍦ㄦ惉杩愪换鍔★紙鐘舵��8锛�
+ // 鍏ュ簱浠诲姟锛坕oType < 100锛夛細鍙鏌ュ叆搴撶被鍨嬬殑姝e湪鎼繍浠诲姟
+ // 鍑哄簱浠诲姟锛坕oType >= 100锛夛細鍙鏌ュ嚭搴撶被鍨嬬殑姝e湪鎼繍浠诲姟
+ List<Integer> ioTypes;
+ String taskType;
+ if (task.getIoType() < 100) {
+ // 鍏ュ簱浠诲姟锛氬彧妫�鏌ュ叆搴撶被鍨嬶紙1, 10, 53, 57锛�
+ ioTypes = Arrays.asList(1, 10, 53, 57);
+ taskType = "鍏ュ簱";
+ } else {
+ // 鍑哄簱浠诲姟锛氬彧妫�鏌ュ嚭搴撶被鍨嬶紙101, 110, 103, 107锛�
+ ioTypes = Arrays.asList(101, 110, 103, 107);
+ taskType = "鍑哄簱";
+ }
+
+ // 鍙鏌ョ姸鎬佷负8锛堝凡鍛煎彨AGV锛屾鍦ㄦ惉杩愶級鐨勫悓绫诲瀷浠诲姟
+ List<Task> transportingTasks = taskService.selectList(
+ new EntityWrapper<Task>()
.eq("sta_no", staNo)
.eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
+ .in("io_type", ioTypes)
.ne("id", task.getId()) // 鎺掗櫎褰撳墠浠诲姟鏈韩
- .last("AND wrk_sts NOT IN (5, 15)") // 鎺掗櫎宸插畬鎴愮姸鎬�
);
- if (!unfinishedTasks.isEmpty()) {
- log.info("绔欑偣{}鏈墈}涓湭瀹屾垚鐨凙GV浠诲姟锛岃烦杩囨湰娆″彂閫侊紝绛夊緟浠诲姟瀹屾垚銆傚綋鍓嶄换鍔D锛歿}",
- staNo, unfinishedTasks.size(), task.getId());
+ if (!transportingTasks.isEmpty()) {
+ log.info("绔欑偣{}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛岃烦杩囨湰娆″彂閫侊紝绛夊緟鎼繍瀹屾垚銆傚綋鍓嶄换鍔D锛歿}",
+ staNo, transportingTasks.size(), taskType, task.getId());
continue; // 璺宠繃鏈鍙戦�侊紝绛夊緟涓嬫
}
}
@@ -303,40 +322,101 @@
return null;
}
- // 鍏ュ簱浠诲姟鏁版帓搴�
+ // 鍏堟寜瑙勫垯鎺掑簭锛堝叆搴撲换鍔℃暟鎺掑簭锛�
devList.sort(Comparator.comparing(BasDevp::getInQty));
- // 閫夋嫨绔欑偣
- BasDevp basDevp;
- int minInQty = devList.get(0).getInQty();
+ // 鏍规嵁浠诲姟绫诲瀷纭畾瑕佹鏌ョ殑io_type鍒楄〃
+ Integer taskIoType = task.getIoType();
+ List<Integer> checkIoTypes = null;
+ String taskTypeName = "";
+ if (taskIoType != null) {
+ if (taskIoType < 100) {
+ // 鍏ュ簱浠诲姟锛氬彧妫�鏌ュ叆搴撶被鍨嬶紙1, 10, 53, 57锛�
+ checkIoTypes = Arrays.asList(1, 10, 53, 57);
+ taskTypeName = "鍏ュ簱";
+ } else {
+ // 鍑哄簱浠诲姟锛氬彧妫�鏌ュ嚭搴撶被鍨嬶紙101, 110, 103, 107锛�
+ checkIoTypes = Arrays.asList(101, 110, 103, 107);
+ taskTypeName = "鍑哄簱";
+ }
+ }
- // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃
+ // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃锛堟寜瑙勫垯鎺掑簭鍚庣殑鍊欓�夌珯鐐癸級
+ int minInQty = devList.get(0).getInQty();
List<BasDevp> minTaskSites = devList.stream()
.filter(dev -> dev.getInQty() == minInQty)
.collect(Collectors.toList());
- // 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐
+ // 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐锛岀‘瀹氫紭鍏堝垎閰嶇殑绔欑偣椤哄簭
+ List<BasDevp> orderedSites = new ArrayList<>();
String strategy = agvProperties.getSiteAllocation().getStrategy();
boolean enableRoundRobin = agvProperties.getSiteAllocation().isEnableRoundRobin();
if (minTaskSites.size() > 1 && enableRoundRobin && "round-robin".equals(strategy)) {
- // 杞鍒嗛厤
+ // 杞鍒嗛厤锛氬厛鎸夎疆璇㈢瓥鐣ユ帓搴�
AtomicInteger counter = siteRoundRobinCounters.computeIfAbsent(groupKey, k -> new AtomicInteger(0));
- int index = counter.getAndIncrement() % minTaskSites.size();
- basDevp = minTaskSites.get(index);
- log.info("浣跨敤杞鍒嗛厤绛栫暐锛岀珯鐐圭粍锛歿}锛岃疆璇㈢储寮曪細{}锛岄�変腑绔欑偣锛歿}", groupKey, index, basDevp.getDevNo());
+ int startIndex = counter.get() % minTaskSites.size();
+ // 灏嗚疆璇㈤�変腑鐨勭珯鐐规斁鍦ㄦ渶鍓嶉潰
+ orderedSites.addAll(minTaskSites.subList(startIndex, minTaskSites.size()));
+ orderedSites.addAll(minTaskSites.subList(0, startIndex));
+ // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+ orderedSites.addAll(devList.stream()
+ .filter(dev -> dev.getInQty() > minInQty)
+ .collect(Collectors.toList()));
+ log.debug("浣跨敤杞鍒嗛厤绛栫暐锛岀珯鐐圭粍锛歿}锛岃疆璇㈣捣濮嬬储寮曪細{}", groupKey, startIndex);
} else if (minTaskSites.size() > 1 && enableRoundRobin && "random".equals(strategy)) {
- // 闅忔満鍒嗛厤
- Random random = new Random();
- int index = random.nextInt(minTaskSites.size());
- basDevp = minTaskSites.get(index);
- log.info("浣跨敤闅忔満鍒嗛厤绛栫暐锛岄�変腑绔欑偣锛歿}", basDevp.getDevNo());
+ // 闅忔満鍒嗛厤锛氬厛闅忔満鎺掑簭浠诲姟鏁版渶灏戠殑绔欑偣
+ List<BasDevp> shuffledMinSites = new ArrayList<>(minTaskSites);
+ Collections.shuffle(shuffledMinSites);
+ orderedSites.addAll(shuffledMinSites);
+ // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+ orderedSites.addAll(devList.stream()
+ .filter(dev -> dev.getInQty() > minInQty)
+ .collect(Collectors.toList()));
+ log.debug("浣跨敤闅忔満鍒嗛厤绛栫暐");
} else {
- // 榛樿锛氶�夋嫨绗竴涓紙浠诲姟鏈�灏戠殑锛�
- basDevp = devList.get(0);
+ // 榛樿锛氭寜鍏ュ簱浠诲姟鏁版帓搴忥紙宸茬粡鎺掑簭濂戒簡锛�
+ orderedSites = devList;
}
- Integer endSite = basDevp.getDevNo();
+ // 渚濇妫�鏌ユ瘡涓珯鐐规槸鍚﹀湪鎼繍锛屾壘鍒扮涓�涓┖闂茬珯鐐瑰氨鍒嗛厤
+ BasDevp selectedSite = null;
+ for (BasDevp dev : orderedSites) {
+ String staNo = String.valueOf(dev.getDevNo());
+
+ // 濡傛灉浠诲姟绫诲瀷涓嶄负绌猴紝妫�鏌ヨ绔欑偣鏄惁鏈夋鍦ㄦ惉杩愮殑鍚岀被鍨嬩换鍔�
+ boolean isTransporting = false;
+ if (checkIoTypes != null && !checkIoTypes.isEmpty()) {
+ List<Task> transportingTasks = taskService.selectList(
+ new EntityWrapper<Task>()
+ .eq("sta_no", staNo)
+ .eq("task_type", "agv")
+ .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
+ .in("io_type", checkIoTypes)
+ );
+ isTransporting = !transportingTasks.isEmpty();
+
+ if (isTransporting) {
+ log.debug("绔欑偣{}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛屾鏌ヤ笅涓�涓珯鐐�",
+ staNo, transportingTasks.size(), taskTypeName);
+ continue; // 璇ョ珯鐐规鍦ㄦ惉杩愶紝妫�鏌ヤ笅涓�涓珯鐐�
+ }
+ }
+
+ // 鎵惧埌绗竴涓┖闂茬珯鐐癸紝鍒嗛厤
+ selectedSite = dev;
+ log.info("浠诲姟ID锛歿}鎸夎鍒欏簲鍒嗛厤鍒扮珯鐐箋}锛岃绔欑偣绌洪棽锛屽垎閰嶆垚鍔�", task.getId(), staNo);
+ break;
+ }
+
+ // 濡傛灉鎵�鏈夌珯鐐归兘鍦ㄦ惉杩愶紝鍒欎笉鍒嗛厤绔欑偣
+ if (selectedSite == null) {
+ log.warn("浠诲姟ID锛歿}鐨勬墍鏈夊�欓�夌珯鐐归兘鏈夋鍦ㄦ惉杩愮殑{}浠诲姟锛屾殏涓嶅垎閰嶇珯鐐癸紝绛夊緟绌洪棽",
+ task.getId(), taskIoType != null && taskIoType < 100 ? "鍏ュ簱" : "鍑哄簱");
+ return null;
+ }
+
+ Integer endSite = selectedSite.getDevNo();
// 鍏ュ簱鏆傚瓨+1
basDevpMapper.incrementInQty(endSite);
@@ -376,10 +456,11 @@
@Transactional(rollbackFor = Exception.class)
public void moveTaskToHistory(List<Task> taskList) {
- // 鍐欏叆鍘嗗彶琛�
+ // 鍐欏叆鍘嗗彶琛紝淇濇寔ID涓�鑷�
for (Task task : taskList) {
TaskLog log = new TaskLog();
BeanUtils.copyProperties(task, log);
+ // 淇濇寔ID涓�鑷达紝涓嶈缃负null
taskLogService.insert(log);
}
--
Gitblit v1.9.1