| | |
| | | package com.zy.asrs.task; |
| | | |
| | | import com.alibaba.excel.util.StringUtils; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | 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.entity.*; |
| | | import com.zy.asrs.entity.mes.MesReturn; |
| | | import com.zy.asrs.mapper.CanFinMapper; |
| | | import com.zy.asrs.service.OrderPakoutService; |
| | | import com.zy.asrs.service.TaskService; |
| | | import com.zy.asrs.service.WrkDetlService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.service.impl.BasDevpServiceImpl; |
| | | import com.zy.asrs.service.impl.RcsServiceImpl; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.task.handler.AGVTaskReportHandler; |
| | | import org.slf4j.Logger; |
| | |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | | private BasDevpServiceImpl basDevpService; |
| | | @Autowired |
| | | private OrderPakoutService orderPakoutService; |
| | | @Autowired |
| | | private CanFinMapper canFinMapper; |
| | | @Value("${mes.url}") |
| | | private String MES_URL; |
| | | |
| | | /** |
| | | * 满板和空板出库任务,出到输送线后创建AGV搬运任务 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | private void createAGVTask() { |
| | | try { |
| | | Thread.sleep(50); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | if (!switchErpReportOld) { |
| | | return; |
| | | } |
| | |
| | | Task task1 = taskService.selectOne(new EntityWrapper<Task>() |
| | | .in("source_sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo()) |
| | | .in("sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo())); |
| | | if (Cools.isEmpty(task1)) { |
| | | |
| | | if (Cools.isEmpty(task1)) { |
| | | //生成AGV搬运出库任务 |
| | | // 保存工作档 |
| | | Task task = new Task(); |
| | | Date date = new Date(); |
| | | String TaskNo = wrkMast.getWrkNo() + "aa" + date.getTime(); |
| | | String TaskNo = wrkMast.getUserNo(); |
| | | String taskType = "AGV"; |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); |
| | | |
| | | if (wrkMast.getIoType()==110){ |
| | | if (TaskNo == null){ |
| | | TaskNo = 55555 + "aa" + date.getTime(); |
| | | } |
| | | taskType = "ZX-AGV-08-1"; |
| | | }else{ |
| | | if (wrkDetls != null && !Cools.isEmpty(wrkDetls.get(0).getOrderNo())){ |
| | | OrderPakout orderPakout = orderPakoutService.selectByNo(wrkDetls.get(0).getOrderNo()); |
| | | TaskNo = wrkDetls.get(0).getOrderNo(); |
| | | if (orderPakout.getDocType()==11){ |
| | | taskType = "PP-AGV"; |
| | | }else if (orderPakout.getDocType()==12){ |
| | | taskType = "ZP-AGV"; |
| | | } |
| | | } |
| | | } |
| | | |
| | | task.setWrkNo(wrkMast.getWrkNo()) |
| | | .setTaskNo(TaskNo) |
| | | .setIoTime(date) |
| | | .setWrkSts(301L) // 工作状态:301.任务下发 |
| | | .setIoType(ioType) // 入出库状态: 3.站到站 4.站到区域 |
| | | .setTaskType("agv") |
| | | .setTaskType(taskType) |
| | | .setIoPri(10D) |
| | | .setFullPlt("Y") // 满板:Y |
| | | .setPicking("N") // 拣料 |
| | |
| | | if (!taskService.insert(task)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } else { |
| | | if (!wrkMast.getBarcode().isEmpty() && !wrkMast.getMemo().isEmpty()) { |
| | | JSONObject map = new JSONObject(); |
| | | map.put("orderNo", TaskNo); |
| | | map.put("barCode", wrkMast.getBarcode()); |
| | | map.put("staNo", wrkMast.getStaNo()); |
| | | log.info("本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo()); |
| | | String url = "ReceiveFinishedPalletCode"; |
| | | String URL = MES_URL + url; |
| | | String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(map)); |
| | | if (!StringUtils.isEmpty(response) && response.contains("Success")){ |
| | | MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); |
| | | if("1".equals(mesReturn.getSuccess())) { |
| | | log.info("上报完成 ==> 本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo()); |
| | | }else { |
| | | log.error("上报失败 ==> 本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo()); |
| | | } |
| | | } |
| | | } |
| | | wrkMast.setWrkSts(31L);//31.AGV搬运任务创建成功 |
| | | wrkMast.setModiTime(date); |
| | | wrkMastService.updateById(wrkMast); |
| | |
| | | /** |
| | | * AGV 任务下发接口,定时给AGV下发任务 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | private void execute() { |
| | | try { |
| | | Thread.sleep(50); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | if (!switchErpReportOld) { |
| | | return; |
| | | } |
| | |
| | | List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301).orderBy("appe_time")); |
| | | if (wrkSts != null && !wrkSts.isEmpty()) { |
| | | for (Task task : wrkSts) { |
| | | |
| | | if (task.getStaNo().equals("307") && !task.getTaskType().equals("AGV补空料架")){ |
| | | //筛选全部还未完成的出库任务 |
| | | List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>() |
| | | .in("settle", 1, 2) // 1表示还未开始,2表示正在执行 |
| | | .eq("doc_type", 12) |
| | | .orderBy("order_time", true)); |
| | | if (!orderPakouts.isEmpty()) { |
| | | //获取第一条入库单 |
| | | OrderPakout orderPakout = orderPakouts.get(0); |
| | | // 如果第一条还未开始的出库任务时间早于第一条未完成的入库任务时间,跳过,不执行 |
| | | if (orderPakout.getCreateTime().getTime() < task.getWrkDate().getTime()){ |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>() |
| | | // .orderBy("apply_time", true) |
| | | // ); |
| | | // if (!canFinList.isEmpty()) { |
| | | // CanFin firstCanFin = canFinList.get(0); |
| | | // // 检查 InNo 是否为空 |
| | | // if (firstCanFin.getInNo() != null) { |
| | | // // 检查当前任务是否与转序任务相关 |
| | | // if (task.getStaNo().equals("307")){ |
| | | // List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | // .in("io_type", 1, 10)); |
| | | // BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo())); |
| | | // if (basDevp.getWrkNo() != 0 || !wrkMasts1.isEmpty()){ |
| | | // continue; |
| | | // } |
| | | // } |
| | | // } |
| | | // if (firstCanFin.getOutNo() != null){ |
| | | // if (!task.getSourceStaNo().equals("307")){ |
| | | // if (!task.getTaskType().equals("AGV补空料架")){ |
| | | // continue; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | //查询是否有正在作业的源站和目标站有一样的agv搬运任务 |
| | | //如果有则跳过本次agv搬运任务下发 |
| | | Task task1 = taskService.selectOne(new EntityWrapper<Task>() |