| | |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | |
| | | // @Scheduled(fixedRate = 500) // 固定频率执行,不同步 |
| | | private Integer num = 0; |
| | | |
| | | private Integer max = 2; |
| | | |
| | | // @Scheduled(fixedRate = 500) // 固定频率执行,不同步 |
| | | @Scheduled(fixedDelay = 1000) // 固定频率执行,同步 |
| | | // @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute() { |
| | | if (configService.getVal("TaskAssignMode", Boolean.class)) { |
| | | String autoRunAreas = configService.getVal("autoRunAreas", String.class); |
| | | if (Cools.isEmpty(autoRunAreas)) { return; } |
| | | if (Cools.isEmpty(autoRunAreas)) { |
| | | return; |
| | | } |
| | | for (char c : autoRunAreas.toCharArray()) { |
| | | switch (c) { |
| | | case '1': |
| | |
| | | break; |
| | | } |
| | | } |
| | | }else { |
| | | if (configService.getVal("InAndOutMode", Boolean.class,false)) { |
| | | } else { |
| | | if (configService.getVal("InAndOutMode", Boolean.class, false)) { |
| | | String autoRunAreas = configService.getVal("autoRunAreas", String.class); |
| | | if (Cools.isEmpty(autoRunAreas)) { return; } |
| | | if (Cools.isEmpty(autoRunAreas)) { |
| | | return; |
| | | } |
| | | for (char c : autoRunAreas.toCharArray()) { |
| | | switch (c) { |
| | | case '1': |
| | |
| | | |
| | | 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); |
| | |
| | | |
| | | private void autoOut(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.runLocToSta(locGroupList, staGroupList, staTaskMemo); |
| | | // 入库 |
| | | if (staGroupList.contains("1007")){ |
| | | this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | // 入库 |
| | |
| | | |
| | | |
| | | AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); |
| | | // if (null == agvModel) { |
| | | // return; |
| | | // } |
| | | 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") |
| | | .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++) { |
| | | 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.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 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) { |
| | | 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 < 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(99); |
| | | taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19)); |
| | | |
| | | param.getTaskList().add(taskDto); |
| | | num--; |
| | | } |
| | | |
| | | mainService.generateBusAndTask(param, memo); |
| | |
| | | LambdaQueryWrapper<Sta> idleWrapper = new LambdaQueryWrapper<Sta>() |
| | | .eq(Sta::getStaSts, StaStsType.IDLE.val()) |
| | | .eq(Sta::getStatus, StatusType.ENABLE.val) |
| | | .eq(Sta::getOutEnable,"Y") |
| | | .eq(Sta::getOutEnable, "Y") |
| | | .in(Sta::getStaNo, staGroupList); |
| | | List<Sta> idleList = staService.list(idleWrapper); |
| | | if (Cools.isEmpty(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); } |
| | | 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.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 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(15, 19)); |
| | | |
| | | param.getTaskList().add(taskDto); |
| | | num++; |
| | | } |
| | | |
| | | mainService.generateBusAndTask(param, memo); |
| | |
| | | |
| | | // 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; |