StackCombinationEnum.java 6.53 KB
package com.huaheng.api.acs.controller;

import java.util.List;

/***
 * @author tongzonghao
 *
 */
public enum StackCombinationEnum {

    /**
     * 垛型分配 两类:
     * 1层3个的矩形
     * 1层4个的矩形
     * (1,1) 1表示 1层3个的矩形  1表示放1个箱子
     * (2,9) 2表示 1层4个的矩形  9表示放9个箱子
     */

    _14_码垛1个箱子_11(1, 1) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_12(1, 2) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_13(1, 3) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_14(1, 4) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_15(1, 5) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_16(1, 6) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_17(1, 7) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_18(1, 8) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛1个箱子_19(1, 9) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },

    _14_码垛10个箱子_110(1, 10) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛11个箱子_111(1, 11) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _14_码垛12个箱子_112(1, 12) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛1个箱子_21(2, 1) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛2个箱子_22(2, 2) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛3个箱子_23(2, 3) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛4个箱子_24(2, 4) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛5个箱子_25(2, 5) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛6个箱子_26(2, 6) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛7个箱子_27(2, 7) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛8个箱子_28(2, 8) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    },
    _13_码垛9个箱子_29(2, 9) {
        @Override
        public String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller) {
            return stackCaller.callApi(boxType,stackTotal,palletType);
        }
    };


    private final int[] states;

    StackCombinationEnum(int... states) {
        this.states = states;
    }

    public abstract String apply(Integer boxType,Integer stackTotal,Integer palletType,StackCaller stackCaller);

    public static StackCombinationEnum fromStates(int... states) {
        for (StackCombinationEnum combination : values()) {
            if (matches(combination.states, states)) {
                return combination;
            }
        }
        throw new IllegalArgumentException("No matching stack combination found.");
    }

    private static boolean matches(int[] combinationStates, int[] states) {
        if (combinationStates.length != states.length) {
            return false;
        }
        for (int i = 0; i < combinationStates.length; i++) {
            if (combinationStates[i] != states[i]) {
                return false;
            }
        }
        return true;
    }

}