From ae2f9a18e28a7e223e8831fef82e14fd94e26193 Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期一, 07 四月 2025 16:37:54 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java | 164 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 140 insertions(+), 24 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java index 41c4ed8..d6f17b9 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java @@ -8,17 +8,13 @@ import com.zy.acs.manager.common.domain.TaskDto; import com.zy.acs.manager.core.constant.AgvGroupConstant; import com.zy.acs.manager.core.constant.LocGroupConstant; +import com.zy.acs.manager.core.constant.StaGroupConstant; import com.zy.acs.manager.core.service.MainLockWrapService; import com.zy.acs.manager.core.service.MainService; import com.zy.acs.manager.core.service.TrafficService; import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam; -import com.zy.acs.manager.manager.entity.Agv; -import com.zy.acs.manager.manager.entity.AgvModel; -import com.zy.acs.manager.manager.entity.Bus; -import com.zy.acs.manager.manager.entity.Loc; -import com.zy.acs.manager.manager.enums.AgvModelType; -import com.zy.acs.manager.manager.enums.BusStsType; -import com.zy.acs.manager.manager.enums.LocStsType; +import com.zy.acs.manager.manager.entity.*; +import com.zy.acs.manager.manager.enums.*; import com.zy.acs.manager.manager.service.*; import com.zy.acs.manager.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; @@ -26,8 +22,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.util.Collections; -import java.util.List; +import java.util.*; @Slf4j @Component @@ -56,6 +51,8 @@ @Autowired private LocService locService; @Autowired + private StaService staService; + @Autowired private AgvModelService agvModelService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @@ -64,21 +61,138 @@ // @Scheduled(fixedRate = 500) // 鍥哄畾棰戠巼鎵ц锛屼笉鍚屾 @Scheduled(fixedDelay = 1000) // 鍥哄畾棰戠巼鎵ц锛屽悓姝� // @Scheduled(cron = "0/1 * * * * ? ") - private void autoLocToLoc() { + private void execute() { if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; } - this.runLocToLoc(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST, AgvGroupConstant.FIRST_AGV_GROUP); - this.runLocToLoc(LocGroupConstant.LEFT_LOC_ROW_LIST, AgvGroupConstant.SECOND_AGV_GROUP); - this.runLocToLoc(LocGroupConstant.MIDDLE_LOC_ROW_LIST, AgvGroupConstant.THIRD_AGV_GROUP); - this.runLocToLoc(LocGroupConstant.RIGHT_LOC_ROW_LIST, AgvGroupConstant.FOURTH_AGV_GROUP); - this.runLocToLoc(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST, AgvGroupConstant.FIFTH_AGV_GROUP); + this.autoRun(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST, StaGroupConstant.FAR_LEFT_STA_ROW_LIST, AgvGroupConstant.FIRST_AGV_GROUP); + this.autoRun(LocGroupConstant.LEFT_LOC_ROW_LIST, StaGroupConstant.LEFT_STA_ROW_LIST, AgvGroupConstant.SECOND_AGV_GROUP); + this.autoRun(LocGroupConstant.MIDDLE_LOC_ROW_LIST, StaGroupConstant.MIDDLE_STA_ROW_LIST, AgvGroupConstant.THIRD_AGV_GROUP); + this.autoRun(LocGroupConstant.RIGHT_LOC_ROW_LIST, StaGroupConstant.RIGHT_STA_ROW_LIST, AgvGroupConstant.FOURTH_AGV_GROUP); + this.autoRun(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST, StaGroupConstant.FAR_RIGHT_STA_ROW_LIST, AgvGroupConstant.FIFTH_AGV_GROUP); } + private void autoRun(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { + int availableAgvCount = this.getAvailableAgvCount(agvGroupList); + if (0 == availableAgvCount) { return; } + + // 鍏ュ簱 + this.runStaToLoc(locGroupList, staGroupList, agvGroupList); + + // 鍑哄簱 + this.runLocToSta(locGroupList, staGroupList, agvGroupList); + + // 绉诲簱 + this.runLocToLoc(locGroupList, agvGroupList); + + } + + // 鍏ュ簱 + private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { + Integer startRow = Collections.min(locGroupList); + Integer endRow = Collections.max(locGroupList); + + List<String> staPreNos = getStaPrefixes(staGroupList); + String memo = "DEMO_STA_" + String.join("-", staPreNos); + + AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); + if (null == agvModel) { + return; + } + + // STOCK + LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>() + .eq(Sta::getStaSts, StaStsType.STOCK.val()) + .eq(Sta::getStatus, StatusType.ENABLE.val) + .in(Sta::getStaNo, staGroupList); + List<Sta> stockList = staService.list(stockWrapper); + if (Cools.isEmpty(stockList)) { return; } + Collections.shuffle(stockList); + + // IDLE + LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val()); + if (null != startRow) { idleWrapper.ge(Loc::getRow, startRow); } + if (null != endRow) { idleWrapper.le(Loc::getRow, endRow); } + List<Loc> idleList = locService.list(idleWrapper); + if (Cools.isEmpty(idleList)) { return; } + Collections.shuffle(idleList); + + OpenBusSubmitParam param = new OpenBusSubmitParam(); + param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19)); + for (int i = 0; i < Math.min(agvModel.getBackpack(), Math.min(stockList.size(), idleList.size())) ; i++) { + Sta stockSta = stockList.get(i); + Loc idleLoc = idleList.get(i); + + TaskDto taskDto = new TaskDto(); + taskDto.setOriSta(stockSta.getStaNo()); + taskDto.setDestLoc(idleLoc.getLocNo()); + taskDto.setPriority(100); + taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19)); + + param.getTaskList().add(taskDto); + } + + mainService.generateBusAndTask(param, memo); + } + + // 鍑哄簱 + private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { + Integer startRow = Collections.min(locGroupList); + Integer endRow = Collections.max(locGroupList); + + List<String> staPreNos = getStaPrefixes(staGroupList); + String memo = "DEMO_STA_" + String.join("-", staPreNos); + + AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); + if (null == agvModel) { + return; + } + int maxCapacity = agvModel.getBackpack(); + + // STA IDLE + LambdaQueryWrapper<Sta> idleWrapper = new LambdaQueryWrapper<Sta>() + .eq(Sta::getStaSts, StaStsType.IDLE.val()) + .eq(Sta::getStatus, StatusType.ENABLE.val) + .in(Sta::getStaNo, staGroupList); + List<Sta> idleList = staService.list(idleWrapper); + if (Cools.isEmpty(idleList)) { + return; + } + Collections.shuffle(idleList); + + // LOC STOCK + LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.STOCK.val()); + if (null != startRow) { stockWrapper.ge(Loc::getRow, startRow); } + if (null != endRow) { stockWrapper.le(Loc::getRow, endRow); } + List<Loc> stockList = locService.list(stockWrapper); + if (Cools.isEmpty(stockList)) { + return; + } + Collections.shuffle(stockList); + + OpenBusSubmitParam param = new OpenBusSubmitParam(); + param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19)); + for (int i = 0; i < Math.min(maxCapacity, Math.min(idleList.size(), stockList.size())); i++) { + Loc stockLoc = stockList.get(i); + Sta idleSta = idleList.get(i); + + TaskDto taskDto = new TaskDto(); + taskDto.setOriLoc(stockLoc.getLocNo()); + taskDto.setDestSta(idleSta.getStaNo()); + taskDto.setPriority(100); + taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19)); + + param.getTaskList().add(taskDto); + } + + mainService.generateBusAndTask(param, memo); + } + + // 绉诲簱 private void runLocToLoc(List<Integer> locGroupList, List<String> agvGroupList) { Integer startRow = Collections.min(locGroupList); Integer endRow = Collections.max(locGroupList); - String memo = "DEMO_" + startRow + "-" + endRow; + String memo = "DEMO_LOC_" + startRow + "-" + endRow; int availableAgvCount = this.getAvailableAgvCount(agvGroupList); @@ -105,10 +219,6 @@ return; } Collections.shuffle(stockList); - if (stockList.size() > maxCapacity) { - stockList = stockList.subList(0, maxCapacity); - } - int numOfStockLocList = stockList.size(); // IDLE LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val()); @@ -119,13 +229,10 @@ return; } Collections.shuffle(idleList); - if (idleList.size() > numOfStockLocList) { - idleList = idleList.subList(0, numOfStockLocList); - } OpenBusSubmitParam param = new OpenBusSubmitParam(); param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19)); - for (int i = 0; i < numOfStockLocList; i++) { + for (int i = 0; i < Math.min(maxCapacity, Math.min(stockList.size(), idleList.size())); i++) { Loc stockLoc = stockList.get(i); Loc idleLoc = idleList.get(i); @@ -140,6 +247,15 @@ mainService.generateBusAndTask(param, memo); } + public static List<String> getStaPrefixes(List<String> staGroupList) { + Set<String> rowSet = new HashSet<>(); + for (String s : staGroupList) { + rowSet.add(s.split("-")[0]); + } + List<String> result = new ArrayList<>(rowSet); + result.sort(Comparator.comparingInt(Integer::parseInt)); + return result; + } private int getAvailableAgvCount(List<String> agvNos) { int res = 0; -- Gitblit v1.9.1