自动化立体仓库 - WMS系统
#
lsh
2024-10-25 be57f327a933a597ffba088f3501c2563fd31a37
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -94,7 +94,7 @@
        // 检索库位
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto);
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto,0);
        // 生成工作号
        int workNo = dto.getWorkNo();
        // 生成工作档
@@ -170,6 +170,8 @@
        List<StockOutParam.LocDetl> stockOutParamLocDetlSort = Utils.getStockOutParamLocDetlSort(param.getLocDetls());
        boolean sign = true;
        boolean isfull = false; // 是否够数量
        Double isOut = 0.0;
        List<String> locNoWeighting = new ArrayList<>();
        for (StockOutParam.LocDetl locDetl : stockOutParamLocDetlSort) {
            if (Cools.isEmpty(locNoWeighting)){
@@ -191,6 +193,10 @@
                for (String locNo : groupOuterSingleLoc) {
                    //每个库位的库位明细
                    if(locs.contains(locNo)) continue;
                    LocMast mast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo));
                    if (mast.getLocSts().equals("P") || mast.getLocSts().equals("Q")){
                        throw new CoolException("当前库位的浅库位状态为" + mast.getLocSts() + "暂不支持出库!");
                    }
                    for (LocDetl detl : locDetlService.selectByLocNo(locNo)) {
                        if (!detl.getMatnr().equals(locDetl.getMatnr())) {
                            //不是相同物料
@@ -199,11 +205,28 @@
                            }
                            continue;
                        }
                        locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), detl.getAnfme()));
                        if (!param.getOutSite().equals(214) && !param.getOutSite().equals(114)){
                            if (detl.getAnfme() >= locDetl.getCount()) {
                                locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), locDetl.getCount()));
                                isOut = locDetl.getCount();
                                isfull = true;
                                break;
                            } else {
                                locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), detl.getAnfme()));
                                isOut = detl.getAnfme();
                            }
                        } else {
                            //强制不是相同物料
                            locDetls.add(new StockOutParam.LocDetl(detl.getLocNo(), detl.getMatnr(), detl.getBatch(), detl.getAnfme()));
                        }
                    }
                }
            }
            locDetls.add(locDetl);
            if (!isfull) {
                locDetls.add(new StockOutParam.LocDetl(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getCount() - isOut));
//                locDetls.add(locDetl);
            }
        }
        //出库时,如果当前库位组有相同的物料,则先出外侧物料 6.30日 注释
        //for (StockOutParam.LocDetl locDetl : param.getLocDetls()) {
@@ -478,21 +501,44 @@
        Date now = new Date();
        // 合并同类项
        Set<String> locNos = new HashSet<>();
        ArrayList<String> locNos2 = new ArrayList<String>();
        List<OutLocDto> dtos = new ArrayList<>();
        for (LocDetlDto locDetlDto : locDetlDtos) {
            String locNo = locDetlDto.getLocDetl().getLocNo();
            if (locNos.contains(locNo)) {
                for (OutLocDto dto : dtos) {
                    if (dto.getLocNo().equals(locNo)) {
                        dto.getLocDetlDtos().add(locDetlDto);
                        break;
            locNos2.add(locNo);
            //if (locNos.contains(locNo)) {
                //for (OutLocDto dto : dtos) {
                //    if (dto.getLocNo().equals(locNo)) {
                //        dto.getLocDetlDtos().add(locDetlDto);
                //        break;
                //    }
                //}
            //} else {
                //locNos.add(locNo);
                //dtos.add(new OutLocDto(locNo, locDetlDto));
            //}
        }
        List<String> innermostSideLoc = Utils.getInnermostSideLoc(locNos2, true);
        System.out.println(innermostSideLoc);
        for (LocDetlDto locDetlDto : locDetlDtos) {
            String locNo = locDetlDto.getLocDetl().getLocNo();
            if(innermostSideLoc.contains(locNo)) {
                if (locNos.contains(locNo)) {
                    for (OutLocDto dto : dtos) {
                        if (dto.getLocNo().equals(locNo)) {
                            dto.getLocDetlDtos().add(locDetlDto);
                            break;
                        }
                    }
                } else {
                    locNos.add(locNo);
                    dtos.add(new OutLocDto(locNo, locDetlDto));
                }
            } else {
                locNos.add(locNo);
                dtos.add(new OutLocDto(locNo, locDetlDto));
                //dtos.add(new OutLocDto(locNo,locDetlDto));
            }
        }
        Integer ioType = null;
        List<String> excludeLocNos = dtos.stream().map(OutLocDto::getLocNo).distinct().collect(Collectors.toList());
        // 生成工作档
@@ -771,8 +817,18 @@
            if (locNos.contains(locNo)) {
                for (OutLocDto dto : dtos) {
                    if (dto.getLocNo().equals(locNo)) {
                        dto.getLocDetlDtos().add(locDetlDto);
                        break;
                        boolean signDto = false;
                        for (LocDetlDto locDetlDto1 : dto.getLocDetlDtos()){
                            if (locDetlDto1.getLocDetl().getBatch().equals(locDetlDto.getLocDetl().getBatch())
                                    && locDetlDto1.getLocDetl().getMatnr().equals(locDetlDto.getLocDetl().getMatnr())
                                    && locDetlDto1.getLocDetl().getLocNo().equals(locDetlDto.getLocDetl().getLocNo())){
                                signDto = true;
                            }
                        }
                        if (!signDto){
                            dto.getLocDetlDtos().add(locDetlDto);
                            break;
                        }
                    }
                }
            } else {
@@ -790,7 +846,6 @@
                    continue;
                }
            }
            //-----------------2023.5.31上架区域版本兼容代码-----------------------
            //判断当前库位组是否均为同一种物料,如不是,则认定需要执行兼容代码
            //需要将待出库库位前侧库位(不包含最外侧高频库位)执行101全板出库
@@ -823,7 +878,7 @@
                        }
                        WaitPakin waitPakin = new WaitPakin();
                        waitPakin.sync(mat);
                        waitPakin.setBatch("");
                        //waitPakin.setBatch("");
                        waitPakin.setZpallet(locDetl.getZpallet());   // 托盘码
                        waitPakin.setIoStatus("N");     // 入出状态
                        waitPakin.setAnfme(locDetl.getAnfme());  // 数量
@@ -853,6 +908,12 @@
                //     throw new CoolException("只能存在一笔盘点任务");
                // }
            }
            if (ioType!=101){
                if (basDevp==114 || basDevp==214){
                    throw new CoolException("2楼只允许全板出库,请选择全部物料");
                }
            }
            assert ioType != null;
            // 获取库位
            LocMast locMast = locMastService.selectById(dto.getLocNo());
@@ -868,13 +929,30 @@
                //    }
                //}
                if (ioType == 101) {
                    if (staNo.getDevNo()==300){
                    if (basDevp==300){
                        if(locMast.getCrnNo() == 1) {
                            staNo.setDevNo(100);
                        } else {
                            staNo.setDevNo(200);
                        }
                    } else if (basDevp == 114){
                        if (!dto.isSign()){
                            staNo.setDevNo(100);
                        } else {
                            staNo.setDevNo(basDevp);
                        }
                    } else if (basDevp == 214){
                        if (!dto.isSign()){
                            staNo.setDevNo(200);
                        } else {
                            staNo.setDevNo(basDevp);
                        }
                    } else {
                        if(locMast.getCrnNo() == 1) {
                            staNo.setDevNo(100);
                        } else {
                            staNo.setDevNo(200);
                        }
                    }
                } else {
                    staNo.setDevNo(basDevp);
@@ -1201,7 +1279,7 @@
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto);
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto,0);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();