自动化立体仓库 - WCS系统
野心家
2023-09-20 adf71f92c6a16231d08d47a80826f7a37e3ce047
优化移深库位,自动移浅库位
1个文件已修改
74 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1063,6 +1063,46 @@
            return;
        }
        // 双深库位且浅库位有货,则需先对浅库位进行库位移转
        if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
            String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
            LocMast shallowLoc = locMastService.selectById(shallowLocNo);
            // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
            if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                if (null == waitWrkMast) {
                    log.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                } else {
                    if(waitWrkMast.getWrkSts() == 11) {
                        waitWrkMast.setIoPri(15D);
                        waitWrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                            log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
                        }
                    } else {
                    }
                }
            } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                // 此标记避免多次执行移库任务
//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
//                                || Cools.isEmpty(waitWrkMast)) {
                if (Cools.isEmpty(waitWrkMast)) {
                    wrkMast.setUpdMk("Y");
                    wrkMastMapper.updateById(wrkMast);
                    // 生成工作档,将浅库位移转到新的库位中
                    moveLocForDeepLoc(slave, shallowLoc);
                }
                log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(),shallowLocNo);
            } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){
                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) {
                }
            }else if(shallowLoc.getLocSts().equals("O")){
        // 已经存在吊车执行任务时,则过滤
        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
            return;
@@ -1092,6 +1132,40 @@
                log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
            }
        }
            }
        }else {
            // 已经存在吊车执行任务时,则过滤
            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                return;
            }
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
            crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
            crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
            crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
            crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排
            crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层
            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
                // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                Date now = new Date();
                wrkMast.setWrkSts(12L);
                wrkMast.setCrnStrTime(now);
                wrkMast.setModiTime(now);
                if (wrkMastMapper.updateById(wrkMast) == 0) {
                    log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                }
            }
        }
    }