| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasDevp; |
| | | import com.zy.asrs.entity.Task; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.TaskService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.service.impl.BasDevpServiceImpl; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.task.handler.AGVTaskReportHandler; |
| | | import org.slf4j.Logger; |
| | |
| | | private Boolean switchErpReportOld; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private BasDevpServiceImpl basDevpService; |
| | | |
| | | /** |
| | | * 满板和空板出库任务,出到输送线后创建AGV搬运任务 |
| | |
| | | if (!switchErpReportOld){ |
| | | return; |
| | | } |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 300)); |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 30)); |
| | | if (wrkMasts.isEmpty()){ |
| | | return; |
| | | } |
| | | for (WrkMast wrkMast : wrkMasts){ |
| | | //查询是否有源站和目标站有一样的agv搬运任务 |
| | | //如果有则跳过本次agv搬运任务下发 |
| | | |
| | | //mes给的agv目标站点需要解析 Q:区域 ; Z: 站点 |
| | | String[] split = wrkMast.getMemo().split("-"); |
| | | //入出库状态: 3.站到站 4.站到区域 |
| | | Integer ioType = split[0].equals("Q") ? 4 : 3; |
| | | //agv目标站点 |
| | | String stnNo = split[1]; |
| | | Task task1 = taskService.selectOne(new EntityWrapper<Task>() |
| | | .in("source_sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo()) |
| | | .in("sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo())); |
| | |
| | | .setTaskNo(TaskNo) |
| | | .setIoTime(date) |
| | | .setWrkSts(301L) // 工作状态:301.任务下发 |
| | | .setIoType(3) // 入出库状态: 3.站到站 |
| | | .setIoType(ioType) // 入出库状态: 3.站到站 4.站到区域 |
| | | .setTaskType("agv") |
| | | .setIoPri(10D) |
| | | .setFullPlt("Y") // 满板:Y |
| | | .setPicking("N") // 拣料 |
| | | .setExitMk("N")// 退出 |
| | | .setStaNo(wrkMast.getMemo()) |
| | | .setStaNo(stnNo) |
| | | .setSourceStaNo(wrkMast.getSourceStaNo())//空料架缓存区E1 |
| | | .setEmptyMk("N")// 空板 |
| | | .setBarcode(wrkMast.getBarcode())// 托盘码 |
| | |
| | | .andNew() |
| | | .in("source_sta_no", task.getSourceStaNo(), task.getStaNo()) |
| | | .in("sta_no", task.getStaNo(), task.getSourceStaNo())); |
| | | Boolean flag = true; |
| | | if (Cools.isEmpty(task1)) { |
| | | //agv搬运移动任务下发时,搬运目标点是否是立库AGV和堆垛机接驳站点 |
| | | //如果是接驳站点则需要判断接驳站点是否有空料架 |
| | | //如果有空料架需要判断是否有出库任务 |
| | | //有出库任务则禁止下发本次搬运任务 |
| | | if (task.getStaNo().equals("401") || task.getStaNo().equals("402") || task.getStaNo().equals("307")) { |
| | | BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo())); |
| | | if (basDevp != null && !Cools.isEmpty(basDevp.getInreq1()) && basDevp.getInreq1().equals("Y")) { |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .in("io_type", 101, 110) |
| | | .eq("sta_no", task1.getStaNo())); |
| | | flag = false; |
| | | if (Cools.isEmpty(wrkMasts)) { |
| | | //判断是否已经生成空料架搬运回空料架补库区 |
| | | //如果有的话,不在生成任务 |
| | | Task task2 = taskService.selectOne(new EntityWrapper<Task>().eq("sta_no", task1.getStaNo()).eq("source_sta_no", task1.getSourceStaNo())); |
| | | //有入库任务搬运,需要生成空料架搬运到空料架缓冲区AGV任务 |
| | | if (Cools.isEmpty(task2)) { |
| | | //生成AGV搬运出库任务 |
| | | // 保存工作档 |
| | | String SourceStaNo = ""; |
| | | if (task.getStaNo().equals("401")) { |
| | | //大料架缓冲区 |
| | | SourceStaNo = "E3"; |
| | | }else if (task.getStaNo().equals("402")) { |
| | | SourceStaNo = "E2"; |
| | | }else if (task.getStaNo().equals("307")) { |
| | | SourceStaNo = "E1"; |
| | | } |
| | | Task task3 = new Task(); |
| | | Date date = new Date(); |
| | | String TaskNo = task.getTaskNo() + "-" + date.getTime(); |
| | | task3.setWrkNo(999999) |
| | | .setTaskNo(TaskNo) |
| | | .setIoTime(date) |
| | | .setWrkSts(301L) // 工作状态:301.任务下发 |
| | | .setIoType(4) // 入出库状态: 3.站到站 4.站到区域 |
| | | .setTaskType("agv") |
| | | .setIoPri(10D) |
| | | .setFullPlt("Y") // 满板:Y |
| | | .setPicking("N") // 拣料 |
| | | .setExitMk("N")// 退出 |
| | | .setStaNo(task.getStaNo()) |
| | | .setSourceStaNo(SourceStaNo)//空料架缓存区E1 |
| | | .setEmptyMk("N")// 空板 |
| | | .setBarcode("")// 托盘码 |
| | | .setLinkMis("N") |
| | | .setAppeUser(9945L) |
| | | .setAppeTime(date) |
| | | .setModiUser(9945L) |
| | | .setModiTime(date); |
| | | if (!taskService.insert(task)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (flag) { |
| | | //AGV任务下发 |
| | | ReturnT<String> start = AGVTaskReportHandler.start(task); |
| | | if (!start.isSuccess()){ |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |