#
18516761980
2022-06-14 434b69ba26276fa37ee3fc6053b8376c2840ca37
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -90,8 +90,6 @@
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${crnBackHp.enable}")
    private boolean crnBackHp;
    /**
     * 组托
@@ -531,6 +529,11 @@
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                continue;
            }
            if(crnThread.isBackHpFlag()){
                continue;
            }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                // 如果最近一次是入库模式
@@ -556,20 +559,15 @@
            }
            // 库位移转
            this.locToLoc(crn, crnProtocol);
            this.crnRebackHp(crnProtocol, crnThread);
//            if (crnBackHp) {
//
//                //堆垛机没有执行中任务,设备存在入库任务时叫回原点
//                this.crnRebackHp(crnProtocol);
//
//            }
        }
    }
    /**
     * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点
     */
    public synchronized void crnRebackHp(CrnProtocol crnProtocol){
    public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread){
//        for (CrnSlave crn : slaveProperties.getCrn()) {
//            // 获取堆垛机信息
//            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -597,12 +595,11 @@
                    return;
                }
                //输送线没有入库任务,过滤2
                if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) {
                    return;
                }
//                log.info("堆垛机召回原点==>>" + crn.getId() + "号堆垛机有入库任务,召回原点");
                log.info("堆垛机召回原点==>>" + crnProtocol.getCrnNo() + "号堆垛机有入库任务,召回原点");
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
@@ -618,6 +615,7 @@
                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
                    log.error("堆垛机回原点命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
                }
                crnThread.setBackHpFlag(true);
            }
//        }
    }
@@ -789,7 +787,6 @@
//            // 入出库模式判断
//            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
                // 查询站点详细信息
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
@@ -841,6 +838,11 @@
                            }
                            log.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo());
                            continue;
                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) {
                                continue;
                            }
                        }
                    }
@@ -1516,10 +1518,11 @@
        // 获取工作号
        int workNo = commonService.getWorkNo(0);
        Date now = new Date();
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(11); // 入出库状态: 11.库格移载
        wrkMast.setIoPri(15D);
@@ -1533,8 +1536,8 @@
        wrkMast.setBarcode(shallowLoc.getBarcode()); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setCtnNo("Y");  // 入库阻塞库位移转标记
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiTime(new Date());
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        int res = wrkMastMapper.insert(wrkMast);
        if (res == 0) {
            throw new CoolException("保存工作档失败");
@@ -1545,11 +1548,11 @@
            for (LocDetl locDetl : locDetls) {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(new Date());
                wrkDetl.setIoTime(now);
                wrkDetl.setQty(locDetl.getQty());
                VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制
                wrkDetl.setAppeTime(new Date());
                wrkDetl.setModiTime(new Date());
                wrkDetl.setAppeTime(now);
                wrkDetl.setModiTime(now);
                if (!wrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作档明细失败");
                }
@@ -1558,7 +1561,7 @@
        // 修改源库位状态
        if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
            shallowLoc.setLocSts("S"); // S.入库预约,入库阻塞库位移转
            shallowLoc.setModiTime(new Date());
            shallowLoc.setModiTime(now);
            if (!locMastService.updateById(shallowLoc)){
                throw new CoolException("更新源库位状态失败");
            }
@@ -1601,8 +1604,6 @@
                        }
                    }
                }
                if (null != loc) { break; }
            }
        }
@@ -1610,10 +1611,20 @@
            for (Integer row : rows) {
                if (Utils.isShallowLoc(slaveProperties, row)) {
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                    if(null != loc){//对应深库位非在库状态,不能移库
                        String deepLoc = Utils.getDeepLoc(slaveProperties,loc.getLocNo());
                        LocMast deepLoc1 = locMastService.selectById(deepLoc);
                        if(!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")){
                            loc = null;
                        }
                    }
                    if (null != loc) { break; }
                }
            }
        }
        if (null == loc) {
            throw new CoolException("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo());
        }