package com.zy.asrs.task;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.core.common.Cools;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.service.BasDevpService;
|
import com.zy.asrs.service.StaDescService;
|
import com.zy.asrs.service.WrkDetlService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.asrs.service.impl.LocDetlServiceImpl;
|
import com.zy.asrs.service.impl.LocMastServiceImpl;
|
import com.zy.asrs.task.handler.AutomaticLibraryTransferHandler;
|
import com.zy.common.model.LocDetlDto;
|
import com.zy.common.model.enums.WorkNoType;
|
import com.zy.common.service.CommonService;
|
import com.zy.system.entity.Config;
|
import com.zy.system.service.ConfigService;
|
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;
|
|
@Component
|
public class AutomaticOutboundShipment {
|
@Autowired
|
private ConfigService configService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private AutomaticLibraryTransferHandler automaticLibraryTransferHandler;
|
@Autowired
|
private BasDevpService basDevpService;
|
@Autowired
|
private LocDetlServiceImpl locDetlService;
|
@Autowired
|
private LocMastServiceImpl locMastService;
|
@Autowired
|
private StaDescService staDescService;
|
@Autowired
|
private CommonService commonService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
|
/**
|
* 自动出满托
|
*/
|
@Scheduled(cron = "0/5 * * * * ? ")
|
private void execute(){
|
Config config = configService.selectConfigByCode("AutomaticOutboundShipment");
|
if(config.getStatus()==0){
|
return;
|
}
|
|
BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 200));
|
if (Cools.isEmpty(basDevp.getLoading())||basDevp.getLoading().equals("N")) {
|
//找到入库最早的
|
List<LocDetl> locDetlss = locDetlService.selectList(new EntityWrapper<LocDetl>().orderBy("appe_time"));
|
LocMast locMastIoTime=new LocMast();
|
for (LocDetl locDetl : locDetlss) {
|
LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
|
if(!Cools.isEmpty(locMast)&&locMast.getLocSts().equals("F")){
|
locMastIoTime=locMast;
|
break;
|
}
|
}
|
// LocMast locMastIoTime=locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").orderBy("io_time"));
|
//最早入库的可能不是最靠近出库口的,所以需要再去找这层最靠近出库口的货
|
LocMast locMast =locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("lev1",locMastIoTime.getLev1()).orderBy("bay1",false));
|
|
boolean res1 = false;
|
List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
|
.eq("lev1", locMast.getLev1())
|
.orderBy("bay1", res1));
|
for (LocMast locMast1 : locMasts) {
|
if (locMast1.getLocNo().equals(locMast.getLocNo())) {
|
break;
|
}
|
if (locMast1.getLocSts().equals("D") || locMast1.getLocSts().equals("F")) {
|
throw new CoolException(locMast.getLocNo() + "库位堵塞,禁止出库");
|
}else if(!locMast1.getLocSts().equals("O")){
|
return;
|
}
|
}
|
// 获取源站
|
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
|
.eq("type_no", 101)
|
.eq("stn_no", 200)
|
.eq("crn_no", locMast.getCrnNo());
|
StaDesc staDesc = staDescService.selectOne(wrapper);
|
if (Cools.isEmpty(staDesc)) {
|
throw new CoolException("检索源站失败");
|
}
|
Date now = new Date();
|
|
List<LocDetl> locDetls=locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
|
|
if(Cools.isEmpty(locDetls)){
|
throw new CoolException("库存明细为空---locNo:"+locMast.getLocNo());
|
}
|
// 生成工作号
|
int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(101));
|
// 生成工作档
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(workNo);
|
wrkMast.setIoTime(now);
|
wrkMast.setWrkSts(0L); // 工作状态:0.待接收
|
wrkMast.setIoType(101); // 入出库状态
|
wrkMast.setIoPri(15D); // 优先级:15
|
wrkMast.setCrnNo(locMast.getCrnNo());
|
wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
|
wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
|
wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
|
wrkMast.setFullPlt("Y"); // 满板:Y
|
wrkMast.setPicking("N"); // 拣料
|
wrkMast.setExitMk("N"); // 退出
|
wrkMast.setEmptyMk("N"); // 空板
|
wrkMast.setLinkMis("N");
|
wrkMast.setBarcode(locMast.getBarcode());
|
wrkMast.setAppeUser(9945L); // 操作人员数据
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(9945L);
|
wrkMast.setModiTime(now);
|
if (!wrkMastService.insert(wrkMast)) {
|
throw new CoolException("保存工作档失败,出库库位号:"+locMast.getLocNo());
|
}
|
// 生成工作档明细
|
for (LocDetl l : locDetls) {
|
WrkDetl wrkDetl = new WrkDetl();
|
wrkDetl.sync(l);
|
wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
|
wrkDetl.setWrkNo(workNo);
|
wrkDetl.setIoTime(now);
|
wrkDetl.setAnfme(l.getAnfme()); // 数量
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setAppeUser(9945L);
|
wrkDetl.setModiTime(now);
|
wrkDetl.setModiUser(9945L);
|
if (!wrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作档明细失败");
|
}
|
}
|
// 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
|
locMast = locMastService.selectById(locMast.getLocNo());
|
if (locMast.getLocSts().equals("F")) {
|
locMast.setLocSts("R");
|
locMast.setModiUser(9945L);
|
locMast.setModiTime(now);
|
if (!locMastService.updateById(locMast)) {
|
throw new CoolException("预约库位状态失败,库位号:"+locMast.getLocNo());
|
}
|
} else {
|
throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
|
}
|
}
|
}
|
}
|