#
whycq
2022-11-16 a274cbb41ccb08ab2b88672324aa2e4b7faaa57c
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -701,6 +701,14 @@
                log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                continue;
            }
            //加强判断,只要存在移库任务,说明出库任务未完全结束,不执行入库任务
            WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId());
            if(!Cools.isEmpty(one)){
                log.error("入库 ===>> 存在移库未完成任务,不能入库。移库任务号={},堆垛机号={}", one.getWrkNo(), slave.getId());
                continue;
            }
            // 获取工作状态为 2,3,4,5,6 的入库工作档
            WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
            if(null == wrkMast) {
@@ -895,6 +903,23 @@
                continue;
            }
            //加强判断,确保因出库导致的移库整套任务全部结束后,才能执行下一笔出库任务。只有库位完成移库回去全部任务后,才认为当组出库任务完成
            WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId());
            if(!Cools.isEmpty(one)){
                //存在移库任务,且在移出中,且移库源库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔
                if(one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo())
                        || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getSourceLocNo())
                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))){
                    continue;
                }
                //存在移库任务,且在移回中,且移库目标库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔
                if(one.getWrkSts() < 11  && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo())
                        || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getLocNo())
                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))){
                    continue;
                }
            }
            //出库库位不是最外层库位,判断浅库位组是否都为空,或存在库位移转任务
            boolean flag = false;
            if(!locMastService.isOutMost(wrkMast.getSourceLocNo())){
@@ -930,9 +955,12 @@
                                flag = true;
                                break;
                            } else {
                                log.error("库位出库到堆垛机站 ===>> 库位状态在库,但是浅库位已存在工作档任务!出库库位={},浅库位号={}", shallowLoc.getLocNo());
                                flag = true;
                                break;
                                if (waitWrkMast.getWrkSts()!=18) {
                                    log.error("库位出库到堆垛机站 ===>> 库位状态在库,但是浅库位已存在工作档任务!出库库位={},浅库位号={}", shallowLoc.getLocNo());
                                    flag = true;
                                    break;
                                }
                            }
                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){
                            log.error("库位出库到堆垛机站 ===>> 浅库位库位状态为入库预约!出库库位={},浅库位号={}", shallowLoc.getLocNo());
@@ -1326,7 +1354,8 @@
                for(String deepLocNo : deeplocs) {
                    LocMast deepLoc = locMastService.selectById(deepLocNo);
//                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(deepLocNo);
                    if(deepLoc != null && !deepLoc.getLocSts().equals("F") && deepLoc.getLocSts().equals("D") && deepLoc.getLocSts().equals("O")){
                    if(deepLoc != null && !deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("O")){
                        log.error("移库再回库时,深库位组深库位状态为作业中 ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts());
                        flag = true;
                        break;
                    }
@@ -1339,7 +1368,7 @@
                        wrkMast.setSteNo(null);
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                            log.error("修改工作档状态 17.移库完成 => 2.移库再入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                        if(deepLoc.getLocSts().equals("O")){
@@ -1351,13 +1380,13 @@
                            }
                        }
                        LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
//                        if(sourceLoc.getLocSts().equals("F")){
                        if(sourceLoc.getLocSts().equals("F")){
                            sourceLoc.setLocSts("R"); // R.出库预约
                            sourceLoc.setModiTime(new Date());
                            if (!locMastService.updateById(sourceLoc)) {
                                throw new CoolException("更新移库回库目标库位状态失败");
                            }
//                        }
                        }
                        break;
                    }
                }
@@ -2383,12 +2412,35 @@
//                        }
                        if (locMastService.isOutMost(wrkMast.getLocNo())) {
                            wrkMast.setWrkSts(17L);
//                            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
//                            locMast.setLocSts("F");
//                            locMast.setModiTime(new Date());
//                            if (!locMastService.updateById(locMast)) {
//                                log.error("");
//                            }
                            // 默认目标库位是空板
                            String locSts = "D";
                            // 库位移转判断是否为空板移转
                            if (wrkMast.getEmptyMk().equals("N")) {
                                locSts = "F";
                                // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
                                if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
                                    log.error("库位移转 ===>> 转移库存明细数据失败;[源库位={}],[目标库位={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                                    continue;
                                }
                            }
                            // 修改源库位状态 ==> O
                            LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                            if (null != sourceLoc) {
                                sourceLoc.setBarcode("");
                                sourceLoc.setLocSts("O");
                                sourceLoc.setModiTime(now);
                                sourceLoc.setIoTime(now);
                                if (!locMastService.updateById(sourceLoc)) {
                                    log.error("库位移转 ===>> 修改源库位状态失败;[workNo={}],[sourceLoc={}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                                }
                            }
                            // 修改目标库位状态 ==> .locSts
                            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                            locMast.setLocSts(locSts);
                            locMast.setModiTime(new Date());
                            if (!locMastService.updateById(locMast)) {
                                log.error("");
                            }
                        }
                        wrkMast.setModiTime(now);
                        // 修改成功后复位堆垛机
@@ -3027,10 +3079,13 @@
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    wrkDetls.forEach(wrkDetl -> {
                        if (wrkMast.getIoType() == 101) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme()));
                        }
                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme()));
                        }
                        if (wrkMast.getIoType() == 107) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getAnfme()));
                        }
                    });
                }