自动化立体仓库 - WMS系统
lsh
2024-10-17 e61e32a2aa002ba15170e28cff9510711fb64d56
#优化找库位逻辑
2个文件已修改
88 ■■■■ 已修改文件
src/main/java/com/zy/common/service/CommonService.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java
@@ -110,6 +110,9 @@
        return workNo;
    }
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn) {
        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,new ArrayList<>());
    }
    /**
     * 检索库位号
     * @param whsType     类型 1:双深式货架
@@ -118,7 +121,7 @@
     * @param matNos      物料号集合
     * @return locNo 检索到的库位号
     */
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn) {
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn,List<LocMast> locMastList) {
        int start;
        int end;
        Integer matType = null;//物料类型
@@ -206,31 +209,67 @@
        if (!sign && matType != null) {
            if (matType == 1) {//单品类型入库
                locMast = getLocNoStep2(locTypeDto, matNos, rows, crnNos);
                locMast = getLocNoStep2(locTypeDto, matNos, rows, crnNos,locMastList);
                if (locMast != null) {
                    locMastList.add(locMast);
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", staDescId)
                            .eq("stn_no", sourceStaNo)
                            .eq("crn_no", locMast.getCrnNo());
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
                    }
                    //找到库位,返回dto
                    sign=true;
                } else {
                    //单品没有找到库位,找高频混放区域库位
                    locMast = getLocNoStep3(locTypeDto, crnNos);
                    locMast = getLocNoStep3(locTypeDto, crnNos,locMastList);
                    if (locMast != null) {
                        locMastList.add(locMast);
                        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                                .eq("type_no", staDescId)
                                .eq("stn_no", sourceStaNo)
                                .eq("crn_no", locMast.getCrnNo());
                        StaDesc staDesc = staDescService.selectOne(wrapper);
                        if (Cools.isEmpty(staDesc)) {
                            return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
                        }
                        //找到库位,返回dto
                        sign=true;
                    }
                }
            } else if (matType == 2) {//高频类型入最外侧库位
                locMast = getLocNoStep3(locTypeDto, crnNos);
                locMast = getLocNoStep3(locTypeDto, crnNos,locMastList);
                if (locMast == null) {
                    //高频没有找到库位,找低频混放区域库位
                    locMast = getLocNoStep4(locTypeDto, crnNos);
                    locMast = getLocNoStep4(locTypeDto, crnNos,locMastList);
                }
                if (locMast != null) {
                    locMastList.add(locMast);
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", staDescId)
                            .eq("stn_no", sourceStaNo)
                            .eq("crn_no", locMast.getCrnNo());
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
                    }
                    //找到库位,返回dto
                    sign=true;
                }
            } else if (matType == 3) {//低频混放类型
                locMast = getLocNoStep4(locTypeDto, crnNos);
                locMast = getLocNoStep4(locTypeDto, crnNos,locMastList);
                if (locMast != null) {
                    locMastList.add(locMast);
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", staDescId)
                            .eq("stn_no", sourceStaNo)
                            .eq("crn_no", locMast.getCrnNo());
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
                    }
                    //找到库位,返回dto
                    sign=true;
                }
@@ -264,6 +303,9 @@
        if (sign){
            return getLocNoFinalStep(staDescId, sourceStaNo, locMast);//返回dto
        }
        if (!locMastList.isEmpty()){
            return getLocNoFinalStep(staDescId, sourceStaNo, locMastList.get(0));//返回dto
        }
        //----------------2023.06.02兼容代码end---------------------
@@ -301,7 +343,7 @@
    }
    //单品类型入库
    private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos) {
    private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos,List<LocMast> locMastList) {
        LocMast locMast = null;
        //先找工作档
@@ -311,6 +353,7 @@
            //随机可用堆垛机号
            Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1());
            Collections.shuffle(crnNos);
            loc:
            for (Integer crnNo : crnNos) {
                List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, crnNo);
                for (LocMast locMast0 : locMasts) {
@@ -326,8 +369,10 @@
                        if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                            // 因库位移转、需预留空库位
                            if (locMastService.checkEmptyCount(locMast0, 5)) {
                                if (!locMastList.contains(locMast0)){
                                locMast = locMast0;
                                break;
                                    break loc;
                                }
                            }
                        }
                    }
@@ -339,6 +384,7 @@
        //找内侧空库位(非最外侧库位)
        if (locMast == null) {
            List<String> locNos = locDetlService.getSameDetl(matNos.get(0));
            loc:
            for (String locNo : locNos) {
                List<String> groupLoc = Utils.getGroupLoc(locNo);
                List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, null);
@@ -355,8 +401,10 @@
                        if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                            // 因库位移转、需预留空库位
                            if (locMastService.checkEmptyCount(locMast0, 5)) {
                                if (!locMastList.contains(locMast0)){
                                locMast = locMast0;
                                break;
                                    break loc;
                                }
                            }
                        }
                    }
@@ -390,9 +438,11 @@
                        if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                            // 因库位移转、需预留空库位
                            if (locMastService.checkEmptyCount(locMast0, 5)) {
                                if (!locMastList.contains(locMast0)){
                                locMast = locMast0;
                                flag = true;
                                break;
                                }
                            }
                        }
                    }
@@ -407,9 +457,11 @@
                            if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                                // 因库位移转、需预留空库位
                                if (locMastService.checkEmptyCount(locMast0, 5)) {
                                    if (!locMastList.contains(locMast0)){
                                    locMast = locMast0;
                                    flag = true;
                                    break;
                                    }
                                }
                            }
                        }
@@ -425,7 +477,7 @@
    }
    //高频类型入最外侧库位
    private LocMast getLocNoStep3(LocTypeDto locTypeDto, List<Integer> crnNos) {
    private LocMast getLocNoStep3(LocTypeDto locTypeDto, List<Integer> crnNos,List<LocMast> locMastList) {
        LocMast locMast = null;
        //随机可用堆垛机号
@@ -451,7 +503,10 @@
                if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                    // 因库位移转、需预留空库位
                    if (locMastService.checkEmptyCount(locMast0, 5)) {
                        if (!locMastList.contains(locMast0)){
                        locMast = locMast0;
                            break;
                        }
                    }
                }
            }
@@ -467,7 +522,7 @@
                crns.add(crnNo);
            }
            if (!crns.isEmpty()) {
                return getLocNoStep3(locTypeDto, crns);
                return getLocNoStep3(locTypeDto, crns,locMastList);
            }
        }
@@ -475,7 +530,7 @@
    }
    //低频类型,直接找混放区域
    private LocMast getLocNoStep4(LocTypeDto locTypeDto, List<Integer> crnNos) {
    private LocMast getLocNoStep4(LocTypeDto locTypeDto, List<Integer> crnNos,List<LocMast> locMastList) {
        LocMast locMast = null;
        //随机可用堆垛机号
@@ -515,10 +570,16 @@
                    if (!locMast1.getLocSts().equals("O") && !locMast0.getRow1().equals(outermostRow)){
                        // 因库位移转、需预留空库位
                        if (locMastService.checkEmptyCount0(locMast0, 5)) {
                            if (!locMastList.contains(locMast0)){
                            locMast = locMast0;
                                break;
                            }
                        }
                    }else {
                        if (!locMastList.contains(locMast0)){
                        locMast = locMast0;
                            break;
                        }
                    }
                }
@@ -535,7 +596,7 @@
                crns.add(crnNo);
            }
            if (!crns.isEmpty()) {
                return getLocNoStep4(locTypeDto, crns);
                return getLocNoStep4(locTypeDto, crns,locMastList);
            }
        }
src/main/java/com/zy/common/web/WcsController.java
@@ -17,6 +17,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;