#
tqs
2022-11-11 638386c068f28e82b65701146d292b14d0ef6806
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -472,12 +472,12 @@
                            }
                            LocMast locMast = null;
                            // 修改源库位状态 O.空库位
                            locMast = locMastService.selectById(sourceLocNo);
                            locMast.setLocSts("O");
                            locMast.setModiTime(new Date());
                            if (!locMastService.updateById(locMast)) {
                                throw new CoolException(wrkMast.getWrkNo() + "修改源库位状态 O.空库位");
                            }
//                            locMast = locMastService.selectById(sourceLocNo);
//                            locMast.setLocSts("O");
//                            locMast.setModiTime(new Date());
//                            if (!locMastService.updateById(locMast)) {
//                                throw new CoolException(wrkMast.getWrkNo() + "修改源库位状态 O.空库位");
//                            }
                            // 修改目标库位状态 Q.拣料/盘点/并板再入库
                            locMast = locMastService.selectById(wrkMast.getLocNo());
                            locMast.setLocSts("Q");
@@ -486,9 +486,9 @@
                                throw new CoolException(wrkMast.getWrkNo() + "修改目标库位状态 Q.拣料/盘点/并板再入库");
                            }
                            // 库存明细转移
                            if (!locDetlService.updateLocNo(wrkMast.getLocNo(), sourceLocNo)) {
                                throw new CoolException(wrkMast.getWrkNo() + "任务库存明细转移失败!!!");
                            }
//                            if (!locDetlService.updateLocNo(wrkMast.getLocNo(), sourceLocNo)) {
//                                throw new CoolException(wrkMast.getWrkNo() + "任务库存明细转移失败!!!");
//                            }
                            // 条码设备处理
                            barcodeThread.setBarcode("");
@@ -541,47 +541,6 @@
    /**
     * 盘点货物抵达盘点目标站 wrkMast.sourceLoc P ===>> O
     */
    public void pickWrkCompleteStaNo0() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历拣料入库口
            for (DevpSlave.Sta pickSta : devp.getPickOutSta()) {
                // 获取拣料入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.getWorkNo() > 0) {
//                    WrkMast wrkMast = wrkMastMapper.selectPick17(pickSta.getStaNo(), staProtocol.getWorkNo().intValue());
//                    if (Cools.isEmpty(wrkMast)) {
//                        log.error("{}站拣料、并板、盘点检索任务失败!任务号:{}", pickSta.getStaNo(), staProtocol.getWorkNo());
//                    } else {
//                        // 修改源库位状态 O.空库位
//                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
//                        if (locMast.getLocSts().equals("P")) {
//                            locMast.setLocSts("O");
//                            locMast.setModiTime(new Date());
//                            if (!locMastService.updateById(locMast)) {
//                                throw new CoolException(wrkMast.getWrkNo() + "修改源库位状态 O.空库位");
//                            }
//                        }
//                        // 修改工作档
//                        wrkMast.setIoPri(13D);
//                        if (wrkMastMapper.updateById(wrkMast) == 0) {
//                            log.error("更新工作档的优先级失败!!! [工作号:{}]", wrkMast.getWrkNo());
//                        }
//                    }
                }
            }
        }
    }
    /**
     * 盘点货物抵达盘点目标站 wrkMast.sourceLoc P ===>> O
     */
    public void pickWrkCompleteStaNo() {
        List<WrkMast> wrkMasts = wrkMastMapper.selectPick17(null, null);
        for (WrkMast wrkMast : wrkMasts) {
@@ -593,9 +552,11 @@
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException(wrkMast.getWrkNo() + "修改源库位状态 O.空库位");
                }
                locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
            }
            // 修改工作档
            wrkMast.setIoPri(13D);
            wrkMast.setModiTime(new Date());
            if (wrkMastMapper.updateById(wrkMast) == 0) {
                log.error("更新工作档的优先级失败!!! [工作号:{}]", wrkMast.getWrkNo());
            }
@@ -740,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) {
@@ -934,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())){
@@ -969,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());
@@ -1390,13 +1379,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;
                    }
                }
@@ -2422,12 +2411,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);
                        // 修改成功后复位堆垛机