@ -11,18 +11,18 @@ USE laic;
-- 5.1 用户
-- 5.1 用户
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS ` user ` (
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 ,
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 )
UNIQUE KEY idx_phone ( phone )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -30,38 +30,38 @@ CREATE TABLE IF NOT EXISTS `user` (
-- 5.2 机巢 & 无人机
-- 5.2 机巢 & 无人机
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dock (
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 ,
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 )
UNIQUE KEY idx_dock_id ( dock_id )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS drone (
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 ,
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_sn ( drone_sn ) ,
UNIQUE KEY idx_drone_dock ( dock_id )
UNIQUE KEY idx_drone_dock ( dock_id )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -70,28 +70,28 @@ CREATE TABLE IF NOT EXISTS drone (
-- 5.3 告警
-- 5.3 告警
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS alarm_code (
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 ,
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 )
UNIQUE KEY idx_code ( code )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS alarm (
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 ,
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 )
KEY idx_alarm_dock ( dock_id , status )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -99,53 +99,53 @@ CREATE TABLE IF NOT EXISTS alarm (
-- 5.4 指令 & 工作流
-- 5.4 指令 & 工作流
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS device_command_log (
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 ,
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 )
KEY idx_cmd_log_dock ( dock_id , created_at )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS workflow_state (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
-- 5.5 固件管理
-- 5.5 固件管理
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS firmware (
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 ,
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 )
UNIQUE KEY idx_component_ver ( component , version )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -153,54 +153,54 @@ CREATE TABLE IF NOT EXISTS firmware (
-- 5.6 任务 & 航线
-- 5.6 任务 & 航线
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS task_plan (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS task_execution (
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 ' ,
result_code VARCHAR ( 64 ) ,
trajectory_json JSON ,
created_at DATETIME
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS route (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS route_waypoint (
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 ,
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 )
UNIQUE KEY uk_route_seq ( route_id , seq )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -208,29 +208,32 @@ CREATE TABLE IF NOT EXISTS route_waypoint (
-- 5.7 媒体
-- 5.7 媒体
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS live_session (
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 ,
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 (
active_dock_id VARCHAR ( 64 ) GENERATED ALWAYS AS (
CASE WHEN phase IN ( ' starting ' , ' streaming ' , ' reconnecting ' , ' stopping ' ) THEN dock_id ELSE NULL END
CASE WHEN phase IN ( ' starting ' , ' streaming ' , ' reconnecting ' , ' stopping ' ) THEN dock_id ELSE NULL END
) STORED ,
) STORED COMMENT ' 活动机巢标识(生成列) ' ,
KEY idx_live_session_dock_phase ( dock_id , phase , created_at ) ,
KEY idx_live_session_dock_phase ( dock_id , phase , created_at ) ,
KEY idx_live_session_phase_deadline ( phase , stop_deadline ) ,
KEY idx_live_session_phase_deadline ( phase , stop_deadline ) ,
UNIQUE KEY uk_live_session_device_event ( device_event_id ) ,
UNIQUE KEY uk_live_session_device_event ( device_event_id ) ,
@ -238,108 +241,184 @@ CREATE TABLE IF NOT EXISTS live_session (
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS live_viewer_lease (
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 ,
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 ) ,
UNIQUE KEY uk_live_viewer ( stream_session_id , viewer_id ) ,
KEY idx_live_lease_expire ( stream_session_id , expires_at ) ,
KEY idx_live_lease_expire ( stream_session_id , expires_at ) ,
KEY idx_live_lease_active ( stream_session_id , released_at , 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 )
CONSTRAINT fk_live_lease_session FOREIGN KEY ( stream_session_id ) REFERENCES live_session ( id )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) 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 (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS download_log (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
-- 5.8 计费
-- 5.8 计费
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS traffic_order (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS traffic_usage_log (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS sim_card (
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
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 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS sim_recharge_log (
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 ,
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 )
UNIQUE KEY uk_recharge_idem ( idempotent_key )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS sim_usage_record (
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 ,
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 )
KEY idx_record_sim ( sim_card_id , synced_at )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
@ -347,14 +426,14 @@ CREATE TABLE IF NOT EXISTS sim_usage_record (
-- 7.7 操作日志
-- 7.7 操作日志
-- ---------------------------------------------------------------
-- ---------------------------------------------------------------
CREATE TABLE IF NOT EXISTS operation_log (
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 ,
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 )
KEY idx_op_user ( user_id , created_at )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;