package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasCrnp; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.WrkMastSplitTwin; import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.service.WrkMastSplitTwinService; import com.zy.asrs.service.impl.BasDevpServiceImpl; import com.zy.asrs.service.impl.WrkMastServiceImpl; import com.zy.asrs.task.handler.WrkMastSplitTwinInItHandler; import com.zy.asrs.utils.Utils; 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.Date; 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 BasDevpServiceImpl basDevpService; public static final List SplitTwin_CRN_NO = new ArrayList() {{ add(3); add(4); add(5); }}; @Autowired private WrkMastServiceImpl wrkMastService; @Scheduled(cron = "0/3 * * * * ? ") private void execute() { for (Integer crnNo : SplitTwin_CRN_NO) { try { Date now = new Date(); List integers = WrkMastExecuteType.get(crnNo); 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("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请删除无效作业!!!",1); continue; } WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0); if (wrkMastSplitTwin.getWrkType()!=1){ continue; } wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4); if (wrkMastSplitTwinList.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2); continue; } else if (wrkMastSplitTwinList.size()==1){ continue; } switch (wrkMastSplitTwin.getIoType()){ case 1: Integer count = basDevpService.selectWaitNecessary(integers,wrkMastSplitTwin.getWrkNo().intValue()); if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业 continue; } if (wrkMastSplitTwin.getWrkSts()!=2){ continue; } if (count==0){ wrkMastSplitTwin.setWrkSts(4); wrkMastSplitTwin.setUpdateTime(now); wrkMastSplitTwinService.updateById(wrkMastSplitTwin); WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin); wrkMastSplitTwinNew.setCreateTime(now); wrkMastSplitTwinNew.setUpdateTime(now); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinNew.setWrkType(2); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); }else { BasDevp basDevp = basDevpService.selectById(CrnStnType.getDevNo(crnNo, true)); if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){ continue; } WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper().eq("wrk_no", basDevp.getWrkNo())); if (wrkMast.getIoType()>10 || wrkMast.getWrkSts()!=2){ continue; } WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now); wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo()); wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString()); wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo())); int[] ints = new int[3]; if (wrkMast.getIoType()!=11){ ints = CrnStnType.get(wrkMast.getSourceStaNo()); if (ints == null){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo()); continue; } } wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]); wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]); wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]); wrkMastSplitTwinNew.setWrkType(1); wrkMastSplitTwinNew.setIoType(1); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); } 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有物待作业 continue; } if (wrkMastSplitTwin.getWrkSts()!=2){ continue; } wrkMastSplitTwin.setWrkSts(4); wrkMastSplitTwin.setUpdateTime(now); wrkMastSplitTwinService.updateById(wrkMastSplitTwin); WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin); wrkMastSplitTwinNew.setCreateTime(now); wrkMastSplitTwinNew.setUpdateTime(now); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinNew.setWrkType(2); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); }else { for (WrkMast wrkMast:wrkMasts){ WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now); wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo()); wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString()); wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo())); int[] ints = new int[3]; if (wrkMast.getIoType()!=11){ ints = CrnStnType.get(wrkMast.getSourceStaNo()); if (ints == null){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo()); continue; } } wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]); wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]); wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]); wrkMastSplitTwinNew.setWrkType(1); wrkMastSplitTwinNew.setIoType(2); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); } } } 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 { Date now = new Date(); List integers = WrkMastExecuteType.get(crnNo); BasCrnp basCrnp = basCrnpService.selectById(crnNo); if (!Cools.isEmpty(basCrnp)) { if (basCrnp.getWrkNo() == 0 && basCrnp.getCrnSts() != 3) { continue; } if (basCrnp.getCrnStatusOne() == 20 && basCrnp.getCrnStatusTwo() == 0) {//堆垛机工位1有物待作业 List wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4); if (wrkMastSplitTwinList.size() != 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请删除无效作业!!!",1); continue; } WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0); if (wrkMastSplitTwin.getWrkType()!=1){ continue; } wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4); if (wrkMastSplitTwinList.size() > 1){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2); continue; } else if (wrkMastSplitTwinList.size()==1){ continue; } switch (wrkMastSplitTwin.getIoType()){ case 1: Integer count = basDevpService.selectWaitNecessary(integers,wrkMastSplitTwin.getWrkNo().intValue()); if (count!=0){ } 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有物待作业 continue; } if (wrkMastSplitTwin.getWrkSts()!=2){ continue; } wrkMastSplitTwin.setWrkSts(4); wrkMastSplitTwin.setUpdateTime(now); wrkMastSplitTwinService.updateById(wrkMastSplitTwin); WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin); wrkMastSplitTwinNew.setCreateTime(now); wrkMastSplitTwinNew.setUpdateTime(now); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinNew.setWrkType(2); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); }else { for (WrkMast wrkMast:wrkMasts){ WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now); wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo()); wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString()); wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo())); wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo())); int[] ints = new int[3]; if (wrkMast.getIoType()!=11){ ints = CrnStnType.get(wrkMast.getSourceStaNo()); if (ints == null){ log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo()); continue; } } wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]); wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]); wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]); wrkMastSplitTwinNew.setWrkType(0); wrkMastSplitTwinNew.setIoType(1); wrkMastSplitTwinNew.setWrkSts(0); wrkMastSplitTwinService.insert(wrkMastSplitTwinNew); } } } break; default: log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={},工作类型={},工作状态={}",crnNo,"任务类型未知",1,1,1); } } } } catch (Exception e) { log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage()); } } } }