package com.zy.asrs.task.handler;
|
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.task.AbstractHandler;
|
import com.zy.asrs.task.core.ReturnT;
|
import com.zy.common.service.AgvCommonService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Date;
|
import java.util.List;
|
|
@Slf4j
|
@Service
|
@Transactional
|
public class AutoMoveHandler extends AbstractHandler<String> {
|
|
@Autowired
|
private AgvWrkMastService agvWrkMastService;
|
@Autowired
|
private AgvCommonService agvCommonService;
|
@Autowired
|
private AgvLocMastService agvLocMastService;
|
@Autowired
|
private AgvLocDetlService agvLocDetlService;
|
@Autowired
|
private AgvWrkDetlService agvWrkDetlService;
|
@Autowired
|
AgvBasDevpService agvBasDevpService;
|
|
public ReturnT<String> start(AgvLocMast agvLocMast) {
|
// locType 1. 自动, 2. 手动
|
if (agvLocMast.getLocType().equals("1")) {
|
return doAutoMove(agvLocMast);
|
} else if (agvLocMast.getLocType().equals("2")) {
|
return doHandMove(agvLocMast);
|
}
|
return SUCCESS;
|
}
|
|
public ReturnT<String> start2(AgvWrkMast agvWrkMast) {
|
// locType 1. 自动, 2. 手动
|
doAutoMove2(agvWrkMast);
|
return SUCCESS;
|
}
|
public ReturnT<String> start3(AgvWrkMast agvWrkMast) {
|
// locType 1. 自动, 2. 手动
|
doHandMove2(agvWrkMast);
|
return SUCCESS;
|
}
|
|
public ReturnT<String> start4(AgvWrkMast agvWrkMast) {
|
// locType 1. 自动, 2. 手动
|
doAutoMove3(agvWrkMast);
|
return SUCCESS;
|
}
|
//根据库位的loctype值发送任务--弃用
|
private ReturnT<String> doAutoMove(AgvLocMast agvLocMast) {
|
Date now = new Date();
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
|
}
|
//检索库位,选择合适的库位
|
AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3(),false,true);
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(201L);
|
//入出库类型
|
mast.setIoType(108);
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvLocMast.getLocNo());
|
//目标站点
|
mast.setLocNo(LocMast.getLocNo());
|
//货架编码
|
mast.setBarcode(agvLocMast.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", LocMast.getLocNo()).eq("source_loc_no",agvLocMast.getLocNo()));
|
//生成工作档明细
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo()));
|
agvLocDetls.forEach(agvLocDetl -> {
|
AgvWrkDetl wrkDetl = new AgvWrkDetl();
|
wrkDetl.setWrkNo(mast1.getWrkNo());
|
wrkDetl.sync(agvLocDetl);
|
wrkDetl.setSpecs("1-" + agvLocMast.getLocType3());
|
wrkDetl.setSuppCode(agvLocDetl.getSuppCode());
|
wrkDetl.setIoTime(now);
|
wrkDetl.setAppeUser(9527L);
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setModiUser(9527L);
|
wrkDetl.setModiTime(now);
|
if (!agvWrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作明细失败");
|
}
|
});
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast,"R");
|
updateAgvLocMast(LocMast,"S");
|
|
return SUCCESS;
|
}
|
|
private ReturnT<String> doHandMove(AgvLocMast agvLocMast) {
|
Date now = new Date();
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
|
}
|
// //检索库位,选择合适的库位
|
// AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3());
|
// 检索agv接驳位
|
AgvBasDevp devpNo = agvCommonService.getDevpNo(3, 1);
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(21L);
|
//入出库类型
|
mast.setIoType(111);
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvLocMast.getLocNo());
|
//目标站点
|
mast.setLocNo(devpNo.getDevNo());
|
//货架编码
|
mast.setBarcode(agvLocMast.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
// 目标楼层
|
mast.setPauseMk(agvLocMast.getLocType3().toString());
|
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devpNo.getDevNo()).eq("source_loc_no",agvLocMast.getLocNo()));
|
//生成工作档明细
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo()));
|
agvLocDetls.forEach(agvLocDetl -> {
|
AgvWrkDetl wrkDetl = new AgvWrkDetl();
|
wrkDetl.setWrkNo(mast1.getWrkNo());
|
wrkDetl.sync(agvLocDetl);
|
wrkDetl.setSpecs("1-" + agvLocMast.getLocType3());
|
wrkDetl.setSuppCode(agvLocDetl.getSuppCode());
|
wrkDetl.setIoTime(now);
|
wrkDetl.setAppeUser(9527L);
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setModiUser(9527L);
|
wrkDetl.setModiTime(now);
|
if (!agvWrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作明细失败");
|
}
|
});
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast,"R");
|
updateAgvBasDevp(devpNo,"S",null,agvLocMast.getBarcode());
|
return SUCCESS;
|
}
|
|
private ReturnT<String> doAutoMove2(AgvWrkMast agvWrkMast) {
|
Date now = new Date();
|
//检索库位,选择合适的库位
|
AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,true);
|
if (Cools.isEmpty(locMast)) {
|
throw new CoolException("暂无库位");
|
}
|
AgvWrkMast workingMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locMast.getLocNo()));
|
if (!Cools.isEmpty(workingMast)) {
|
throw new CoolException("当前库位正在进行入库,进行下一次轮询");
|
}
|
agvWrkMast.setWrkSts(201L);
|
agvWrkMast.setLocNo(locMast.getLocNo());
|
agvWrkMastService.updateById(agvWrkMast);
|
//更新目标库位状态
|
updateAgvLocMast(locMast,"S");
|
AgvLocMast locMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locMast.getLocNo()));
|
log.info("自动调拨任务 ==> 源库位:{},目标库位:{},库位状态{}",agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo(),locMast1.getLocSts());
|
|
return SUCCESS;
|
}
|
|
private ReturnT<String> doAutoMove3(AgvWrkMast agvWrkMast) {
|
Date now = new Date();
|
//检索库位,选择合适的库位
|
AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,false);
|
if (Cools.isEmpty(locMast)) {
|
throw new CoolException("暂无库位");
|
}
|
agvWrkMast.setWrkSts(201L);
|
agvWrkMast.setLocNo(locMast.getLocNo());
|
agvWrkMastService.updateById(agvWrkMast);
|
//更新目标库位状态
|
updateAgvLocMast(locMast,"S");
|
|
return SUCCESS;
|
}
|
|
private ReturnT<String> doHandMove2(AgvWrkMast agvWrkMast) {
|
Date now = new Date();
|
String lev1 = agvWrkMast.getSourceLocNo().substring(agvWrkMast.getSourceLocNo().length() - 4).substring(0, 2);
|
AgvBasDevp devpNo = new AgvBasDevp();
|
if ("01".equals(lev1)) {
|
devpNo = agvCommonService.getDevpNo(3, 1, "Y", "Y");
|
} else {
|
devpNo = agvCommonService.getDevpNo(3, 4, "Y", "Y");
|
}
|
|
if (Cools.isEmpty(devpNo)) {
|
throw new CoolException("暂无空闲接驳位");
|
}
|
agvWrkMast.setWrkSts(201L);
|
agvWrkMast.setLocNo(devpNo.getDevNo());
|
agvWrkMastService.updateById(agvWrkMast);
|
updateAgvBasDevp(devpNo,"S",null,agvWrkMast.getBarcode());
|
return SUCCESS;
|
}
|
/*
|
更新目标库位信息
|
*/
|
private void updateAgvLocMast(AgvLocMast locMast, String locSts){
|
locMast.setLocSts(locSts);
|
agvLocMastService.updateById(locMast);
|
}
|
/*
|
更新源站点信息
|
*/
|
private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){
|
if(!Cools.isEmpty(agvBasDevp)){
|
agvBasDevp.setLocSts(locSts);
|
agvBasDevpService.updateById(agvBasDevp);
|
}
|
}
|
private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){
|
if(!Cools.isEmpty(agvBasDevp)){
|
agvBasDevp.setLocSts(locSts);
|
agvBasDevp.setBarcode(containerCode);
|
agvBasDevpService.updateById(agvBasDevp);
|
}
|
}
|
|
public ReturnT<String> autoEmptyBack(AgvLocMast agvLocMast) {
|
Date now = new Date();
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
|
}
|
//检索空闲接驳位,选择合适的接驳位
|
AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMast.getFloor());
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(21L);
|
//入出库类型
|
mast.setIoType(109);
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvLocMast.getLocNo());
|
//目标站点
|
mast.setLocNo(devpNo.getDevNo());
|
//货架编码
|
mast.setBarcode(agvLocMast.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast,"R");
|
updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode());
|
return SUCCESS;
|
}
|
public ReturnT<String> autoEmptyBack3(AgvWrkMast agvWrkMast) {
|
Date now = new Date();
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
|
//检索空闲接驳位,选择合适的接驳位
|
AgvLocMast locMast = agvCommonService.getLocNo(3, 1,true,true);
|
if (Cools.isEmpty(locMast)) {
|
throw new CoolException("1楼暂无空库位");
|
}
|
//目标站点
|
agvWrkMast.setWrkSts(201L);
|
agvWrkMast.setLocNo(locMast.getLocNo());
|
agvWrkMast.setModiUser(9527L);
|
agvWrkMast.setModiTime(now);
|
if (!agvWrkMastService.updateById(agvWrkMast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
//更新目标库位状态
|
updateAgvLocMast(locMast,"S");
|
updateAgvBasDevp(agvBasDevp,"R");
|
return SUCCESS;
|
}
|
public ReturnT<String> autoEmptyBack2(AgvLocMast agvLocMast) {
|
Date now = new Date();
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
|
}
|
//检索库位,选择合适的库位
|
AgvLocMast LocMast = agvCommonService.getLocNo(3,1,true,true);
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(201L);
|
//入出库类型
|
mast.setIoType(109);
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvLocMast.getLocNo());
|
//目标站点
|
mast.setLocNo(LocMast.getLocNo());
|
//货架编码
|
mast.setBarcode(agvLocMast.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast,"R");
|
updateAgvLocMast(LocMast,"S");
|
return SUCCESS;
|
}
|
|
public ReturnT<String> autoEmptyBack4(AgvLocMast agvLocMast) {
|
Date now = new Date();
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
|
}
|
String floor = "";
|
String locNo = "";
|
Long wrkSts = 0L;
|
Integer ioType = 0;
|
AgvLocMast locMast = new AgvLocMast();
|
if (agvLocMast.getFloor() == 3) {
|
floor = "F3";
|
} else if(agvLocMast.getFloor() == 2) {
|
floor = "F2";
|
}
|
List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113));
|
if (agvWrkMasts.size() >= 5) {
|
throw new CoolException("暂停回流");
|
}
|
//检索空闲可入接驳位 没有空闲可入接驳位 直接找库位
|
AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMast.getFloor(),"Y","Y");
|
if (!Cools.isEmpty(devpNo)) {
|
locNo = devpNo.getDevNo();
|
wrkSts = 21L;
|
ioType = 109;
|
} else {
|
//检索库位,选择合适的库位
|
locMast = agvCommonService.getLocNo(3,1,true,true);
|
locNo = locMast.getLocNo();
|
wrkSts = 201L;
|
ioType = 109;
|
}
|
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(wrkSts);
|
//入出库类型
|
mast.setIoType(ioType);
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvLocMast.getLocNo());
|
//目标站点
|
mast.setLocNo(locNo);
|
//货架编码
|
mast.setBarcode(agvLocMast.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast,"R");
|
if (wrkSts == 21L) {
|
updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode());
|
} else {
|
updateAgvLocMast(locMast,"S");
|
}
|
|
|
return SUCCESS;
|
}
|
|
public ReturnT<String> autoEmptyBack5(AgvBasDevp agvBasDevp) {
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvBasDevp.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvBasDevp.getBarcode()+"货架码已在工作档中");
|
}
|
Date now = new Date();
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvBasDevp.getDevNo());
|
//货架编码
|
mast.setBarcode(agvBasDevp.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
// 判断 接驳点是否自动
|
if ("Y".equals(agvBasDevp.getAutoing())) {
|
//工作状态
|
mast.setWrkSts(201L);
|
//入出库类型
|
mast.setIoType(109);
|
//检索库位,选择合适的库位
|
AgvLocMast locMast = agvCommonService.getLocNo(3,1,true,true);
|
mast.setLocNo(locMast.getLocNo());
|
updateAgvLocMast(locMast,"S");
|
} else {
|
//工作状态
|
mast.setWrkSts(212L);
|
//入出库类型
|
mast.setIoType(113);
|
//目标站点
|
mast.setLocNo("");
|
}
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
//更新目标库位状态
|
updateAgvBasDevp(agvBasDevp,"R");
|
|
|
return SUCCESS;
|
}
|
|
public ReturnT<String> autoEmptyBack6(AgvBasDevp agvBasDevp) {
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvBasDevp.getBarcode());
|
if(!Cools.isEmpty(agvWrkMast)){
|
throw new CoolException("当前"+agvBasDevp.getBarcode()+"货架码已在工作档中");
|
}
|
Date now = new Date();
|
//生成工作档
|
AgvWrkMast mast = new AgvWrkMast();
|
//工作状态
|
mast.setWrkSts(214L);
|
//入出库类型
|
mast.setIoType(113);
|
//目标站点
|
mast.setLocNo("");
|
mast.setIoTime(now);
|
//优先级
|
mast.setIoPri(300.0);
|
//源站点
|
mast.setSourceLocNo(agvBasDevp.getDevNo());
|
//货架编码
|
mast.setBarcode(agvBasDevp.getBarcode());
|
//货架类型
|
mast.setWhsType(30);
|
mast.setAppeUser(9527L);
|
mast.setAppeTime(now);
|
mast.setModiUser(9527L);
|
mast.setModiTime(now);
|
if (!agvWrkMastService.insertByIncrease(mast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
//更新目标库位状态
|
updateAgvBasDevp(agvBasDevp,"R");
|
|
|
return SUCCESS;
|
}
|
}
|