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<Integer> SplitTwin_CRN_NO = new ArrayList<Integer>() {{
|
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<Integer> 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<WrkMastSplitTwin> 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<WrkMast>().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<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 12L).eq("crn_no", crnNo));
|
if (wrkMasts.size()==1){
|
wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().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<Integer> 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<WrkMastSplitTwin> 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<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 12L).eq("crn_no", crnNo));
|
if (wrkMasts.size()==1){
|
wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().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());
|
}
|
}
|
}
|
|
}
|