自动化立体仓库 - WCS系统
#
whycq
2024-12-27 6048b67716ebce38c553dd722a31c23072547ee4
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -1,9 +1,10 @@
package com.zy.asrs.utils;
import com.zy.asrs.entity.BasDevpPosition;
import com.zy.asrs.entity.WrkMast;
import com.zy.core.enums.RouteCollectCountType;
import java.util.Arrays;
import java.util.List;
import java.util.*;
public class SortTheExecutionOfTheCarUtil {
    //排序
@@ -27,33 +28,434 @@
        }
        return ints;
    }
    //排序
    public static int ReorderSteId2(int[][] steList,int steNoStart){
        int[][] ints = new int[steList.length][2];
        int Difference = 0;
        for (int[] steNo : steList){
            if (steNo[0] == steNoStart){
                Difference = steNo[1] - 1;
//    //获取最近并在当前位置前边的位置1000000===>10000==>0==>1000000
//    public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
//        Integer result = 0;
//        long Difference = perimeter;
//        for (BasDevpPosition positions : devpPosition){
//            Long position = positions.getPlcPosition();
//            if (position<=nowPosition){
//                if ((nowPosition-position) < Difference){
//                    Difference = nowPosition-position;
//                    result = positions.getDevNo();
//                }
//            } else {
//                if ((nowPosition-(position - perimeter)) < Difference){
//                    Difference = nowPosition-(position - perimeter);
//                    result = positions.getDevNo();
//                }
//            }
//        }
//        return result;
//    }
    //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0
    public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
        Integer result = 0;
        long Difference = perimeter;
        for (BasDevpPosition positions : devpPosition){
            Long position = positions.getPlcPosition();
            if (position >= nowPosition){
                if ((position-nowPosition) < Difference){
                    Difference = position-nowPosition;
                    result = positions.getDevNo();
                }
            } else {
                if (perimeter - (nowPosition - position) < Difference){
                    Difference = perimeter - (nowPosition - position);
                    result = positions.getDevNo();
                }
            }
        }
        return result;
    }
//    //获取最近并在当前位置后边的位置 1000000===>10000==>0==>1000000
//    public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
//        Integer result = 0;
//        Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter);
//        for (BasDevpPosition basDevpPosition:devpPosition){
//            if (basDevpPosition.getDevNo().equals(integer)){
//                if (basDevpPosition.getDevNo() == 101){
//                    result = 133;
//                }
//                break;
//            }
//            result = basDevpPosition.getDevNo();
//        }
//        return result;
//    }
    //获取最近并在当前位置后边的位置 0==>1000===>1000000==>0
    public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
        Integer result = -1;
        Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter);
        for (BasDevpPosition basDevpPosition:devpPosition){
            if (basDevpPosition.getDevNo().equals(integer)){
                if (basDevpPosition.getDevNo() == 133){
                    result = 101;
                }
                break;
            }
            result = basDevpPosition.getDevNo();
        }
        return result;
    }
//    //获取最近并在当前位置前边的位置
//    public static Long LatelyAndLessThan(long[] devpPosition,long nowPosition){
//        long result = 0L;
//        long Difference = 1737000L;
//        for (long position : devpPosition){
//            if (position<=nowPosition){
//                if ((nowPosition-position) < Difference){
//                    Difference = nowPosition-position;
//                    result = position;
//                }
//            } else {
//                if ((nowPosition-(position - 1737000L)) < Difference){
//                    Difference = nowPosition-(position - 1737000L);
//                    result = position;
//                }
//            }
//        }
//        return result;
//    }
//    //获取最近并在当前位置后边的位置  1000000===>10000==>0==>1000000
//    public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){
//        int result = 0;
//        long Difference = perimeter;
//        for (List<Long> rgvPositions: sitePosition){
//            Long position = rgvPositions.get(1);
//            if (position>nowPosition){
//                if ((position - nowPosition) < Difference){
//                    Difference = position - nowPosition;
//                    result = rgvPositions.get(0).intValue();
//                }
//            } else {
//                if ((perimeter - (nowPosition - position)) < Difference){
//                    Difference = perimeter - (nowPosition - position);
//                    result = rgvPositions.get(0).intValue();
//                }
//            }
//        }
//        return result;
//    }
    //获取最近并在当前位置后边的位置   0==>1000===>1000000==>0
    public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){
        int result = -1;
        long Difference = perimeter;
        for (List<Long> rgvPositions: sitePosition){
            Long position = rgvPositions.get(1);
            if (position <= nowPosition){
                if ((nowPosition - position) < Difference){
                    Difference = nowPosition - position;
                    result = rgvPositions.get(0).intValue();
                }
            } else {
                if ((perimeter - (nowPosition - position)) < Difference){
                    Difference = perimeter - (nowPosition - position);
                    result = rgvPositions.get(0).intValue();
                }
            }
        }
        return result;
    }
    //id初始化
    public static List<BasDevpPosition> devpNoInit(List<BasDevpPosition> devpPosition){
        long i = 0;
        for (BasDevpPosition basDevpPosition : devpPosition){
            i++;
            basDevpPosition.setId(i);
        }
        return devpPosition;
    }
    //站点排序
    public static BasDevpPosition[] devpNoSort(List<BasDevpPosition> devpPosition1,Integer devpNo){
        List<BasDevpPosition> devpPosition = devpNoInit(devpPosition1);
        BasDevpPosition[] basDevpPositions = new BasDevpPosition[devpPosition.size()];
        long Difference = 0L;
        for (BasDevpPosition basDevpPosition : devpPosition){
            if (basDevpPosition.getDevNo().equals(devpNo)){
                Difference = basDevpPosition.getId() - 1L;
                break;
            }
        }
        for (int[] steNo : steList){
            int i = steNo[1];
        for (BasDevpPosition basDevpPosition : devpPosition){
            long i = basDevpPosition.getId();
            if (i > Difference){
                steNo[1] = i - Difference;
                basDevpPosition.setId(i - Difference);
            } else {
                steNo[1] = steList.length + i-Difference;
                basDevpPosition.setId(devpPosition.size() + i - Difference);
            }
            ints[steNo[0]-1] = steNo;
            basDevpPositions[basDevpPosition.getId().intValue()-1] = basDevpPosition;
        }
        return 0;
        return basDevpPositions;
    }
    public static void main(String[] args) {
        int[][] ints = new int[][]{{1,1},{2,2},{3,3},{4,4},{5,5},{6,6},{7,7},{8,8},{9,9},{10,10}};
        int[][] reorderSteId = ReorderSteId(ints, 2);
        for (int[] ste : reorderSteId){
            System.out.println(Arrays.toString(ste));
    //逆序排列
    public static BasDevpPosition[] devpNoSortUN(BasDevpPosition[] devpPosition){
        BasDevpPosition[] basDevpPositions = new BasDevpPosition[devpPosition.length];
        for (BasDevpPosition basDevpPosition : devpPosition){
            basDevpPositions[devpPosition.length - basDevpPosition.getId().intValue()] = basDevpPosition;
        }
        return basDevpPositions;
    }
    //逆序排列
    public static boolean devpNoSortbj(BasDevpPosition[] devpPosition,Integer souDevpNo,Integer endDevpNo){
        int sou = 0;
        int end = 0;
        for (int i = 0;i<devpPosition.length;i++){
            if (devpPosition[i].getDevNo().equals(souDevpNo)){
                sou = i;
            }
            if (devpPosition[i].getDevNo().equals(endDevpNo)){
                end = i;
            }
        }
        return sou>end;
    }
    //提取站点集合
    public static List<Integer> WrkMastExtractSites(List<WrkMast> wrkMastList){
        List<Integer> siteList = new ArrayList<>();
        for (WrkMast wrkMast : wrkMastList){
            if (!siteList.contains(wrkMast.getSourceStaNo())){
                siteList.add(wrkMast.getSourceStaNo());
            }
        }
        return siteList;
    }
    //提取站点集合
    public static List<Integer> BasDevpPositionExtractSites(List<BasDevpPosition> basDevpPositions){
        List<Integer> siteList = new ArrayList<>();
        for (BasDevpPosition basDevpPosition : basDevpPositions){
            if (!siteList.contains(basDevpPosition.getDevNo())){
                siteList.add(basDevpPosition.getDevNo());
            }
        }
        return siteList;
    }
    //提取站点集合X2
    public static List<Integer> ExtractSitesComplex(List<Integer> siteList){
        siteList.addAll(siteList);
        return siteList;
    }
    //集合转数组
    public static int[] SetToArrayConversion(List<Integer> siteList){
        int[] nums = new int[siteList.size()];
        for (int i = 0;i<siteList.size();i++){
            nums[i] = siteList.get(i);
        }
        return nums;
    }
    //获取任务密集区
    public static List<Integer> ObtainDenseAreasSite(List<Integer> siteList,List<Integer> devpList){
        List<Integer> siteLists = ExtractSitesComplex(devpList);
        int[] nums = SetToArrayConversion(siteLists);
        List<Integer> champion = new ArrayList<>();
        for (int rangeArea = 1; rangeArea<=devpList.size();rangeArea++){
            List<List<Integer>> subsets = getConsecutiveSubsets(nums, rangeArea);
            if (subsets != null){
                int temporaryMaxCount = 0;
                List<Integer> championTemporary = new ArrayList<>();
                int championCount = 0;
                for (List<Integer> one : subsets){
                    int intersectionSize = getIntersectionSize(siteList, one);
                    if (intersectionSize == temporaryMaxCount){
                        championCount++;
                        championTemporary = one;
                    } else if (intersectionSize > temporaryMaxCount){
                        championCount = 1 ;
                        temporaryMaxCount = intersectionSize;
                        championTemporary = one;
                    }
                }
                if (championCount == 1){
                    champion = championTemporary;
                    break;
                }
                continue;
            }
            break;
        }
        return champion;
    }
    public static Integer ObtainDenseAreasFirstPlace(List<Integer> siteList,List<Integer> devpList){
        List<Integer> integers = ObtainDenseAreasSite(siteList, devpList);
        if (integers==null){
            return null;
        }
        return integers.get(0);
    }
//    public static void main(String[] args) {
////        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//        List<Integer> siteList = new ArrayList<Integer>() {{
//            add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);
//        }};
//        List<Integer> siteLists = ExtractSitesComplex(siteList);
//        int[] nums = SetToArrayConversion(siteLists);
//        int subsetSize = 5;  // 可以通过用户输入或者其他方式控制
//        List<List<Integer>> subsets = getConsecutiveSubsets(nums, subsetSize);
//        if (subsets != null){
//            for (List<Integer> subset : subsets) {
//                System.out.println(subset);
//            }
//        } else {
//            System.out.println("子集大小必须大于0且小于等于数组长度");
//        }
//    }
    public static List<List<Integer>> getConsecutiveSubsets(int[] nums, int size) {
        List<List<Integer>> result = new ArrayList<>();
        // 确保子集的大小合法
        if (size > nums.length || size <= 0) {
//            throw new IllegalArgumentException("子集大小必须大于0且小于等于数组长度");
            return null;
        }
        // 通过滑动窗口法生成相邻的子集
        for (int i = 0; i <= nums.length - size; i++) {
            List<Integer> subset = new ArrayList<>();
            for (int j = 0; j < size; j++) {
                subset.add(nums[i + j]);
            }
            if (!result.contains(subset)){
                result.add(subset);
            }
        }
        return result;
    }
    public static int getIntersectionSize(List<Integer> listA, List<Integer> listB) {
        // 使用集合来存储交集元素,避免重复
        Set<Integer> intersection = new HashSet<>(listA);
        // 保留集合A和集合B中的共同元素
        intersection.retainAll(listB);
        // 返回交集的大小
        return intersection.size();
    }
//    public static void main(String[] args) {
//        int[][] ints = new int[][]{{1,1},{3,3},{2,2},{4,4},{5,5},{6,6},{7,7},{8,8},{9,9},{10,10}};
//
//        int[][] reorderSteId = ReorderSteId(ints, 2);
//        for (int[] ste : reorderSteId){
//            System.out.println(Arrays.toString(ste));
//        }
//
//        long[] longs = new long[]{1L,1000L,200000L,1100000L,1600000L};
//        long l = LatelyAndLessThan(longs, 1100000L);
//        System.out.println("l:"+l);
//    }
//    public static void main(String[] args) {
//        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//        List<List<Integer>> subsets = getSubsets(nums);
//
//        for (List<Integer> subset : subsets) {
//            System.out.println(subset);
//        }
//    }
//
//    public static List<List<Integer>> getSubsets(int[] nums) {
//        List<List<Integer>> result = new ArrayList<>();
//        generateSubsets(0, nums, new ArrayList<>(), result);
//        return result;
//    }
//
//    private static void generateSubsets(int index, int[] nums, List<Integer> current, List<List<Integer>> result) {
//        if (index == nums.length) {
//            result.add(new ArrayList<>(current));
//            return;
//        }
//
//        // 不包含当前元素的子集
//        generateSubsets(index + 1, nums, current, result);
//
//        // 包含当前元素的子集
//        current.add(nums[index]);
//        generateSubsets(index + 1, nums, current, result);
//
//        // 回溯
//        current.remove(current.size() - 1);
//    }
    /*  好东西,做记录
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int subsetSize = 3;  // 可以通过用户输入或者其他方式控制
        List<List<Integer>> subsets = getConsecutiveSubsets(nums, subsetSize);
        for (List<Integer> subset : subsets) {
            System.out.println(subset);
        }
    }
    public static List<List<Integer>> getConsecutiveSubsets(int[] nums, int size) {
        List<List<Integer>> result = new ArrayList<>();
        // 确保子集的大小合法
        if (size > nums.length || size <= 0) {
            throw new IllegalArgumentException("子集大小必须大于0且小于等于数组长度");
        }
        // 通过滑动窗口法生成相邻的子集
        for (int i = 0; i <= nums.length - size; i++) {
            List<Integer> subset = new ArrayList<>();
            for (int j = 0; j < size; j++) {
                subset.add(nums[i + j]);
            }
            result.add(subset);
        }
        return result;
    }
    * */
//    public static void main(String[] args) {
//        // 示例列表A和列表B
//        List<Integer> listA = new ArrayList<>();
//        List<Integer> listB = new ArrayList<>();
//
//        // 初始化列表A
//        listA.add(1);
//        listA.add(2);
//        listA.add(3);
//        listA.add(4);
//        listA.add(5);
//
//        // 初始化列表B
//        listB.add(3);
//        listB.add(4);
//        listB.add(5);
//        listB.add(6);
//        listB.add(7);
//
//        // 计算交集数量
//        int intersectionSize = getIntersectionSize(listA, listB);
//        System.out.println("交集的数量是: " + intersectionSize);
//    }
}