package com.zy.asrs.service.impl; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.WmsWrkStatusType; 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; @Service("wmsWrkService") public class WmsWrkServiceImpl extends ServiceImpl implements WmsWrkService { @Autowired private BasDevpService basDevpService; @Autowired private CommonService commonService; @Autowired private LocMastService locMastService; @Autowired private WrkMastService wrkMastService; @Autowired private StaDescService staDescService; @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) { //入库 startup(wmsWrk, userId); }else if(wmsWrk.getIoType() == 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(0); 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()); 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 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(2); wmsWrk.setWrkNo(workNo); this.baseMapper.updateById(wmsWrk); // 获取路径 StaDesc staDesc = staDescService.queryCrnStn(101, locMast.getCrnNo(), wmsWrk.getStaNo()); // 生成工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); 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() + "库位不是在库状态"); } } }