From 37f55514ad2f02397fd75c7d98cea25e371243c7 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期一, 20 一月 2025 16:54:29 +0800
Subject: [PATCH] 添加库位规则查找,优化自动移动逻辑
---
src/main/java/com/zy/common/service/AgvCommonService.java | 23 +++++
src/main/java/com/zy/asrs/task/core/ProcesTimeData.java | 19 ++++
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java | 93 ++++++++++-------------
src/main/java/com/zy/asrs/utils/TimeUtils.java | 29 +++++++
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java | 23 ++++-
5 files changed, 129 insertions(+), 58 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
index b267d6b..2182cb5 100644
--- a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -11,7 +11,9 @@
import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.AgvLocMastService;
import com.zy.asrs.service.AgvWrkMastService;
+import com.zy.asrs.task.core.ProcesTimeData;
import com.zy.asrs.task.handler.AutoMoveHandler;
+import com.zy.asrs.utils.TimeUtils;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
@@ -66,13 +68,7 @@
*/
@Scheduled(cron = "0/1 * * * * ? ")
private synchronized void execute2() {
- List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
- .eq("wrk_sts", 22)
- .andNew().eq("io_type", 108)
- .andNew()
- .eq("crn_no", 2).or().eq("crn_no", 3)
- .orderBy("io_pri", false).orderBy("appe_time", true)
- );
+ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 108).andNew().eq("crn_no", 2).or().eq("crn_no", 3).orderBy("io_pri", false).orderBy("appe_time", true));
if (agvWrkMastList.isEmpty()) {
return;
}
@@ -116,12 +112,7 @@
*/
@Scheduled(cron = "0/2 * * * * ? ")
private void execute3() {
- List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
- .eq("wrk_sts", 22)
- .andNew().eq("io_type", 111)
- .orderBy("io_pri", false)
- .orderBy("appe_time", true)
- );
+ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 111).orderBy("io_pri", false).orderBy("appe_time", true));
if (agvWrkMastList.isEmpty()) {
return;
}
@@ -137,12 +128,7 @@
@Scheduled(cron = "0/2 * * * * ? ")
private void execute4() {
- List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
- .eq("wrk_sts", 22)
- .andNew().eq("io_type", 114)
- .orderBy("io_pri", false)
- .orderBy("appe_time", true)
- );
+ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 114).orderBy("io_pri", false).orderBy("appe_time", true));
if (agvWrkMastList.isEmpty()) {
return;
}
@@ -186,11 +172,7 @@
@Scheduled(cron = "0/2 * * * * ? ")
private void autoEmptyBack3() {
// 宸ヤ綔妗d负201 涓� 鍏ュ嚭搴撶被鍨嬩负109
- List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
- .eq("wrk_sts", 214)
- .eq("loc_no", "")
- .eq("io_type", 113)
- .orderBy("io_pri", false));
+ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 214).eq("loc_no", "").eq("io_type", 113).orderBy("io_pri", false));
if (agvWrkMastList.isEmpty()) {
return;
}
@@ -234,13 +216,9 @@
@Scheduled(cron = "0/2 * * * * ? ")
private void autoEmptyBack4() {
// 鏌ヨ 涓嶄负1妤肩殑绌鸿揣鏋�
- List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
- new EntityWrapper<AgvLocMast>()
- // TODO 鍥涙湡
- .eq("loc_sts", "D")
- .eq("loc_type1", 3)
- .ne("floor", 1)
- .ne("lev1", 1));
+ List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>()
+ // TODO 鍥涙湡
+ .eq("loc_sts", "D").eq("loc_type1", 3).ne("floor", 1).ne("lev1", 1));
if (agvLocMasts.isEmpty()) {
return;
}
@@ -255,16 +233,37 @@
/**
- // TODO 鍥涙湡
+ * 灏嗕簩鍘傜殑6绫诲瀷鐨勭┖璐ф灦璋冩嫧鍥炲惛濉戜簩妤�
*/
+ // TODO 鍥涙湡
@Scheduled(cron = "0/2 * * * * ? ")
private void autoEmptyBackSiqi() {
+ // 鏌ヨ6绫诲瀷绌鸿揣鏋惰繑鍥炵殑鎵ц鏃堕棿鐐�
+ Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_TIME"));
+ if (config != null && !Cools.isEmpty(config.getValue())) {
+ boolean flag = false;
+ try {
+ // 鍒ゆ柇鏄惁鍦ㄦ墽琛屾椂闂村唴
+ ProcesTimeData procesTimeData = JSONObject.parseObject(config.getValue(), ProcesTimeData.class);
+ if (procesTimeData != null && TimeUtils.between(procesTimeData)) {
+ flag = true;
+ }
+ } catch (Exception e) {
+ log.error("6绫诲瀷绌鸿揣鏋惰繑鍥炵殑鎵ц鏃堕棿鐐硅В鏋愬紓甯革細===銆嬪紓甯稿師鍥狅細" + e.getMessage());
+ flag = true;
+ }
+ if (flag) {
+ executeLocType6();
+ }
+ } else {
+ executeLocType6();
+ }
+ }
+
+
+ private void executeLocType6() {
// 鏌ヨ 浜屽巶鐨勭殑鍗婃垚鍝佺澹崇被鍨嬬殑绌鸿揣鏋�
- List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
- new EntityWrapper<AgvLocMast>()
- .eq("loc_sts", "D")
- .eq("loc_type1", 6)
- .eq("floor", 2));
+ List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("loc_sts", "D").eq("loc_type1", 6).eq("floor", 2));
if (agvLocMasts.isEmpty()) {
return;
}
@@ -276,7 +275,6 @@
}
}
}
-
private boolean determineFloorConnection(Integer floor) {
try {
@@ -304,10 +302,7 @@
*/
@Scheduled(cron = "0/2 * * * * ? ")
private void autoEmptyBack5() {
- List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
- .ne("floor", 1)
- .eq("loc_sts", "F")
- .like("dev_no", "DB"));
+ List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().ne("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
if (agvBasDevps.isEmpty()) {
return;
}
@@ -326,10 +321,7 @@
*/
@Scheduled(cron = "0/2 * * * * ? ")
private void autoEmptyBack6() {
- List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
- .eq("floor", 1)
- .eq("loc_sts", "F")
- .like("dev_no", "DB"));
+ List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
if (agvBasDevps.isEmpty()) {
return;
}
@@ -374,12 +366,7 @@
return;
}
- List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
- new EntityWrapper<AgvLocMast>()
- .eq("floor", 1)
- .eq("lev1", 1)
- .eq("loc_sts", "F")
- .eq("loc_type1", 3));
+ List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("floor", 1).eq("lev1", 1).eq("loc_sts", "F").eq("loc_type1", 3));
if (agvLocMasts.isEmpty()) {
return;
}
@@ -393,4 +380,6 @@
}
}
}
+
+
}
diff --git a/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java b/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java
new file mode 100644
index 0000000..24df2df
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.task.core;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ProcesTimeData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Integer startHour;
+
+ private Integer startMinute;
+
+ private Integer endHour;
+
+ private Integer endMinute;
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
index 054bd68..344ef5b 100644
--- a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -9,6 +9,8 @@
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.service.AgvCommonService;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +36,8 @@
private AgvWrkDetlService agvWrkDetlService;
@Autowired
AgvBasDevpService agvBasDevpService;
+ @Autowired
+ private ConfigService configService;
// public ReturnT<String> start(AgvLocMast agvLocMast) {
// // locType 1. 鑷姩锛� 2. 鎵嬪姩
@@ -490,10 +494,15 @@
floor = "F2";
}
List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113));
- if (agvWrkMasts.size() >= 5) {
- //log.error("鏆傚仠鍥炴祦");
- return FAIL;
- //throw new CoolException("鏆傚仠鍥炴祦");
+ Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_MAX"));
+ if (config == null && !Cools.isEmpty(config.getValue())) {
+ if (agvWrkMasts.size() >= Integer.parseInt(config.getValue())) {
+ return FAIL;
+ }
+ } else {
+ if (agvWrkMasts.size() >= 5) {
+ return FAIL;
+ }
}
//妫�绱㈢┖闂插彲鍏ユ帴椹充綅 娌℃湁绌洪棽鍙叆鎺ラ┏浣� 鐩存帴鎵惧簱浣�
AgvBasDevp devpNo = agvCommonService.getDevpNo(6, agvLocMast.getFloor(), "Y", "Y");
@@ -503,12 +512,14 @@
ioType = 109;
} else {
//妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
- locMast = agvCommonService.getLocNo(6, 1, true, true);
+ locMast = agvCommonService.getLocByFloorAndLev1(6, 1, 2);
locNo = locMast.getLocNo();
wrkSts = 201L;
ioType = 109;
}
-
+ if (locMast == null) {
+ throw new CoolException("娌℃湁鍙敤鐨勫簱浣�");
+ }
//鐢熸垚宸ヤ綔妗�
AgvWrkMast mast = new AgvWrkMast();
//宸ヤ綔鐘舵��
diff --git a/src/main/java/com/zy/asrs/utils/TimeUtils.java b/src/main/java/com/zy/asrs/utils/TimeUtils.java
new file mode 100644
index 0000000..a6c26b8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/TimeUtils.java
@@ -0,0 +1,29 @@
+package com.zy.asrs.utils;
+
+import com.zy.asrs.task.core.ProcesTimeData;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+public class TimeUtils {
+
+ public static boolean between(ProcesTimeData procesTimeData) {
+ if (procesTimeData.getEndHour() == 24) {
+ procesTimeData.setEndHour(0);
+ procesTimeData.setEndMinute(0);
+ }
+ LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(procesTimeData.getStartHour(), procesTimeData.getStartMinute()));
+ LocalDateTime endTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(procesTimeData.getEndHour(), procesTimeData.getEndMinute()));
+ if (procesTimeData.getStartHour() > procesTimeData.getEndHour()) {
+ endTime = endTime.plusDays(1);
+ }
+ LocalDateTime currentTime = LocalDateTime.now(); // 鑾峰彇褰撳墠鏃堕棿
+ System.out.println(startTime);
+ System.out.println(endTime);
+ if (currentTime.isAfter(startTime) && currentTime.isBefore(endTime)) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java
index d917ed1..cde29ff 100644
--- a/src/main/java/com/zy/common/service/AgvCommonService.java
+++ b/src/main/java/com/zy/common/service/AgvCommonService.java
@@ -182,6 +182,29 @@
}
/*
+ 搴撲綅瑙勫垯鏌ユ壘
+ */
+ public AgvLocMast getLocByFloorAndLev1(int type, int floor, int lev1) {
+
+ try {
+ EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+ wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+ wrapper.eq("floor", floor).eq("lev1", lev1);
+
+ List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
+ for (AgvLocMast agvLocMast : agvLocMasts) {
+ AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
+ if (agvLocMast1.getLocSts().equals("O")) {
+ return agvLocMast1;
+ }
+ }
+ return null;
+ } catch (Exception e) {
+ throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+ }
+ }
+
+ /*
搴撲綅瑙勫垯鏌ユ壘
*/
private AgvLocMast getLocByLocCodeRule(AgvWaitPakin agvWaitPakin, int floor) {
--
Gitblit v1.9.1