package com.zy.asrs.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.domain.enums.WmsWrkStatusType;
|
import com.zy.asrs.domain.enums.WorkNoType;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.mapper.WmsWrkMapper;
|
import com.zy.asrs.service.*;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.zy.common.service.CommonService;
|
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;
|
|
@Service("wmsWrkService")
|
public class WmsWrkServiceImpl extends ServiceImpl<WmsWrkMapper, WmsWrk> implements WmsWrkService {
|
|
@Autowired
|
private BasDevpService basDevpService;
|
@Autowired
|
private CommonService commonService;
|
@Autowired
|
private LocMastService locMastService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private StaDescService staDescService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
|
@Override
|
public WmsWrk selectByWmsWrkNo(Integer wmsWrkNo) {
|
return this.baseMapper.selectByWmsWrkNo(wmsWrkNo);
|
}
|
|
@Override
|
@Transactional
|
public void distribute(Integer wmsWrkNo, Long userId) {
|
WmsWrk wmsWrk = this.selectByWmsWrkNo(wmsWrkNo);
|
if (wmsWrk == null) {
|
throw new CoolException("WMS任务不存在");
|
}
|
|
wmsWrk.setWmsStatus(WmsWrkStatusType.DISTRIBUTE.id);//派发状态
|
wmsWrk.setModiTime(new Date());
|
wmsWrk.setModiUser(userId);
|
this.updateById(wmsWrk);
|
|
//创建任务
|
if (wmsWrk.getIoType() == 1) {
|
//1.入库
|
startup(wmsWrk, userId);
|
}else if(wmsWrk.getIoType() == 11){
|
//11.库格移载
|
locMove(wmsWrk, userId);
|
} else if (wmsWrk.getIoType() == 101) {
|
//101.出库
|
stockOut(wmsWrk, userId);
|
}
|
|
}
|
|
@Override
|
@Transactional
|
public void startup(WmsWrk wmsWrk, Long userId) {
|
Date now = new Date();
|
LocMast locMast = locMastService.selectByLocNo(wmsWrk.getLocNo());
|
if (locMast == null) {
|
throw new CoolException("库位不存在");
|
}
|
|
// 生成任务号
|
int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);
|
wmsWrk.setWrkNo(workNo);
|
this.baseMapper.updateById(wmsWrk);
|
|
// 源站点状态检测
|
BasDevp sourceStaNo = basDevpService.checkSiteStatus(wmsWrk.getSourceStaNo(), true);
|
|
// 生成工作档
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(workNo);
|
wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
|
wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());
|
wrkMast.setIoTime(now);
|
wrkMast.setWrkSts(1L); // 工作状态:生成入库ID
|
wrkMast.setIoType(1); // 入出库状态:1.入库
|
wrkMast.setIoPri(13D); // 优先级:13
|
wrkMast.setCrnNo(locMast.getCrnNo());
|
wrkMast.setSourceStaNo(wmsWrk.getSourceStaNo());
|
wrkMast.setStaNo(wmsWrk.getStaNo());
|
wrkMast.setLocNo(wmsWrk.getLocNo());
|
wrkMast.setBarcode(wmsWrk.getBarcode()); // 托盘码
|
wrkMast.setFullPlt("Y"); // 满板:Y
|
wrkMast.setPicking("N"); // 拣料
|
wrkMast.setExitMk("N"); // 退出
|
wrkMast.setEmptyMk("N"); // 空板
|
wrkMast.setLinkMis("N");
|
wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
|
wrkMast.setAppeUser(userId);
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
if (!wrkMastService.insert(wrkMast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
// 更新源站点信息
|
sourceStaNo.setWrkNo(workNo);
|
sourceStaNo.setModiUser(userId);
|
sourceStaNo.setModiTime(now);
|
if (!basDevpService.updateById(sourceStaNo)) {
|
throw new CoolException("更新源站失败");
|
}
|
|
// 更新目标库位状态
|
if (locMast.getLocSts().equals("O")) {
|
locMast.setLocSts("S"); // S.入库预约
|
locMast.setModiUser(userId);
|
locMast.setModiTime(now);
|
if (!locMastService.updateById(locMast)) {
|
throw new CoolException("改变库位状态失败");
|
}
|
} else {
|
throw new CoolException(wmsWrk.getLocNo() + "目标库位已被占用");
|
}
|
}
|
|
@Override
|
@Transactional
|
public void stockOut(WmsWrk wmsWrk, Long userId) {
|
Date now = new Date();
|
LocMast locMast = locMastService.selectByLocNo(wmsWrk.getSourceLocNo());
|
if (locMast == null) {
|
throw new CoolException("库位不存在");
|
}
|
|
// 生成任务号
|
int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
|
wmsWrk.setWrkNo(workNo);
|
this.baseMapper.updateById(wmsWrk);
|
|
// 获取路径
|
StaDesc staDesc = staDescService.queryCrnStn(101, locMast.getCrnNo(), wmsWrk.getStaNo());
|
// 生成工作档
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(workNo);
|
wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
|
wrkMast.setIoTime(now);
|
wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
|
wrkMast.setIoType(101); // 101.出库
|
wrkMast.setIoPri(13D); // 优先级:13
|
wrkMast.setCrnNo(locMast.getCrnNo());
|
wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
|
wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
|
wrkMast.setSourceLocNo(wmsWrk.getSourceLocNo()); // 源库位
|
wrkMast.setFullPlt("Y"); // 满板:Y
|
wrkMast.setPicking("N"); // 拣料
|
wrkMast.setExitMk("N"); // 退出
|
wrkMast.setEmptyMk("N"); // 空板
|
wrkMast.setLinkMis("N");
|
wrkMast.setBarcode(locMast.getBarcode());
|
wrkMast.setAppeUser(userId); // 操作人员数据
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
if (!wrkMastService.insert(wrkMast)) {
|
throw new CoolException("保存工作档失败,出库库位号:" + wmsWrk.getSourceLocNo());
|
}
|
|
// 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
|
locMast = locMastService.selectById(wmsWrk.getSourceLocNo());
|
if (locMast.getLocSts().equals("F")) {
|
locMast.setLocSts("R");
|
locMast.setModiUser(userId);
|
locMast.setModiTime(now);
|
if (!locMastService.updateById(locMast)) {
|
throw new CoolException("预约库位状态失败,库位号:" + wmsWrk.getSourceLocNo());
|
}
|
} else {
|
throw new CoolException(wmsWrk.getSourceLocNo() + "库位不是在库状态");
|
}
|
}
|
|
//库位移转
|
@Override
|
@Transactional
|
public void locMove(WmsWrk wmsWrk, Long userId) {
|
String sourceLocNo = wmsWrk.getSourceLocNo();
|
String locNo = wmsWrk.getLocNo();
|
LocMast sourceLoc = locMastService.selectById(sourceLocNo);
|
List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
|
if (Cools.isEmpty(sourceLoc)){
|
throw new CoolException("未找到库位");
|
}
|
LocMast loc = locMastService.selectById(locNo);
|
if (Cools.isEmpty(loc)){
|
throw new CoolException("未找到库位");
|
}
|
if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
|
throw new CoolException("移转库位属于不同堆垛机");
|
}
|
Date now = new Date();
|
// 获取工作号
|
int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
|
wmsWrk.setWrkNo(workNo);
|
this.baseMapper.updateById(wmsWrk);
|
// 保存工作档
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(workNo);
|
wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
|
wrkMast.setIoTime(now);
|
wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
|
wrkMast.setIoType(11); // 入出库状态: 11.库格移载
|
wrkMast.setIoPri(10D);
|
wrkMast.setCrnNo(sourceLoc.getCrnNo());
|
wrkMast.setSourceLocNo(sourceLocNo); // 源库位
|
wrkMast.setLocNo(locNo); // 目标库位
|
wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 满板:Y
|
wrkMast.setPicking("N"); // 拣料
|
wrkMast.setExitMk("N"); // 退出
|
wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板
|
wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码
|
wrkMast.setLinkMis("N");
|
wrkMast.setAppeUser(userId);
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
boolean res = wrkMastService.insert(wrkMast);
|
if (!res) {
|
throw new CoolException("保存工作档失败");
|
}
|
// 工作档明细保存
|
for (LocDetl locDetl : locDetls) {
|
WrkDetl wrkDetl = new WrkDetl();
|
wrkDetl.sync(locDetl);
|
wrkDetl.setWrkNo(workNo);
|
wrkDetl.setIoTime(now);
|
wrkDetl.setAnfme(locDetl.getAnfme());
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setAppeUser(userId);
|
wrkDetl.setModiTime(now);
|
wrkDetl.setModiUser(userId);
|
if (!wrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作档明细失败");
|
}
|
}
|
// 修改源库位状态
|
if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
|
sourceLoc.setLocSts("R"); // R.出库预约
|
sourceLoc.setModiUser(userId);
|
sourceLoc.setModiTime(now);
|
if (!locMastService.updateById(sourceLoc)){
|
throw new CoolException("更新源库位状态失败");
|
}
|
} else {
|
throw new CoolException("源库位出库失败,状态:"+sourceLoc.getLocSts$());
|
}
|
// 修改目标库位状态
|
if (loc.getLocSts().equals("O")) {
|
loc.setLocSts("S"); // S.入库预约
|
loc.setModiTime(now);
|
loc.setModiUser(userId);
|
if (!locMastService.updateById(loc)) {
|
throw new CoolException("更新目标库位状态失败");
|
}
|
} else {
|
throw new CoolException("移转失败,目标库位状态:"+loc.getLocSts$());
|
}
|
}
|
|
@Override
|
public List<WmsWrk> selectToBeHistoryData() {
|
return this.baseMapper.selectToBeHistoryData();
|
}
|
}
|