167 lines
6.9 KiB
SQL
167 lines
6.9 KiB
SQL
-- 宏量点云处理软件 - 数据库初始化脚本
|
||
-- 该脚本在MySQL容器首次启动时自动执行
|
||
-- 后续增量迁移由 server/_core/index.ts runMigrations() 从 drizzle/*.sql 自动应用
|
||
|
||
-- 设置字符集
|
||
SET NAMES utf8mb4;
|
||
SET CHARACTER SET utf8mb4;
|
||
|
||
-- 确保数据库存在
|
||
CREATE DATABASE IF NOT EXISTS pointcloud_db
|
||
CHARACTER SET utf8mb4
|
||
COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE pointcloud_db;
|
||
|
||
-- 用户表
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
openId VARCHAR(64) NOT NULL UNIQUE,
|
||
name TEXT,
|
||
email VARCHAR(320),
|
||
loginMethod VARCHAR(64),
|
||
role ENUM('user', 'admin') NOT NULL DEFAULT 'user',
|
||
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
lastSignedIn TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_openId (openId),
|
||
INDEX idx_email (email(255))
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 点云项目表(旧版,兼容保留)
|
||
CREATE TABLE IF NOT EXISTS point_cloud_projects (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
userId INT NOT NULL,
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT,
|
||
cadModelUrl TEXT,
|
||
cadModelName VARCHAR(255),
|
||
totalChunks INT NOT NULL DEFAULT 0,
|
||
processedChunks INT NOT NULL DEFAULT 0,
|
||
totalPoints BIGINT NOT NULL DEFAULT 0,
|
||
status ENUM('pending', 'uploading', 'processing', 'completed', 'error') NOT NULL DEFAULT 'pending',
|
||
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_userId (userId),
|
||
INDEX idx_status (status),
|
||
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 点云数据块表(旧版,兼容保留)
|
||
CREATE TABLE IF NOT EXISTS point_cloud_chunks (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
projectId INT NOT NULL,
|
||
chunkIndex INT NOT NULL,
|
||
fileName VARCHAR(255) NOT NULL,
|
||
fileUrl TEXT NOT NULL,
|
||
fileSize BIGINT NOT NULL DEFAULT 0,
|
||
pointCount INT NOT NULL DEFAULT 0,
|
||
status ENUM('pending', 'uploading', 'processing', 'completed', 'error') NOT NULL DEFAULT 'pending',
|
||
lodLevel INT NOT NULL DEFAULT 0,
|
||
boundingBox JSON,
|
||
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_projectId (projectId),
|
||
INDEX idx_status (status),
|
||
UNIQUE KEY uk_project_chunk (projectId, chunkIndex),
|
||
FOREIGN KEY (projectId) REFERENCES point_cloud_projects(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- CAD模型表(旧版,兼容保留)
|
||
CREATE TABLE IF NOT EXISTS cad_models (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
userId INT NOT NULL,
|
||
name VARCHAR(255) NOT NULL,
|
||
format VARCHAR(32) NOT NULL,
|
||
fileUrl TEXT NOT NULL,
|
||
fileSize BIGINT NOT NULL DEFAULT 0,
|
||
vertices INT NOT NULL DEFAULT 0,
|
||
faces INT NOT NULL DEFAULT 0,
|
||
boundingBox JSON,
|
||
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_userId (userId),
|
||
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 分析结果表(旧版,兼容保留)
|
||
CREATE TABLE IF NOT EXISTS analysis_results (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
projectId INT NOT NULL,
|
||
analysisType ENUM('error', 'measurement', 'compression') NOT NULL,
|
||
resultData JSON NOT NULL,
|
||
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_projectId (projectId),
|
||
INDEX idx_type (analysisType),
|
||
FOREIGN KEY (projectId) REFERENCES point_cloud_projects(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- ─── 车系/车型/检测任务/分析结果 层级结构 ──────────────────────────────────────
|
||
|
||
CREATE TABLE IF NOT EXISTS `vehicle_series` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`name` VARCHAR(100) NOT NULL,
|
||
`description` TEXT,
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS `vehicle_models` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`seriesId` INT NOT NULL,
|
||
`name` VARCHAR(100) NOT NULL,
|
||
`description` TEXT,
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS `model_cad_files` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`modelId` INT NOT NULL,
|
||
`name` VARCHAR(255) NOT NULL,
|
||
`format` VARCHAR(32) NOT NULL,
|
||
`fileSize` BIGINT NOT NULL,
|
||
`filePath` VARCHAR(512) NOT NULL,
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS `inspection_tasks` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`modelId` INT NOT NULL,
|
||
`name` VARCHAR(255) NOT NULL,
|
||
`inspector` VARCHAR(100),
|
||
`notes` TEXT,
|
||
`status` ENUM('pending','processing','completed','error') NOT NULL DEFAULT 'pending',
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
`completedAt` TIMESTAMP NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS `task_pointcloud_files` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`taskId` INT NOT NULL,
|
||
`name` VARCHAR(255) NOT NULL,
|
||
`fileSize` BIGINT NOT NULL,
|
||
`filePath` VARCHAR(512) NOT NULL,
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS `task_analysis_results` (
|
||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||
`taskId` INT NOT NULL,
|
||
`type` ENUM('error_analysis','measurement','compression','smooth_heatmap','assembly_inspection','obj_deviation') NOT NULL,
|
||
`status` ENUM('pending','processing','completed','error') NOT NULL DEFAULT 'pending',
|
||
`errorStats` JSON,
|
||
`measurements` JSON,
|
||
`resultData` JSON,
|
||
`createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`updatedAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 创建默认管理员用户 (内网部署使用)
|
||
INSERT INTO users (openId, name, email, role) VALUES
|
||
('admin-local', '系统管理员', 'admin@localhost', 'admin')
|
||
ON DUPLICATE KEY UPDATE name = VALUES(name);
|
||
|
||
-- 输出初始化完成信息
|
||
SELECT 'Database initialization completed successfully!' AS message;
|