自动化立体仓库 - WMS系统
#
whycq
2024-06-12 93674068e900b95726ef1ab9fd4dd61b50a1cb2f
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -27,6 +27,7 @@
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
 * Created by vincent on 2020/6/11
@@ -91,7 +92,7 @@
            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
            //检索库位,选择合适的库位
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(),agvBasDevp.getFloor());
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(),agvBasDevp.getFloor(),false,false);
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId, agvBasDevp.getLocType2());
            //标记是否为输送线入库
@@ -328,6 +329,33 @@
        if (Cools.isEmpty(agvBasDevp)) {
            throw new CoolException("暂无"+ station + "站点");
        }
        int br = 0;
        if (containerType == 21 && agvBasDevp.getFloor() == 2) {
            containerType = 20;
        }
        switch (containerType) {
            case 10:
                br = 1;
                break;
            case 20:
                br = 2;
                break;
            case 21:
                br = 4;
                break;
            case 30:
                br = 3;
                break;
            case 40:
                br = 5;
                break;
        }
        if (br == 4 && agvBasDevp.getLocType1() == 2) {
            br = 2;
        }
        if (agvBasDevp.getLocType1() != br) {
            throw new CoolException("站点异常!");
        }
        if (containerType == 40) {
            locType = 5;
        } else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
@@ -349,11 +377,24 @@
        }
        //检索库位,选择合适的库位
        AgvLocMast agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor());
        AgvLocMast agvLocMast = new AgvLocMast();
        //查询入库通知档
        List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
        if(!Cools.isEmpty(agvWaitPakinList)){
            AtomicBoolean isCurrLev = new AtomicBoolean(false);
            agvWaitPakinList.forEach(agvWaitPakin -> {
                if (agvWaitPakin.getProcessSts() == 1) {
                    isCurrLev.set(true);
                }
            });
            if (isCurrLev.get()) {
                agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,true);
            } else {
                agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
            }
            String devNo = agvBasDevp.getDevNo();
@@ -363,13 +404,14 @@
            AgvWrkMast wrkMast = createWrkMast(1,201L,devNo,locNo,containerCode,now,userId, containerType);
            //生成工作档明细
            agvWaitPakinList.forEach(wp -> {
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime());
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime(),wp.getProcessSts());
            });
            //修改入库通知档状态
            agvWaitPakinService.updateIoStatus(containerCode,"Y");
            //更新源站点状态
            updateAgvBasDevp(agvBasDevp,"R",containerType);
        }else {
            agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),true,true);
            // 生成工作档 10.空板入库
            createWrkMast(10,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),containerCode,now,userId,containerType);
            //更新源站点状态
@@ -559,17 +601,6 @@
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
//        if(!wrkMast.getLocNo().contains("@") || !wrkMast.getSourceLocNo().contains("@")){
//            throw new CoolException("目标库位或者源库位暂未分配,无法取消");
//        }
        //修改AGV工作档的工作状态为205.工作完成
        //agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205);
        //if (wrkMast.getIoType() == 101) {
        //    agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),206,"手动完成",userId);
        //} else {
        //    agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205,"手动完成",userId);
        //}
        if (wrkMast.getIoType()==121){
            if (wrkMast.getWrkSts()<12L){
@@ -584,8 +615,12 @@
            }
            return;
        } else {
            agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205,"手动完成",userId);
        } else  {
            if(wrkMast.getIoType() == 110){
                agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),206,"手动完成",userId);
            } else {
                agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205,"手动完成",userId);
            }
        }
        //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库
@@ -598,9 +633,7 @@
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(),"O","",wrkMast.getWhsType().shortValue());
        }
        //出库任务 110.空板出库
        if(wrkMast.getIoType() == 110){
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
        }
        if (wrkMast.getIoType() == 10) {
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(),"O",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
        }
@@ -889,7 +922,7 @@
    /*
    生成工作档明细
     */
    private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq){
    private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq,Integer processSts){
        Mat mat = matService.selectByMatnr(matnr);
        if (Cools.isEmpty(mat)) {
            throw new CoolException(matnr + "商品维护失败");
@@ -902,11 +935,11 @@
        wrkDetl.setBatch(batch);
        wrkDetl.setAnfme(anfme); // 数量
        wrkDetl.setSuppCode(zpallet); // 货架条码
        wrkDetl.setProcessSts(processSts);
        wrkDetl.setAppeUser(userId);
        wrkDetl.setAppeTime(now);
        wrkDetl.setModiUser(userId);
        wrkDetl.setModiTime(now);
        wrkDetl.setThreeCode(csocode);
        wrkDetl.setDeadTime(isoseq);
        if (!agvWrkDetlService.insert(wrkDetl)) {