-- 防伪防窜货管理：窜货预警 + 数据完整性校验 建表脚本（不使用 tenant_id）
-- 执行前请确认目标数据库为项目实际业务库，并逐条执行。

-- 1. 防窜货规则配置表（key-value 风格，预置判定粒度配置）
CREATE TABLE IF NOT EXISTS mes_trace_anti_config (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    config_key VARCHAR(64) NOT NULL COMMENT '配置项Key',
    config_value VARCHAR(255) NOT NULL COMMENT '配置值',
    remark VARCHAR(255) DEFAULT NULL COMMENT '配置说明',
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    creator VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    updater VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    deleted BIT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (id),
    KEY idx_anti_config_key (config_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='防窜货规则配置';

-- 预置判定粒度：PROVINCE 跨省 / CITY 跨市
INSERT INTO mes_trace_anti_config (config_key, config_value, remark)
SELECT 'warning_level', 'PROVINCE', '窜货判定粒度：PROVINCE 跨省 / CITY 跨市'
WHERE NOT EXISTS (SELECT 1 FROM mes_trace_anti_config WHERE config_key = 'warning_level' AND deleted = b'0');

-- 2. 窜货预警记录表
CREATE TABLE IF NOT EXISTS mes_trace_cross_region_warning (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    warning_no VARCHAR(64) DEFAULT NULL COMMENT '预警编号',
    bag_code_id BIGINT DEFAULT NULL COMMENT '袋码编号',
    bag_code VARCHAR(64) DEFAULT NULL COMMENT '袋码',
    pallet_code_id BIGINT DEFAULT NULL COMMENT '托盘码编号',
    pallet_code VARCHAR(64) DEFAULT NULL COMMENT '托盘码',
    batch_id BIGINT DEFAULT NULL COMMENT '生产批次编号',
    batch_code VARCHAR(64) DEFAULT NULL COMMENT '批次号',
    item_id BIGINT DEFAULT NULL COMMENT '物料编号',
    item_code VARCHAR(64) DEFAULT NULL COMMENT '物料编码',
    item_name VARCHAR(128) DEFAULT NULL COMMENT '物料名称',
    sales_id BIGINT DEFAULT NULL COMMENT '销售出库单编号',
    sales_code VARCHAR(64) DEFAULT NULL COMMENT '出库单号',
    client_id BIGINT DEFAULT NULL COMMENT '经销商编号',
    client_name VARCHAR(128) DEFAULT NULL COMMENT '经销商名称',
    dealer_province VARCHAR(64) DEFAULT NULL COMMENT '经销商省份',
    dealer_city VARCHAR(64) DEFAULT NULL COMMENT '经销商城市',
    scan_province VARCHAR(64) DEFAULT NULL COMMENT '扫码省份',
    scan_city VARCHAR(64) DEFAULT NULL COMMENT '扫码城市',
    warning_type VARCHAR(32) DEFAULT NULL COMMENT '预警类型：CROSS_PROVINCE / CROSS_CITY',
    scan_event_id BIGINT DEFAULT NULL COMMENT '关联消费者扫码事件编号',
    status TINYINT NOT NULL DEFAULT 10 COMMENT '状态：10 待处理 / 20 已处理 / 30 误报',
    handle_user_id BIGINT DEFAULT NULL COMMENT '处理人编号',
    handle_time DATETIME DEFAULT NULL COMMENT '处理时间',
    handle_remark VARCHAR(255) DEFAULT NULL COMMENT '处理备注',
    event_time DATETIME NOT NULL COMMENT '预警产生时间',
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    creator VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    updater VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    deleted BIT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (id),
    KEY idx_cross_region_status (status),
    KEY idx_cross_region_batch (batch_id),
    KEY idx_cross_region_bag (bag_code_id),
    KEY idx_cross_region_sales (sales_id),
    KEY idx_cross_region_event_time (event_time),
    KEY idx_cross_region_scan_province (scan_province)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='窜货预警记录';

-- 3. 数据完整性校验记录表
CREATE TABLE IF NOT EXISTS mes_trace_integrity_record (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    biz_type VARCHAR(32) NOT NULL COMMENT '业务类型：BATCH 批次 / SALES 销售出库 / SCAN 消费者扫码',
    biz_id BIGINT NOT NULL COMMENT '业务记录编号',
    biz_code VARCHAR(64) DEFAULT NULL COMMENT '业务编码（批次号/出库单号/追溯码）',
    content_hash CHAR(64) NOT NULL COMMENT '内容摘要 SHA-256',
    event_time DATETIME NOT NULL COMMENT '摘要生成时间',
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    creator VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    updater VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    deleted BIT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (id),
    UNIQUE KEY uk_integrity_biz (biz_type, biz_id),
    KEY idx_integrity_event_time (event_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据完整性校验记录';
