自动化立体仓库 - WMS系统
pang.jiabao
昨天 ef2b408aabe95564783ce7d2b3902eafb3954e0b
src/main/java/com/zy/common/service/CommonService.java
@@ -166,12 +166,14 @@
        return null;
    }
    private final Object locLock = new Object();
    @Transactional(propagation = Propagation.REQUIRED)
    public StartupDto getLocNoNew(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, int locArea) {
        // 目标库位
        LocMast locMast;
        synchronized (locLock) {
        // 入空桶库
        if (staDescId == 1 && locArea == 2) {
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "emptyBucketInCacheCount").eq("status", 1));
@@ -192,7 +194,12 @@
//            if (wrkMastList.size() == 0) {
                // 取新库位组的第一个库位
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O"));
            Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O");
            String model = findLocNoAttributeVo.getModel(); // 当前桶类型
            if (model.equals("IBC")) { // 最上面一层只能放208L
                wrapper.ne("lev1", 11);
            }
            List<LocMast> locMasts = locMastService.selectList(wrapper);
                List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList());
                List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 第一个先放这两排
                if (collect.size() - wrkMastList.size() <= 0 && collect1.size()  - wrkMastList.size() <= 0) {
@@ -362,11 +369,18 @@
                basCrnp.setWrkNo(count);
                basCrnpList.add(basCrnp);
            }
            final String sortByType;
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "inLocCrn1PriorityAssign").eq("status", 1));
            if (!Cools.isEmpty(config.getValue()) && config.getValue().equals("Y")) {
                sortByType = "asc"; // 定义 1 → 2 → 3 的优先级
            } else {
                sortByType = "other"; // 定义 2 → 3 → 1 的优先级
            }
            basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,((o1, o2) -> {
                // 定义 2 → 3 → 1 的优先级
                int order1 = getCustomOrder(o1);
                int order2 = getCustomOrder(o2);
                int order1 = getCustomOrder(o1,sortByType);
                int order2 = getCustomOrder(o2,sortByType);
                return Integer.compare(order1, order2);
            }))).collect(Collectors.toList());
@@ -438,15 +452,26 @@
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setLocNo(locMast.getLocNo());
        return startupDto;
        }
    }
    // 辅助方法:定义 crn_no 的排序优先级
    private static int getCustomOrder(Integer crnNo) {
        switch (crnNo) {
            case 2: return 1;  // 2 排第一
            case 3: return 2;  // 3 排第二
            case 1: return 3;  // 1 排第三
            default: return 4; // 其他值排最后(如果有)
    private static int getCustomOrder(Integer crnNo, String sort) {
        switch (sort) {
            case "other":
                switch (crnNo) {
                    case 2:
                        return 1;  // 2 排第一
                    case 3:
                        return 2;  // 3 排第二
                    case 1:
                        return 3;  // 1 排第三
                    default:
                        return 4; // 其他值排最后(如果有)
                }
            case "asc":
            default:
                return crnNo;
        }
    }