package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.AgvBasDevp; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.AgvWrkMast; import com.zy.asrs.entity.WrkMastExecute; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.WrkMastExecuteServiceImpl; import com.zy.asrs.task.handler.AutoMoveCreateExecuteHandler; import com.zy.common.service.AgvCommonService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Objects; // 自动移库 @Slf4j @Component public class AutoMoveCreateExecuteScheduler { @Autowired private AgvWrkMastService agvWrkMastService; @Autowired private AutoMoveCreateExecuteHandler autoMoveCreateExecuteHandler; @Autowired private AgvBasDevpService agvBasDevpService; @Autowired private AgvLocMastService agvLocMastService; @Autowired private AgvCommonService agvCommonService; @Autowired private WrkMastExecuteService wrkMastExecuteService; @Autowired private WrkMastExecuteLogService wrkMastExecuteLogService; /** * 生成agv_wrk_mast_execute任务 */ @Scheduled(cron = "0/2 * * * * ? ") private void autoMove(){ List agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper().eq("io_type", 121).eq("wrk_sts",11)); for (AgvWrkMast agvWrkMast:agvWrkMastList){ try{ Date now = new Date(); if (!agvWrkMast.getLocNo().isEmpty() && !agvWrkMast.getSourceLocNo().isEmpty() && agvWrkMast.getWrkSts()==11L){ AgvLocMast agvLocMastSou = agvLocMastService.selectOne(new EntityWrapper().eq("loc_no", agvWrkMast.getSourceLocNo())); AgvLocMast agvLocMast = agvLocMastService.selectOne(new EntityWrapper().eq("loc_no", agvWrkMast.getLocNo())); if (!determineFloorConnection(agvLocMastSou.getFloor())){//全自动 WrkMastExecute wrkMastExecute = new WrkMastExecute(agvWrkMast); wrkMastExecute.setWrkSts(0L); wrkMastExecute.setModiTime(now); wrkMastExecute.setAppeTime(now); wrkMastExecute.setSouFloor(agvLocMastSou.getFloor()); wrkMastExecute.setEndFloor(agvLocMast.getFloor()); wrkMastExecute.setNowPosition(0); wrkMastExecute.setEndPosition(3); wrkMastExecute.setStatus(1); autoMoveCreateExecuteHandler.start(agvWrkMast,wrkMastExecute); }else { int count = wrkMastExecuteService.selectCount(new EntityWrapper().eq("io_type", 121).eq("status", 2)); int countDevp = agvBasDevpService.selectCount(new EntityWrapper().eq("loc_sts", "O").like("dev_no","DB_")); if (countDevp<3){ continue; } if (count<2){ AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMastSou.getFloor()); if (Cools.isEmpty(devpNo) || !Objects.equals(devpNo.getLocSts(), "O")){ continue; } WrkMastExecute wrkMastExecute = new WrkMastExecute(agvWrkMast); wrkMastExecute.setWrkSts(0L); wrkMastExecute.setModiTime(now); wrkMastExecute.setAppeTime(now); wrkMastExecute.setSouFloor(agvLocMastSou.getFloor()); wrkMastExecute.setEndFloor(agvLocMast.getFloor()); wrkMastExecute.setSouStaNo(devpNo.getDevNo()); wrkMastExecute.setNowPosition(0); wrkMastExecute.setEndPosition(1); wrkMastExecute.setStatus(2); autoMoveCreateExecuteHandler.start(agvWrkMast,wrkMastExecute); //更新目标库位状态 updateAgvBasDevp(devpNo,"S",agvLocMastSou.getLocType2(),agvLocMastSou.getBarcode()); } } } }catch (Exception e){ log.error("生成agv_wrk_mast_execute任务异常===》异常原因:"+e.getMessage()); } } } private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){ if(!Cools.isEmpty(agvBasDevp)){ agvBasDevp.setLocSts(locSts); agvBasDevp.setLocType2(continerType); agvBasDevp.setBarcode(containerCode); agvBasDevpService.updateById(agvBasDevp); } } /** * 完成agv_wrk_mast_execute任务 */ @Scheduled(cron = "0/2 * * * * ? ") private void autoMoveEnd(){ List agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper().eq("io_type", 121).eq("wrk_sts",12)); for (AgvWrkMast agvWrkMast:agvWrkMastList){ try{ WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper().eq("io_type", 121).eq("wrk_no", agvWrkMast.getWrkNo().longValue())); if (!Cools.isEmpty(wrkMastExecute) && wrkMastExecute.getWrkSts()==3L && wrkMastExecute.getNowPosition()==3){ agvWrkMast.setWrkSts(205L);//任务完成 agvWrkMastService.updateById(agvWrkMast); //生成agv_wrk_mast_execute任务历史档 wrkMastExecuteLogService.save(wrkMastExecute); //删除执行档案 wrkMastExecuteService.deleteById(wrkMastExecute); } }catch (Exception e){ log.error("完成agv_wrk_mast_execute任务异常===》异常原因:"+e.getMessage()); } } } private boolean determineFloorConnection(Integer floor){ try{ List agvBasDevps = agvBasDevpService.selectList(new EntityWrapper().eq("floor", floor).like("dev_no", "DB_")); if (!agvBasDevps.isEmpty()){ for (AgvBasDevp agvBasDevp:agvBasDevps){ if (agvBasDevp.getInEnable().equals("Y")){ return false; } } return true; } }catch (Exception e){ log.error("判断当前楼层接驳位是否全部关闭,异常"+e.getMessage()); } return false; } private boolean determineFloorConnectionReverseSide(Integer floor){ try{ List agvBasDevps = agvBasDevpService.selectList(new EntityWrapper().eq("floor", floor).like("dev_no", "DB_")); if (!agvBasDevps.isEmpty()){ for (AgvBasDevp agvBasDevp:agvBasDevps){ if (agvBasDevp.getInEnable().equals("N")){ return false; } } return true; } }catch (Exception e){ log.error("判断当前楼层接驳位是否全部关闭,异常"+e.getMessage()); } return false; } }