package com.loan.system.domain.enums;


/**
 * @author xuhong
 * @date 2020/9/2 - 20:05
 * @Description 错误枚举类
 */
public enum ExceptionEnum {
    SUCCESS(200, "成功"),
    Forbidden(403, "禁止访问"),
    /**
     *      CODE        错误模块
     * -1   ~   -99     一般常见
     * -100 ~   -149    登录
     * -150 ~   -199    用户管理
     * -200 ~   -249    业务管理
     * -250 ~   -299    合同管理
     * -300 ~   -349    模块管理
     * -350 ~   -399    环节管理
     * -400 ~   -449    支付管理
     * -450 ~   -499    系统管理
     */

    UNKNOWN_ERROR(-10, "未知错误"),
    INPUT_ERROR(-11, "输入格式错误"),
    SAVE_ERROR(-12,"保存数据出错"),
    DELETE_ERROR(-13, "删除数据出错"),
    UPDATE_ERROR(-14, "更新数据失败"),
    NullPointerException(-20, "空指针错误"),
    UNAUTHORIZED(-21,"未授权"),
    PERMISSION_DENIED(-22,"没有操作权限"),

    DIRECTORY_CREATE_ERROR(-30,"目录创建失败"),
    DIRECTORY_NOT_EXIST(-31,"目录不存在"),
    DIRECTORY_DELETE_ERROR(-32,"目录删除失败"),

    FILE_CREATE_ERROR(-40,"文件创建失败"),
    FILE_NOT_EXIST(-41,"文件不存在"),
    FILE_ALREADY_EXIST(-42,"文件已存在"),
    FILE_DELETE_ERROR(-43,"文件删除失败"),
    FILE_UPLOAD_OBJECT_NOT_EXIST(-44,"上传文件对象不存在"),
    FILE_UPLOAD_TYPE_NOT_DEFINED(-45,"上传文件类型未定义"),
    FILE_IS_EMPTY(-46,"文件为空"),
    FILE_BLOCK_UPLOAD_FAILED(-47,"文件块上传失败"),
    FILE_MERGE_IS_EMPTY(-48,"合并文件为空"),
    FILE_MERGE_FAILED(-49,"文件合并失败"),
    FILE_CHECK_FAILED(-50,"文件校验错误"),
    IO_CLOSE_ERROR(-51,"读写错误"),
    FILE_NOT_IMAGE(-52,"文件不是图片类型"),

    // -45 文件类型限制

    TOKEN_INVALID(-100,"Invalid Token"),
    TOKEN_EXPIRED(-101,"Token Expired"),
    WITHOUT_TOKEN(-102,"WITHOUT TOKEN"),
    LOGIN_EXPIRED(-103,"登录过期"),

    USER_NOT_EXIST(-110, "账户不存在"),
    USER_EXIST(-111, "账户已存在"),
    USERNAME_IS_NULL(-112, "账户不能为空"),
    WRONG_PASSWORD(-113, "密码错误,若密码连续错误3次以上账户将被锁定"),
    USER_MUST_BE_UNAUTHORIZED(-114, "被授权的用户必须是未被授权的"),
    USER_NUMBER_EXIST(-114, "工号已存在"),

    PROJECT_EXIST(-200,"项目已存在"),
    PROJECT_NOT_EXIST(-201,"项目不存在"),
    PROJECT_LABEL_EXIST(-202,"项目标签已存在"),
    PROJECT_LABEL_NOT_EXIST(-203,"项目标签不存在"),
    LOANCASE_IS_Completed(-204,"项目已经完成，无法重复提交"),
    PROJECT_TYPE_NOT_EXIST(-205,"项目类型不存在"),
    PROJECT_TYPE_IS_NECESSARY(-206,"项目类型是必须的"),
    PROJECT_LABEL_HAS_NOT_EXIST(-207,"存在项目标签不存在"),
    PROJECT_TASK_BOOK_EXIST(-208,"项目任务书已存在"),
    PROJECT_TASK_BOOK_NOT_EXIST(-209,"项目任务书不存在"),
    PROJECT_TASK_BOOK_MATERIAL_NOT_EXIST(-210,"项目任务书材料不存在"),


    CONTRACT_EXIST(-250, "合同已存在"),
    CONTRACT_NOT_EXIST(-251, "合同不存在"),
    CONTRACT_MATERIAL_EXIST(-255, "合同材料已存在"),
    CONTRACT_MATERIAL_NOT_EXIST(-256, "合同材料不存在"),
    CONTRACT_MATERIAL_HAS_NOT_EXIST(-257,"存在材料不存在"),
    CONTRACT_TYPE_EXIST(-260, "合同类型已存在"),
    CONTRACT_TYPE_NOT_EXIST(-261, "合同类型不存在"),
    CONTRACT_TYPE_ERROR(-263,"合同类型超出限制"),
    CONTRACT_SELECT_EXIST(-265, "合同采购方式已存在"),
    CONTRACT_SELECT_NOT_EXIST(-266, "合同采购方式不存在"),
    CONTRACT_PAYMENT_EXIST(-270,"付款已存在"),
    CONTRACT_PAYMENT_NOT_EXIST(-271,"付款不存在"),
    CONTRACT_PAYMENT_HAS_NOT_EXIST(-272,"存在付款不存在"),
    CONTRACT_HAS_NOT_COMPELETED(-280,"合同未完成所有支付"),


    MODULE_EXIST(-300,"已存在"),
    MODULE_NOT_EXIST(-301,"模块不存在"),


    STEP_EXIST(-350, "项目环节已存在"),
    STEP_NOT_EXIST(-351, "项目环节不存在"),
    STEP_MATERIAL_EXIST(-352,"环节材料已存在"),
    STEP_MATERIAL_NOT_EXIST(-353,"环节材料不存在"),
    STEP_TEMPLATE_NOT_EXIST(-354,"环节模板不存在"),
    STEP_TEMPLATE_READ_ERROR(-355,"环节模板读取失败"),
    STEP_TEMPLATE_LIST_NOT_EXIST(-356,"环节模板边不存在"),
    STEP_TEMPLATE_NODE_NOT_EXIST(-357,"环节模板节点读取失败"),
    STEP_USER_NOT_EXPECTED(-358,"环节处理人不是预期用户"),
    STEP_HAS_COMPLETEED(-359,"环节已完成，不能重复操作"),


    FUND_EXIST(-400,"经费已存在"),
    FUND_NOT_EXIST(-401,"经费不存在"),
    FUND_OUTPUT_EXIST(-402,"支出表已存在"),
    FUND_OUTPUT_NOT_EXIST(-403,"支出表不存在"),
    FUND_OUTPUT_HAS_NOT_EXIST(-404,"存在支出表不存在"),
    FUND_SHOULD_NOT_BE_NULL(-405,"经费来源不能为空"),
    INSUFFICIENT_BALANCE_OF_FUND(-410,"经费余额不足"),
    FUND_OUTPUT_EXCESSIVE(-411,"经费使用超出所需"), ACCOUNT_IS_LOCK(-412, "账户已经被锁定请15分钟后再试"), WEAK_PASSWORD_ACCOUNT_IS_LOCK(-413, "账户因弱密码被锁定请联系管理员解锁"), WRONG_PASSWORD_ACCOUNT(-414, "密码错误次数已达上线，账户将被锁定请15分钟后再试");

    private Integer code;
    private String msg;

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    ExceptionEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}
