#
TQS
2023-04-12 94f53c5d70e9150b09de00480060b2afe2f6c099
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -326,15 +326,20 @@
                        continue;
                    }
                    short staNo;
                    List<BasDevp> basDevps1 = basDevpMapper.getLoading(103);
                    List<BasDevp> basDevps2 = basDevpMapper.getLoading(203);
                    switch (wrkMast.getSourceStaNo()) {
                        case 104:
                        case 108:
                            staNo = 103;
                            List<BasDevp> basDevps1 = basDevpMapper.getLoading(103);
                            if (basDevps1.size()!=0){
                            if (basDevps1.size()!=0 && basDevps2.size()!=0){
                                continue;
                            } else if (basDevps1.size()!=0){
                                staNo = 203;
                            }
                            List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType(103);
                            List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int)staNo);
                            if (wrkMasts1.size()!=0){
                                boolean flag = false;
                                for (WrkMast wrkMast1:wrkMasts1){
@@ -352,11 +357,16 @@
                        case 204:
                        case 208:
                            staNo = 203;
                            List<BasDevp> basDevps2 = basDevpMapper.getLoading(203);
                            if (basDevps2.size()!=0){
                            if (basDevps1.size()!=0 && basDevps2.size()!=0){
                                continue;
                            } else if (basDevps2.size()!=0){
                                staNo = 103;
                            }
                            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType(203);
//                            if (basDevps2.size()!=0){
//                                continue;
//                            }
                            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int)staNo);
                            if (wrkMasts2.size()!=0){
                                boolean flag = false;
                                for (WrkMast wrkMast1:wrkMasts2){
@@ -493,7 +503,7 @@
                        Integer code = jsonObject.getInteger("code");
                        if (code.equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            News.info("再入库获取新库位成功,返回数据===>>", JSON.toJSON(dto));
//                            // 获取目标站
//                            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
//                                    .eq("type_no", wrkMast.getIoType() - 50)
@@ -521,6 +531,7 @@
                            // 更新工作档数据状态
                            wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
                            wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走
                            wrkMast.setIoPri(13D);
                            wrkMast.setSourceStaNo(pickSta.getStaNo()); // 源站
                            wrkMast.setStaNo(dto.getStaNo()); // 目标站
                            wrkMast.setCrnNo(dto.getCrnNo());
@@ -564,6 +575,9 @@
                            ledThread.errorReset();
                            if(wrkMast.getIoType()>100){
                                throw new CoolException("再入库更新工作档失败,不能给PLC下发任务===>>" + wrkMast.getWrkNo());
                            }
                            // 更新站点信息 且 下发plc命令
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
@@ -744,6 +758,7 @@
                        // 更新工作档状态为 17.出库完成
                        wrkMast.setWrkSts(17L);
                        wrkMast.setSteNo(0);
                        wrkMast.setIoPri(15D);
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
@@ -1061,11 +1076,11 @@
            if (wrkMast.getCrnNo().equals(2)){
                if (wrkMast.getStaNo() == 103 && devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) {
                    News.error("MainServiceImpl  locToCrnStn"+"103非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo());
                    continue;
                    return false;
                }
                if (wrkMast.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
                    News.error("MainServiceImpl  locToCrnStn"+"203非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo());
                    continue;
                    return false;
                }
                if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)){
@@ -1073,7 +1088,7 @@
                    List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType0(sour);
                    if (wrkMasts.size() > 0){
                        News.error("MainServiceImpl  1028行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!");
                        continue;
                        return false;
                    }
                }
@@ -1082,7 +1097,7 @@
                    List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour);
                    if (wrkMasts.size() > 0){
                        News.error("MainServiceImpl  1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!");
                        continue;
                        return false;
                    }
                }
            }
@@ -1154,6 +1169,8 @@
                                        .last(" and wrk_sts in (12,13,14,15,16)"));
                                if(one2==null) {
                                    moveLocForDeepLoc(slave, shallowLoc);
                                } else {
                                    News.error("浅库位阻塞时,且浅库位存在作业中出库任务!工作号={}", one2.getWrkNo());
                                }
                                flag = true;
                                break;
@@ -1171,11 +1188,17 @@
                            break;
                        }
                        //20230307 ADD,再加一次判断,当浅库位状态不为O时,不执行当前出库任务
                        if(shallowLoc!=null && !shallowLoc.getLocSts().equals("O")){
                            News.error("做了浅库位阻塞处理后反复判断,浅库位状态不为O ===>> 浅库位库位状态为入库预约!出库库位={},浅库位号={}", wrkMast.getSourceLocNo(), shallowLoc.getLocNo());
                            flag = true;
                            break;
                        }
                    }
                }
            }
            if(flag){
                continue;
                return false;
            }
            // 工作档状态判断
@@ -1186,7 +1209,7 @@
            // 获取源库位信息
            LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
            if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) {
                News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts());
                News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts());
                continue;
            }
@@ -1596,6 +1619,10 @@
                            && !deepLoc.getLocSts().equals("O")
                            && (waitWrkMast!=null && waitWrkMast.getWrkSts()<18)){
                        News.error("移库再回库时,深库位组深库位状态为作业中 ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts());
                        if(waitWrkMast.getIoPri()<9999) {//调高优先级
                            waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 1);
                            wrkMastService.updateById(waitWrkMast);
                        }
                        flag = true;
                        break;
                    }
@@ -2294,6 +2321,10 @@
        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
        SteProtocol steProtocol = steThread.getSteProtocol();
        if (steProtocol == null) { return; }
        if(steProtocol.getLoad() == 1){
            News.error("小车上方有货,无法下发任务===>>{}", steNo);
            return;
        }
        if (steProtocol.isIdle() && steProtocol.getLoad() == 0) {
            // 堆垛机空闲
            if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) {
@@ -2314,18 +2345,35 @@
                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                    if( crnCommand.getSourcePosX() == crnCommand.getDestinationPosX()
                        && crnCommand.getSourcePosY() == crnCommand.getDestinationPosY()
                        && crnCommand.getSourcePosZ() == crnCommand.getDestinationPosZ()){
                        //打补丁,如果出现源排列层 和目标排列层完全相同时,不给堆垛机发任务,状态直接由3 ==>> 6
                        // 修改穿梭车运行中排列层
                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
                        // 修改工作档状态 3.小车待搬 => 4.迁入小车
                        // 修改工作档状态 3.小车待搬 => 6.小车待入
                        Date now = new Date();
                        wrkMast.setWrkSts(4L);
                        wrkMast.setWrkSts(6L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.error("修改工作档状态 3.小车待搬 => 4.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo());
                            News.error("修改工作档状态 3.小车待搬 => 6.小车待入 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                    } else {
                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                            News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                        } else {
                            // 修改穿梭车运行中排列层
                            steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
                            // 修改工作档状态 3.小车待搬 => 4.迁入小车
                            Date now = new Date();
                            wrkMast.setWrkSts(4L);
                            wrkMast.setCrnStrTime(now);
                            wrkMast.setModiTime(now);
                            if (wrkMastMapper.updateById(wrkMast) == 0) {
                                News.error("修改工作档状态 3.小车待搬 => 4.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo());
                            }
                        }
                    }
                // 出库搬
@@ -2684,7 +2732,7 @@
                            SteCommand steCommand = new SteCommand();
                            steCommand.setSteNo(wrkMast.getSteNo()); // 穿梭车编号
                            steCommand.setTaskNo(9999); // 工作号
                            steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 任务模式:  去近点 等待堆垛机叉取
                            steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 任务模式:  去待机位避让
//                        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
//                        steCommand.setBay(steProtocol.getBay());
//                        steCommand.setLev(steProtocol.getLev());
@@ -3404,6 +3452,7 @@
                }
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                ledCommand.setBarcode(wrkMast.getBarcode());
                if (wrkMast.getIoType() != 110) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    wrkDetls.forEach(wrkDetl -> {
@@ -3857,7 +3906,11 @@
                    boolean success = true;
                    List<String> insideLoc = Utils.getGroupInsideLoc(one.getLocNo());
                    for (String inside : insideLoc) {
                        if (locMastService.selectById(inside).getLocSts().equals("P")
                        LocMast locMast = locMastService.selectById(inside);
                        if(Cools.isEmpty(locMast)){
                            continue;
                        }
                        if (locMast.getLocSts().equals("P")
                                || locMastService.selectById(inside).getLocSts().equals("R")
                                || locMastService.selectById(inside).getLocSts().equals("S")
                                || locMastService.selectById(inside).getLocSts().equals("Q")) {