-- 风控模块建表语句

-- ----------------------------
-- 风控规则表
-- ----------------------------
drop table if exists risk_rule;
create table risk_rule (
    rule_id         bigint(20)      not null auto_increment    comment '规则ID',
    rule_name       varchar(100)    not null                   comment '规则名称',
    rule_code       varchar(64)     not null                   comment '规则编码',
    rule_type       varchar(20)     not null                   comment '规则类型（1交易规则 2登录规则 3设备规则 4行为规则）',
    rule_desc       varchar(500)    default null               comment '规则描述',
    rule_script     text            default null               comment '规则脚本/条件',
    risk_level      varchar(20)     not null                   comment '风险等级（1低风险 2中风险 3高风险 4极高风险）',
    rule_score      decimal(10,2)   default 0.00               comment '规则分值',
    action_type     varchar(20)     not null                   comment '触发动作（1预警 2拦截 3人工审核 4记录日志）',
    status          char(1)         default '0'                comment '规则状态（0正常 1停用）',
    priority        int(11)         default 0                  comment '优先级',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    remark          varchar(500)    default null               comment '备注',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (rule_id),
    unique key uk_rule_code (rule_code)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '风控规则表';

-- ----------------------------
-- 风控事件表
-- ----------------------------
drop table if exists risk_event;
create table risk_event (
    event_id        bigint(20)      not null auto_increment    comment '事件ID',
    event_no        varchar(64)     not null                   comment '事件编号',
    event_type      varchar(20)     not null                   comment '事件类型',
    event_source    varchar(50)     default null               comment '事件来源',
    user_id         bigint(20)      default null               comment '用户ID',
    user_name       varchar(50)     default null               comment '用户名称',
    device_id       varchar(100)    default null               comment '设备ID',
    ip_address      varchar(50)     default null               comment 'IP地址',
    location        varchar(100)    default null               comment '地理位置',
    event_data      text            default null               comment '事件数据',
    risk_level      varchar(20)     default null               comment '风险等级',
    risk_score      decimal(10,2)   default 0.00               comment '风险分值',
    hit_rules       varchar(500)    default null               comment '命中规则',
    action_taken    varchar(20)     default null               comment '已执行动作',
    status          char(1)         default '0'                comment '状态（0待处理 1已处理 2已忽略）',
    remark          varchar(500)    default null               comment '备注',
    event_time      datetime        default null               comment '事件发生时间',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (event_id),
    unique key uk_event_no (event_no)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '风控事件表';

-- ----------------------------
-- 风控案例表
-- ----------------------------
drop table if exists risk_case;
create table risk_case (
    case_id         bigint(20)      not null auto_increment    comment '案例ID',
    case_no         varchar(64)     not null                   comment '案例编号',
    case_name       varchar(100)    not null                   comment '案例名称',
    case_type       varchar(20)     not null                   comment '案例类型',
    case_desc       text            default null               comment '案例描述',
    event_id        bigint(20)      default null               comment '关联事件ID',
    event_no        varchar(64)     default null               comment '关联事件编号',
    user_id         bigint(20)      default null               comment '用户ID',
    user_name       varchar(50)     default null               comment '用户名称',
    risk_level      varchar(20)     default null               comment '风险等级',
    risk_score      decimal(10,2)   default 0.00               comment '风险分值',
    hit_rules       varchar(500)    default null               comment '命中规则',
    case_result     varchar(20)     default null               comment '案例结果',
    status          char(1)         default '0'                comment '状态（0待处理 1已处理 2已归档）',
    remark          varchar(500)    default null               comment '备注',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (case_id),
    unique key uk_case_no (case_no)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '风控案例表';

-- ----------------------------
-- 黑名单表
-- ----------------------------
drop table if exists risk_blacklist;
create table risk_blacklist (
    black_id        bigint(20)      not null auto_increment    comment '黑名单ID',
    black_type      varchar(20)     not null                   comment '黑名单类型（1IP 2手机号 3设备 4用户 5邮箱）',
    black_value     varchar(200)    not null                   comment '黑名单值',
    black_name      varchar(100)    default null               comment '黑名单名称',
    reason          varchar(500)    default null               comment '加入原因',
    source          varchar(50)     default null               comment '来源',
    expire_time     datetime        default null               comment '过期时间',
    status          char(1)         default '0'                comment '状态（0正常 1停用）',
    remark          varchar(500)    default null               comment '备注',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (black_id),
    unique key uk_black_value (black_type, black_value)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '黑名单表';

-- ----------------------------
-- 白名单表
-- ----------------------------
drop table if exists risk_whitelist;
create table risk_whitelist (
    white_id        bigint(20)      not null auto_increment    comment '白名单ID',
    white_type      varchar(20)     not null                   comment '白名单类型（1IP 2手机号 3设备 4用户 5邮箱）',
    white_value     varchar(200)    not null                   comment '白名单值',
    white_name      varchar(100)    default null               comment '白名单名称',
    reason          varchar(500)    default null               comment '加入原因',
    source          varchar(50)     default null               comment '来源',
    expire_time     datetime        default null               comment '过期时间',
    status          char(1)         default '0'                comment '状态（0正常 1停用）',
    remark          varchar(500)    default null               comment '备注',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (white_id),
    unique key uk_white_value (white_type, white_value)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '白名单表';

-- ----------------------------
-- 风险评分表
-- ----------------------------
drop table if exists risk_score;
create table risk_score (
    score_id        bigint(20)      not null auto_increment    comment '评分ID',
    score_no        varchar(64)     not null                   comment '评分编号',
    user_id         bigint(20)      default null               comment '用户ID',
    user_name       varchar(50)     default null               comment '用户名称',
    score_type      varchar(20)     default null               comment '评分类型',
    total_score     decimal(10,2)   default 0.00               comment '总分',
    base_score      decimal(10,2)   default 0.00               comment '基础分',
    rule_score      decimal(10,2)   default 0.00               comment '规则分',
    behavior_score  decimal(10,2)   default 0.00               comment '行为分',
    credit_score    decimal(10,2)   default 0.00               comment '信用分',
    risk_level      varchar(20)     default null               comment '风险等级',
    evaluation      text            default null               comment '评估说明',
    status          char(1)         default '0'                comment '状态（0正常 1失效）',
    remark          varchar(500)    default null               comment '备注',
    evaluate_time   datetime        default null               comment '评估时间',
    del_flag        char(1)         default '0'                comment '删除标志（0代表存在 1代表删除）',
    create_by       bigint(20)      default null               comment '创建者',
    create_time     datetime        default null               comment '创建时间',
    update_by       bigint(20)      default null               comment '更新者',
    update_time     datetime        default null               comment '更新时间',
    primary key (score_id),
    unique key uk_score_no (score_no)
) engine=innodb auto_increment=1 DEFAULT CHARSET=utf8mb4 comment = '风险评分表';
