自动化立体仓库 - WMS系统
zhangc
2025-01-14 9f0fe04350c019c2ed1655d5b833648788734994
优化库位检索逻辑,移除冗余参数
6个文件已修改
135 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvMobileController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvWorkService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/AgvCommonService.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -77,7 +77,7 @@
    @RequestMapping("/pick/again/auth")
    @ManagerAuth(memo = "再次拣料")
    public R pickAgain(@RequestBody PickParam pickParams) {
        if (pickParams == null ) {
        if (pickParams == null) {
            return R.error("缺少参数");
        }
        agvMobileService.pickAgain(pickParams, 1l);
@@ -177,6 +177,9 @@
            return R.error("缺少参数");
        }
        for (AgvMobileStartParam.Pda pda : params.getPad()) {
            if (pda == null || Cools.isEmpty(pda.getContainerCode())) {
                return R.error("缺少容器信息");
            }
            pda.setContainerType(Short.valueOf(pda.getContainerCode().substring(0, 2)));
            workService.emptyPlateIn(pda.getDevNo(), pda.getContainerCode(), pda.getContainerType(), getUserId(), false);
        }
@@ -416,7 +419,7 @@
        AgvLocMast agvLocMastByContainerCode = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
        AgvLocMast agvLocMastByLocNo = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo));
        if (agvLocMastByLocNo==null){
        if (agvLocMastByLocNo == null) {
            return R.error("库位不存在");
        }
        String barcode1 = agvLocMastByLocNo.getBarcode();
src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -44,7 +44,7 @@
    /*
    空板入库
     */
    String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn, String factory );
    String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn);
    void emptyPlateOut(String station, int containerType, Long userId);
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -4,6 +4,7 @@
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.constant.AsrsConstants;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
@@ -760,7 +761,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);
@@ -790,8 +791,23 @@
        agvWrkMastLogService.save(agvWrkMast);
        agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
        String sourceLocNo = agvWrkMast.getSourceLocNo();
        AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1, false, false);
        if (newLocMast==null){
        // TODO 四期
        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
        String factory = null;
        if (agvWrkDetls != null && !Cools.isEmpty(agvWrkDetls)) {
            String orderNo = agvWrkDetls.get(0).getOrderNo();
            if (!Cools.isEmpty(orderNo)) {
                if (orderNo.contains(AsrsConstants.ERCHANG)) {
                    factory = AsrsConstants.ERCHANG;
                } else if (orderNo.contains(AsrsConstants.SANCHANG)) {
                    factory = AsrsConstants.SANCHANG;
                }
            }
        }
        AgvLocMast newLocMast = agvCommonService.getLocByLocRule(3, 1, factory);
        //AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1, false, false);
        if (newLocMast == null) {
            throw new CoolException("无可用库位");
        }
        agvWrkMast.setSourceLocNo(agvWrkMast.getLocNo());
@@ -813,7 +829,7 @@
        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()));
        //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/service/impl/AgvWorkServiceImpl.java
@@ -103,7 +103,7 @@
            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
            //检索库位,选择合适的库位
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(), agvBasDevp.getFloor(), false, false,null);
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(), agvBasDevp.getFloor(), false, false, null);
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(1, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), agvBasDevp.getBarcode(), now, userId, agvBasDevp.getLocType2(), agvLocMast.getPltType());
            //标记是否为输送线入库
@@ -480,7 +480,7 @@
    入库
     */
    @Transactional
    public String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn,String factory) {
    public String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn) {
        Date now = new Date();
@@ -528,9 +528,9 @@
            locType = 2;
        } else if (containerType == 30) {
            locType = 3;
        }  else if (containerType == 31) {
        } else if (containerType == 31) {
            locType = 6;
        }else {
        } else {
            locType = agvBasDevp.getLocType1();
        }
@@ -569,19 +569,19 @@
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
            if (Cools.isEmpty(config)) {
                if (isCurrLev.get()) {
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory);
                } else {
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false,factory);
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false, factory);
                }
            } else {
                List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
                if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory);
                } else {
                    if (isCurrLev.get()) {
                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory);
                    } else {
                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false,factory);
                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false, factory);
                    }
                    //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
                }
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -189,7 +189,7 @@
    private ReturnT<String> doAutoMove2(AgvWrkMast agvWrkMast) {
        Date now = new Date();
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,true,null);
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,true);
        if (Cools.isEmpty(locMast)) {
            log.info("暂无库位");
            return FAIL;
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -78,7 +78,7 @@
     * 检索库位号
     * @return locNo 检索到的库位号
     */
    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev, String factory) {
    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev) {
        // 目标库位
        AgvLocMast locMast = null;
//        if(Cools.isEmpty(agvWaitPakinList)){
@@ -120,16 +120,16 @@
            // 开始查找库位 ==============================>>
            // 四期项目:需要改查找库位逻辑
            // 箱壳入库
            if (type == 3 && factory != null) {
                //优先入库吸塑1楼,在2楼
                locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory);
            } else if (type == 6) {
                //半成品箱壳入库,入到吸塑2楼的370个库位里
                locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2);
            } else {
                //不动这个逻辑
                locMast = getLocNoRule(type, floor, isEmpty, isCurrLev);
            }
//            if (type == 3 && factory != null) {
//                //优先入库吸塑1楼,在2楼
//                locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory);
//            } else if (type == 6) {
//                //半成品箱壳入库,入到吸塑2楼的370个库位里
//                locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2);
//            } else {
//                //不动这个逻辑
            locMast = getLocNoRule(type, floor, isEmpty, isCurrLev);
//            }
            if (locMast != null) {
                return locMast;
            }
@@ -144,35 +144,45 @@
    /*
    库位规则查找
     */
    private AgvLocMast getLocByLocRule(AgvWaitPakin agvWaitPakin, int floor) {
        List<AgvLocRule> agvLocRules = null;
        agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
                .eq("matnr", agvWaitPakin.getMatnr())
                .eq("batch", agvWaitPakin.getModel())
                .eq("floor", floor));
        if (Cools.isEmpty(agvLocRules)) {
            agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
                    .eq("matnr", agvWaitPakin.getMatnr())
                    .eq("floor", floor));
        }
        if (Cools.isEmpty(agvLocRules)) {
            return null;
        }
    public AgvLocMast getLocByLocRule(int type, int floor, String factory) {
        for (AgvLocRule agvLocRule : agvLocRules) {
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.between("row1", agvLocRule.getRowBeg(), agvLocRule.getRowEnd())
                    .between("bay1", agvLocRule.getBayBeg(), agvLocRule.getBayEnd())
                    .between("lev1", agvLocRule.getLevBeg(), agvLocRule.getLevEnd())
                    .eq("floor", floor)
                    .eq("loc_sts", "O");
            AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper);
            if (!Cools.isEmpty(agvLocMast)) {
                return agvLocMast;
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            List<AgvLocMast> agvLocMasts = new ArrayList<>();
            //不是空板优先找2层
            if (Cools.isEmpty(factory)) {
                wrapper.eq("floor", floor).orderBy("lev1", false);
            } else {
                //B是二厂,G是三厂
                switch (factory) {
                    case "B":
                        wrapper.eq("floor", floor).orderBy("lev1", true);
                        break;
                    case "G":
                        wrapper.eq("floor", floor).orderBy("lev1", false);
                        break;
                    default:
                        wrapper.eq("floor", floor).orderBy("lev1", true);
                        break;
                }
            }
        }
        return null;
            //当目标库位是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()));
                if (agvLocMast1.getLocSts().equals("O")) {
                    return agvLocMast1;
                }
            }
            throw new CoolException("搜索库位时,未找到可入库库位。");
        } catch (Exception e) {
            throw new CoolException("搜索库位时,未找到可入库库位。");
        }
    }
    /*