| | |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.framework.common.SnowflakeIdWorker; |
| | | 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; |
| | |
| | | // @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute() { |
| | | if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | this.autoRun(); |
| | | } |
| | | |
| | | private void autoRun(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) { |
| | | int availableAgvCount = this.getAvailableAgvCount(agvGroupList); |
| | | private void autoRun() { |
| | | int availableAgvCount = this.getAvailableAgvCount(); |
| | | if (0 == availableAgvCount) { return; } |
| | | |
| | | List<String> staPreNos = getStaPrefixes(staGroupList); |
| | | String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos); |
| | | // List<String> staPreNos = getStaPrefixes(staGroupList); |
| | | List<String> staPreNos = new ArrayList<>(); |
| | | String memo = "DEMO_STA_" + String.join("-", staPreNos); |
| | | |
| | | // 入库 |
| | | this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); |
| | | this.runStaToLoc(memo); |
| | | // 出库 |
| | | this.runLocToSta(locGroupList, staGroupList, staTaskMemo); |
| | | this.runLocToSta(memo); |
| | | |
| | | // 移库 |
| | | this.runLocToLoc(locGroupList, agvGroupList, staTaskMemo); |
| | | this.runLocToLoc(memo); |
| | | } |
| | | |
| | | // 入库 |
| | | private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) { |
| | | Integer startRow = Collections.min(locGroupList); |
| | | Integer endRow = Collections.max(locGroupList); |
| | | |
| | | private void runStaToLoc(String memo) { |
| | | // Integer startRow = Collections.min(locGroupList); |
| | | // Integer endRow = Collections.max(locGroupList); |
| | | Integer startRow = null; |
| | | Integer endRow = null; |
| | | |
| | | AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); |
| | | if (null == agvModel) { |
| | |
| | | LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>() |
| | | .eq(Sta::getStaSts, StaStsType.STOCK.val()) |
| | | .eq(Sta::getStatus, StatusType.ENABLE.val) |
| | | .in(Sta::getStaNo, staGroupList); |
| | | // .in(Sta::getStaNo, staGroupList) |
| | | ; |
| | | List<Sta> stockList = staService.list(stockWrapper); |
| | | if (Cools.isEmpty(stockList)) { return; } |
| | | Collections.shuffle(stockList); |
| | |
| | | } |
| | | |
| | | // 出库 |
| | | private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, String memo) { |
| | | Integer startRow = Collections.min(locGroupList); |
| | | Integer endRow = Collections.max(locGroupList); |
| | | private void runLocToSta(String memo) { |
| | | // Integer startRow = Collections.min(locGroupList); |
| | | // Integer endRow = Collections.max(locGroupList); |
| | | Integer startRow = null; |
| | | Integer endRow = null; |
| | | |
| | | AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString())); |
| | | if (null == agvModel) { |
| | |
| | | LambdaQueryWrapper<Sta> idleWrapper = new LambdaQueryWrapper<Sta>() |
| | | .eq(Sta::getStaSts, StaStsType.IDLE.val()) |
| | | .eq(Sta::getStatus, StatusType.ENABLE.val) |
| | | .in(Sta::getStaNo, staGroupList); |
| | | // .in(Sta::getStaNo, staGroupList) |
| | | ; |
| | | List<Sta> idleList = staService.list(idleWrapper); |
| | | if (Cools.isEmpty(idleList)) { |
| | | return; |
| | |
| | | } |
| | | |
| | | // 移库 |
| | | private void runLocToLoc(List<Integer> locGroupList, List<String> agvGroupList, String staTaskMemo) { |
| | | Integer startRow = Collections.min(locGroupList); |
| | | Integer endRow = Collections.max(locGroupList); |
| | | private void runLocToLoc(String staTaskMemo) { |
| | | // Integer startRow = Collections.min(locGroupList); |
| | | // Integer endRow = Collections.max(locGroupList); |
| | | Integer startRow = null; |
| | | Integer endRow = null; |
| | | |
| | | String memo = "DEMO_LOC_" + startRow + "-" + endRow; |
| | | // String memo = "DEMO_LOC_" + startRow + "-" + endRow; |
| | | String memo = "DEMO_LOC"; |
| | | |
| | | int availableAgvCount = this.getAvailableAgvCount(agvGroupList); |
| | | int availableAgvCount = this.getAvailableAgvCount(); |
| | | |
| | | // 最多 ? 组bus运行 |
| | | if (availableAgvCount <= busService.count(new LambdaQueryWrapper<Bus>() |
| | |
| | | return result; |
| | | } |
| | | |
| | | private int getAvailableAgvCount(List<String> agvNos) { |
| | | private int getAvailableAgvCount() { |
| | | int res = 0; |
| | | if (Cools.isEmpty(agvNos)) { |
| | | List<Agv> agvList = agvService.list(new LambdaQueryWrapper<Agv>().eq(Agv::getStatus, StatusType.ENABLE.val)); |
| | | if (Cools.isEmpty(agvList)) { |
| | | return res; |
| | | } |
| | | for (String agvNo : agvNos) { |
| | | if (null == redis.getObject(RedisConstant.AGV_ONLINE_FLAG, agvNo)) { |
| | | for (Agv agv : agvList) { |
| | | if (null == redis.getObject(RedisConstant.AGV_ONLINE_FLAG, agv.getUuid())) { |
| | | continue; |
| | | } |
| | | Agv agv = agvService.selectByUuid(agvNo); |
| | | if (!agv.getStatusBool()) { |
| | | continue; |
| | | } |