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.
359 lines
14 KiB
359 lines
14 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,
|
|
name VARCHAR(32) NOT NULL,
|
|
phone VARCHAR(32) NOT NULL,
|
|
email VARCHAR(64),
|
|
password VARCHAR(64) NOT NULL,
|
|
role VARCHAR(16) DEFAULT 'user', -- admin / user
|
|
traffic_balance BIGINT DEFAULT 0, -- 云媒体剩余流量(字节),慢快照,权威在 Redis
|
|
status TINYINT DEFAULT 1, -- 1 正常 / 0 禁用
|
|
last_login DATETIME,
|
|
password_changed_at DATETIME,
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
UNIQUE KEY idx_phone (phone)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.2 机巢 & 无人机
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS dock (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
dock_id VARCHAR(64) NOT NULL, -- MQTT dockId (dock-xxx)
|
|
name VARCHAR(64) DEFAULT '',
|
|
code VARCHAR(32) DEFAULT '',
|
|
sn VARCHAR(64) DEFAULT '',
|
|
iccid VARCHAR(32) DEFAULT '', -- 冗余,权威见 sim_card.iccid
|
|
longitude DOUBLE DEFAULT 0,
|
|
latitude DOUBLE DEFAULT 0,
|
|
altitude DOUBLE DEFAULT 0,
|
|
location VARCHAR(128) DEFAULT '',
|
|
register_status VARCHAR(16) DEFAULT 'pending', -- pending/registered
|
|
dock_id_source VARCHAR(32) DEFAULT '',
|
|
software_ver VARCHAR(16) DEFAULT '',
|
|
protocol_ver VARCHAR(8) DEFAULT '1.0',
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
UNIQUE KEY idx_dock_id (dock_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS drone (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
drone_sn VARCHAR(32) NOT NULL, -- 飞控 HW_SN_NUM
|
|
dock_id VARCHAR(64) NOT NULL, -- 绑定的机巢 dock_id(1:1)
|
|
name VARCHAR(64) DEFAULT '',
|
|
code VARCHAR(32) DEFAULT '',
|
|
model VARCHAR(32) DEFAULT '',
|
|
battery INT DEFAULT 0,
|
|
firmware_ver VARCHAR(16) DEFAULT '',
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
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,
|
|
code VARCHAR(64) NOT NULL,
|
|
category VARCHAR(32) NOT NULL, -- dock / drone
|
|
message_cn VARCHAR(256) NOT NULL,
|
|
level VARCHAR(16) DEFAULT 'critical',
|
|
source VARCHAR(128) DEFAULT '',
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
UNIQUE KEY idx_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS alarm (
|
|
id BIGINT PRIMARY KEY,
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
code VARCHAR(64) NOT NULL,
|
|
device_type VARCHAR(8) NOT NULL, -- dock / drone
|
|
message_cn VARCHAR(256) NOT NULL,
|
|
level VARCHAR(16) NOT NULL,
|
|
status VARCHAR(16) DEFAULT 'active', -- active / acknowledged / resolved
|
|
triggered_at DATETIME,
|
|
resolved_at DATETIME,
|
|
created_at DATETIME,
|
|
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, -- = commandId (Snowflake)
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
command_type VARCHAR(64) NOT NULL, -- dock.open / drone.takeoff / workflow.start_task
|
|
params JSON,
|
|
drone_sn VARCHAR(32),
|
|
request_id VARCHAR(64),
|
|
ttl_ms INT DEFAULT 30000,
|
|
ack_accepted TINYINT,
|
|
ack_result_code VARCHAR(64),
|
|
status VARCHAR(16) DEFAULT 'sent', -- sent / acked / timeout / terminal
|
|
retry_count INT DEFAULT 0,
|
|
sent_at DATETIME,
|
|
acked_at DATETIME,
|
|
created_at DATETIME,
|
|
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,
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
command_id VARCHAR(64),
|
|
type VARCHAR(64),
|
|
task_id VARCHAR(128),
|
|
mission_id VARCHAR(128),
|
|
state VARCHAR(16) NOT NULL, -- idle / running / succeeded / failed / cancelled
|
|
step VARCHAR(64) NOT NULL,
|
|
result_code VARCHAR(64),
|
|
updated_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.5 固件管理
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS firmware (
|
|
id BIGINT PRIMARY KEY,
|
|
component VARCHAR(32) NOT NULL, -- 固定 dock-edge-agent
|
|
version VARCHAR(32) NOT NULL, -- 1.3.0
|
|
description VARCHAR(512) DEFAULT '',
|
|
file_url VARCHAR(512) NOT NULL,
|
|
sha256 VARCHAR(128) NOT NULL,
|
|
signature TEXT NOT NULL,
|
|
file_size BIGINT DEFAULT 0,
|
|
mandatory TINYINT DEFAULT 0,
|
|
status VARCHAR(16) DEFAULT 'draft', -- draft/released/deprecated
|
|
created_by BIGINT NOT NULL,
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
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,
|
|
user_id BIGINT NOT NULL,
|
|
name VARCHAR(128) NOT NULL,
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
route_id BIGINT,
|
|
schedule_type VARCHAR(16) DEFAULT 'once', -- once / cron
|
|
schedule_cron VARCHAR(32),
|
|
video_policy VARCHAR(16) DEFAULT 'raw',
|
|
status VARCHAR(16) DEFAULT 'draft',
|
|
created_by BIGINT,
|
|
created_at DATETIME,
|
|
updated_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS task_execution (
|
|
id BIGINT PRIMARY KEY,
|
|
task_id VARCHAR(128),
|
|
command_id VARCHAR(64),
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
drone_sn VARCHAR(32),
|
|
start_time DATETIME,
|
|
end_time DATETIME,
|
|
status VARCHAR(16) DEFAULT 'pending',
|
|
trajectory_json JSON,
|
|
created_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS route (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
name VARCHAR(128) NOT NULL,
|
|
description VARCHAR(256),
|
|
created_at DATETIME,
|
|
updated_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS route_waypoint (
|
|
id BIGINT PRIMARY KEY,
|
|
route_id BIGINT NOT NULL,
|
|
seq INT NOT NULL,
|
|
longitude DOUBLE,
|
|
latitude DOUBLE,
|
|
altitude DOUBLE,
|
|
speed DOUBLE,
|
|
yaw DOUBLE,
|
|
hold_sec INT DEFAULT 0,
|
|
created_at DATETIME,
|
|
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, -- streamSessionId
|
|
dock_id VARCHAR(64) NOT NULL,
|
|
provider VARCHAR(16) DEFAULT 'aliyun',
|
|
stream_name VARCHAR(128) NOT NULL, -- 直播流名(每次会话唯一)
|
|
push_url_hash VARCHAR(128),
|
|
expires_at BIGINT NOT NULL,
|
|
max_bitrate_bps BIGINT DEFAULT 1500000,
|
|
phase VARCHAR(16) DEFAULT 'idle',
|
|
stop_reason VARCHAR(32),
|
|
error_code VARCHAR(64),
|
|
requested_by BIGINT,
|
|
stop_deadline DATETIME,
|
|
device_state_version BIGINT DEFAULT 0,
|
|
device_event_id VARCHAR(128),
|
|
device_updated_at BIGINT DEFAULT 0,
|
|
cloud_confirmed_at DATETIME,
|
|
started_at DATETIME,
|
|
stopped_at DATETIME,
|
|
created_at DATETIME,
|
|
updated_at DATETIME,
|
|
active_dock_id VARCHAR(64) GENERATED ALWAYS AS (
|
|
CASE WHEN phase IN ('starting', 'streaming', 'reconnecting', 'stopping') THEN dock_id ELSE NULL END
|
|
) STORED,
|
|
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,
|
|
stream_session_id VARCHAR(128) NOT NULL,
|
|
viewer_id BIGINT NOT NULL,
|
|
expires_at DATETIME NOT NULL,
|
|
released_at DATETIME NULL,
|
|
created_at DATETIME NULL,
|
|
updated_at DATETIME NULL,
|
|
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 video (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
drone_sn VARCHAR(32),
|
|
execution_id BIGINT,
|
|
file_name VARCHAR(256),
|
|
file_size BIGINT,
|
|
duration INT,
|
|
oss_key VARCHAR(256),
|
|
oss_bucket VARCHAR(128), -- 预签名上传的目标 bucket
|
|
thumbnail_key VARCHAR(256),
|
|
status VARCHAR(16) DEFAULT 'uploading',
|
|
upload_expire_at DATETIME, -- 预签名 PUT URL 过期时间
|
|
created_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS download_log (
|
|
id BIGINT PRIMARY KEY,
|
|
video_id BIGINT NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
bytes BIGINT NOT NULL,
|
|
created_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------
|
|
-- 5.8 计费
|
|
-- ---------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS traffic_order (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
amount_gb INT NOT NULL, -- 购买流量(GB)
|
|
unit_price DECIMAL(6,2),
|
|
total_price DECIMAL(10,2),
|
|
pay_status VARCHAR(16) DEFAULT 'unpaid', -- unpaid/paid/cancelled
|
|
created_at DATETIME,
|
|
paid_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS traffic_usage_log (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
source_type VARCHAR(16), -- live / replay / download
|
|
source_id BIGINT,
|
|
bytes_used BIGINT,
|
|
balance_before BIGINT, -- 扣减前余额(字节)
|
|
balance_after BIGINT, -- 扣减后余额(字节)
|
|
created_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_card (
|
|
id BIGINT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
dock_id VARCHAR(64),
|
|
carrier VARCHAR(16), -- 移动/联通/电信
|
|
phone VARCHAR(16),
|
|
iccid VARCHAR(32), -- 权威字段(查询/充值的入参)
|
|
plan_gb INT,
|
|
used_gb DECIMAL(10,4) DEFAULT 0,
|
|
expired_at DATE,
|
|
status VARCHAR(16) DEFAULT 'active', -- 平台业务态: active/expired
|
|
carrier_status VARCHAR(16) DEFAULT 'normal', -- 运营商侧状态: normal/suspended/arrears/cancelled
|
|
last_sync_at DATETIME,
|
|
created_at DATETIME,
|
|
updated_at DATETIME
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_recharge_log (
|
|
id BIGINT PRIMARY KEY,
|
|
sim_card_id BIGINT NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
amount_gb INT NOT NULL,
|
|
unit_price DECIMAL(6,2),
|
|
total_price DECIMAL(10,2),
|
|
pay_status VARCHAR(16) DEFAULT 'unpaid',
|
|
recharge_status VARCHAR(16) DEFAULT 'pending', -- pending/success/failed
|
|
recharge_msg VARCHAR(256) DEFAULT '',
|
|
idempotent_key VARCHAR(64) NOT NULL, -- 平台充值单号,超时重试去重
|
|
created_at DATETIME,
|
|
UNIQUE KEY uk_recharge_idem (idempotent_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS sim_usage_record (
|
|
id BIGINT PRIMARY KEY,
|
|
sim_card_id BIGINT NOT NULL,
|
|
plan_gb INT,
|
|
used_gb DECIMAL(10,4),
|
|
remain_gb DECIMAL(10,4),
|
|
carrier_status VARCHAR(16),
|
|
synced_at DATETIME,
|
|
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,
|
|
user_id BIGINT NOT NULL,
|
|
user_name VARCHAR(32),
|
|
module VARCHAR(32), -- 模块(用户管理/机巢管理/任务管理...)
|
|
action VARCHAR(64), -- 动作(新增/修改/删除/下发指令...)
|
|
detail VARCHAR(256), -- 详情(请求路径)
|
|
result VARCHAR(16), -- success / failed
|
|
ip VARCHAR(64),
|
|
created_at DATETIME,
|
|
KEY idx_op_user (user_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|