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