QDAirPortBackend0122/sql/qaup_database_complete_init.sql
2026-01-22 13:19:47 +08:00

431 lines
18 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ================================================================
-- QAUP 机场车辆管理和碰撞避免系统统一数据库初始化脚本
-- 数据库名称qaup
-- 版本1.0.1
-- 创建时间2025-07-12
-- 描述:该脚本包含完整的数据库结构,用于系统的全新部署
-- ================================================================
-- 1. 创建数据库(如果不存在)
-- 注意:此部分需要以数据库管理员身份执行
-- CREATE DATABASE qaup
-- WITH
-- OWNER = postgres
-- ENCODING = 'UTF8'
-- LC_COLLATE = 'en_US.UTF-8'
-- LC_CTYPE = 'en_US.UTF-8'
-- TABLESPACE = pg_default
-- CONNECTION LIMIT = -1
-- TEMPLATE = template0;
-- 设置数据库注释
-- COMMENT ON DATABASE qaup IS '机场车辆管理和碰撞避免统一数据库';
-- 连接到数据库并启用扩展
-- \c qaup
-- 2. 启用必要的PostgreSQL扩展
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS postgis_topology;
-- 显示PostGIS版本信息可选
-- SELECT PostGIS_Version();
-- ================================================================
-- 3. 核心系统表RuoYi框架基础表
-- ================================================================
-- 3.1 用户信息表
DROP TABLE IF EXISTS "public"."sys_user" CASCADE;
CREATE TABLE "public"."sys_user" (
"user_id" BIGSERIAL NOT NULL,
"user_name" varchar(30) NOT NULL,
"nick_name" varchar(30) NOT NULL,
"user_type" varchar(2) DEFAULT '00',
"email" varchar(50) DEFAULT '',
"phonenumber" varchar(11) DEFAULT '',
"sex" char(1) DEFAULT '0',
"avatar" varchar(100) DEFAULT '',
"password" varchar(100) DEFAULT '',
"status" char(1) DEFAULT '0',
"del_flag" char(1) DEFAULT '0',
"login_ip" varchar(128) DEFAULT '',
"login_date" timestamp(6),
"create_by" varchar(64) DEFAULT '',
"create_time" timestamp(6),
"update_by" varchar(64) DEFAULT '',
"update_time" timestamp(6),
"remark" varchar(500) DEFAULT NULL,
CONSTRAINT "sys_user_pkey" PRIMARY KEY ("user_id")
);
COMMENT ON TABLE "public"."sys_user" IS '用户信息表';
COMMENT ON COLUMN "public"."sys_user"."user_id" IS '用户ID';
COMMENT ON COLUMN "public"."sys_user"."user_name" IS '用户账号';
COMMENT ON COLUMN "public"."sys_user"."nick_name" IS '用户昵称';
COMMENT ON COLUMN "public"."sys_user"."user_type" IS '用户类型00系统用户';
COMMENT ON COLUMN "public"."sys_user"."email" IS '用户邮箱';
COMMENT ON COLUMN "public"."sys_user"."phonenumber" IS '手机号码';
COMMENT ON COLUMN "public"."sys_user"."sex" IS '用户性别0男 1女 2未知';
COMMENT ON COLUMN "public"."sys_user"."avatar" IS '头像地址';
COMMENT ON COLUMN "public"."sys_user"."password" IS '密码';
COMMENT ON COLUMN "public"."sys_user"."status" IS '帐号状态0正常 1停用';
COMMENT ON COLUMN "public"."sys_user"."del_flag" IS '删除标志0代表存在 2代表删除';
-- 3.2 角色信息表
DROP TABLE IF EXISTS "public"."sys_role" CASCADE;
CREATE TABLE "public"."sys_role" (
"role_id" BIGSERIAL NOT NULL,
"role_name" varchar(30) NOT NULL,
"role_key" varchar(100) NOT NULL,
"role_sort" int4 NOT NULL,
"data_scope" char(1) DEFAULT '1',
"menu_check_strictly" boolean DEFAULT true,
"dept_check_strictly" boolean DEFAULT true,
"status" char(1) NOT NULL,
"del_flag" char(1) DEFAULT '0',
"create_by" varchar(64) DEFAULT '',
"create_time" timestamp(6),
"update_by" varchar(64) DEFAULT '',
"update_time" timestamp(6),
"remark" varchar(500) DEFAULT NULL,
CONSTRAINT "sys_role_pkey" PRIMARY KEY ("role_id")
);
COMMENT ON TABLE "public"."sys_role" IS '角色信息表';
COMMENT ON COLUMN "public"."sys_role"."role_id" IS '角色ID';
COMMENT ON COLUMN "public"."sys_role"."role_name" IS '角色名称';
COMMENT ON COLUMN "public"."sys_role"."role_key" IS '角色权限字符串';
COMMENT ON COLUMN "public"."sys_role"."role_sort" IS '显示顺序';
-- 3.3 部门表
DROP TABLE IF EXISTS "public"."sys_dept" CASCADE;
CREATE TABLE "public"."sys_dept" (
"dept_id" BIGSERIAL NOT NULL,
"parent_id" int8 DEFAULT 0,
"ancestors" varchar(50) DEFAULT '',
"dept_name" varchar(30) DEFAULT '',
"order_num" int4 DEFAULT 0,
"leader" varchar(20) DEFAULT NULL,
"phone" varchar(11) DEFAULT NULL,
"email" varchar(50) DEFAULT NULL,
"status" char(1) DEFAULT '0',
"del_flag" char(1) DEFAULT '0',
"create_by" varchar(64) DEFAULT '',
"create_time" timestamp(6),
"update_by" varchar(64) DEFAULT '',
"update_time" timestamp(6),
CONSTRAINT "sys_dept_pkey" PRIMARY KEY ("dept_id")
);
COMMENT ON TABLE "public"."sys_dept" IS '部门表';
COMMENT ON COLUMN "public"."sys_dept"."dept_id" IS '部门id';
COMMENT ON COLUMN "public"."sys_dept"."parent_id" IS '父部门id';
COMMENT ON COLUMN "public"."sys_dept"."ancestors" IS '祖级列表';
COMMENT ON COLUMN "public"."sys_dept"."dept_name" IS '部门名称';
-- ================================================================
-- 4. 车辆管理相关表
-- ================================================================
-- 4.1 车辆类型表
DROP TABLE IF EXISTS "public"."sys_vehicle_type" CASCADE;
CREATE TABLE "public"."sys_vehicle_type" (
"type_id" BIGSERIAL NOT NULL,
"type_name" varchar(100) NOT NULL,
"description" varchar(500),
"max_speed" int4,
"create_by" varchar(64),
"create_time" timestamp(6),
"update_by" varchar(64),
"update_time" timestamp(6),
"remark" varchar(500),
CONSTRAINT "sys_vehicle_type_pkey" PRIMARY KEY ("type_id")
);
COMMENT ON TABLE "public"."sys_vehicle_type" IS '车辆类型表';
COMMENT ON COLUMN "public"."sys_vehicle_type"."type_id" IS '类型ID';
COMMENT ON COLUMN "public"."sys_vehicle_type"."type_name" IS '类型名称';
COMMENT ON COLUMN "public"."sys_vehicle_type"."description" IS '类型描述';
COMMENT ON COLUMN "public"."sys_vehicle_type"."max_speed" IS '最大速度(km/h)';
-- 4.2 车辆信息表
DROP TABLE IF EXISTS "public"."sys_vehicle_info" CASCADE;
CREATE TABLE "public"."sys_vehicle_info" (
"vehicle_id" BIGSERIAL NOT NULL,
"license_plate" varchar(50) NOT NULL UNIQUE,
"vin_number" varchar(50) UNIQUE,
"type_id" int8 NOT NULL,
"brand" varchar(100),
"owning_unit" varchar(255),
"contact_person" varchar(100),
"phone_number" varchar(20),
"image_url" varchar(255),
"create_by" varchar(64),
"create_time" timestamp(6),
"update_by" varchar(64),
"update_time" timestamp(6),
"remark" varchar(500),
CONSTRAINT "sys_vehicle_info_pkey" PRIMARY KEY ("vehicle_id"),
CONSTRAINT "sys_vehicle_info_fk1" FOREIGN KEY ("type_id") REFERENCES "public"."sys_vehicle_type" ("type_id")
);
COMMENT ON TABLE "public"."sys_vehicle_info" IS '车辆信息表';
COMMENT ON COLUMN "public"."sys_vehicle_info"."vehicle_id" IS '车辆ID';
COMMENT ON COLUMN "public"."sys_vehicle_info"."license_plate" IS '车牌号';
COMMENT ON COLUMN "public"."sys_vehicle_info"."vin_number" IS 'VIN码';
COMMENT ON COLUMN "public"."sys_vehicle_info"."type_id" IS '类型ID';
COMMENT ON COLUMN "public"."sys_vehicle_info"."brand" IS '品牌';
COMMENT ON COLUMN "public"."sys_vehicle_info"."owning_unit" IS '所属单位';
-- 4.3 司机信息表
DROP TABLE IF EXISTS "public"."sys_driver_info" CASCADE;
CREATE TABLE "public"."sys_driver_info" (
"user_id" int8 NOT NULL,
"license_type" varchar(50) NOT NULL,
"create_by" varchar(64),
"create_time" timestamp(6),
"update_by" varchar(64),
"update_time" timestamp(6),
"remark" varchar(500),
CONSTRAINT "sys_driver_info_pkey" PRIMARY KEY ("user_id"),
CONSTRAINT "sys_driver_info_fk1" FOREIGN KEY ("user_id") REFERENCES "public"."sys_user" ("user_id")
);
COMMENT ON TABLE "public"."sys_driver_info" IS '驾驶员信息表';
COMMENT ON COLUMN "public"."sys_driver_info"."user_id" IS '用户ID';
COMMENT ON COLUMN "public"."sys_driver_info"."license_type" IS '驾驶证类型';
-- ================================================================
-- 5. 碰撞避免系统相关表(空间数据表)
-- ================================================================
-- 5.1 车辆位置表(含空间数据)
DROP TABLE IF EXISTS "public"."vehicle_location" CASCADE;
CREATE TABLE "public"."vehicle_location" (
"id" BIGSERIAL NOT NULL,
"vehicle_id" int8 NOT NULL,
"location" geometry(Point, 4326),
"timestamp" timestamp(6) NOT NULL,
"speed" numeric(5,2),
"direction" numeric(5,2),
"altitude" numeric(8,2),
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "vehicle_location_pkey" PRIMARY KEY ("id"),
CONSTRAINT "vehicle_location_fk1" FOREIGN KEY ("vehicle_id") REFERENCES "public"."sys_vehicle_info" ("vehicle_id")
);
COMMENT ON TABLE "public"."vehicle_location" IS '车辆位置信息表(含空间数据)';
COMMENT ON COLUMN "public"."vehicle_location"."id" IS '记录ID';
COMMENT ON COLUMN "public"."vehicle_location"."vehicle_id" IS '车辆ID';
COMMENT ON COLUMN "public"."vehicle_location"."location" IS '位置信息PostGIS几何类型';
COMMENT ON COLUMN "public"."vehicle_location"."timestamp" IS '时间戳';
COMMENT ON COLUMN "public"."vehicle_location"."speed" IS '速度(km/h)';
COMMENT ON COLUMN "public"."vehicle_location"."direction" IS '方向角(度)';
COMMENT ON COLUMN "public"."vehicle_location"."altitude" IS '海拔高度(米)';
-- 为位置字段创建空间索引
CREATE INDEX "idx_vehicle_location_geom" ON "public"."vehicle_location" USING GIST ("location");
CREATE INDEX "idx_vehicle_location_vehicle_id" ON "public"."vehicle_location" ("vehicle_id");
CREATE INDEX "idx_vehicle_location_timestamp" ON "public"."vehicle_location" ("timestamp");
-- 5.2 机场区域表
DROP TABLE IF EXISTS "public"."airport_area" CASCADE;
CREATE TABLE "public"."airport_area" (
"id" BIGSERIAL NOT NULL,
"area_name" varchar(100) NOT NULL,
"area_type" varchar(50) NOT NULL,
"geometry" geometry(Polygon, 4326),
"properties" jsonb,
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
"update_time" timestamp(6),
CONSTRAINT "airport_area_pkey" PRIMARY KEY ("id")
);
COMMENT ON TABLE "public"."airport_area" IS '机场区域信息表';
COMMENT ON COLUMN "public"."airport_area"."id" IS '区域ID';
COMMENT ON COLUMN "public"."airport_area"."area_name" IS '区域名称';
COMMENT ON COLUMN "public"."airport_area"."area_type" IS '区域类型';
COMMENT ON COLUMN "public"."airport_area"."geometry" IS '区域几何形状';
COMMENT ON COLUMN "public"."airport_area"."properties" IS '区域属性JSON格式';
-- 为区域几何字段创建空间索引
CREATE INDEX "idx_airport_area_geom" ON "public"."airport_area" USING GIST ("geometry");
-- 5.3 路径冲突检测表
DROP TABLE IF EXISTS "public"."path_conflict_detection" CASCADE;
CREATE TABLE "public"."path_conflict_detection" (
"id" BIGSERIAL NOT NULL,
"object1_id" int8 NOT NULL,
"object2_id" int8 NOT NULL,
"conflict_type" varchar(50) NOT NULL,
"conflict_time" timestamp(6) NOT NULL,
"conflict_point" geometry(Point, 4326),
"risk_level" varchar(20) NOT NULL,
"status" varchar(20) DEFAULT 'ACTIVE',
"resolved_time" timestamp(6),
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "path_conflict_detection_pkey" PRIMARY KEY ("id")
);
COMMENT ON TABLE "public"."path_conflict_detection" IS '路径冲突检测表';
COMMENT ON COLUMN "public"."path_conflict_detection"."id" IS '检测记录ID';
COMMENT ON COLUMN "public"."path_conflict_detection"."object1_id" IS '对象1的ID';
COMMENT ON COLUMN "public"."path_conflict_detection"."object2_id" IS '对象2的ID';
COMMENT ON COLUMN "public"."path_conflict_detection"."conflict_type" IS '冲突类型';
COMMENT ON COLUMN "public"."path_conflict_detection"."conflict_time" IS '冲突时间';
COMMENT ON COLUMN "public"."path_conflict_detection"."conflict_point" IS '冲突点位置';
COMMENT ON COLUMN "public"."path_conflict_detection"."risk_level" IS '风险等级';
-- 5.4 无人车指令表
DROP TABLE IF EXISTS "public"."unmanned_vehicle_commands" CASCADE;
CREATE TABLE "public"."unmanned_vehicle_commands" (
"id" BIGSERIAL NOT NULL,
"vehicle_id" int8 NOT NULL,
"command_type" varchar(50) NOT NULL,
"command_content" jsonb NOT NULL,
"status" varchar(20) DEFAULT 'PENDING',
"sent_time" timestamp(6),
"executed_time" timestamp(6),
"result" varchar(500),
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "unmanned_vehicle_commands_pkey" PRIMARY KEY ("id"),
CONSTRAINT "unmanned_vehicle_commands_fk1" FOREIGN KEY ("vehicle_id") REFERENCES "public"."sys_vehicle_info" ("vehicle_id")
);
COMMENT ON TABLE "public"."unmanned_vehicle_commands" IS '无人车指令表';
COMMENT ON COLUMN "public"."unmanned_vehicle_commands"."id" IS '指令ID';
COMMENT ON COLUMN "public"."unmanned_vehicle_commands"."vehicle_id" IS '车辆ID';
COMMENT ON COLUMN "public"."unmanned_vehicle_commands"."command_type" IS '指令类型';
COMMENT ON COLUMN "public"."unmanned_vehicle_commands"."command_content" IS '指令内容JSON格式';
COMMENT ON COLUMN "public"."unmanned_vehicle_commands"."status" IS '指令状态';
-- ================================================================
-- 6. 系统配置和字典表
-- ================================================================
-- 6.1 系统配置表
DROP TABLE IF EXISTS "public"."sys_config" CASCADE;
CREATE TABLE "public"."sys_config" (
"config_id" BIGSERIAL NOT NULL,
"config_name" varchar(100) DEFAULT '',
"config_key" varchar(100) DEFAULT '',
"config_value" varchar(500) DEFAULT '',
"config_type" char(1) DEFAULT 'N',
"create_by" varchar(64) DEFAULT '',
"create_time" timestamp(6),
"update_by" varchar(64) DEFAULT '',
"update_time" timestamp(6),
"remark" varchar(500) DEFAULT NULL,
CONSTRAINT "sys_config_pkey" PRIMARY KEY ("config_id")
);
COMMENT ON TABLE "public"."sys_config" IS '参数配置表';
COMMENT ON COLUMN "public"."sys_config"."config_id" IS '参数主键';
COMMENT ON COLUMN "public"."sys_config"."config_name" IS '参数名称';
COMMENT ON COLUMN "public"."sys_config"."config_key" IS '参数键名';
COMMENT ON COLUMN "public"."sys_config"."config_value" IS '参数键值';
-- ================================================================
-- 7. 初始化基础数据
-- ================================================================
-- 7.1 插入车辆类型基础数据
INSERT INTO "public"."sys_vehicle_type" ("type_name", "description", "max_speed", "create_by", "create_time") VALUES
('无人车', '自动驾驶无人车辆', 30, 'admin', CURRENT_TIMESTAMP),
('摆渡车', '机场摆渡车辆', 40, 'admin', CURRENT_TIMESTAMP),
('货运车', '机场货运车辆', 50, 'admin', CURRENT_TIMESTAMP),
('清洁车', '机场清洁车辆', 25, 'admin', CURRENT_TIMESTAMP),
('维护车', '机场维护车辆', 60, 'admin', CURRENT_TIMESTAMP);
-- 7.2 插入系统配置基础数据
INSERT INTO "public"."sys_config" ("config_name", "config_key", "config_value", "config_type", "create_by", "create_time", "remark") VALUES
('数据采集间隔', 'data.collector.interval', '250', 'Y', 'admin', CURRENT_TIMESTAMP, '数据采集间隔时间,单位:毫秒'),
('WebSocket推送间隔', 'websocket.push.interval', '1000', 'Y', 'admin', CURRENT_TIMESTAMP, 'WebSocket推送间隔时间单位毫秒'),
('冲突检测阈值', 'collision.detection.threshold', '10', 'Y', 'admin', CURRENT_TIMESTAMP, '冲突检测距离阈值,单位:米'),
('速度限制阈值', 'speed.limit.threshold', '35', 'Y', 'admin', CURRENT_TIMESTAMP, '速度限制阈值单位km/h');
-- ================================================================
-- 8. 创建索引优化性能
-- ================================================================
-- 车辆信息相关索引
CREATE INDEX "idx_sys_vehicle_info_type_id" ON "public"."sys_vehicle_info" ("type_id");
CREATE INDEX "idx_sys_vehicle_info_license_plate" ON "public"."sys_vehicle_info" ("license_plate");
-- 位置数据相关索引(时间序列优化)
CREATE INDEX "idx_vehicle_location_time_vehicle" ON "public"."vehicle_location" ("timestamp" DESC, "vehicle_id");
-- 冲突检测相关索引
CREATE INDEX "idx_path_conflict_time" ON "public"."path_conflict_detection" ("conflict_time" DESC);
CREATE INDEX "idx_path_conflict_status" ON "public"."path_conflict_detection" ("status");
-- 指令表相关索引
CREATE INDEX "idx_unmanned_commands_vehicle_time" ON "public"."unmanned_vehicle_commands" ("vehicle_id", "create_time" DESC);
CREATE INDEX "idx_unmanned_commands_status" ON "public"."unmanned_vehicle_commands" ("status");
-- ================================================================
-- 9. 创建视图简化查询
-- ================================================================
-- 9.1 车辆详细信息视图
CREATE OR REPLACE VIEW "public"."v_vehicle_detail" AS
SELECT
vi.vehicle_id,
vi.license_plate,
vi.brand,
vi.owning_unit,
vi.contact_person,
vi.phone_number,
vt.type_name,
vt.max_speed,
vi.create_time
FROM "public"."sys_vehicle_info" vi
LEFT JOIN "public"."sys_vehicle_type" vt ON vi.type_id = vt.type_id;
COMMENT ON VIEW "public"."v_vehicle_detail" IS '车辆详细信息视图';
-- 9.2 最新位置信息视图
CREATE OR REPLACE VIEW "public"."v_latest_vehicle_position" AS
SELECT DISTINCT ON (vehicle_id)
vehicle_id,
ST_X(location) as longitude,
ST_Y(location) as latitude,
speed,
direction,
timestamp
FROM "public"."vehicle_location"
ORDER BY vehicle_id, timestamp DESC;
COMMENT ON VIEW "public"."v_latest_vehicle_position" IS '车辆最新位置信息视图';
-- ================================================================
-- 脚本执行完成提示
-- ================================================================
-- 输出成功信息
DO $$
BEGIN
RAISE NOTICE '=========================================';
RAISE NOTICE 'QAUP 数据库初始化完成!';
RAISE NOTICE '数据库版本: 1.0.1';
RAISE NOTICE '创建时间: %', CURRENT_TIMESTAMP;
RAISE NOTICE '========================================= ';
RAISE NOTICE '已创建表格数量: %', (
SELECT count(*)
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_type = 'BASE TABLE'
);
RAISE NOTICE '已创建索引数量: %', (
SELECT count(*)
FROM pg_indexes
WHERE schemaname = 'public'
);
RAISE NOTICE '已创建视图数量: %', (
SELECT count(*)
FROM information_schema.views
WHERE table_schema = 'public'
);
RAISE NOTICE '=========================================';
END $$;