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<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().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<AgvLocMast>().eq("loc_no", agvWrkMast.getSourceLocNo()));
|
AgvLocMast agvLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().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<WrkMastExecute>().eq("io_type", 121).eq("status", 2));
|
int countDevp = agvBasDevpService.selectCount(new EntityWrapper<AgvBasDevp>().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<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 121).eq("wrk_sts",12));
|
for (AgvWrkMast agvWrkMast:agvWrkMastList){
|
try{
|
WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper<WrkMastExecute>().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<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().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<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().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;
|
}
|
}
|