自动化立体仓库 - WMS系统
#
lsh
2024-02-18 7100335f6ccdf4839f3fcc82c40cef496ea39f90
#
1个文件已修改
471 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 471 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -8,10 +8,7 @@
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OutboundAllocationUtil;
import com.zy.asrs.utils.Utils;
@@ -164,12 +161,28 @@
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        List<String> locNoList = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!locNoList.contains(paramLocDetl.getLocNo())){
                locNoList.add(paramLocDetl.getLocNo());
            }
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount(), param.getOrderNo()));
            }
        }
        List<String> locNoOtherListOne = new ArrayList<>();
        for (String locNo :locNoList) {
            //小料箱伴生出库
            if (Utils.getRow(locNo) <= 8) {
                String locNoOther = staNoOther(locNo);
                if (!locNoList.contains(locNoOther)) {
                    locNoOtherListOne.add(locNoOther);
                }
            }
        }
        if (!locDetlDtos.isEmpty()) {
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){
@@ -180,6 +193,207 @@
            }
        } else {
            throw new CoolException("库存不存在");
        }
        for (String locNo:locNoOtherListOne){
            // 获取工作号
            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
            //伴生入库工作号
            int workNoRu = commonService.getWorkNo(0);
            // 获取库位
            LocMast locMast = locMastService.selectById(locNo);
            if (Cools.isEmpty(locMast)) {
                throw new CoolException(locNo+"库位不存在");
            }
            if (locMast.getLocSts().equals("D")){
                // 获取源站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", 110)
                        .eq("stn_no", param.getOutSite())
                        .eq("crn_no", locMast.getCrnNo());
                StaDesc staDesc = staDescService.selectOne(wrapper);
                Integer sourceStaNo = staDesc.getCrnStn();
                if (Cools.isEmpty(sourceStaNo)) {
                    throw new CoolException("检索源站失败");
                }
                Date now = new Date();
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(110); // 入出库状态: 110.空板出库
                wrkMast.setIoPri(10D);
                wrkMast.setSourceStaNo(sourceStaNo); // 源站
                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMast.setCrnNo(locMast.getCrnNo());
                wrkMast.setSourceLocNo(locNo); // 源库位
                wrkMast.setFullPlt("N"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("Y"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(userId);
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(userId);
                wrkMast.setModiTime(now);
                wrkMast.setWorkNoOther(workNoRu);
                boolean res = wrkMastService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("保存工作档失败");
                }
                // 更新库位状态 D.空板 -> R.出库预约
                if (locMast.getLocSts().equals("D")){
                    locMast.setLocSts("R");
                    locMast.setModiUser(userId);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新库位状态失败");
                    }
                }
                // 生成工作档
                WrkMast wrkMastRu = new WrkMast();
                wrkMastRu.setWrkNo(workNoRu);
                wrkMastRu.setIoTime(new Date());
                wrkMastRu.setWrkSts(2L); // 工作状态:生成入库ID
                wrkMastRu.setIoType(10); // 入出库状态:10.空板入库
                wrkMastRu.setIoPri(13D); // 优先级
                wrkMastRu.setCrnNo(wrkMast.getCrnNo());
                wrkMastRu.setSourceStaNo(wrkMast.getSourceStaNo());
                wrkMastRu.setStaNo(wrkMast.getStaNo());
//        wrkMast.setLocNo(dto.getLocNo());
                wrkMastRu.setFullPlt("N"); // 满板
                wrkMastRu.setPicking("N"); // 拣料
                wrkMastRu.setExitMk("N"); // 退出
                wrkMastRu.setEmptyMk("Y"); // 空板
                wrkMastRu.setLinkMis("Y");
                wrkMastRu.setCtnType(wrkMast.getCtnType()); // 容器类型
                // 操作人员数据
                wrkMastRu.setAppeTime(new Date());
                wrkMastRu.setModiTime(new Date());
                boolean resOther = wrkMastService.insert(wrkMastRu);
                if (!resOther) {
                    throw new CoolException("保存工作档失败");
                }
            }else if (locMast.getLocSts().equals("F")){
                // 获取源站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", 110)
                        .eq("stn_no", param.getOutSite())
                        .eq("crn_no", locMast.getCrnNo());
                StaDesc staDesc = staDescService.selectOne(wrapper);
                Integer sourceStaNo = staDesc.getCrnStn();
                if (Cools.isEmpty(sourceStaNo)) {
                    throw new CoolException("检索源站失败");
                }
                Date now = new Date();
                List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
// 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(101); // 入出库状态: 101.满板出库
                wrkMast.setIoPri(13D);
                wrkMast.setSourceStaNo(sourceStaNo); // 源站
                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMast.setCrnNo(locMast.getCrnNo());
                wrkMast.setSourceLocNo(locNo); // 源库位
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(userId);
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(userId);
                wrkMast.setModiTime(now);
                wrkMast.setWorkNoOther(workNoRu);
                boolean res = wrkMastService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("保存工作档失败");
                }
                // 更新库位状态 F.满板 -> R.出库预约
                if (locMast.getLocSts().equals("F")){
                    locMast.setLocSts("R");
                    locMast.setModiUser(userId);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新库位状态失败");
                    }
                }
                List<WaitPakin> waitPakins = new ArrayList<>();
                for (LocDetl locDetl:locDetlList){
                    Mat mat = matService.selectByMatnr(locDetl.getMatnr());
                    if (Cools.isEmpty(mat)) {
                        throw new CoolException("规格添加失败,请联系管理员");
                    }
                    WaitPakin waitPakin = new WaitPakin();
                    waitPakin.sync(locDetl);
                    waitPakin.setBatch(locDetl.getBatch());       //木箱编码  //批次  唯一值  箱号
                    waitPakin.setModel(locDetl.getModel());       //卷号  唯一值
                    waitPakin.setIoStatus("Y");     // 入出状态
                    waitPakin.setAnfme(locDetl.getAnfme());  // 数量
                    waitPakin.setStatus("Y");    // 状态
                    waitPakin.setAppeUser(userId);
                    waitPakin.setAppeTime(now);
                    waitPakin.setModiUser(userId);
                    waitPakin.setModiTime(now);
                    waitPakin.setLocNo(null);
                    if (!waitPakinService.insert(waitPakin)) {
                        throw new CoolException("保存入库通知档失败");
                    }
                    waitPakins.add(waitPakin);
                }
                // 生成工作档
                WrkMast wrkMastRu = new WrkMast();
                wrkMastRu.setWrkNo(workNoRu);
                wrkMastRu.setIoTime(new Date());
                wrkMastRu.setWrkSts(2L); // 工作状态:生成入库ID
                wrkMastRu.setIoType(1); // 入出库状态:1.入库
                wrkMastRu.setIoPri(13D); // 优先级
                wrkMastRu.setSourceStaNo(sourceStaNo); // 源站
                wrkMastRu.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMastRu.setCrnNo(locMast.getCrnNo());
                wrkMastRu.setBarcode(locMast.getBarcode()); // 托盘码
                wrkMastRu.setFullPlt("Y"); // 满板:Y
                wrkMastRu.setPicking("N"); // 拣料
                wrkMastRu.setExitMk("N"); // 退出
                wrkMastRu.setEmptyMk("N"); // 空板
                wrkMastRu.setLinkMis("Y");
                // 操作人员数据
                wrkMastRu.setAppeTime(now);
                wrkMastRu.setModiTime(now);
                boolean resOther = wrkMastService.insert(wrkMastRu);
                if (!resOther) {
                    throw new CoolException("保存工作档失败");
                }
                // 生成工作档明细
                waitPakins.forEach(waitPakin -> {
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(waitPakin);
                    wrkDetl.setWrkNo(wrkMastRu.getWrkNo());
                    wrkDetl.setIoTime(wrkMastRu.getIoTime());
                    wrkDetl.setAppeTime(now);
                    wrkDetl.setModiTime(now);
                    if (!wrkDetlService.insert(wrkDetl)) {
                        throw new CoolException("保存工作明细失败");
                    }
                });
            }else {
                throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$());
            }
        }
    }
    @Override
@@ -615,78 +829,191 @@
            if (Cools.isEmpty(locMast)) {
                throw new CoolException(locNo+"库位不存在");
            }
            if (!locMast.getLocSts().equals("D")){
                throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$());
            }
            // 获取源站
            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                    .eq("type_no", 110)
                    .eq("stn_no", param.getOutSite())
                    .eq("crn_no", locMast.getCrnNo());
            StaDesc staDesc = staDescService.selectOne(wrapper);
            Integer sourceStaNo = staDesc.getCrnStn();
            if (Cools.isEmpty(sourceStaNo)) {
                throw new CoolException("检索源站失败");
            }
            Date now = new Date();
            // 保存工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            wrkMast.setIoPri(10D);
            wrkMast.setSourceStaNo(sourceStaNo); // 源站
            wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(locNo); // 源库位
            wrkMast.setFullPlt("N"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk("Y"); // 空板
            wrkMast.setLinkMis("N");
            wrkMast.setAppeUser(userId);
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            wrkMast.setWorkNoOther(workNoRu);
            boolean res = wrkMastService.insert(wrkMast);
            if (!res) {
                throw new CoolException("保存工作档失败");
            }
            // 更新库位状态 D.空板 -> R.出库预约
            if (locMast.getLocSts().equals("D")){
                locMast.setLocSts("R");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException("更新库位状态失败");
                // 获取源站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", 110)
                        .eq("stn_no", param.getOutSite())
                        .eq("crn_no", locMast.getCrnNo());
                StaDesc staDesc = staDescService.selectOne(wrapper);
                Integer sourceStaNo = staDesc.getCrnStn();
                if (Cools.isEmpty(sourceStaNo)) {
                    throw new CoolException("检索源站失败");
                }
            }
                Date now = new Date();
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(110); // 入出库状态: 110.空板出库
                wrkMast.setIoPri(10D);
                wrkMast.setSourceStaNo(sourceStaNo); // 源站
                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMast.setCrnNo(locMast.getCrnNo());
                wrkMast.setSourceLocNo(locNo); // 源库位
                wrkMast.setFullPlt("N"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("Y"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(userId);
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(userId);
                wrkMast.setModiTime(now);
                wrkMast.setWorkNoOther(workNoRu);
                boolean res = wrkMastService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("保存工作档失败");
                }
                // 更新库位状态 D.空板 -> R.出库预约
                if (locMast.getLocSts().equals("D")){
                    locMast.setLocSts("R");
                    locMast.setModiUser(userId);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新库位状态失败");
                    }
                }
            // 生成工作档
            WrkMast wrkMastRu = new WrkMast();
            wrkMastRu.setWrkNo(workNoRu);
            wrkMastRu.setIoTime(new Date());
            wrkMastRu.setWrkSts(2L); // 工作状态:生成入库ID
            wrkMastRu.setIoType(10); // 入出库状态:10.空板入库
            wrkMastRu.setIoPri(13D); // 优先级
            wrkMastRu.setCrnNo(wrkMast.getCrnNo());
            wrkMastRu.setSourceStaNo(wrkMast.getSourceStaNo());
            wrkMastRu.setStaNo(wrkMast.getStaNo());
                // 生成工作档
                WrkMast wrkMastRu = new WrkMast();
                wrkMastRu.setWrkNo(workNoRu);
                wrkMastRu.setIoTime(new Date());
                wrkMastRu.setWrkSts(2L); // 工作状态:生成入库ID
                wrkMastRu.setIoType(10); // 入出库状态:10.空板入库
                wrkMastRu.setIoPri(13D); // 优先级
                wrkMastRu.setCrnNo(wrkMast.getCrnNo());
                wrkMastRu.setSourceStaNo(wrkMast.getSourceStaNo());
                wrkMastRu.setStaNo(wrkMast.getStaNo());
//        wrkMast.setLocNo(dto.getLocNo());
            wrkMastRu.setFullPlt("N"); // 满板
            wrkMastRu.setPicking("N"); // 拣料
            wrkMastRu.setExitMk("N"); // 退出
            wrkMastRu.setEmptyMk("Y"); // 空板
            wrkMastRu.setLinkMis("Y");
            wrkMastRu.setCtnType(wrkMast.getCtnType()); // 容器类型
            // 操作人员数据
            wrkMastRu.setAppeTime(new Date());
            wrkMastRu.setModiTime(new Date());
            boolean resOther = wrkMastService.insert(wrkMastRu);
            if (!resOther) {
                throw new CoolException("保存工作档失败");
                wrkMastRu.setFullPlt("N"); // 满板
                wrkMastRu.setPicking("N"); // 拣料
                wrkMastRu.setExitMk("N"); // 退出
                wrkMastRu.setEmptyMk("Y"); // 空板
                wrkMastRu.setLinkMis("Y");
                wrkMastRu.setCtnType(wrkMast.getCtnType()); // 容器类型
                // 操作人员数据
                wrkMastRu.setAppeTime(new Date());
                wrkMastRu.setModiTime(new Date());
                boolean resOther = wrkMastService.insert(wrkMastRu);
                if (!resOther) {
                    throw new CoolException("保存工作档失败");
                }
            }else if (locMast.getLocSts().equals("F")){
                // 获取源站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", 110)
                        .eq("stn_no", param.getOutSite())
                        .eq("crn_no", locMast.getCrnNo());
                StaDesc staDesc = staDescService.selectOne(wrapper);
                Integer sourceStaNo = staDesc.getCrnStn();
                if (Cools.isEmpty(sourceStaNo)) {
                    throw new CoolException("检索源站失败");
                }
                Date now = new Date();
                List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
// 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(101); // 入出库状态: 101.满板出库
                wrkMast.setIoPri(13D);
                wrkMast.setSourceStaNo(sourceStaNo); // 源站
                wrkMast.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMast.setCrnNo(locMast.getCrnNo());
                wrkMast.setSourceLocNo(locNo); // 源库位
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(userId);
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(userId);
                wrkMast.setModiTime(now);
                wrkMast.setWorkNoOther(workNoRu);
                boolean res = wrkMastService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("保存工作档失败");
                }
                // 更新库位状态 F.满板 -> R.出库预约
                if (locMast.getLocSts().equals("F")){
                    locMast.setLocSts("R");
                    locMast.setModiUser(userId);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新库位状态失败");
                    }
                }
                List<WaitPakin> waitPakins = new ArrayList<>();
                for (LocDetl locDetl:locDetlList){
                    Mat mat = matService.selectByMatnr(locDetl.getMatnr());
                    if (Cools.isEmpty(mat)) {
                        throw new CoolException("规格添加失败,请联系管理员");
                    }
                    WaitPakin waitPakin = new WaitPakin();
                    waitPakin.sync(locDetl);
                    waitPakin.setBatch(locDetl.getBatch());       //木箱编码  //批次  唯一值  箱号
                    waitPakin.setModel(locDetl.getModel());       //卷号  唯一值
                    waitPakin.setIoStatus("Y");     // 入出状态
                    waitPakin.setAnfme(locDetl.getAnfme());  // 数量
                    waitPakin.setStatus("Y");    // 状态
                    waitPakin.setAppeUser(userId);
                    waitPakin.setAppeTime(now);
                    waitPakin.setModiUser(userId);
                    waitPakin.setModiTime(now);
                    waitPakin.setLocNo(null);
                    if (!waitPakinService.insert(waitPakin)) {
                        throw new CoolException("保存入库通知档失败");
                    }
                    waitPakins.add(waitPakin);
                }
                // 生成工作档
                WrkMast wrkMastRu = new WrkMast();
                wrkMastRu.setWrkNo(workNoRu);
                wrkMastRu.setIoTime(new Date());
                wrkMastRu.setWrkSts(2L); // 工作状态:生成入库ID
                wrkMastRu.setIoType(1); // 入出库状态:1.入库
                wrkMastRu.setIoPri(13D); // 优先级
                wrkMastRu.setSourceStaNo(sourceStaNo); // 源站
                wrkMastRu.setStaNo(crnStaRu(locMast.getCrnNo())); // 目标站  堆垛机入库口
                wrkMastRu.setCrnNo(locMast.getCrnNo());
                wrkMastRu.setBarcode(locMast.getBarcode()); // 托盘码
                wrkMastRu.setFullPlt("Y"); // 满板:Y
                wrkMastRu.setPicking("N"); // 拣料
                wrkMastRu.setExitMk("N"); // 退出
                wrkMastRu.setEmptyMk("N"); // 空板
                wrkMastRu.setLinkMis("Y");
                // 操作人员数据
                wrkMastRu.setAppeTime(now);
                wrkMastRu.setModiTime(now);
                boolean resOther = wrkMastService.insert(wrkMastRu);
                if (!resOther) {
                    throw new CoolException("保存工作档失败");
                }
                // 生成工作档明细
                waitPakins.forEach(waitPakin -> {
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(waitPakin);
                    wrkDetl.setWrkNo(wrkMastRu.getWrkNo());
                    wrkDetl.setIoTime(wrkMastRu.getIoTime());
                    wrkDetl.setAppeTime(now);
                    wrkDetl.setModiTime(now);
                    if (!wrkDetlService.insert(wrkDetl)) {
                        throw new CoolException("保存工作明细失败");
                    }
                });
            }else {
                throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$());
            }
        }
    }