-- 交通统计报表审核系统 - 数据库初始化脚本 v3
-- Demo范围：交企统H203-2表_道路货物运输月度生产情况

CREATE DATABASE IF NOT EXISTS traffic_audit DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE traffic_audit;

-- ============================================
-- 一、用户权限模块（含三员）
-- ============================================

-- 部门表
DROP TABLE IF EXISTS sys_dept;
CREATE TABLE sys_dept (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
    dept_code VARCHAR(20) NOT NULL COMMENT '行政区划代码',
    parent_id BIGINT DEFAULT 0 COMMENT '上级部门',
    dept_level TINYINT COMMENT '1省 2市 3县',
    sort_order INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 角色表
DROP TABLE IF EXISTS sys_role;
CREATE TABLE sys_role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    role_name VARCHAR(50) NOT NULL COMMENT '角色名',
    role_code VARCHAR(50) NOT NULL COMMENT 'SYS_ADMIN/SEC_OFFICER/AUDITOR/PROVINCE/CITY/COUNTY',
    role_type VARCHAR(20) DEFAULT 'BUSINESS' COMMENT 'SYSTEM(三员)/BUSINESS(业务)',
    role_level TINYINT DEFAULT 1 COMMENT '0三员 1省厅 2市局 3县区',
    is_mutex TINYINT DEFAULT 0 COMMENT '1三员互斥 0普通'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 用户表
DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(200) NOT NULL COMMENT 'BCrypt',
    real_name VARCHAR(50),
    phone VARCHAR(20),
    dept_id BIGINT,
    status TINYINT DEFAULT 1 COMMENT '0禁用 1启用',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 用户角色关联
DROP TABLE IF EXISTS sys_user_role;
CREATE TABLE sys_user_role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    role_id BIGINT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================
-- 二、业务数据模块
-- ============================================

-- 清理旧版遗留表（v2 schema）
DROP TABLE IF EXISTS report_enterprise_monthly;

-- 交企统H203-2表：道路货物运输月度生产情况（Demo核心表）
DROP TABLE IF EXISTS h2032_enterprise_monthly;
CREATE TABLE h2032_enterprise_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    unified_credit_code VARCHAR(50) COMMENT '统一社会信用代码',
    report_unit VARCHAR(200) COMMENT '填报单位',

    -- 车辆数与吨位数
    vehicle_total INT COMMENT '车辆数_总计',
    tons_total DOUBLE COMMENT '标记吨位数_总计',
    vehicle_tractor INT COMMENT '车辆数_牵引车',
    vehicle_trailer INT COMMENT '车辆数_挂车',
    tons_trailer DOUBLE COMMENT '标记吨位数_挂车',
    vehicle_container INT COMMENT '车辆数_集装箱车',
    tons_container DOUBLE COMMENT '标记吨位数_集装箱车',
    vehicle_whole INT COMMENT '车辆数_整车',
    tons_whole DOUBLE COMMENT '标记吨位数_整车',

    -- 货运量与周转量
    freight_total DOUBLE COMMENT '货运量_总计（吨）',
    turnover_total DOUBLE COMMENT '货物周转量_总计（吨公里）',

    -- 分货类货运量
    freight_container DOUBLE COMMENT '货运量_集装箱（吨）',
    freight_coal DOUBLE COMMENT '货运量_煤炭及制品（吨）',
    freight_oil_gas DOUBLE COMMENT '货运量_石油天然气及制品（吨）',
    freight_crude_oil DOUBLE COMMENT '货运量_其中原油（吨）',
    freight_metal_ore DOUBLE COMMENT '货运量_金属矿石（吨）',
    freight_iron_ore DOUBLE COMMENT '货运量_其中铁矿石（吨）',
    freight_building DOUBLE COMMENT '货运量_矿物性建筑材料（吨）',
    freight_grain DOUBLE COMMENT '货运量_粮食（吨）',

    -- 运营指标
    avg_tonnage DOUBLE COMMENT '货车平均吨位',
    avg_tonnage_trailer DOUBLE COMMENT '平均吨位_挂车',
    avg_tonnage_whole DOUBLE COMMENT '平均吨位_整车',
    avg_distance DOUBLE COMMENT '货车平均运距（公里）',
    daily_trips_per_ton DOUBLE COMMENT '单吨日均载运次数',
    daily_mileage_per_vehicle DOUBLE COMMENT '单车单天行驶里程（公里）',
    daily_volume_per_vehicle DOUBLE COMMENT '单车日均运量（吨）',
    daily_trips_with_tractor DOUBLE COMMENT '单吨日均载运次数（结合牵引车）',

    -- 环比增速
    vehicle_mom_growth DOUBLE COMMENT '车辆数-总计环比增速',
    tons_mom_growth DOUBLE COMMENT '标记吨位-总计环比增速',
    freight_mom_growth DOUBLE COMMENT '货运量-总计环比增速',
    turnover_mom_growth DOUBLE COMMENT '货物周转量-总计环比增速',
    avg_distance_mom_growth DOUBLE COMMENT '货车平均运距-环比增速',

    -- 同比增速
    vehicle_yoy_growth DOUBLE COMMENT '车辆数-总计同比增速',
    tons_yoy_growth DOUBLE COMMENT '标记吨位-总计同比增速',
    tractor_trailer_ratio DOUBLE COMMENT '牵引车挂车比',
    freight_yoy_growth DOUBLE COMMENT '货运量-总计同比增速',
    turnover_yoy_growth DOUBLE COMMENT '货物周转量-总计同比增速',
    avg_distance_yoy_growth DOUBLE COMMENT '货车平均运距-同比增速',

    -- 填报信息
    unit_leader VARCHAR(50) COMMENT '单位负责人',
    stats_leader VARCHAR(50) COMMENT '统计负责人',
    contact_person VARCHAR(50) COMMENT '填表人',
    contact_phone VARCHAR(20) COMMENT '联系电话',
    report_date DATE COMMENT '报出日期',
    verify_explanation TEXT COMMENT '核实性原因解释',
    report_notes TEXT COMMENT '上报说明',
    modify_record TEXT COMMENT '修改记录',

    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H203-2表_道路货物运输月度生产情况';

-- 运政车辆数据
DROP TABLE IF EXISTS transport_auth_vehicle;
CREATE TABLE transport_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) COMMENT '报表期',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    tractor_count INT DEFAULT 0 COMMENT '总牵引车数',
    trailer_count INT DEFAULT 0 COMMENT '总挂车数',
    other_count INT DEFAULT 0 COMMENT '其它车辆数',
    trailer_tons DOUBLE COMMENT '挂车总吨位(吨)',
    other_tons DOUBLE COMMENT '其它车辆总吨位(吨)',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运政车辆数据';

-- 车辆轨迹里程数据
DROP TABLE IF EXISTS vehicle_track_mileage;
CREATE TABLE vehicle_track_mileage (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    monthly_mileage DOUBLE COMMENT '月度总里程(公里)',
    tracked_vehicles INT DEFAULT 0 COMMENT '有里程的车辆数',
    report_period VARCHAR(20) COMMENT '报表期',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆轨迹里程数据';

-- 规上规下拆分运输量（用户手动上传）
DROP TABLE IF EXISTS scale_split_transport;
CREATE TABLE scale_split_transport (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    period_type VARCHAR(10) NOT NULL COMMENT 'MONTH当月/CUMULATIVE累计',
    region_name VARCHAR(50) COMMENT '市州名称',

    -- 规上
    above_scale_freight DOUBLE COMMENT '规上货运量',
    above_scale_turnover DOUBLE COMMENT '规上周转量',
    above_scale_rank INT COMMENT '规上排名',
    above_scale_yoy DOUBLE COMMENT '规上同比',
    above_scale_yoy_rank INT COMMENT '规上增速排名',

    -- 规下
    below_scale_freight DOUBLE COMMENT '规下货运量',
    below_scale_turnover DOUBLE COMMENT '规下周转量',
    below_scale_rank INT COMMENT '规下排名',
    below_scale_yoy DOUBLE COMMENT '规下同比',
    below_scale_yoy_rank INT COMMENT '规下增速排名',

    -- 合计
    total_freight DOUBLE COMMENT '运输量合计-货运量',
    total_turnover DOUBLE COMMENT '运输量合计-周转量',
    total_rank INT COMMENT '合计排名',
    total_yoy DOUBLE COMMENT '合计同比',
    total_yoy_rank INT COMMENT '合计增速排名',

    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='规上规下拆分运输量';

-- 模板_货运量周转量（每月导入：左半今年1-N月，右半去年1-12月，N=报表期月份）
DROP TABLE IF EXISTS freight_turnover_import;
CREATE TABLE freight_turnover_import (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_name VARCHAR(50) NOT NULL COMMENT '市州或湖北省',

    -- 今年1-12月货运量（左半，仅1-N月有值）
    freight_m01 DOUBLE COMMENT '1月货运量(万吨)',
    freight_m02 DOUBLE COMMENT '2月货运量(万吨)',
    freight_m03 DOUBLE COMMENT '3月货运量(万吨)',
    freight_m04 DOUBLE COMMENT '4月货运量(万吨)',
    freight_m05 DOUBLE COMMENT '5月货运量(万吨)',
    freight_m06 DOUBLE COMMENT '6月货运量(万吨)',
    freight_m07 DOUBLE COMMENT '7月货运量(万吨)',
    freight_m08 DOUBLE COMMENT '8月货运量(万吨)',
    freight_m09 DOUBLE COMMENT '9月货运量(万吨)',
    freight_m10 DOUBLE COMMENT '10月货运量(万吨)',
    freight_m11 DOUBLE COMMENT '11月货运量(万吨)',
    freight_m12 DOUBLE COMMENT '12月货运量(万吨)',

    -- 去年1-12月货运量（右半，固定12个月，算同比用）
    last_freight_m01 DOUBLE COMMENT '去年1月货运量(万吨)',
    last_freight_m02 DOUBLE COMMENT '去年2月货运量(万吨)',
    last_freight_m03 DOUBLE COMMENT '去年3月货运量(万吨)',
    last_freight_m04 DOUBLE COMMENT '去年4月货运量(万吨)',
    last_freight_m05 DOUBLE COMMENT '去年5月货运量(万吨)',
    last_freight_m06 DOUBLE COMMENT '去年6月货运量(万吨)',
    last_freight_m07 DOUBLE COMMENT '去年7月货运量(万吨)',
    last_freight_m08 DOUBLE COMMENT '去年8月货运量(万吨)',
    last_freight_m09 DOUBLE COMMENT '去年9月货运量(万吨)',
    last_freight_m10 DOUBLE COMMENT '去年10月货运量(万吨)',
    last_freight_m11 DOUBLE COMMENT '去年11月货运量(万吨)',
    last_freight_m12 DOUBLE COMMENT '去年12月货运量(万吨)',

    -- 今年1-12月周转量（左半，仅1-N月有值，导入存档，报表用拆分表）
    turnover_m01 DOUBLE COMMENT '1月周转量(万吨公里)',
    turnover_m02 DOUBLE COMMENT '2月周转量(万吨公里)',
    turnover_m03 DOUBLE COMMENT '3月周转量(万吨公里)',
    turnover_m04 DOUBLE COMMENT '4月周转量(万吨公里)',
    turnover_m05 DOUBLE COMMENT '5月周转量(万吨公里)',
    turnover_m06 DOUBLE COMMENT '6月周转量(万吨公里)',
    turnover_m07 DOUBLE COMMENT '7月周转量(万吨公里)',
    turnover_m08 DOUBLE COMMENT '8月周转量(万吨公里)',
    turnover_m09 DOUBLE COMMENT '9月周转量(万吨公里)',
    turnover_m10 DOUBLE COMMENT '10月周转量(万吨公里)',
    turnover_m11 DOUBLE COMMENT '11月周转量(万吨公里)',
    turnover_m12 DOUBLE COMMENT '12月周转量(万吨公里)',

    -- 去年1-12月周转量（右半，固定12个月）
    last_turnover_m01 DOUBLE COMMENT '去年1月周转量(万吨公里)',
    last_turnover_m02 DOUBLE COMMENT '去年2月周转量(万吨公里)',
    last_turnover_m03 DOUBLE COMMENT '去年3月周转量(万吨公里)',
    last_turnover_m04 DOUBLE COMMENT '去年4月周转量(万吨公里)',
    last_turnover_m05 DOUBLE COMMENT '去年5月周转量(万吨公里)',
    last_turnover_m06 DOUBLE COMMENT '去年6月周转量(万吨公里)',
    last_turnover_m07 DOUBLE COMMENT '去年7月周转量(万吨公里)',
    last_turnover_m08 DOUBLE COMMENT '去年8月周转量(万吨公里)',
    last_turnover_m09 DOUBLE COMMENT '去年9月周转量(万吨公里)',
    last_turnover_m10 DOUBLE COMMENT '去年10月周转量(万吨公里)',
    last_turnover_m11 DOUBLE COMMENT '去年11月周转量(万吨公里)',
    last_turnover_m12 DOUBLE COMMENT '去年12月周转量(万吨公里)',

    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板_货运量周转量导入';

-- ============================================
-- 三、审核规则模块
-- ============================================

DROP TABLE IF EXISTS audit_rule;
CREATE TABLE audit_rule (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
    rule_code VARCHAR(50) NOT NULL COMMENT '规则编码',
    description TEXT COMMENT '规则描述',
    check_field VARCHAR(200) COMMENT '检查字段',
    compare_type VARCHAR(20) COMMENT 'DIFF/RATIO/MOM/YOY/NULL_CHECK/RANGE',
    threshold VARCHAR(50) COMMENT '阈值',
    alert_level VARCHAR(10) DEFAULT 'YELLOW' COMMENT 'RED/YELLOW',
    report_type VARCHAR(50) DEFAULT 'H2032' COMMENT '适用报表表号',
    is_enabled TINYINT DEFAULT 1,
    llm_raw_input TEXT COMMENT 'LLM翻译原始输入',
    sort_order INT DEFAULT 0,
    created_by BIGINT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 预置6条审核规则（Demo）
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆数运政对比', 'RULE_001', '企业上报车辆数与运政数据对比，差距>5台需核实', 'vehicleTotal', 'DIFF', '5', 'RED', 'H2032', 1, 1),
('吨位运政对比', 'RULE_002', '企业上报吨位与运政数据对比，差距>50需核实', 'tonsTotal', 'DIFF', '50', 'RED', 'H2032', 1, 2),
('周转量轨迹对比', 'RULE_003', '上报周转量与轨迹测算周转量对比，高出30%需核实', 'turnoverTotal,trackMileage', 'RATIO', '1.3', 'RED', 'H2032', 1, 3),
('货运类型环比', 'RULE_004', '本月新增货运类型需核实（上月为0、本月有量）', 'freightContainer,freightCoal,freightOilGas,freightCrudeOil,freightMetalOre,freightIronOre,freightBuilding,freightGrain', 'MOM', '0', 'YELLOW', 'H2032', 1, 4),
('集装箱异常', 'RULE_005', '无集装箱车但有集装箱货运量需核实', 'freightContainer,vehicleContainer', 'NULL_CHECK', '0', 'RED', 'H2032', 1, 5),
('整车吨位范围', 'RULE_006', '整车吨位不在4-40吨之间', 'tonsWhole', 'OUT_RANGE', '4,40', 'YELLOW', 'H2032', 1, 6);

-- ============================================
-- 四、审核结果模块
-- ============================================

DROP TABLE IF EXISTS audit_result;
CREATE TABLE audit_result (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    rule_id BIGINT NOT NULL COMMENT 'FK -> audit_rule',
    report_id BIGINT NOT NULL COMMENT 'FK -> h2032_enterprise_monthly',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    report_period VARCHAR(20) COMMENT '报表期',
    actual_value VARCHAR(200) COMMENT '实际值',
    threshold_value VARCHAR(200) COMMENT '阈值',
    deviation VARCHAR(200) COMMENT '偏差',
    status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/CONFIRMED/IGNORED',
    reviewer_id BIGINT COMMENT '审核人',
    review_comment TEXT COMMENT '审核意见',
    reviewed_at DATETIME,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS audit_explanation;
CREATE TABLE audit_explanation (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    audit_result_id BIGINT NOT NULL COMMENT 'FK -> audit_result',
    explanation_text TEXT COMMENT '上报人解释',
    llm_suggestion TEXT COMMENT 'LLM建议',
    llm_confidence DECIMAL(5,2) COMMENT '置信度',
    llm_status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/PROCESSED/FAILED'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================
-- 五、系统日志与导入批次
-- ============================================

DROP TABLE IF EXISTS sys_operation_log;
CREATE TABLE sys_operation_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT COMMENT '操作人',
    module VARCHAR(50) COMMENT '模块',
    action VARCHAR(50) COMMENT '操作',
    detail TEXT COMMENT '详情JSON',
    ip_address VARCHAR(50) COMMENT 'IP地址',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS import_batch;
CREATE TABLE import_batch (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    file_name VARCHAR(200) COMMENT '文件名',
    import_type VARCHAR(50) COMMENT 'H2032/TRANSPORT_AUTH/TRACK_MILEAGE/SCALE_SPLIT',
    report_period VARCHAR(20) COMMENT '报表期',
    total_rows INT DEFAULT 0,
    success_rows INT DEFAULT 0,
    fail_rows INT DEFAULT 0,
    error_detail TEXT COMMENT '错误详情',
    created_by BIGINT COMMENT '导入人',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================
-- 六、LLM脱敏映射
-- ============================================

DROP TABLE IF EXISTS llm_desensitize_map;
CREATE TABLE llm_desensitize_map (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    original_value VARCHAR(200) COMMENT '原始值',
    masked_value VARCHAR(200) COMMENT '脱敏值',
    mask_type VARCHAR(20) COMMENT 'ENTERPRISE/REGION',
    call_id VARCHAR(50) COMMENT '调用ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================
-- 七、预置数据
-- ============================================

-- 预置部门（湖北省）
INSERT INTO sys_dept (dept_name, dept_code, dept_level) VALUES ('湖北省交通运输厅', '420000', 1);

-- 预置角色
INSERT INTO sys_role (role_name, role_code, role_type, role_level, is_mutex) VALUES
('系统管理员', 'SYS_ADMIN', 'SYSTEM', 0, 1),
('安全保密员', 'SEC_OFFICER', 'SYSTEM', 0, 1),
('安全审计员', 'AUDITOR', 'SYSTEM', 0, 1),
('省厅业务员', 'PROVINCE', 'BUSINESS', 1, 0);

-- 预置管理员账号 admin / admin123
INSERT INTO sys_user (username, password, real_name, dept_id) VALUES
('admin', '.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iAt6Z5Eh', '系统管理员', 1);

INSERT INTO sys_user_role (user_id, role_id) VALUES (1, 1);


-- ============================================
-- 八、公路旅客运输（交企统H203-1）扩展模块
-- ============================================

DROP TABLE IF EXISTS h2031_enterprise_monthly;
CREATE TABLE h2031_enterprise_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    vehicle_total INT COMMENT '客运车辆_总计',
    seat_total INT COMMENT '核定载客位_总计',
    vehicle_schedule INT COMMENT '车辆数_客运班车（含定线旅游客运客车）',
    seat_schedule INT COMMENT '核定载客位_客运班车（含定线旅游客运客车）',
    vehicle_charter INT COMMENT '车辆数_客运包车（含非定线旅游客运客车）',
    seat_charter INT COMMENT '核定载客位_客运包车（含非定线旅游客运客车）',
    passenger_total DOUBLE COMMENT '客运量_总计（人）',
    turnover_total DOUBLE COMMENT '旅客周转量_总计（人公里）',
    passenger_class1 DOUBLE COMMENT '客运量_一类客运班线（含定线旅游）',
    turnover_class1 DOUBLE COMMENT '旅客周转量_一类客运班线（含定线旅游）',
    passenger_class2 DOUBLE COMMENT '客运量_二类客运班线（含定线旅游）',
    turnover_class2 DOUBLE COMMENT '旅客周转量_二类客运班线（含定线旅游）',
    passenger_class3 DOUBLE COMMENT '客运量_三类客运班线（含定线旅游）',
    turnover_class3 DOUBLE COMMENT '旅客周转量_三类客运班线（含定线旅游）',
    passenger_class4 DOUBLE COMMENT '客运量_四类客运班线（含定线旅游）',
    turnover_class4 DOUBLE COMMENT '旅客周转量_四类客运班线（含定线旅游）',
    passenger_charter DOUBLE COMMENT '客运量_客运包车（含非定线旅游）',
    turnover_charter DOUBLE COMMENT '旅客周转量_客运包车（含非定线旅游）',
    avg_distance_total DOUBLE COMMENT '客运平均运距（公里）',
    avg_distance_class1 DOUBLE COMMENT '一类客运班线平均运距（公里）',
    avg_distance_class2 DOUBLE COMMENT '二类客运班线平均运距（公里）',
    avg_distance_class3 DOUBLE COMMENT '三类客运班线平均运距（公里）',
    avg_distance_class4 DOUBLE COMMENT '四类客运班线平均运距（公里）',
    avg_distance_charter DOUBLE COMMENT '旅游、包车平均运距（公里）',
    verify_explanation TEXT COMMENT '核实性原因解释',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H203-1表_公路旅客运输月度生产情况';

DROP TABLE IF EXISTS passenger_auth_vehicle;
CREATE TABLE passenger_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) COMMENT '报表期',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    vehicle_count INT DEFAULT 0 COMMENT '车辆数',
    seat_count INT DEFAULT 0 COMMENT '载客位数',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公路旅客运政车辆数据';

-- H203-1 预置审核规则（4组8条，report_type=H2031）
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆数运政对比(旅客)', 'RULE_P001', '客运车辆数与运政车辆数对比，差距>3台需核实', 'vehicleTotal', 'DIFF', '3', 'RED', 'H2031', 1, 21),
('载客位数运政对比(旅客)', 'RULE_P002', '核定载客位数与运政载客位数对比，差距>50需核实', 'seatTotal', 'DIFF', '50', 'RED', 'H2031', 1, 22),
('客运量环比=0核实', 'RULE_P003', '一类/二类/三类/四类/包车客运量环比上个月等于0需核实', 'passengerClass1,passengerClass2,passengerClass3,passengerClass4,passengerCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 23),
('旅客周转量环比=0核实', 'RULE_P004', '一类/二类/三类/四类/包车旅客周转量环比上个月等于0需核实', 'turnoverClass1,turnoverClass2,turnoverClass3,turnoverClass4,turnoverCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 24),
('平均运距环比超±10%核实', 'RULE_P005', '一类/二类/三类/四类平均运距环比上个月超过±10%需核实', 'avgDistanceClass1,avgDistanceClass2,avgDistanceClass3,avgDistanceClass4', 'MOM_PCT', '10', 'YELLOW', 'H2031', 1, 25),
('包车平均运距等于上月核实', 'RULE_P006', '旅游包车平均运距等于上个月需核实', 'avgDistanceCharter', 'MOM_EQ', '0', 'YELLOW', 'H2031', 1, 26),
('无班线有班线客运量核实', 'RULE_P007', '无客运班车（班线车辆数为0）但有班线客运量需核实', 'vehicleSchedule,passengerClass1,passengerClass2,passengerClass3,passengerClass4', 'EXISTENCE', '0', 'RED', 'H2031', 1, 27),
('无包车有包车客运量核实', 'RULE_P008', '无客运包车（包车车辆数为0）但有包车客运量需核实', 'vehicleCharter,passengerCharter', 'EXISTENCE', '0', 'RED', 'H2031', 1, 28);


-- ============================================
-- 九、道路货运能源消耗（交企统H204）扩展模块
-- ============================================

-- 道路货运车辆能源消耗情况（车辆粒度季报）
DROP TABLE IF EXISTS h204_vehicle_quarterly;
CREATE TABLE h204_vehicle_quarterly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06（季度末月）',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    plate_no VARCHAR(30) COMMENT '车牌号',
    vehicle_type_code VARCHAR(10) COMMENT '车辆类型代码',
    vehicle_type VARCHAR(50) COMMENT '车辆类型（中文）',
    fuel_type_code VARCHAR(10) COMMENT '燃料类型代码',
    fuel_type VARCHAR(50) COMMENT '燃料类型（中文）',
    manufacture_year INT COMMENT '出厂年份',
    marked_tonnage DOUBLE COMMENT '标记吨位（吨）',
    total_mileage DOUBLE COMMENT '总行程（公里）',
    loaded_mileage DOUBLE COMMENT '载货里程（公里）',
    empty_mileage DOUBLE COMMENT '空驶里程（公里）',
    freight DOUBLE COMMENT '货运量（吨）',
    turnover DOUBLE COMMENT '货物周转量（吨公里）',
    trip_count INT COMMENT '趟次数（个）',
    fuel_unit VARCHAR(20) COMMENT '燃料1计量单位',
    fuel_consumption DOUBLE COMMENT '燃料1消耗量',
    avg_distance DOUBLE COMMENT '平均运距（公里）',
    avg_loaded_tonnage DOUBLE COMMENT '平均载货吨位（吨）',
    avg_trip_mileage DOUBLE COMMENT '单趟平均里程（公里）',
    fuel_per_100km DOUBLE COMMENT '百公里单耗',
    turnover_fuel DOUBLE COMMENT '周转量单耗',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period_plate (report_period, plate_no),
    KEY idx_period_ent (report_period, enterprise_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H204表_道路货运车辆能源消耗情况（车辆粒度）';

-- 道路货运能耗_运政车辆信息（车牌粒度）
DROP TABLE IF EXISTS h204_auth_vehicle;
CREATE TABLE h204_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期',
    plate_no VARCHAR(30) NOT NULL COMMENT '车牌号',
    vehicle_type VARCHAR(50) COMMENT '车辆类型',
    fuel_type VARCHAR(50) COMMENT '燃料类型',
    marked_tonnage DOUBLE COMMENT '标记吨位（吨）',
    traction_quality DOUBLE COMMENT '准牵引质量（牵引车标记吨位）',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period_plate (report_period, plate_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='道路货运能耗_运政车辆信息（车牌粒度）';

-- H204 预置审核规则（4条，report_type=H204）
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆类型与运政对比', 'RULE_E001', '能耗明细车辆类型与运政车辆信息不一致需核实', 'vehicleType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 31),
('燃料类型与运政对比', 'RULE_E002', '能耗明细燃料类型与运政车辆信息不一致需核实', 'fuelType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 32),
('标记吨位与运政对比', 'RULE_E003', '能耗明细标记吨位与运政对比，差距>0.05吨需核实（牵引车对比准牵引质量）', 'markedTonnage', 'CROSS_DIFF', '0.05', 'YELLOW', 'H204', 1, 33),
('运政车辆信息缺失', 'RULE_E004', '能耗明细车牌号在运政车辆信息中不存在需核实', 'plateNo', 'EXISTENCE_AUTH', '0', 'RED', 'H204', 1, 34),
('载货里程占比与单趟里程比核实', 'RULE_E005', '载货里程/总行程 与 平均运距/单趟平均里程 相差±10%需核实', 'loadedMileage,totalMileage,avgDistance,avgTripMileage', 'LOADED_RATIO_DIFF', '0.1', 'YELLOW', 'H204', 1, 35),
('百公里单耗超范围核实', 'RULE_E006', '百公里单耗偏离同燃料类型中位数超过50%需核实', 'fuelPer100km,fuelTypeCode', 'FUEL_RANGE', '0.5', 'YELLOW', 'H204', 1, 36),
('百公里单耗环比变化核实', 'RULE_E007', '同一辆车百公里单耗环比变化超过±50%需核实', 'fuelPer100km,plateNo', 'FUEL_MOM', '0.5', 'YELLOW', 'H204', 1, 37),
('能耗量与货运月报对比核实', 'RULE_E008', '企业能耗货运量/周转量之和大于货运月报50%需核实', 'freight,turnover,enterpriseName', 'FREIGHT_VS_H2032', '0.5', 'RED', 'H204', 1, 38),
('平均运距与货运月报对比核实', 'RULE_E009', '车辆平均运距与货运月报平均运距相差±60%需核实', 'avgDistance,enterpriseName', 'AVG_DIST_VS_H2032', '0.6', 'YELLOW', 'H204', 1, 39),
('平均载货吨位与标记吨位比值核实', 'RULE_E010', '平均载货吨位/标记吨位 小于0.5或大于1需核实', 'avgLoadedTonnage,markedTonnage', 'LOADED_TON_RATIO', '0.5,1', 'YELLOW', 'H204', 1, 40);

-- ============================================
-- 十、投资模块（客运站场/物流园区）扩展
-- ============================================

-- 投资项目主档（按 项目名+类别 唯一）
DROP TABLE IF EXISTS investment_project;
CREATE TABLE investment_project (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    project_name VARCHAR(200) NOT NULL COMMENT '项目名称',
    category VARCHAR(20) NOT NULL COMMENT '类别：客运站场/物流园区',
    city VARCHAR(50) COMMENT '市州',
    county VARCHAR(100) COMMENT '县（市、区）',
    builder_name VARCHAR(200) COMMENT '投资建设单位',
    construct_nature VARCHAR(50) COMMENT '建设性质',
    start_time VARCHAR(20) COMMENT '开工时间',
    end_time VARCHAR(20) COMMENT '建成/竣工时间',
    total_investment DOUBLE COMMENT '计划总投资（万元）',
    approval_gk VARCHAR(500) COMMENT '工可批复',
    approval_cs VARCHAR(500) COMMENT '初设批复',
    building_area DOUBLE COMMENT '建筑面积（平方米）',
    is_billion TINYINT DEFAULT 0 COMMENT '亿元投资项目标记',
    is_county TINYINT DEFAULT 0 COMMENT '经济强县项目标记',
    is_five_year TINYINT DEFAULT 0 COMMENT '十五五重点物流项目标记',
    source VARCHAR(50) COMMENT '数据来源',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_name_category (project_name, category)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资项目主档';

-- 投资项目月度完成情况
DROP TABLE IF EXISTS investment_monthly;
CREATE TABLE investment_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
    project_id BIGINT NOT NULL COMMENT '项目主档ID',
    year_plan DOUBLE COMMENT '本年计划投资（万元）',
    year_cum DOUBLE COMMENT '自年初累计完成投资（万元）',
    month_done DOUBLE COMMENT '其中：本月完成投资（万元）',
    start_cum DOUBLE COMMENT '自开始建设累计完成投资（万元）',
    progress_stage VARCHAR(100) COMMENT '建设阶段',
    progress_desc VARCHAR(2000) COMMENT '形象进度',
    building_area DOUBLE COMMENT '建筑面积（平方米）',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period (report_period),
    KEY idx_project (project_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资项目月度完成情况';

-- 投资系统查询导出（审核比对基准）
DROP TABLE IF EXISTS investment_system;
CREATE TABLE investment_system (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
    project_name VARCHAR(200) NOT NULL COMMENT '项目名称（单位）',
    total_investment DOUBLE COMMENT '计划总投资（万元）',
    start_cum DOUBLE COMMENT '自开始建设至本月累计完成投资（万元）',
    year_plan DOUBLE COMMENT '本年计划投资（万元）',
    year_cum DOUBLE COMMENT '自年初累计完成投资（万元）',
    month_done DOUBLE COMMENT '当月完成投资（万元）',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资系统查询导出（审核比对基准）';

-- INVEST 预置审核规则（4条，report_type=INVEST）
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('自开始累计与投资系统对比', 'RULE_I001', '自开始建设累计完成投资与投资系统导出差异超阈值需核实', 'startCum', 'CROSS_DIFF', '100|5', 'YELLOW', 'INVEST', 1, 41),
('自年初累计与投资系统对比', 'RULE_I002', '自年初累计完成投资与投资系统导出差异超阈值需核实', 'yearCum', 'CROSS_DIFF', '50|5', 'YELLOW', 'INVEST', 1, 42),
('本月完成与投资系统对比', 'RULE_I003', '本月完成投资与投资系统导出差异超阈值需核实', 'monthDone', 'CROSS_DIFF', '30|30', 'YELLOW', 'INVEST', 1, 43),
('投资系统项目缺失核实', 'RULE_I004', '汇总大表项目在投资系统导出中不存在需核实', 'projectName', 'EXISTENCE_SYS', '0', 'YELLOW', 'INVEST', 1, 44);
