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.BasDevpService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.asrs.service.WrkMastSplitTwinService;
|
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;
|
|
public static final List<Integer> SplitTwin_CRN_NO = new ArrayList<Integer>() {{
|
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<WrkMastSplitTwin> 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<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
|
if (wrkMast.getIoType()>100 || wrkMast.getWrkSts()!=2){
|
break;
|
}
|
wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin,wrkMast,2);
|
}
|
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有物待作业
|
break;
|
}
|
if (wrkMastSplitTwin.getWrkSts()!=2){
|
break;
|
}
|
wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin);
|
break;
|
}else {
|
for (WrkMast wrkMast:wrkMasts){
|
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<WrkMastSplitTwin> 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<WrkMastSplitTwin> 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<WrkMastSplitTwin> 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());
|
}
|
}
|
}
|
|
}
|