自动化立体仓库 - WMS系统
lsh
2024-08-21 6d2fa862707301c65b14a383ff8623938afbd76b
src/main/java/com/zy/common/service/CommonService.java
@@ -16,10 +16,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.*;
/**
 * 货架核心功能
@@ -109,7 +106,7 @@
     * @param matNos      物料号集合
     * @return locNo 检索到的库位号
     */
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto) {
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn) {
        int start;
        int end;
        Integer matType = null;//物料类型
@@ -120,6 +117,7 @@
        ArrayList<Integer> rows = new ArrayList<>();
        switch (sourceStaNo) {
            case 103://103入库站
            case 113://103入库站
                whsType = 1;
                start = 1;
                end = 14;
@@ -136,6 +134,7 @@
                crnNo = 1;
                break;
            case 203://203入库站
            case 213://203入库站
                whsType = 2;
                start = 8;
                end = 21;
@@ -179,6 +178,11 @@
                }
                if (!matType.equals(mat.getMatType())) {
                    throw new CoolException("混放物料类型不一致");
                }
            }
            if (!Cools.isEmpty(matTypeIn)) {
                if (!matTypeIn.equals(0)) {
                    matType = matTypeIn;
                }
            }
@@ -288,11 +292,13 @@
    private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos) {
        LocMast locMast = null;
        //先找工作档
        List<WrkMast> wrkMasts = wrkMastService.selectSameWrkMast(matNos.get(0));
        for (WrkMast wrkMast : wrkMasts) {
            List<String> groupLoc = Utils.getGroupLoc(wrkMast.getLocNo());
            //随机可用堆垛机号
            Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1());
            Collections.shuffle(crnNos);
            for (Integer crnNo : crnNos) {
                List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, crnNo);
                for (LocMast locMast0 : locMasts) {
@@ -349,7 +355,9 @@
        //未找到巷道,找一条新的空巷道
        if (locMast == null) {
            //随机可用堆垛机号
            Boolean flag = false;
            Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1());
            Collections.shuffle(crnNos);
            for (Integer crnNo : crnNos) {
                List<LocMast> locMasts = locMastService.findInEmptyLocMast(locTypeDto.getLocType1(), rows, crnNo);//找一条新的空巷道
                for (LocMast locMast0 : locMasts) {
@@ -366,10 +374,14 @@
                            // 因库位移转、需预留空库位
                            if (locMastService.checkEmptyCount(locMast0, 10)) {
                                locMast = locMast0;
                                flag = true;
                                break;
                            }
                        }
                    }
                }
                if (flag) {
                    break;
                }
            }
        }
@@ -407,6 +419,20 @@
                        locMast = locMast0;
                    }
                }
            }
        }
        //剔除当前随机堆垛机元素尝试重新查找
        if (locMast == null) {
            ArrayList<Integer> crns = new ArrayList<>();
            for (int crnNo : crnNos) {
                if (randomCrnNo == crnNo) {
                    continue;
                }
                crns.add(crnNo);
            }
            if (!crns.isEmpty()) {
                return getLocNoStep3(locTypeDto, crns);
            }
        }
@@ -464,6 +490,20 @@
            }
        }
        //剔除当前随机堆垛机元素尝试重新查找
        if (locMast == null) {
            ArrayList<Integer> crns = new ArrayList<>();
            for (int crnNo : crnNos) {
                if (randomCrnNo == crnNo) {
                    continue;
                }
                crns.add(crnNo);
            }
            if (!crns.isEmpty()) {
                return getLocNoStep4(locTypeDto, crns);
            }
        }
        return locMast;
    }