You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
439 lines
26 KiB
439 lines
26 KiB
-- =============================================================
|
|
-- 嘉谷低空智控平台 数据库初始化脚本
|
|
-- 引擎: InnoDB / 字符集: utf8mb4
|
|
-- 说明: 所有 BIGINT 主键均为 Snowflake 雪花 ID,无 AUTO_INCREMENT
|
|
-- =============================================================
|
|
|
|
CREATE DATABASE IF NOT EXISTS laic DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
|
USE laic;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.1 用户
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `user` (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
name VARCHAR(32) NOT NULL COMMENT '名称',
|
|
phone VARCHAR(32) NOT NULL COMMENT '手机号',
|
|
email VARCHAR(64) COMMENT '电子邮箱',
|
|
password VARCHAR(64) NOT NULL COMMENT '密码哈希',
|
|
role VARCHAR(16) DEFAULT 'user' COMMENT '用户角色', -- admin / user
|
|
traffic_balance BIGINT DEFAULT 0 COMMENT '云媒体剩余流量(字节)', -- 云媒体剩余流量(字节),慢快照,权威在 Redis
|
|
status TINYINT DEFAULT 1 COMMENT '业务状态', -- 1 正常 / 0 禁用
|
|
last_login DATETIME COMMENT '最后登录时间',
|
|
password_changed_at DATETIME COMMENT '密码最后修改时间',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY idx_phone (phone)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.2 机巢 & 无人机
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS dock (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识', -- MQTT dockId (dock-xxx)
|
|
name VARCHAR(64) DEFAULT '' COMMENT '名称',
|
|
code VARCHAR(32) DEFAULT '' COMMENT '业务编码',
|
|
sn VARCHAR(64) DEFAULT '' COMMENT '设备序列号',
|
|
iccid VARCHAR(32) DEFAULT '' COMMENT 'SIM 卡 ICCID', -- 冗余,权威见 sim_card.iccid
|
|
longitude DOUBLE DEFAULT 0 COMMENT '经度',
|
|
latitude DOUBLE DEFAULT 0 COMMENT '纬度',
|
|
altitude DOUBLE DEFAULT 0 COMMENT '海拔高度(米)',
|
|
location VARCHAR(128) DEFAULT '' COMMENT '位置描述',
|
|
register_status VARCHAR(16) DEFAULT 'pending' COMMENT '注册状态', -- pending/registered
|
|
dock_id_source VARCHAR(32) DEFAULT '' COMMENT '机巢标识来源',
|
|
software_ver VARCHAR(16) DEFAULT '' COMMENT '软件版本',
|
|
protocol_ver VARCHAR(8) DEFAULT '1.0' COMMENT '协议版本',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY idx_dock_id (dock_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS drone (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
drone_sn VARCHAR(32) NOT NULL COMMENT '无人机序列号', -- 飞控 HW_SN_NUM
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识', -- 绑定的机巢 dock_id(1:1)
|
|
name VARCHAR(64) DEFAULT '' COMMENT '名称',
|
|
code VARCHAR(32) DEFAULT '' COMMENT '业务编码',
|
|
model VARCHAR(32) DEFAULT '' COMMENT '设备型号',
|
|
battery INT DEFAULT 0 COMMENT '电池电量(百分比)',
|
|
firmware_ver VARCHAR(16) DEFAULT '' COMMENT '固件版本',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY idx_drone_sn (drone_sn),
|
|
UNIQUE KEY idx_drone_dock (dock_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.3 告警
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS alarm_code (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
code VARCHAR(64) NOT NULL COMMENT '业务编码',
|
|
category VARCHAR(32) NOT NULL COMMENT '告警类别', -- dock / drone
|
|
message_cn VARCHAR(256) NOT NULL COMMENT '中文告警信息',
|
|
level VARCHAR(16) DEFAULT 'critical' COMMENT '告警级别',
|
|
source VARCHAR(128) DEFAULT '' COMMENT '告警来源',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY idx_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS alarm (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
code VARCHAR(64) NOT NULL COMMENT '业务编码',
|
|
device_type VARCHAR(8) NOT NULL COMMENT '设备类型', -- dock / drone
|
|
message_cn VARCHAR(256) NOT NULL COMMENT '中文告警信息',
|
|
level VARCHAR(16) NOT NULL COMMENT '告警级别',
|
|
status VARCHAR(16) DEFAULT 'active' COMMENT '业务状态', -- active / acknowledged / resolved
|
|
triggered_at DATETIME COMMENT '触发时间',
|
|
resolved_at DATETIME COMMENT '解决时间',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
KEY idx_alarm_dock (dock_id, status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.4 指令 & 工作流
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS device_command_log (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID', -- = commandId (Snowflake)
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
command_type VARCHAR(64) NOT NULL COMMENT '指令类型', -- dock.open / drone.takeoff / workflow.start_task
|
|
params JSON COMMENT '指令参数 JSON',
|
|
drone_sn VARCHAR(32) COMMENT '无人机序列号',
|
|
request_id VARCHAR(64) COMMENT '请求 ID',
|
|
ttl_ms INT DEFAULT 30000 COMMENT '指令有效期(毫秒)',
|
|
ack_accepted TINYINT COMMENT '设备是否接受指令',
|
|
ack_result_code VARCHAR(64) COMMENT '确认结果码',
|
|
status VARCHAR(16) DEFAULT 'sent' COMMENT '业务状态', -- sent / acked / timeout / terminal
|
|
retry_count INT DEFAULT 0 COMMENT '重试次数',
|
|
sent_at DATETIME COMMENT '发送时间',
|
|
acked_at DATETIME COMMENT '确认时间',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
KEY idx_cmd_log_dock (dock_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS workflow_state (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
command_id VARCHAR(64) COMMENT '指令 ID',
|
|
type VARCHAR(64) COMMENT '工作流类型',
|
|
task_id VARCHAR(128) COMMENT '任务计划 ID',
|
|
mission_id VARCHAR(128) COMMENT '任务航线 ID',
|
|
state VARCHAR(16) NOT NULL COMMENT '工作流状态', -- idle / running / succeeded / failed / cancelled
|
|
step VARCHAR(64) NOT NULL COMMENT '当前步骤',
|
|
result_code VARCHAR(64) COMMENT '执行结果码',
|
|
updated_at DATETIME COMMENT '更新时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.5 固件管理
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS firmware (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
component VARCHAR(32) NOT NULL COMMENT '固件组件', -- 固定 dock-edge-agent
|
|
version VARCHAR(32) NOT NULL COMMENT '固件版本号', -- 1.3.0
|
|
description VARCHAR(512) DEFAULT '' COMMENT '描述信息',
|
|
file_url VARCHAR(512) NOT NULL COMMENT '固件文件地址',
|
|
sha256 VARCHAR(128) NOT NULL COMMENT '文件 SHA-256 摘要',
|
|
signature TEXT NOT NULL COMMENT '文件签名',
|
|
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
|
|
mandatory TINYINT DEFAULT 0 COMMENT '是否强制升级',
|
|
status VARCHAR(16) DEFAULT 'draft' COMMENT '业务状态', -- draft/released/deprecated
|
|
created_by BIGINT NOT NULL COMMENT '创建人 ID',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY idx_component_ver (component, version)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.6 任务 & 航线
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS task_plan (
|
|
id VARCHAR(128) PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
name VARCHAR(128) NOT NULL COMMENT '名称',
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
route_id BIGINT COMMENT '航线 ID',
|
|
schedule_type VARCHAR(16) DEFAULT 'once' COMMENT '调度类型', -- once / cron
|
|
schedule_cron VARCHAR(32) COMMENT 'Cron 调度表达式',
|
|
video_policy VARCHAR(16) DEFAULT 'raw' COMMENT '视频策略',
|
|
status VARCHAR(16) DEFAULT 'draft' COMMENT '业务状态',
|
|
created_by BIGINT COMMENT '创建人 ID',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS task_execution (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
task_id VARCHAR(128) COMMENT '任务计划 ID',
|
|
command_id VARCHAR(64) COMMENT '指令 ID',
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
drone_sn VARCHAR(32) COMMENT '无人机序列号',
|
|
start_time DATETIME COMMENT '开始时间',
|
|
end_time DATETIME COMMENT '结束时间',
|
|
status VARCHAR(16) DEFAULT 'pending' COMMENT '业务状态',
|
|
result_code VARCHAR(64) COMMENT '执行结果码',
|
|
trajectory_json JSON COMMENT '轨迹 JSON',
|
|
created_at DATETIME COMMENT '创建时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS route (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
name VARCHAR(128) NOT NULL COMMENT '名称',
|
|
description VARCHAR(256) COMMENT '描述信息',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS route_waypoint (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
route_id BIGINT NOT NULL COMMENT '航线 ID',
|
|
seq INT NOT NULL COMMENT '航点序号',
|
|
longitude DOUBLE COMMENT '经度',
|
|
latitude DOUBLE COMMENT '纬度',
|
|
altitude DOUBLE COMMENT '海拔高度(米)',
|
|
speed DOUBLE COMMENT '飞行速度',
|
|
yaw DOUBLE COMMENT '偏航角',
|
|
hold_sec INT DEFAULT 0 COMMENT '航点停留时间(秒)',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
UNIQUE KEY uk_route_seq (route_id, seq)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.7 媒体
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS live_session (
|
|
id VARCHAR(128) PRIMARY KEY COMMENT '主键 ID', -- streamSessionId
|
|
dock_id VARCHAR(64) NOT NULL COMMENT '机巢标识',
|
|
provider VARCHAR(16) DEFAULT 'aliyun' COMMENT '流媒体服务商',
|
|
stream_name VARCHAR(128) NOT NULL COMMENT '直播流名称', -- 直播流名(每次会话唯一)
|
|
push_url_hash VARCHAR(128) COMMENT '推流地址哈希',
|
|
expires_at BIGINT NOT NULL COMMENT '过期时间戳',
|
|
max_bitrate_bps BIGINT DEFAULT 1500000 COMMENT '最大码率(比特/秒)',
|
|
phase VARCHAR(16) DEFAULT 'idle' COMMENT '直播会话阶段',
|
|
stop_reason VARCHAR(32) COMMENT '停止原因',
|
|
error_code VARCHAR(64) COMMENT '错误码',
|
|
requested_by BIGINT COMMENT '请求人用户 ID',
|
|
stop_deadline DATETIME COMMENT '停止截止时间',
|
|
device_state_version BIGINT DEFAULT 0 COMMENT '设备状态版本',
|
|
device_event_id VARCHAR(128) COMMENT '设备事件 ID',
|
|
device_updated_at BIGINT DEFAULT 0 COMMENT '设备更新时间戳',
|
|
device_streaming TINYINT(1) NOT NULL DEFAULT 0 COMMENT '设备是否正在推流',
|
|
cloud_online TINYINT(1) NOT NULL DEFAULT 0 COMMENT '云端是否在线',
|
|
cloud_checked_at DATETIME COMMENT '云端检查时间',
|
|
cloud_confirmed_at DATETIME COMMENT '云端确认时间',
|
|
started_at DATETIME COMMENT '开始时间',
|
|
stopped_at DATETIME COMMENT '停止时间',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间',
|
|
active_dock_id VARCHAR(64) GENERATED ALWAYS AS (
|
|
CASE WHEN phase IN ('starting', 'streaming', 'reconnecting', 'stopping') THEN dock_id ELSE NULL END
|
|
) STORED COMMENT '活动机巢标识(生成列)',
|
|
KEY idx_live_session_dock_phase (dock_id, phase, created_at),
|
|
KEY idx_live_session_phase_deadline (phase, stop_deadline),
|
|
UNIQUE KEY uk_live_session_device_event (device_event_id),
|
|
UNIQUE KEY uk_live_session_active_dock (active_dock_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS live_viewer_lease (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
stream_session_id VARCHAR(128) NOT NULL COMMENT '直播会话 ID',
|
|
viewer_id BIGINT NOT NULL COMMENT '观看用户 ID',
|
|
expires_at DATETIME NOT NULL COMMENT '过期时间戳',
|
|
released_at DATETIME NULL COMMENT '释放时间',
|
|
created_at DATETIME NULL COMMENT '创建时间',
|
|
updated_at DATETIME NULL COMMENT '更新时间',
|
|
UNIQUE KEY uk_live_viewer (stream_session_id, viewer_id),
|
|
KEY idx_live_lease_expire (stream_session_id, expires_at),
|
|
KEY idx_live_lease_active (stream_session_id, released_at, expires_at),
|
|
CONSTRAINT fk_live_lease_session FOREIGN KEY (stream_session_id) REFERENCES live_session(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS live_callback_event (
|
|
event_id VARCHAR(256) PRIMARY KEY COMMENT '回调事件 ID',
|
|
stream_name VARCHAR(128) NOT NULL COMMENT '直播流名称',
|
|
event_type VARCHAR(32) NOT NULL COMMENT '回调事件类型',
|
|
payload_hash CHAR(64) NOT NULL COMMENT '回调载荷哈希',
|
|
received_at DATETIME NOT NULL COMMENT '接收时间',
|
|
processed_at DATETIME NULL COMMENT '处理时间',
|
|
KEY idx_live_callback_stream (stream_name, event_type, received_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS video (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
drone_sn VARCHAR(32) COMMENT '无人机序列号',
|
|
execution_id BIGINT COMMENT '任务执行 ID',
|
|
file_name VARCHAR(256) COMMENT '视频文件名',
|
|
file_size BIGINT COMMENT '文件大小(字节)',
|
|
duration INT COMMENT '视频时长(秒)',
|
|
oss_key VARCHAR(256) COMMENT '对象存储文件键',
|
|
oss_bucket VARCHAR(128) COMMENT '对象存储 Bucket', -- 预签名上传的目标 bucket
|
|
thumbnail_key VARCHAR(256) COMMENT '缩略图文件键',
|
|
status VARCHAR(16) DEFAULT 'uploading' COMMENT '业务状态',
|
|
upload_expire_at DATETIME COMMENT '预签名上传地址过期时间', -- 预签名 PUT URL 过期时间
|
|
created_at DATETIME COMMENT '创建时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS download_log (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
video_id BIGINT NOT NULL COMMENT '视频 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
bytes BIGINT NOT NULL COMMENT '传输字节数',
|
|
idempotency_key VARCHAR(128) NOT NULL COMMENT '下载计费幂等键',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
UNIQUE KEY uk_download_log_idempotency (idempotency_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.8 计费
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS traffic_order (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
package_id BIGINT COMMENT '套餐 ID',
|
|
package_code VARCHAR(64) COMMENT '套餐编码快照',
|
|
amount_gb INT NOT NULL COMMENT '流量额度(GB)', -- 购买流量(GB)
|
|
amount_bytes BIGINT NOT NULL DEFAULT 0 COMMENT '流量额度(字节)',
|
|
unit_price DECIMAL(6,2) COMMENT '单价',
|
|
total_price DECIMAL(10,2) COMMENT '总价',
|
|
pay_status VARCHAR(16) DEFAULT 'unpaid' COMMENT '支付状态', -- unpaid/paid/cancelled
|
|
credit_status VARCHAR(16) DEFAULT 'pending' COMMENT '充值入账状态',
|
|
credit_ledger_id BIGINT COMMENT '充值流水 ID',
|
|
payment_idempotency_key VARCHAR(128) COMMENT '支付幂等键',
|
|
paid_by BIGINT COMMENT '确认支付的操作人 ID',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
paid_at DATETIME COMMENT '支付时间',
|
|
UNIQUE KEY uk_traffic_order_payment_idem (payment_idempotency_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS traffic_usage_log (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
source_type VARCHAR(16) COMMENT '流量来源类型', -- live / replay / download
|
|
source_id BIGINT COMMENT '来源记录 ID',
|
|
bytes_used BIGINT COMMENT '使用流量(字节)',
|
|
balance_before BIGINT COMMENT '扣减前余额(字节)', -- 扣减前余额(字节)
|
|
balance_after BIGINT COMMENT '扣减后余额(字节)', -- 扣减后余额(字节)
|
|
idempotency_key VARCHAR(160) NOT NULL COMMENT '消费幂等键',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
UNIQUE KEY uk_traffic_usage_idempotency (idempotency_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.8.1 平台共享资源与统一账务
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS platform_resource_pool (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
total_bytes BIGINT NOT NULL DEFAULT 0 COMMENT '累计采购资源(字节)',
|
|
available_bytes BIGINT NOT NULL DEFAULT 0 COMMENT '可用共享资源(字节)',
|
|
consumed_bytes BIGINT NOT NULL DEFAULT 0 COMMENT '已消费共享资源(字节)',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '资源池状态',
|
|
version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观版本号',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS platform_resource_purchase (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID', batch_no VARCHAR(64) NOT NULL COMMENT '采购批次号',
|
|
provider VARCHAR(32) NOT NULL COMMENT '资源供应商', total_bytes BIGINT NOT NULL COMMENT '采购资源量(字节)',
|
|
unit_cost DECIMAL(12,6) COMMENT '单位成本(元/字节)', total_cost DECIMAL(14,2) COMMENT '采购总成本(元)',
|
|
expires_at DATETIME COMMENT '资源到期时间', status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '批次状态',
|
|
remark VARCHAR(256) COMMENT '备注', created_by BIGINT NOT NULL COMMENT '操作人 ID',
|
|
created_at DATETIME COMMENT '创建时间', updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY uk_resource_purchase_batch (batch_no)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS traffic_package (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID', code VARCHAR(64) NOT NULL COMMENT '套餐编码',
|
|
name VARCHAR(128) NOT NULL COMMENT '套餐名称', amount_bytes BIGINT NOT NULL COMMENT '套餐额度(字节)',
|
|
price DECIMAL(10,2) NOT NULL COMMENT '销售价格(元)', validity_days INT COMMENT '有效期(天)',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '套餐状态', sort INT NOT NULL DEFAULT 0 COMMENT '显示排序',
|
|
created_at DATETIME COMMENT '创建时间', updated_at DATETIME COMMENT '更新时间',
|
|
UNIQUE KEY uk_traffic_package_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS traffic_ledger (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID', account_type VARCHAR(16) NOT NULL COMMENT '账户类型',
|
|
account_id BIGINT NOT NULL COMMENT '账户 ID', direction VARCHAR(8) NOT NULL COMMENT '借贷方向',
|
|
amount_bytes BIGINT NOT NULL COMMENT '变动金额(字节)', balance_before BIGINT NOT NULL COMMENT '变动前余额(字节)',
|
|
balance_after BIGINT NOT NULL COMMENT '变动后余额(字节)', source_type VARCHAR(32) NOT NULL COMMENT '业务来源类型',
|
|
source_id VARCHAR(128) COMMENT '业务来源 ID', idempotency_key VARCHAR(128) NOT NULL COMMENT '全局幂等键',
|
|
operator_id BIGINT COMMENT '操作人 ID', remark VARCHAR(256) COMMENT '备注', created_at DATETIME COMMENT '创建时间',
|
|
UNIQUE KEY uk_traffic_ledger_idempotency (idempotency_key),
|
|
KEY idx_traffic_ledger_account (account_type, account_id, created_at), KEY idx_traffic_ledger_source (source_type, source_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS live_billing_segment (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID', session_id VARCHAR(128) NOT NULL COMMENT '直播会话 ID',
|
|
user_id BIGINT NOT NULL COMMENT '扣费用户 ID', period_start DATETIME NOT NULL COMMENT '计费开始时间',
|
|
period_end DATETIME NOT NULL COMMENT '计费结束时间', bytes BIGINT NOT NULL COMMENT '计费流量(字节)',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '结算状态', idempotency_key VARCHAR(160) NOT NULL COMMENT '结算幂等键',
|
|
created_at DATETIME COMMENT '创建时间', settled_at DATETIME COMMENT '结算时间',
|
|
UNIQUE KEY uk_live_billing_segment_period (session_id, period_start, period_end),
|
|
UNIQUE KEY uk_live_billing_segment_idempotency (idempotency_key), KEY idx_live_billing_segment_session (session_id, period_start)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_card (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
dock_id VARCHAR(64) COMMENT '机巢标识',
|
|
carrier VARCHAR(16) COMMENT '运营商', -- 移动/联通/电信
|
|
phone VARCHAR(16) COMMENT '手机号',
|
|
iccid VARCHAR(32) COMMENT 'SIM 卡 ICCID', -- 权威字段(查询/充值的入参)
|
|
plan_gb INT COMMENT '套餐流量(GB)',
|
|
used_gb DECIMAL(10,4) DEFAULT 0 COMMENT '已使用流量(GB)',
|
|
expired_at DATE COMMENT '到期日期',
|
|
status VARCHAR(16) DEFAULT 'active' COMMENT '业务状态', -- 平台业务态: active/expired
|
|
carrier_status VARCHAR(16) DEFAULT 'normal' COMMENT '运营商侧状态', -- 运营商侧状态: normal/suspended/arrears/cancelled
|
|
last_sync_at DATETIME COMMENT '最后同步时间',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
updated_at DATETIME COMMENT '更新时间'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_recharge_log (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
sim_card_id BIGINT NOT NULL COMMENT 'SIM 卡记录 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
amount_gb INT NOT NULL COMMENT '流量额度(GB)',
|
|
unit_price DECIMAL(6,2) COMMENT '单价',
|
|
total_price DECIMAL(10,2) COMMENT '总价',
|
|
pay_status VARCHAR(16) DEFAULT 'unpaid' COMMENT '支付状态',
|
|
recharge_status VARCHAR(16) DEFAULT 'pending' COMMENT '充值状态', -- pending/success/failed
|
|
recharge_msg VARCHAR(256) DEFAULT '' COMMENT '充值结果信息',
|
|
idempotent_key VARCHAR(64) NOT NULL COMMENT '幂等业务单号', -- 平台充值单号,超时重试去重
|
|
created_at DATETIME COMMENT '创建时间',
|
|
UNIQUE KEY uk_recharge_idem (idempotent_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_usage_record (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
sim_card_id BIGINT NOT NULL COMMENT 'SIM 卡记录 ID',
|
|
plan_gb INT COMMENT '套餐流量(GB)',
|
|
used_gb DECIMAL(10,4) COMMENT '已使用流量(GB)',
|
|
remain_gb DECIMAL(10,4) COMMENT '剩余流量(GB)',
|
|
carrier_status VARCHAR(16) COMMENT '运营商侧状态',
|
|
synced_at DATETIME COMMENT '同步时间',
|
|
KEY idx_record_sim (sim_card_id, synced_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 7.7 操作日志
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS operation_log (
|
|
id BIGINT PRIMARY KEY COMMENT '主键 ID',
|
|
user_id BIGINT NOT NULL COMMENT '所属用户 ID',
|
|
user_name VARCHAR(32) COMMENT '用户名称',
|
|
module VARCHAR(32) COMMENT '业务模块', -- 模块(用户管理/机巢管理/任务管理...)
|
|
action VARCHAR(64) COMMENT '操作动作', -- 动作(新增/修改/删除/下发指令...)
|
|
detail VARCHAR(256) COMMENT '操作详情', -- 详情(请求路径)
|
|
result VARCHAR(16) COMMENT '操作结果', -- success / failed
|
|
ip VARCHAR(64) COMMENT '客户端 IP 地址',
|
|
created_at DATETIME COMMENT '创建时间',
|
|
KEY idx_op_user (user_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|