|  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SnowflakeIdWorker snowflakeIdWorker; | 
 |  |  |  | 
 |  |  |     private Integer num = 0; | 
 |  |  |  | 
 |  |  | //    @Scheduled(fixedRate = 500) // 固定频率执行,不同步 | 
 |  |  |     private Integer max = 2; | 
 |  |  |  | 
 |  |  |     //    @Scheduled(fixedRate = 500) // 固定频率执行,不同步 | 
 |  |  |     @Scheduled(fixedDelay = 1000) // 固定频率执行,同步 | 
 |  |  | //    @Scheduled(cron = "0/1 * * * * ? ") | 
 |  |  |     private void execute() { | 
 |  |  |         if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; } | 
 |  |  |  | 
 |  |  |         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); | 
 |  |  |         if (configService.getVal("TaskAssignMode", Boolean.class)) { | 
 |  |  |             String autoRunAreas = configService.getVal("autoRunAreas", String.class); | 
 |  |  |             if (Cools.isEmpty(autoRunAreas)) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             for (char c : autoRunAreas.toCharArray()) { | 
 |  |  |                 switch (c) { | 
 |  |  |                     case '1': | 
 |  |  |                         this.autoRun(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST, StaGroupConstant.FAR_RIGHT_STA_ROW_LIST, AgvGroupConstant.FIFTH_AGV_GROUP); | 
 |  |  |                         break; | 
 |  |  |                     case '2': | 
 |  |  |                         this.autoRun(LocGroupConstant.RIGHT_LOC_ROW_LIST, StaGroupConstant.RIGHT_STA_ROW_LIST, AgvGroupConstant.FOURTH_AGV_GROUP); | 
 |  |  |                         break; | 
 |  |  |                     case '3': | 
 |  |  |                         this.autoRun(LocGroupConstant.MIDDLE_LOC_ROW_LIST, StaGroupConstant.MIDDLE_STA_ROW_LIST, AgvGroupConstant.THIRD_AGV_GROUP); | 
 |  |  |                         break; | 
 |  |  |                     case '4': | 
 |  |  |                         this.autoRun(LocGroupConstant.LEFT_LOC_ROW_LIST, StaGroupConstant.LEFT_STA_ROW_LIST, AgvGroupConstant.SECOND_AGV_GROUP); | 
 |  |  |                         break; | 
 |  |  |                     case '5': | 
 |  |  |                         this.autoRun(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST, StaGroupConstant.FAR_LEFT_STA_ROW_LIST, AgvGroupConstant.FIRST_AGV_GROUP); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  |                         break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             if (configService.getVal("InAndOutMode", Boolean.class, false)) { | 
 |  |  |                 String autoRunAreas = configService.getVal("autoRunAreas", String.class); | 
 |  |  |                 if (Cools.isEmpty(autoRunAreas)) { | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |                 for (char c : autoRunAreas.toCharArray()) { | 
 |  |  |                     switch (c) { | 
 |  |  |                         case '1': | 
 |  |  |                             this.autoOut(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST, StaGroupConstant.FAR_RIGHT_STA_ROW_LIST, AgvGroupConstant.FIFTH_AGV_GROUP); | 
 |  |  |                             break; | 
 |  |  |                         case '2': | 
 |  |  |                             this.autoOut(LocGroupConstant.RIGHT_LOC_ROW_LIST, StaGroupConstant.RIGHT_STA_ROW_LIST, AgvGroupConstant.FOURTH_AGV_GROUP); | 
 |  |  |                             break; | 
 |  |  |                         case '3': | 
 |  |  |                             this.autoOut(LocGroupConstant.MIDDLE_LOC_ROW_LIST, StaGroupConstant.MIDDLE_STA_ROW_LIST, AgvGroupConstant.THIRD_AGV_GROUP); | 
 |  |  |                             break; | 
 |  |  |                         case '4': | 
 |  |  |                             this.autoOut(LocGroupConstant.LEFT_LOC_ROW_LIST, StaGroupConstant.LEFT_STA_ROW_LIST, AgvGroupConstant.SECOND_AGV_GROUP); | 
 |  |  |                             break; | 
 |  |  |                         case '5': | 
 |  |  |                             this.autoOut(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST, StaGroupConstant.FAR_LEFT_STA_ROW_LIST, AgvGroupConstant.FIRST_AGV_GROUP); | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                             break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void autoRun(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { | 
 |  |  |         int availableAgvCount = this.getAvailableAgvCount(agvGroupList); | 
 |  |  |         if (0 == availableAgvCount) { return; } | 
 |  |  |         if (0 == availableAgvCount) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<String> staPreNos = getStaPrefixes(staGroupList); | 
 |  |  |         String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos); | 
 |  |  |  | 
 |  |  |         // 入库 | 
 |  |  |         this.runStaToLoc(locGroupList, staGroupList, agvGroupList); | 
 |  |  |  | 
 |  |  |         this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); | 
 |  |  |         // 出库 | 
 |  |  |         this.runLocToSta(locGroupList, staGroupList, agvGroupList); | 
 |  |  |         this.runLocToSta(locGroupList, staGroupList, staTaskMemo); | 
 |  |  |  | 
 |  |  |         // 移库 | 
 |  |  |         this.runLocToLoc(locGroupList, agvGroupList); | 
 |  |  |         this.runLocToLoc(locGroupList, agvGroupList, staTaskMemo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void autoOut(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { | 
 |  |  |         int availableAgvCount = this.getAvailableAgvCount(agvGroupList); | 
 |  |  |         if (0 == availableAgvCount) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         List<String> staPreNos = getStaPrefixes(staGroupList); | 
 |  |  |         String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos); | 
 |  |  |         List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getDestSta, 33).in(Task::getTaskSts, TaskStsType.INIT.val(), TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val())); | 
 |  |  |         if (Cools.isEmpty(list) && num < max) { | 
 |  |  |             // 出库 | 
 |  |  |             this.runLocToSSXSta(locGroupList, staGroupList, staTaskMemo); | 
 |  |  |         } | 
 |  |  |         List<Task> list2 = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getOriSta, 34).in(Task::getTaskSts, TaskStsType.INIT.val(), TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val())); | 
 |  |  |         if (Cools.isEmpty(list2) && num > 0) { | 
 |  |  |             // 入库 | 
 |  |  |             this.runXXSStaToLoc(locGroupList, staGroupList, staTaskMemo); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 入库 | 
 |  |  |     private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { | 
 |  |  |     private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) { | 
 |  |  |         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).eq(Sta::getInEnable, "Y").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(11, 19)); | 
 |  |  |  | 
 |  |  |             param.getTaskList().add(taskDto); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         mainService.generateBusAndTask(param, memo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void runXXSStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) { | 
 |  |  |         Integer startRow = Collections.min(locGroupList); | 
 |  |  |         Integer endRow = Collections.max(locGroupList); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); | 
 |  |  |         if (null == agvModel) { | 
 |  |  | 
 |  |  |  | 
 |  |  |         // STOCK | 
 |  |  |         LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>() | 
 |  |  |                 .eq(Sta::getStaSts, StaStsType.STOCK.val()) | 
 |  |  |                 .eq(Sta::getStatus, StatusType.ENABLE.val) | 
 |  |  |                 .in(Sta::getStaNo, staGroupList); | 
 |  |  |                 //.eq(Sta::getStaSts, StaStsType.STOCK.val()) | 
 |  |  |                 .eq(Sta::getStatus, StatusType.ENABLE.val).eq(Sta::getInEnable, "Y").in(Sta::getStaNo, staGroupList); | 
 |  |  |         List<Sta> stockList = staService.list(stockWrapper); | 
 |  |  |         if (Cools.isEmpty(stockList)) { return; } | 
 |  |  |         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); } | 
 |  |  |         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; } | 
 |  |  |         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); | 
 |  |  |         for (int i = 0; i < max; i++) { | 
 |  |  |             Sta stockSta = stockList.get(0); | 
 |  |  |             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)); | 
 |  |  |             taskDto.setPriority(99); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(11, 19)); | 
 |  |  |  | 
 |  |  |             param.getTaskList().add(taskDto); | 
 |  |  |             num--; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         mainService.generateBusAndTask(param, memo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 出库 | 
 |  |  |     private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { | 
 |  |  |     private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, String memo) { | 
 |  |  |         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) { | 
 |  |  | 
 |  |  |         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); | 
 |  |  |         LambdaQueryWrapper<Sta> idleWrapper = new LambdaQueryWrapper<Sta>().eq(Sta::getStaSts, StaStsType.IDLE.val()).eq(Sta::getStatus, StatusType.ENABLE.val).eq(Sta::getOutEnable, "Y").in(Sta::getStaNo, staGroupList); | 
 |  |  |         List<Sta> idleList = staService.list(idleWrapper); | 
 |  |  |         if (Cools.isEmpty(idleList)) { | 
 |  |  |             return; | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 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); } | 
 |  |  |         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; | 
 |  |  | 
 |  |  |             taskDto.setOriLoc(stockLoc.getLocNo()); | 
 |  |  |             taskDto.setDestSta(idleSta.getStaNo()); | 
 |  |  |             taskDto.setPriority(100); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19)); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(11, 19)); | 
 |  |  |  | 
 |  |  |             param.getTaskList().add(taskDto); | 
 |  |  |         } | 
 |  |  | 
 |  |  |         mainService.generateBusAndTask(param, memo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void runLocToSSXSta(List<Integer> locGroupList, List<String> staGroupList, String memo) { | 
 |  |  |         Integer startRow = Collections.min(locGroupList); | 
 |  |  |         Integer endRow = Collections.max(locGroupList); | 
 |  |  |  | 
 |  |  |         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).eq(Sta::getOutEnable, "Y").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 < max; i++) { | 
 |  |  |             Loc stockLoc = stockList.get(i); | 
 |  |  |             Sta idleSta = idleList.get(0); | 
 |  |  |  | 
 |  |  |             TaskDto taskDto = new TaskDto(); | 
 |  |  |             taskDto.setOriLoc(stockLoc.getLocNo()); | 
 |  |  |             taskDto.setDestSta(idleSta.getStaNo()); | 
 |  |  |             taskDto.setPriority(100); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(11, 19)); | 
 |  |  |  | 
 |  |  |             param.getTaskList().add(taskDto); | 
 |  |  |             num++; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         mainService.generateBusAndTask(param, memo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 移库 | 
 |  |  |     private void runLocToLoc(List<Integer> locGroupList, List<String> agvGroupList) { | 
 |  |  |     private void runLocToLoc(List<Integer> locGroupList, List<String> agvGroupList, String staTaskMemo) { | 
 |  |  |         Integer startRow = Collections.min(locGroupList); | 
 |  |  |         Integer endRow = Collections.max(locGroupList); | 
 |  |  |  | 
 |  |  | 
 |  |  |         int availableAgvCount = this.getAvailableAgvCount(agvGroupList); | 
 |  |  |  | 
 |  |  |         // 最多 ? 组bus运行 | 
 |  |  |         if (availableAgvCount <= busService.count(new LambdaQueryWrapper<Bus>() | 
 |  |  |                 .in(Bus::getBusSts, BusStsType.RECEIVE.val(), BusStsType.PROGRESS.val()) | 
 |  |  |                 .eq(Bus::getMemo, memo) | 
 |  |  |         )) { | 
 |  |  |         if (availableAgvCount <= busService.count(new LambdaQueryWrapper<Bus>().in(Bus::getBusSts, BusStsType.RECEIVE.val(), BusStsType.PROGRESS.val()).in(Bus::getMemo, memo, staTaskMemo))) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 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); } | 
 |  |  |         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) || stockList.size() < agvModel.getBackpack()) { | 
 |  |  |             return; | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 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); } | 
 |  |  |         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; | 
 |  |  | 
 |  |  |             TaskDto taskDto = new TaskDto(); | 
 |  |  |             taskDto.setOriLoc(stockLoc.getLocNo()); | 
 |  |  |             taskDto.setDestLoc(idleLoc.getLocNo()); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19)); | 
 |  |  |             taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(11, 19)); | 
 |  |  |  | 
 |  |  |             param.getTaskList().add(taskDto); | 
 |  |  |         } |