package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.asrs.task.handler.WrkMastSplitTwinInItHandler; import com.zy.common.model.enums.CrnStnType; import com.zy.common.model.enums.WrkMastExecuteType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * Created by Monkey D. Luffy on 2024.06.07 * 亳州煜星..............以下.............亳州煜星.............前后双工位拆分堆垛机执行作业生成 */ @Component public class WrkMastSplitTwinInItScheduler { private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class); @Autowired private WrkMastSplitTwinInItHandler wrkMastSplitTwinInItHandler; @Autowired private WrkMastSplitTwinService wrkMastSplitTwinService; @Autowired private BasCrnpService basCrnpService; @Autowired private BasDevpService basDevpService; @Autowired private WrkMastService wrkMastService; @Autowired private RgvOneSignService rgvOneSignService; public static final List SplitTwin_CRN_NO = new ArrayList() {{ add(3); add(4); add(5); }}; @Scheduled(cron = "0/3 * * * * ? ") private void execute() { for (Integer crnNo : SplitTwin_CRN_NO) { try { BasCrnp basCrnp = basCrnpService.selectById(crnNo); if (!Cools.isEmpty(basCrnp)) { if (basCrnp.getWrkNo() == 0 && basCrnp.getCrnSts() != 3) { continue; } if (((basCrnp.getCrnStatusOne() > 0 && basCrnp.getCrnStatusOne() <= 3) || basCrnp.getCrnStatusOne() == 20) && basCrnp.getCrnStatusTwo() == 0) {//堆垛机工位1取货运行中 //堆垛机工位1有物待作业 List wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4); if (wrkMastSplitTwinList.size() != 1){ log.error("前后双工位拆分堆垛机执行作业生成,作业数量={},堆垛机号={},异常信息={},工位号={}",wrkMastSplitTwinList.size(),crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",1); continue; } WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0); if (wrkMastSplitTwin.getWrkType()!=1 && wrkMastSplitTwin.getWrkType()!=2){ continue; } wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4); if (wrkMastSplitTwinList.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,作业数量={},堆垛机号={},异常信息={},工位号={}",wrkMastSplitTwinList.size(),crnNo,"存在多笔可执行作业,请维护执行作业!!!",2); continue; } else if (wrkMastSplitTwinList.size()==1){ continue; } switch (wrkMastSplitTwin.getIoType()){ case 1: Integer count = basDevpService.selectWaitNecessary(WrkMastExecuteType.get(crnNo),wrkMastSplitTwin.getWrkNo().intValue()); if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业 break; } if (wrkMastSplitTwin.getWrkSts()!=2){ break; } if (count==0){ wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin); break; } else { BasDevp basDevp = basDevpService.selectById(CrnStnType.getDevNo(crnNo, true));//入库站点 if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){ break; } WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper().eq("wrk_no", basDevp.getWrkNo())); if (wrkMast.getIoType()>100 || wrkMast.getWrkSts()!=2){ break; } wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin,wrkMast,2); } break; case 2: List wrkMasts = wrkMastService.selectList(new EntityWrapper().eq("wrk_sts", 12L).eq("crn_no", crnNo)); if (wrkMasts.size()==1){ wrkMasts = wrkMastService.selectList(new EntityWrapper().eq("wrk_sts", 11L).eq("crn_no", crnNo)); if (wrkMasts.isEmpty()){ if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业 break; } if (wrkMastSplitTwin.getWrkSts()!=2){ break; } wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin); break; }else { for (WrkMast wrkMast:wrkMasts){ if (wrkMast.getStaNo()>309){ int wrkCount = wrkMastService.selectCount(new EntityWrapper().eq("io_type", 110).gt("sta_no", 309).lt("sta_no", 314).gt("wrk_sts",11L)); if (wrkCount>=12){ continue; } RgvOneSign bigTurn = rgvOneSignService.selectOne(new EntityWrapper().eq("rgv_one_type","bigTurn")); if (Cools.isEmpty(bigTurn)){ continue; } if (bigTurn.getRgvOneSign()>13){ continue; } BasDevp basDevp = basDevpService.selectById(212); if (basDevp.getLoading().equals("Y") || !basDevp.getAutoing().equals("Y") || (!Cools.isEmpty(basDevp.getWrkNo()) && basDevp.getWrkNo()!=0) ){ continue; } } wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin,wrkMast,2); break; } break; } } break; default: log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={},工作类型={},工作状态={}",crnNo,"任务类型未知",1,1,1); } } } } catch (Exception e) { log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage()); } } } @Scheduled(cron = "0/3 * * * * ? ") private void executeTwo() { for (Integer crnNo : SplitTwin_CRN_NO) { try { BasCrnp basCrnp = basCrnpService.selectById(crnNo); if (!Cools.isEmpty(basCrnp)) { if (basCrnp.getWrkNo() != 0 || basCrnp.getWrkNoTwo()!=0 || basCrnp.getCrnSts() != 3) { continue; } if (basCrnp.getCrnStatusOne() == 20 && basCrnp.getCrnStatusTwo() == 20) {//堆垛机工位1有物待作业 工位2有物待作业 List wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4); if (wrkMastSplitTwinList.isEmpty()){ continue; } if (wrkMastSplitTwinList.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",1); continue; } WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0); if (wrkMastSplitTwin.getWrkType()!=1 || wrkMastSplitTwin.getWrkSts()!=2){//工作类型 0: 未知 1: 取 2: 放 3: 取放 4: 完成 continue; } List wrkMastSplitTwinListTwo = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4); if (wrkMastSplitTwinListTwo.isEmpty()){ continue; } if (wrkMastSplitTwinListTwo.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",2); continue; } WrkMastSplitTwin wrkMastSplitTwinTwo = wrkMastSplitTwinListTwo.get(0); if (wrkMastSplitTwinTwo.getWrkType()!=1 || wrkMastSplitTwinTwo.getWrkSts()!=2){//工作类型 0: 未知 1: 取 2: 放 3: 取放 4: 完成 //工作状态 0: 初始 1: 等待取货完成 2: 取货完成待作业 3: 等待放货完成 4: 完成 continue; } wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin); wrkMastSplitTwinInItHandler.start(wrkMastSplitTwinTwo); } } } catch (Exception e) { log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage()); } } } @Scheduled(cron = "0/3 * * * * ? ") private void executeThree() { for (Integer crnNo : SplitTwin_CRN_NO) { try { BasCrnp basCrnp = basCrnpService.selectById(crnNo); if (!Cools.isEmpty(basCrnp)) { if (basCrnp.getWrkNo() != 0 || basCrnp.getWrkNoTwo()!=0 || basCrnp.getCrnSts() != 3) { continue; } if (basCrnp.getCrnStatusOne() == 0 && basCrnp.getCrnStatusTwo() == 20) {//堆垛机工位1空闲 工位2有物待作业 List wrkMastSplitTwinListTwo = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4); if (wrkMastSplitTwinListTwo.isEmpty()){ continue; } if (wrkMastSplitTwinListTwo.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",2); continue; } WrkMastSplitTwin wrkMastSplitTwinTwo = wrkMastSplitTwinListTwo.get(0); if (wrkMastSplitTwinTwo.getWrkType()!=1 || wrkMastSplitTwinTwo.getWrkSts()!=2){//工作类型 0: 未知 1: 取 2: 放 3: 取放 4: 完成 //工作状态 0: 初始 1: 等待取货完成 2: 取货完成待作业 3: 等待放货完成 4: 完成 continue; } wrkMastSplitTwinInItHandler.start(wrkMastSplitTwinTwo); } } } catch (Exception e) { log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage()); } } } }