zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/StaGroupConstant.java
@@ -11,6 +11,8 @@ 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>(){{ zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
@@ -61,29 +61,55 @@ @Scheduled(fixedDelay = 1000) // 固定频率执行,同步 // @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; 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; } } } } } @@ -104,6 +130,22 @@ 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); @@ -111,14 +153,15 @@ 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; } @@ -165,6 +208,7 @@ 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)) { zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -132,7 +132,7 @@ 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); // 保存任务 @@ -279,7 +279,7 @@ 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); @@ -1468,7 +1468,7 @@ 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); } } @@ -1506,7 +1506,7 @@ 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); } } @@ -1516,7 +1516,7 @@ 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); } } //往输送线放货完成 @@ -1525,7 +1525,7 @@ 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); } } @@ -1641,7 +1641,7 @@ /** * 上报给上游系统,就是插入一条数据到上报表 */ private void report(Task task, TaskReportStsType taskReportStsType) { private void report(Task task, String qrCode, TaskReportStsType taskReportStsType) { // TODO 插入一条上报记录 if (task.getBusId() == null) { return; @@ -1655,6 +1655,7 @@ 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()); zy-acs-manager/src/main/java/com/zy/acs/manager/core/third/ReportThirdScheduler.java
@@ -42,6 +42,7 @@ 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) { zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/OpenController.java
@@ -10,9 +10,12 @@ 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; @@ -38,12 +41,46 @@ @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) { mainService.generateBusAndTask(param, null); return R.ok("generate tasks success"); 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')") @@ -58,40 +95,45 @@ @PostMapping("/loc/one") @OperationLog("one loc") public R emptyLoc(@RequestBody Map<String, Object> map) { String staNo = map.get("staNo").toString(); Integer startRow = null; Integer endRow = null; if (staNo.equals("101-2")||staNo.equals("101-3")||staNo.equals("102-2")||staNo.equals("102-3")){ startRow = Collections.min(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST); } else if (staNo.equals("103-2")||staNo.equals("103-3")||staNo.equals("104-2")||staNo.equals("104-3")) { startRow = Collections.min(LocGroupConstant.RIGHT_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.RIGHT_LOC_ROW_LIST); }else if (staNo.equals("105-2")||staNo.equals("105-3")||staNo.equals("106-2")||staNo.equals("106-3")) { startRow = Collections.min(LocGroupConstant.MIDDLE_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.MIDDLE_LOC_ROW_LIST); }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")){ 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"); 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; if (staNo.equals("101-2") || staNo.equals("101-3") || staNo.equals("102-2") || staNo.equals("102-3")) { startRow = Collections.min(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST); } else if (staNo.equals("103-2") || staNo.equals("103-3") || staNo.equals("104-2") || staNo.equals("104-3")) { startRow = Collections.min(LocGroupConstant.RIGHT_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.RIGHT_LOC_ROW_LIST); } else if (staNo.equals("105-2") || staNo.equals("105-3") || staNo.equals("106-2") || staNo.equals("106-3")) { startRow = Collections.min(LocGroupConstant.MIDDLE_LOC_ROW_LIST); endRow = Collections.max(LocGroupConstant.MIDDLE_LOC_ROW_LIST); } 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") || 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, Long.parseLong(map.get("sts").toString())); 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 R.error("没空库位"); } Collections.shuffle(idleList); return R.ok().add(idleList.get(0)); } } 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 R.error("没空库位"); } Collections.shuffle(idleList); return R.ok().add(idleList.get(0)); return R.error("未开启该模式"); } } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReport.java
@@ -56,6 +56,12 @@ @ApiModelProperty(value = "所在上报点位") private String qrCode; /** * 库位或站点 */ @ApiModelProperty(value = "库位或站点") private String locNo; /** * 上报次数 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReportLog.java
@@ -40,7 +40,7 @@ * 任务进度 */ @ApiModelProperty(value = "任务进度") private Long taskSts; private Integer taskSts; /** @@ -50,33 +50,24 @@ 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; /** * 托盘码