| | |
| | | add("10-1"); |
| | | add("10-2"); |
| | | add("10-3"); |
| | | add("1001"); |
| | | add("1007"); |
| | | }}; |
| | | |
| | | public static final ArrayList<String> LEFT_STA_ROW_LIST = new ArrayList<String>(){{ |
| | |
| | | @Scheduled(fixedDelay = 1000) // 固定频率执行,同步 |
| | | // @Scheduled(cron = "0/1 * * * * ? ") |
| | | private void execute() { |
| | | if (!configService.getVal("TaskAssignMode", Boolean.class)) { return; } |
| | | |
| | | if (configService.getVal("TaskAssignMode", Boolean.class)) { |
| | | String autoRunAreas = configService.getVal("autoRunAreas", String.class); |
| | | if (Cools.isEmpty(autoRunAreas)) { return; } |
| | | for (char c : autoRunAreas.toCharArray()) { |
| | |
| | | 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) { |
| | |
| | | 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); |
| | | |
| | | // 出库 |
| | | this.runLocToSta(locGroupList, staGroupList, staTaskMemo); |
| | | // 入库 |
| | | if (staGroupList.contains("1007")){ |
| | | this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 入库 |
| | | private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) { |
| | | Integer startRow = Collections.min(locGroupList); |
| | |
| | | |
| | | |
| | | 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") |
| | | .in(Sta::getStaNo, staGroupList); |
| | | List<Sta> stockList = staService.list(stockWrapper); |
| | | if (Cools.isEmpty(stockList)) { return; } |
| | |
| | | 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)) { |
| | |
| | | if (!busService.save(bus)) { |
| | | throw new BusinessException("Internal Server Error!"); |
| | | } |
| | | Boolean locStaStatusCheck = configService.getVal("LOC_STA_STATUS_CHECK", Boolean.class, false); |
| | | Boolean locStaStatusCheck = configService.getVal("LOC_STA_STATUS_CHECK", Boolean.class, true); |
| | | |
| | | |
| | | // 保存任务 |
| | |
| | | if (!taskService.updateById(task)) { |
| | | throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update"); |
| | | } |
| | | report(task, TaskReportStsType.START); |
| | | report(task,null, TaskReportStsType.START); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("mainService.infuseAgvForTask", e); |
| | |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | | for (Long taskId : taskIds) { |
| | | Task task = taskService.getById(taskId); |
| | | report(task, TaskReportStsType.END); |
| | | report(task, agv_11_up.getQrCode(), TaskReportStsType.END); |
| | | } |
| | | } |
| | | |
| | |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | | for (Long taskId : taskIds) { |
| | | Task task = taskService.getById(taskId); |
| | | report(task, TaskReportStsType.OTBIN); |
| | | report(task, agv_11_up.getQrCode(), TaskReportStsType.OTBIN); |
| | | } |
| | | |
| | | } |
| | |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | | for (Long taskId : taskIds) { |
| | | Task task = taskService.getById(taskId); |
| | | report(task, TaskReportStsType.OTBIN); |
| | | report(task, agv_11_up.getQrCode(), TaskReportStsType.OTBIN); |
| | | } |
| | | } |
| | | //往输送线放货完成 |
| | |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | | for (Long taskId : taskIds) { |
| | | Task task = taskService.getById(taskId); |
| | | report(task, TaskReportStsType.END); |
| | | report(task, agv_11_up.getQrCode(), TaskReportStsType.END); |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * 上报给上游系统,就是插入一条数据到上报表 |
| | | */ |
| | | private void report(Task task, TaskReportStsType taskReportStsType) { |
| | | private void report(Task task, String qrCode, TaskReportStsType taskReportStsType) { |
| | | // TODO 插入一条上报记录 |
| | | if (task.getBusId() == null) { |
| | | return; |
| | |
| | | taskReport.setAgvId(task.getAgvId()); |
| | | taskReport.setBusNo(task.getBusId$()); |
| | | taskReport.setCreateTime(new Date()); |
| | | taskReport.setQrCode(qrCode); |
| | | taskReport.setReportTimes(0); |
| | | taskReport.setTaskSts(taskReportStsType.status); |
| | | taskReport.setSeqNum(task.getSeqNum()); |
| | |
| | | String wmsUrl = configService.getVal("WMS_URL", String.class); |
| | | String wmsPath = configService.getVal("WMS_PATH", String.class); |
| | | Integer times = configService.getVal("REPORT_TIMES", Integer.class, 3); |
| | | String codes = configService.getVal("CODES", String.class, "1457;1612"); |
| | | List<TaskReport> list = taskReportService.list(); |
| | | for (TaskReport taskReport : list) { |
| | | if ((Cools.isEmpty(taskReport.getReportTimes()) ? 0 : taskReport.getReportTimes()) > times) { |
| | |
| | | import com.zy.acs.manager.core.service.MainService; |
| | | import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam; |
| | | import com.zy.acs.manager.manager.entity.Loc; |
| | | import com.zy.acs.manager.manager.enums.LocStsType; |
| | | import com.zy.acs.manager.manager.entity.Sta; |
| | | import com.zy.acs.manager.manager.enums.StaStsType; |
| | | import com.zy.acs.manager.manager.service.LocService; |
| | | import com.zy.acs.manager.manager.service.StaService; |
| | | import com.zy.acs.manager.system.controller.BaseController; |
| | | import com.zy.acs.manager.system.service.ConfigService; |
| | | import io.swagger.annotations.Api; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | |
| | | @Autowired |
| | | private LocService locService; |
| | | |
| | | @Autowired |
| | | private StaService staService; |
| | | |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | //@PreAuthorize("hasAuthority('open:bus:submit')") |
| | | @PostMapping("/bus/submit") |
| | | @OperationLog("generate task from open api") |
| | | public R save(@RequestBody OpenBusSubmitParam param) { |
| | | if (!configService.getVal("TaskAssignMode", Boolean.class)) { |
| | | if (configService.getVal("InAndOutMode", Boolean.class, false)) { |
| | | mainService.generateBusAndTask(param, null); |
| | | return R.ok("generate tasks success"); |
| | | } |
| | | } |
| | | return R.error("generate tasks error"); |
| | | } |
| | | |
| | | @PostMapping("/sta/update") |
| | | @OperationLog("sync sta") |
| | | public R updateLoc(@RequestBody Map<String, Object> map) { |
| | | if (!configService.getVal("TaskAssignMode", Boolean.class)) { |
| | | if (configService.getVal("InAndOutMode", Boolean.class, false)) { |
| | | String staNo = map.get("staNo").toString(); |
| | | Sta loc = staService.selectByStaNo(staNo); |
| | | if (staNo.equals("1001")) { |
| | | if (loc.getStaSts() == StaStsType.STOCK.val()) { |
| | | loc.setStaSts(Long.parseLong(map.get("sts").toString())); |
| | | return staService.updateById(loc) ? R.ok() : R.error("update loc fail"); |
| | | } |
| | | } else if (staNo.equals("1007")) { |
| | | if (loc.getStaSts() == StaStsType.IDLE.val()) { |
| | | loc.setStaSts(Long.parseLong(map.get("sts").toString())); |
| | | return staService.updateById(loc) ? R.ok() : R.error("update loc fail"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return R.error("update loc fail"); |
| | | } |
| | | |
| | | //@PreAuthorize("hasAuthority('open:bus:submit')") |
| | |
| | | @PostMapping("/loc/one") |
| | | @OperationLog("one loc") |
| | | public R emptyLoc(@RequestBody Map<String, Object> map) { |
| | | if (!configService.getVal("TaskAssignMode", Boolean.class)) { |
| | | if (configService.getVal("InAndOutMode", Boolean.class, false)) { |
| | | String staNo = map.get("staNo").toString(); |
| | | Integer startRow = null; |
| | | Integer endRow = null; |
| | |
| | | }else if (staNo.equals("107-2")||staNo.equals("107-3")||staNo.equals("108-2")||staNo.equals("108-3")) { |
| | | startRow = Collections.min(LocGroupConstant.LEFT_LOC_ROW_LIST); |
| | | endRow = Collections.max(LocGroupConstant.LEFT_LOC_ROW_LIST); |
| | | }else if (staNo.equals("1007")){ |
| | | } else if (staNo.equals("1007") || staNo.equals("1001")) { |
| | | startRow = Collections.min(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST); |
| | | endRow = Collections.max(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST); |
| | | }else { |
| | | return R.error("staNo is not support"); |
| | | } |
| | | LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val()); |
| | | LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, Long.parseLong(map.get("sts").toString())); |
| | | if (null != startRow) { |
| | | idleWrapper.ge(Loc::getRow, startRow); |
| | | } |
| | |
| | | Collections.shuffle(idleList); |
| | | return R.ok().add(idleList.get(0)); |
| | | } |
| | | } |
| | | return R.error("未开启该模式"); |
| | | } |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "所在上报点位") |
| | | private String qrCode; |
| | | |
| | | /** |
| | | * 库位或站点 |
| | | */ |
| | | @ApiModelProperty(value = "库位或站点") |
| | | private String locNo; |
| | | |
| | | |
| | | /** |
| | | * 上报次数 |
| | |
| | | * 任务进度 |
| | | */ |
| | | @ApiModelProperty(value = "任务进度") |
| | | private Long taskSts; |
| | | private Integer taskSts; |
| | | |
| | | |
| | | /** |
| | |
| | | private Long agvId; |
| | | |
| | | |
| | | /** |
| | | * 所在上报点位 |
| | | */ |
| | | @ApiModelProperty(value = "所在上报点位") |
| | | private String qrCode; |
| | | |
| | | /** |
| | | * 库位或站点 |
| | | */ |
| | | @ApiModelProperty(value = "库位或站点") |
| | | private String locNo; |
| | | |
| | | |
| | | /** |
| | | * 起始站 |
| | | * 上报次数 |
| | | */ |
| | | @ApiModelProperty(value = "起始站") |
| | | private Long oriSta; |
| | | |
| | | /** |
| | | * 起始库位 |
| | | */ |
| | | @ApiModelProperty(value = "起始库位") |
| | | private Long oriLoc; |
| | | |
| | | |
| | | /** |
| | | * 目标站 |
| | | */ |
| | | @ApiModelProperty(value = "目标站") |
| | | private Long destSta; |
| | | |
| | | /** |
| | | * 目标库位 |
| | | */ |
| | | @ApiModelProperty(value = "目标库位") |
| | | private Long destLoc; |
| | | |
| | | @ApiModelProperty(value = "上报次数") |
| | | private Integer reportTimes; |
| | | |
| | | /** |
| | | * 托盘码 |