package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; 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.task.core.ReturnT; import com.zy.asrs.task.handler.AGVTaskReportHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; @Component public class AGVTaskReportScheduler { private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class); @Autowired private TaskService taskService; @Autowired private AGVTaskReportHandler AGVTaskReportHandler; @Value("${hik.switch}") private Boolean switchErpReportOld; @Autowired private WrkMastService wrkMastService; /** * 满板和空板出库任务,出到输送线后创建AGV搬运任务 */ @Scheduled(cron = "0/3 * * * * ? ") private void createAGVTask(){ if (!switchErpReportOld){ return; } List wrkMasts = wrkMastService.selectList(new EntityWrapper().eq("wrk_sts", 300)); if (wrkMasts.isEmpty()){ return; } for (WrkMast wrkMast : wrkMasts){ //查询是否有源站和目标站有一样的agv搬运任务 //如果有则跳过本次agv搬运任务下发 Task task1 = taskService.selectOne(new EntityWrapper() .in("source_sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo()) .in("sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo())); if (Cools.isEmpty(task1)) { //生成AGV搬运出库任务 // 保存工作档 Task task = new Task(); Date date = new Date(); String TaskNo = wrkMast.getWrkNo()+"-"+date.getTime(); task.setWrkNo(wrkMast.getWrkNo()) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(3) // 入出库状态: 3.站到站 .setTaskType("agv") .setIoPri(10D) .setFullPlt("Y") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(wrkMast.getMemo()) .setSourceStaNo(wrkMast.getSourceStaNo())//空料架缓存区E1 .setEmptyMk("N")// 空板 .setBarcode(wrkMast.getBarcode())// 托盘码 .setLinkMis("N") .setAppeUser(9945L) .setAppeTime(date) .setModiUser(9945L) .setModiTime(date); if (!taskService.insert(task)) { throw new CoolException("保存工作档失败"); }else { wrkMast.setWrkSts(31L);//31.AGV搬运任务创建成功 wrkMast.setModiTime(date); wrkMastService.updateById(wrkMast); } } } } /** * AGV 任务下发接口,定时给AGV下发任务 */ @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ if (!switchErpReportOld){ return; } //查询所有agv待下发任务 List wrkSts = taskService.selectList(new EntityWrapper().eq("wrk_sts", 301)); if (wrkSts!=null&& !wrkSts.isEmpty()){ for (Task task:wrkSts){ //查询是否有正在作业的源站和目标站有一样的agv搬运任务 //如果有则跳过本次agv搬运任务下发 Task task1 = taskService.selectOne(new EntityWrapper() .eq("wrk_sts", 302) .andNew() .in("source_sta_no", task.getSourceStaNo(), task.getStaNo()) .in("sta_no", task.getStaNo(), task.getSourceStaNo())); if (Cools.isEmpty(task1)) { //AGV任务下发 ReturnT start = AGVTaskReportHandler.start(task); if (!start.isSuccess()){ task.setUpdMk("X"); task.setErrorMemo(start.getMsg()); task.setModiTime(new Date()); if (!taskService.updateById(task)) { log.error("工作档[workNo={}]标记待处理失败", task.getWrkNo()); } } } } } } }