自动化立体仓库 - WMS系统
zhangc
2025-01-18 8ca385d65454fb8e993970a768ed3ad5c3a095ab
优化库位检索逻辑,修复代码并添加新功能
3个文件已修改
133 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/AgvCommonService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -8,6 +8,7 @@
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.CodeDetectionUtil;
import com.zy.asrs.utils.OrderUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.service.AgvCommonService;
import lombok.Synchronized;
@@ -766,7 +767,7 @@
    public String handBack(AgvMobileStartPakin param, Long userId) {
        Date now = new Date();
        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo()));
        if (agvWrkMast == null){
        if (agvWrkMast == null) {
            throw new CoolException("工作档中没有此站点任务");
        }
        agvWrkMast.setIoType(113);
@@ -796,8 +797,15 @@
        agvWrkMastLogService.save(agvWrkMast);
        agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
        String sourceLocNo = agvWrkMast.getSourceLocNo();
        AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1, false, false);
        if (newLocMast==null){
        //AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1, false, false);
        // TODO: 四期
        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
        String factory = null;
        if (!Cools.isEmpty(agvWrkDetls)) {
            factory = OrderUtils.getFactory(agvWrkDetls.get(0).getThreeCode());
        }
        AgvLocMast newLocMast = agvCommonService.getLocByLocRule(3, 1, factory);
        if (newLocMast == null) {
            throw new CoolException("无可用库位");
        }
        agvWrkMast.setSourceLocNo(agvWrkMast.getLocNo());
@@ -819,7 +827,6 @@
        agvLocMastService.updateLocStsByLocNo(sourceLocNo, "O", "", (short) 30);
        agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocNo));
        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
        agvWrkDetls.forEach(agvWrkDetl -> {
            for (AgvWrkDetl wrkDetl : param.getWrkDetls()) {
                if (wrkDetl.getMatnr().equals(agvWrkDetl.getMatnr()) && wrkDetl.getThreeCode().equals(agvWrkDetl.getThreeCode())) {
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -50,6 +50,7 @@
        doAutoMove2(agvWrkMast);
        return SUCCESS;
    }
    public ReturnT<String> start3(AgvWrkMast agvWrkMast) {
        // locType 1. 自动, 2. 手动
        doHandMove2(agvWrkMast);
@@ -127,8 +128,8 @@
        Date now = new Date();
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvLocMast.getBarcode() + "货架码已在工作档中");
        }
//        //检索库位,选择合适的库位
//        AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3());
@@ -162,7 +163,7 @@
            throw new CoolException("保存工作档失败");
        }
        AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devpNo.getDevNo()).eq("source_loc_no",agvLocMast.getLocNo()));
        AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devpNo.getDevNo()).eq("source_loc_no", agvLocMast.getLocNo()));
        //生成工作档明细
        List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo()));
        agvLocDetls.forEach(agvLocDetl -> {
@@ -181,15 +182,15 @@
            }
        });
        //更新目标库位状态
        updateAgvLocMast(agvLocMast,"R");
        updateAgvBasDevp(devpNo,"S",null,agvLocMast.getBarcode());
        updateAgvLocMast(agvLocMast, "R");
        updateAgvBasDevp(devpNo, "S", null, agvLocMast.getBarcode());
        return SUCCESS;
    }
    private ReturnT<String> doAutoMove2(AgvWrkMast agvWrkMast) {
        Date now = new Date();
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,true);
        AgvLocMast locMast = agvCommonService.getLocNo(3, agvWrkMast.getCrnNo(), false, true);
        if (Cools.isEmpty(locMast)) {
            log.info("暂无库位");
            return FAIL;
@@ -207,9 +208,9 @@
        agvWrkMast.setLogErrMemo("start2-doAutoMove2");
        agvWrkMastService.updateById(agvWrkMast);
        //更新目标库位状态
        updateAgvLocMast(locMast,"S");
        updateAgvLocMast(locMast, "S");
        AgvLocMast locMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locMast.getLocNo()));
        log.info("自动调拨任务 ==> 源库位:{},目标库位:{},库位状态{}",agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo(),locMast1.getLocSts());
        log.info("自动调拨任务 ==> 源库位:{},目标库位:{},库位状态{}", agvWrkMast.getSourceLocNo(), agvWrkMast.getLocNo(), locMast1.getLocSts());
        return SUCCESS;
    }
@@ -217,7 +218,7 @@
    private ReturnT<String> doAutoMove3(AgvWrkMast agvWrkMast) {
        Date now = new Date();
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,false);
        AgvLocMast locMast = agvCommonService.getLocNo(3, agvWrkMast.getCrnNo(), false, false);
        if (Cools.isEmpty(locMast)) {
            log.info("暂无库位");
            return FAIL;
@@ -229,7 +230,7 @@
        agvWrkMast.setModiTime(new Date());
        agvWrkMastService.updateById(agvWrkMast);
        //更新目标库位状态
        updateAgvLocMast(locMast,"S");
        updateAgvLocMast(locMast, "S");
        return SUCCESS;
    }
@@ -255,27 +256,30 @@
        agvWrkMast.setLogErrMemo("start3-doHandMove2");
        agvWrkMastService.updateById(agvWrkMast);
        agvWrkMast.setModiTime(new Date());
        updateAgvBasDevp(devpNo,"S",null,agvWrkMast.getBarcode());
        updateAgvBasDevp(devpNo, "S", null, agvWrkMast.getBarcode());
        return SUCCESS;
    }
    /*
    更新目标库位信息
     */
    private void updateAgvLocMast(AgvLocMast locMast, String locSts){
    private void updateAgvLocMast(AgvLocMast locMast, String locSts) {
        locMast.setLocSts(locSts);
        agvLocMastService.updateById(locMast);
    }
    /*
    更新源站点信息
     */
    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){
        if(!Cools.isEmpty(agvBasDevp)){
    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts) {
        if (!Cools.isEmpty(agvBasDevp)) {
            agvBasDevp.setLocSts(locSts);
            agvBasDevpService.updateById(agvBasDevp);
        }
    }
    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){
        if(!Cools.isEmpty(agvBasDevp)){
    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode) {
        if (!Cools.isEmpty(agvBasDevp)) {
            agvBasDevp.setLocSts(locSts);
            agvBasDevp.setBarcode(containerCode);
            agvBasDevpService.updateById(agvBasDevp);
@@ -286,8 +290,8 @@
        Date now = new Date();
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvLocMast.getBarcode() + "货架码已在工作档中");
        }
        //检索空闲接驳位,选择合适的接驳位
        AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMast.getFloor());
@@ -319,8 +323,8 @@
        }
        //更新目标库位状态
        updateAgvLocMast(agvLocMast,"R");
        updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode());
        updateAgvLocMast(agvLocMast, "R");
        updateAgvBasDevp(devpNo, "S", agvLocMast.getLocType2(), agvLocMast.getBarcode());
        return SUCCESS;
    }
@@ -328,7 +332,7 @@
        Date now = new Date();
        AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
        //检索空闲接驳位,选择合适的接驳位
        AgvLocMast locMast = agvCommonService.getLocNo(3, 1,true,true);
        AgvLocMast locMast = agvCommonService.getLocNo(3, 1, true, true);
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("1楼暂无空库位");
        }
@@ -342,8 +346,8 @@
            throw new CoolException("保存工作档失败");
        }
        //更新目标库位状态
        updateAgvLocMast(locMast,"S");
        updateAgvBasDevp(agvBasDevp,"R");
        updateAgvLocMast(locMast, "S");
        updateAgvBasDevp(agvBasDevp, "R");
        return SUCCESS;
    }
@@ -393,8 +397,8 @@
        Date now = new Date();
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvLocMast.getBarcode() + "货架码已在工作档中");
        }
        String floor = "";
        String locNo = "";
@@ -403,8 +407,10 @@
        AgvLocMast locMast = new AgvLocMast();
        if (agvLocMast.getFloor() == 3) {
            floor = "F3";
        } else if(agvLocMast.getFloor() == 2) {
        } else if (agvLocMast.getFloor() == 2) {
            floor = "F2";
        } else if (agvLocMast.getFloor() == 1 && agvLocMast.getLev1() == 2) {
            floor = "02F1";
        }
        List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113));
        if (agvWrkMasts.size() >= 5) {
@@ -413,14 +419,14 @@
            //throw new CoolException("暂停回流");
        }
        //检索空闲可入接驳位 没有空闲可入接驳位 直接找库位
        AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMast.getFloor(),"Y","Y");
        AgvBasDevp devpNo = agvCommonService.getDevpNo(3, agvLocMast.getFloor(), "Y", "Y");
        if (!Cools.isEmpty(devpNo)) {
            locNo = devpNo.getDevNo();
            wrkSts = 21L;
            ioType = 109;
        } else {
            //检索库位,选择合适的库位
            locMast = agvCommonService.getLocNo(3,1,true,true);
            locMast = agvCommonService.getLocNo(3, 1, true, true);
            locNo = locMast.getLocNo();
            wrkSts = 201L;
            ioType = 109;
@@ -454,11 +460,11 @@
        }
        //更新目标库位状态
        updateAgvLocMast(agvLocMast,"R");
        updateAgvLocMast(agvLocMast, "R");
        if (wrkSts == 21L) {
            updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode());
            updateAgvBasDevp(devpNo, "S", agvLocMast.getLocType2(), agvLocMast.getBarcode());
        } else {
            updateAgvLocMast(locMast,"S");
            updateAgvLocMast(locMast, "S");
        }
@@ -470,8 +476,8 @@
        Date now = new Date();
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvLocMast.getBarcode() + "货架码已在工作档中");
        }
        String floor = "";
        String locNo = "";
@@ -480,7 +486,7 @@
        AgvLocMast locMast = new AgvLocMast();
        if (agvLocMast.getFloor() == 3) {
            floor = "F3";
        } else if(agvLocMast.getFloor() == 2) {
        } else if (agvLocMast.getFloor() == 2) {
            floor = "F2";
        }
        List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113));
@@ -490,14 +496,14 @@
            //throw new CoolException("暂停回流");
        }
        //检索空闲可入接驳位 没有空闲可入接驳位 直接找库位
        AgvBasDevp devpNo = agvCommonService.getDevpNo(6, agvLocMast.getFloor(),"Y","Y");
        AgvBasDevp devpNo = agvCommonService.getDevpNo(6, agvLocMast.getFloor(), "Y", "Y");
        if (!Cools.isEmpty(devpNo)) {
            locNo = devpNo.getDevNo();
            wrkSts = 21L;
            ioType = 109;
        } else {
            //检索库位,选择合适的库位
            locMast = agvCommonService.getLocNo(6,1,true,true);
            locMast = agvCommonService.getLocNo(6, 1, true, true);
            locNo = locMast.getLocNo();
            wrkSts = 201L;
            ioType = 109;
@@ -531,11 +537,11 @@
        }
        //更新目标库位状态
        updateAgvLocMast(agvLocMast,"R");
        updateAgvLocMast(agvLocMast, "R");
        if (wrkSts == 21L) {
            updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode());
            updateAgvBasDevp(devpNo, "S", agvLocMast.getLocType2(), agvLocMast.getBarcode());
        } else {
            updateAgvLocMast(locMast,"S");
            updateAgvLocMast(locMast, "S");
        }
@@ -546,8 +552,8 @@
    public ReturnT<String> autoEmptyBack5(AgvBasDevp agvBasDevp) {
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvBasDevp.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvBasDevp.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvBasDevp.getBarcode() + "货架码已在工作档中");
        }
        Date now = new Date();
        //生成工作档
@@ -573,9 +579,9 @@
            //入出库类型
            mast.setIoType(109);
            //检索库位,选择合适的库位
            AgvLocMast locMast = agvCommonService.getLocNo(3,1,true,true);
            AgvLocMast locMast = agvCommonService.getLocNo(3, 1, true, true);
            mast.setLocNo(locMast.getLocNo());
            updateAgvLocMast(locMast,"S");
            updateAgvLocMast(locMast, "S");
        } else {
            //工作状态
            mast.setWrkSts(212L);
@@ -588,7 +594,7 @@
            throw new CoolException("保存工作档失败");
        }
        //更新目标库位状态
        updateAgvBasDevp(agvBasDevp,"R");
        updateAgvBasDevp(agvBasDevp, "R");
        return SUCCESS;
@@ -597,8 +603,8 @@
    public ReturnT<String> autoEmptyBack6(AgvBasDevp agvBasDevp) {
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvBasDevp.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvBasDevp.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvBasDevp.getBarcode() + "货架码已在工作档中");
        }
        Date now = new Date();
        //生成工作档
@@ -627,13 +633,13 @@
            throw new CoolException("保存工作档失败");
        }
        //更新目标库位状态
        updateAgvBasDevp(agvBasDevp,"R");
        updateAgvBasDevp(agvBasDevp, "R");
        return SUCCESS;
    }
    public ReturnT<String> autoTransfers(AgvLocMast agvLocMast,Integer maxTansk) {
    public ReturnT<String> autoTransfers(AgvLocMast agvLocMast, Integer maxTansk) {
        Date now = new Date();
        List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo()));
        locDetls.forEach(agvLocDetl -> {
@@ -643,11 +649,11 @@
        });
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode());
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        if (!Cools.isEmpty(agvWrkMast)) {
            throw new CoolException("当前" + agvLocMast.getBarcode() + "货架码已在工作档中");
        }
        //检索库位,选择合适的库位
        AgvLocMast LocMast = agvCommonService.getLocNo(3,1,false,false);
        AgvLocMast LocMast = agvCommonService.getLocNo(3, 1, false, false);
        if (LocMast.getLev1() != 2) {
            throw new CoolException("目标楼层不是吸塑二楼");
        }
@@ -682,7 +688,7 @@
            throw new CoolException("保存工作档失败");
        }
        AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", LocMast.getLocNo()).eq("source_loc_no",agvLocMast.getLocNo()));
        AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", LocMast.getLocNo()).eq("source_loc_no", agvLocMast.getLocNo()));
        //生成工作档明细
        List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo()));
        agvLocDetls.forEach(agvLocDetl -> {
@@ -700,8 +706,8 @@
            }
        });
        //更新目标库位状态
        updateAgvLocMast(agvLocMast,"R");
        updateAgvLocMast(LocMast,"S");
        updateAgvLocMast(agvLocMast, "R");
        updateAgvLocMast(LocMast, "S");
        return SUCCESS;
    }
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -168,10 +168,6 @@
                }
            }
            //当目标库位是1楼
            if (floor == 1) {
                wrapper.orderBy("loc_no", false);
            }
            agvLocMasts = agvLocMastService.selectList(wrapper);
            for (AgvLocMast agvLocMast : agvLocMasts) {
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));