package com.ruoyi.base.constant;

import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;

/**
 * Created by IntelliJ IDEA.
 * User: andy.qu
 * Date: 2022/3/9
 */
public class Constant {
    public static final String CUSTOMER_ID = "default";
    public static final Long WAREHOUSE_ID = 1L;
    /**
     * 入库缓存位
     */
    public static final Long LOC_STAGE_CACHE = 99997l;

    /**
     * 入库空托盘
     */
    public static final String PALLET_TYPE = "EMP_TRAY_BAG";

    /**
     * 出库空托盘
     */
    public static final String PALLET_TYPE1 = "EMP_TRAY_BUC";

    /**
     * 出库缓存位
     */
    public static final Long LOC_SORTATION_CACHE = 99998l;

    /**
     * 桶装接驳位
     */
    public static final Long DRUM_CONNECTORS = 100733l;

    /**
     * 中间缓存位
     * AGV作业搬运任务时候库存的虚拟库位
     */
    public static final Long LOC_MIDDLE_CACHE = 99999l;



    public static final Long DEFAULT_WAREHOUSE_ID = 1L;



    //region WCS智库 工单下发
    public static final String WCS_TASK_URL = "http://localhost:8082/adaptor/wms/bill";
//    public static final String WCS_TASK_URL = "http://localhost:8008/test/wcs/test1";
    //出库任务下发
    public static final String WCS_TASK_URL1 = "http://localhost:8082/adaptor/wms/out/task";
//    public static final String WCS_TASK_URL1 = "http://localhost:8008/test/wcs/test2";
    //开启破袋机回调接口
    public static final String WCS_TASK_URL2 = "http://localhost:8082/adaptor/wms/callback/bbm";
    //工单任务取消接口
    public static final String WCS_TASK_URL3 = "http://localhost:8082/adaptor/wms/bill/cancel";
    // WCS智库 agv入库任务下发
    public static final String WCS_TASK_URL4 = "http://localhost:8082/adaptor/agv/in/task";
//    public static final String WCS_TASK_URL4 = "http://localhost:8008/test/wcs/test1";
    // WCS智库 agv回调wcs卸货完成
    public static final String WCS_TASK_URL5 = "http://localhost:8082/adaptor/agv/callback/intask?taskNo=";
    // WCS智库 agv回调wcs取货完成
    public static final String WCS_TASK_URL6 = "http://localhost:8082/adaptor/agv/callback/outtask?taskNo=";


    public enum TaskType{
        EMPTY_PALLET("emptyPallet"),
        MOVE_INV("moveInv"),
        CROSS_INV("crossInv"),
        AGV("agv"),
        RGV("rgv");

        private String desc;

        TaskType(String desc) {
            this.desc = desc;
        }

        public String getDesc() {
            return desc;
        }
    }


    public enum ZoneStatus{
        ENABLE("0"),
        DISABLE("1");

        private String code;

        ZoneStatus(String code) {
            this.code = code;
        }

        public String getCode() {
            return code;
        }
    }

    public static void main(String[] args) {
        System.out.println(AGV_POWER_CMD.getValueByCode("1"));
    }

    public enum AGV_POWER_CMD{
        /***
         * 一号堆垛车车号以及充电指令
         */
        First("1", "87CD0008000C00010071000663010001%04X"),

        /***
         * 二号堆垛车车号以及充电指令
         */
        second("2", "87CD000800080001007100046301%04X");

        private String code;

        private String value;

        AGV_POWER_CMD(String code, String value) {
            this.code = code;
            this.value = value;

        }

        public String getCode() {
            return code;
        }

        public String getValue() {
            return value;
        }

        public static String getValueByCode(String code) {
            for (AGV_POWER_CMD agvPowerCmd : values()) {
                if (agvPowerCmd.getCode().equals(code)) {
                    return agvPowerCmd.value;
                }
            }
            return null;
        }

    }

    /**
     * 产线编号
     */
    public enum PRODUCTION_LINE_SITE {
        L1(1),
        L2(2),
        L3(3),
        L4(4),
        L5(5),
        L6(6);
        private Integer value;

        PRODUCTION_LINE_SITE(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

        /**
         * 根据值获得枚举类型 switch
         *
         * @param value
         * @return
         */
        public static PRODUCTION_LINE_SITE getByValue(String value) {
            for (PRODUCTION_LINE_SITE code : values()) {
                if (code.getValue().equals(value)) {
                    return code;
                }
            }
            return null;
        }
    }

    /**
     * 搬运任务配置id
     */
    public enum FLOW_CONFIG_ID {
        /***
         * 桶装出库
         */
        ONE(1l),
        /**
         * 桶装入库
         */
        TWO(2l);

        private Long flowId;

        FLOW_CONFIG_ID(Long flowId) {
            this.flowId = flowId;
        }

        public Long getValue() {
            return flowId;
        }
    }
    //endregion

    /**
     * 桶装入库
     */
    public static final long IN_FLOW_ID = 1;
    /**
     * 桶装出库
     */
    public static final long OUT_FLOW_ID = 2;

    /**
     * 是否
     */
    public enum IS_YES {
        /**
         * 是
         */
        Y("1"),
        /**
         * 否
         */
        N("0");

        private String value;

        IS_YES(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 入库单据类型
     */
    public enum ASN_TYP {
        /**
         * 袋装入库
         */
        DZ("DZ", 1),
        /**
         * 袋装回库
         */
        HK("HK", 1),
        /**
         * 桶装入库
         */
        TZ("TZ", 1),
        /**
         * 袋装越库
         */
        YK("YK", 2);

        private String value;
        /**
         * wcs对应编号
         */
        private Integer value1;

        ASN_TYP(String value, Integer value1) {
            this.value = value;
            this.value1 = value1;
        }

        public String getValue() {
            return value;
        }

        public Integer getValue1() {
            return value1;
        }

        public static ASN_TYP getByValue(String value) {
            for (ASN_TYP code : values()) {
                if (code.getValue().equals(value)) {
                    return code;
                }
            }
            return null;
        }

        public static ASN_TYP getByValue1(String value1) {
            for (ASN_TYP code : values()) {
                if (code.getValue1().equals(value1)) {
                    return code;
                }
            }
            return null;
        }
    }

    /**
     * 出库单据类型
     */
    public enum ORDER_TYP {
        /**
         * 袋装出库
         */
        DZ("DZ", 3),
        /**
         * 桶装出库
         */
        TZ("TZ", 3),
        /**
         * 袋装越库
         */
        YK("YK", 2);

        private String value;

        /**
         * wcs对应编号
         */
        private Integer value1;

        ORDER_TYP(String value, Integer value1) {
            this.value = value;
            this.value1 = value1;
        }

        public String getValue() {
            return value;
        }

        public Integer getValue1() {
            return value1;
        }

        public static ORDER_TYP getByValue(String value) {
            for (ORDER_TYP code : values()) {
                if (code.getValue().equals(value)) {
                    return code;
                }
            }
            return null;
        }

        public static ORDER_TYP getByValue1(String value1) {
            for (ORDER_TYP code : values()) {
                if (code.getValue1().equals(value1)) {
                    return code;
                }
            }
            return null;
        }
    }

    /**
     * 入库单状态
     */
    public enum ASN_STS {
        /**
         * 订单创建
         */
        STS00("00"),

        /**
         * 已同步
         */
        STS10("10"),

        STS20("20"),
        /**
         * 部分收货
         */
        STS30("30"),
        /**
         * 完全收货
         */
        STS40("40"),
        /**
         * 部分上架
         */
        STS50("50"),
        /**
         * 完全上架
         */
        STS60("60"),
        /**
         * 部分验收
         */
        STS70("70"),
        /**
         * 完全验收
         */
        STS80("80"),
        /**
         * 收货取消
         */
        STS90("90"),
        /**
         * ASN关闭
         */
        STS99("99");

        private String value;

        ASN_STS(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 出库状态
     */
    public enum ORDER_STS {
        /**
         * 订单创建
         */
        STS00("00"),
        /**
         * 同步成功
         */
        STS10("10"),
        /**
         * 完全分配
         */
        STS20("20"),
        /**
         * 部分拣货
         */
        STS30("30"),
        /**
         * 拣货完成
         */
        STS40("40"),
        /**
         * 取消
         */
        STS90("90"),
        /**
         * 关闭
         */
        STS99("99");

        private String value;

        ORDER_STS(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 库区
     */
    public enum LOCATION_ZONE {

        /**
         * 立体库一层
         */
        INV_1("1"),
        /**
         * 立体库二层
         */
        INV_2("2"),
        /**
         * 立体库三层
         */
        INV_3("3"),
        /**
         * 桶装入库缓存区
         */
        TZ_ASN_CACHE("4");

        private String value;

        LOCATION_ZONE(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        /**
         * 根据值获得枚举类型 switch
         *
         * @param value
         * @return
         */
        public static LOCATION_ZONE getByValue(String value) {
            for (LOCATION_ZONE code : values()) {
                if (code.getValue().equals(value)) {
                    return code;
                }
            }
            return null;
        }

    }

    /**
     * 库存状态
     */
    public enum INV_STS {
        /**
         * 合格
         */
        HG("90"),
        /**
         * 不合格
         */
        BHG("99");

        private String value;

        INV_STS(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 储位状态
     */
    public enum STOCK_STATUS {
        /**
         * 空闲
         */
        STOCK00("00"),
        /**
         * 占用
         */
        STOCK10("10"),
        /**
         * 封存
         */
        STOCK80("80");

        private String value;

        STOCK_STATUS(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * NDC任务类型
     */
    public enum TASK_BUSINESS_TYPE {
        /**
         * 01叉货任务
         */
        TASK_01("01"),
        /**
         * 60暂停点
         */
        TASK_60("60"),
        /**
         * 90暂停重启
         */
        TASK_90("90"),
        /**
         * 电量
         */
        TASK_POWER("power"),
        /**
         * m
         */
        TASK_m("m"),
        /**
         * 暂停
         */
        TASK_03("03"),
        /**
         * 快速门开门成功反馈
         */
        TASK_164("164"),

        /**
         * 结束充电机
         */
        TASK_101("101");

        private String value;

        TASK_BUSINESS_TYPE(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 任务类型
     */
    public enum TASK_TYPE {
        /**
         * 转发任务
         */
        FORWARD("FW");
        private String value;

        TASK_TYPE(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 任务状态 State
     */
    public enum TASK_STS {
        /**
         * 下发AMS
         */
        TASK0(0),
        /**
         * 开始
         */
        TASK1(1),
        /**
         * 完成
         */
        TASK2(2),
        /**
         * 开始取货
         */
        TASK3(3),
        /**
         * 取货完成
         */
        TASK4(4),
        /**
         * 开始卸货
         */
        TASK5(5),
        /**
         * 卸货完成
         */
        TASK6(6),
        /**
         * 取消
         */
        TASK_CANCEL(7),
        /**
         * 空叉取消
         */
        TASK8(8),
        /**
         * 队列等待
         */
        TASK_WAIT(9),
        /**
         * 已下发
         */
        TASK_PUBILSH(10),
        /**
         * 任务创建
         */
        TASK_CREATE(13);


        private Integer value;

        public Integer getValue() {
            return value;
        }

        public Long getLongValue(){
            return ObjectUtils.isNotNull(value) ? value.longValue() : null;
        }

        TASK_STS(Integer value) {
            this.value = value;
        }
    }

    public enum ZONE_TYPE {

        /**
         * 成品区
         */
        STORAGE(1l),

        /**
         * 入库区
         */
        IN_CACHE(2l),

        /**
         * 出库区
         */
        OUT_CACHE(3l),

        /**
         * 接驳位(出入库)
         */
        TRANSIT(4l);

        private Long value;

        ZONE_TYPE(Long value) {
            this.value = value;
        }

        public Long getValue() {
            return value;
        }
    }

    /**
     * 事务类型
     */
    public enum Transaction_TYPE {
        /**
         * 收货
         */
        RC("RC"),
        /**
         * 上架
         */
        PA("PA"),
        /**
         * 拣货
         */
        PK("PK"),
        /**
         * 调整
         */
        OB("OB"),
        /**
         * 盘点
         */
        CO("CO"),
        /**
         * 验收
         */
        QC("QC");

        private String value;

        Transaction_TYPE(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 质量状态
     */
    public enum QUALITY_STATUS {
        /***
         * 合格
         */
        HG("HG"),
        /***
         * 不合格
         */
        BHG("BHG"),
        /***
         * 待检
         */
        DJ("DJ");

        private String value;

        QUALITY_STATUS(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    public enum SAFE_CODE {
        /***
         * 0:异常不可执行
         */
        REFUSE("0"),
        /***
         * 1:安全可执行
         */
        PASS("1");

        private String code;

        SAFE_CODE(String code) {
            this.code = code;
        }

        public String getCode() {
            return code;
        }
    }

    public enum ID_TYPE {
        ASNNO("ASNNO"),

        ORDERNO("ORDERNO"),

        LOTNUMBER("LOTNUMBER");
        private String desc;

        ID_TYPE(String desc) {
            this.desc = desc;
        }

        public String getDesc() {
            return desc;
        }
    }

    public enum TERMINAL_CREATOR {

        PDA("PDA"),

        WEB("WEB");

        private String desc;

        TERMINAL_CREATOR(String desc) {
            this.desc = desc;
        }

        public String getDesc() {
            return desc;
        }
    }

    public enum MATERIAL_TYPE {

        Na2CO3("1","碳酸钠"),
        NH42SO4("2", "硫酸铵"),
        NaPO36("3", "六偏磷酸钠"),
        CH3CH2OCS2Na("4", "乙黄药"),
        C4H9O2PSSNH4("5", "丁铵黑药"),
        C5H10OS2("6", "丁黄药");

        public String getCode() {
            return code;
        }

        public String getDesc() {
            return desc;
        }

        private String code;

        private String desc;

        MATERIAL_TYPE(String code, String desc){
            this.code = code;
            this.desc = desc;
        }

    }

    public enum MoveType {

        MOVE_IN("in"),
        MOVE_OUT("out");

        private String type;

        MoveType(String type){
            this.type = type;
        }

        public String getType() {
            return type;
        }
    }
}