|
|
-- =============================================================================
|
|
|
-- 查价中台 chajia 数据库 — 宝塔 / phpMyAdmin 导入用
|
|
|
-- 字符集:utf8mb4 / utf8mb4_unicode_ci
|
|
|
-- 用法:在宝塔已创建空库 chajia(utf8mb4)后,导入本文件
|
|
|
-- 默认管理员:admin_demo / kj123456(上线后请立即改密)
|
|
|
-- 生成时间:2026-06-29
|
|
|
-- =============================================================================
|
|
|
|
|
|
SET NAMES utf8mb4;
|
|
|
SET CHARACTER SET utf8mb4;
|
|
|
SET FOREIGN_KEY_CHECKS = 0;
|
|
|
|
|
|
DROP TABLE IF EXISTS `audit_log`;
|
|
|
DROP TABLE IF EXISTS `alert_log`;
|
|
|
DROP TABLE IF EXISTS `markup_config`;
|
|
|
DROP TABLE IF EXISTS `quote_cache_meta`;
|
|
|
DROP TABLE IF EXISTS `idempotency_record`;
|
|
|
DROP TABLE IF EXISTS `quote_record`;
|
|
|
DROP TABLE IF EXISTS `sys_user`;
|
|
|
DROP TABLE IF EXISTS `_prisma_migrations`;
|
|
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
|
-- 表结构(与 prisma/schema.prisma 最新迁移一致)
|
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
|
|
CREATE TABLE `sys_user` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`user_id` VARCHAR(32) NOT NULL,
|
|
|
`customer_id` VARCHAR(32) NULL,
|
|
|
`username` VARCHAR(64) NOT NULL,
|
|
|
`password_hash` VARCHAR(255) NOT NULL,
|
|
|
`role` VARCHAR(16) NOT NULL,
|
|
|
`is_deleted` BOOLEAN NOT NULL DEFAULT false,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
UNIQUE INDEX `sys_user_user_id_key`(`user_id`),
|
|
|
UNIQUE INDEX `sys_user_customer_id_key`(`customer_id`),
|
|
|
UNIQUE INDEX `sys_user_username_key`(`username`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `quote_record` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`quote_id` VARCHAR(32) NOT NULL,
|
|
|
`request_id` VARCHAR(36) NOT NULL,
|
|
|
`customer_id` VARCHAR(32) NOT NULL,
|
|
|
`cargo_hash` CHAR(32) NOT NULL,
|
|
|
`status` VARCHAR(16) NOT NULL DEFAULT 'processing',
|
|
|
`source_type` VARCHAR(16) NULL,
|
|
|
`is_realtime` BOOLEAN NOT NULL DEFAULT true,
|
|
|
`confidence_score` DECIMAL(3, 2) NULL,
|
|
|
`currency` VARCHAR(8) NOT NULL DEFAULT 'USD',
|
|
|
`pickup_json` JSON NOT NULL,
|
|
|
`delivery_json` JSON NOT NULL,
|
|
|
`weight_lb` DECIMAL(12, 2) NOT NULL,
|
|
|
`dim_l_in` DECIMAL(8, 2) NOT NULL,
|
|
|
`dim_w_in` DECIMAL(8, 2) NOT NULL,
|
|
|
`dim_h_in` DECIMAL(8, 2) NOT NULL,
|
|
|
`pallet_count` INTEGER NOT NULL,
|
|
|
`cargo_type` VARCHAR(32) NOT NULL,
|
|
|
`quotes_json` JSON NULL,
|
|
|
`markup_percent` DECIMAL(5, 2) NOT NULL DEFAULT 0.00,
|
|
|
`valid_until` DATETIME(3) NULL,
|
|
|
`error_code` VARCHAR(32) NULL,
|
|
|
`error_message` VARCHAR(512) NULL,
|
|
|
`cc_customer_id` VARCHAR(32) NULL,
|
|
|
`forecast_id` VARCHAR(32) NULL,
|
|
|
`is_deleted` BOOLEAN NOT NULL DEFAULT false,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
UNIQUE INDEX `quote_record_quote_id_key`(`quote_id`),
|
|
|
INDEX `idx_customer_created`(`customer_id`, `created_at`),
|
|
|
INDEX `idx_cargo_hash`(`cargo_hash`),
|
|
|
INDEX `idx_request`(`request_id`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `idempotency_record` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`request_id` VARCHAR(36) NOT NULL,
|
|
|
`customer_id` VARCHAR(32) NOT NULL,
|
|
|
`quote_id` VARCHAR(32) NOT NULL,
|
|
|
`expire_at` DATETIME(3) NOT NULL,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
UNIQUE INDEX `idempotency_record_request_id_key`(`request_id`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `quote_cache_meta` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`cargo_hash` CHAR(32) NOT NULL,
|
|
|
`raw_total_standard` DECIMAL(12, 2) NOT NULL,
|
|
|
`raw_total_guaranteed` DECIMAL(12, 2) NOT NULL,
|
|
|
`last_quotes_json` JSON NOT NULL,
|
|
|
`refreshed_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
UNIQUE INDEX `quote_cache_meta_cargo_hash_key`(`cargo_hash`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `markup_config` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`customer_id` VARCHAR(32) NOT NULL,
|
|
|
`markup_type` VARCHAR(16) NOT NULL DEFAULT 'percent',
|
|
|
`markup_percent` DECIMAL(5, 2) NOT NULL,
|
|
|
`markup_fixed_amount` DECIMAL(12, 2) NULL,
|
|
|
`operator_id` VARCHAR(32) NOT NULL,
|
|
|
`remark` VARCHAR(255) NULL,
|
|
|
`is_deleted` BOOLEAN NOT NULL DEFAULT false,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
UNIQUE INDEX `markup_config_customer_id_key`(`customer_id`),
|
|
|
PRIMARY KEY (`id`),
|
|
|
CONSTRAINT `chk_markup_percent` CHECK (
|
|
|
`markup_type` <> 'percent'
|
|
|
OR (`markup_percent` >= 0 AND `markup_percent` <= 30.0)
|
|
|
),
|
|
|
CONSTRAINT `chk_markup_fixed` CHECK (
|
|
|
`markup_type` <> 'fixed'
|
|
|
OR (
|
|
|
`markup_fixed_amount` IS NOT NULL
|
|
|
AND `markup_fixed_amount` >= 0
|
|
|
AND `markup_fixed_amount` <= 99999.99
|
|
|
)
|
|
|
)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `host_customer` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`customer_id` VARCHAR(32) NOT NULL,
|
|
|
`name` VARCHAR(128) NOT NULL,
|
|
|
`status` VARCHAR(16) NOT NULL DEFAULT 'active',
|
|
|
`remark` VARCHAR(255) NULL,
|
|
|
`is_deleted` BOOLEAN NOT NULL DEFAULT false,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
UNIQUE INDEX `host_customer_customer_id_key`(`customer_id`),
|
|
|
INDEX `idx_host_customer_status`(`status`, `is_deleted`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `service_api_key` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`key_id` VARCHAR(32) NOT NULL,
|
|
|
`customer_id` VARCHAR(32) NOT NULL,
|
|
|
`token_hash` CHAR(64) NOT NULL,
|
|
|
`key_prefix` VARCHAR(16) NOT NULL,
|
|
|
`permissions` JSON NOT NULL,
|
|
|
`is_active` BOOLEAN NOT NULL DEFAULT true,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`updated_at` DATETIME(3) NOT NULL,
|
|
|
UNIQUE INDEX `service_api_key_key_id_key`(`key_id`),
|
|
|
UNIQUE INDEX `service_api_key_token_hash_key`(`token_hash`),
|
|
|
INDEX `idx_service_api_key_customer`(`customer_id`, `is_active`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `alert_log` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`alert_type` VARCHAR(32) NOT NULL,
|
|
|
`quote_id` VARCHAR(32) NULL,
|
|
|
`cargo_hash` CHAR(32) NULL,
|
|
|
`detail_json` JSON NULL,
|
|
|
`status` VARCHAR(16) NOT NULL DEFAULT 'open',
|
|
|
`resolver_id` VARCHAR(32) NULL,
|
|
|
`resolved_at` DATETIME(3) NULL,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
INDEX `idx_type_status`(`alert_type`, `status`),
|
|
|
INDEX `idx_created`(`created_at`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `audit_log` (
|
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`action` VARCHAR(64) NOT NULL,
|
|
|
`actor_id` VARCHAR(32) NOT NULL,
|
|
|
`resource` VARCHAR(128) NULL,
|
|
|
`detail_json` JSON NULL,
|
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
INDEX `idx_actor_created`(`actor_id`, `created_at`),
|
|
|
INDEX `idx_action_created`(`action`, `created_at`),
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE `_prisma_migrations` (
|
|
|
`id` VARCHAR(36) NOT NULL,
|
|
|
`checksum` VARCHAR(64) NOT NULL,
|
|
|
`finished_at` DATETIME(3) NULL,
|
|
|
`migration_name` VARCHAR(255) NOT NULL,
|
|
|
`logs` TEXT NULL,
|
|
|
`rolled_back_at` DATETIME(3) NULL,
|
|
|
`started_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
`applied_steps_count` INTEGER UNSIGNED NOT NULL DEFAULT 0,
|
|
|
PRIMARY KEY (`id`)
|
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
|
-- 初始数据
|
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
|
|
INSERT INTO `sys_user` (
|
|
|
`user_id`, `username`, `password_hash`, `role`, `is_deleted`, `created_at`, `updated_at`
|
|
|
) VALUES (
|
|
|
'ADMIN_001',
|
|
|
'admin_demo',
|
|
|
'$2b$10$IlEahtFlDYHlbYv9/n6ETuy9BmmRiNWVAk4DYB5dlH787E7wxToAS',
|
|
|
'admin',
|
|
|
false,
|
|
|
NOW(3),
|
|
|
NOW(3)
|
|
|
);
|
|
|
|
|
|
INSERT INTO `_prisma_migrations` (
|
|
|
`id`, `checksum`, `finished_at`, `migration_name`, `logs`, `rolled_back_at`, `started_at`, `applied_steps_count`
|
|
|
) VALUES
|
|
|
(
|
|
|
'a1000001-0000-4000-8000-000000000001',
|
|
|
'd3b5b3138075270c923d3089496fb61727e1dc0b165e53d7811c7b5c350fff88',
|
|
|
NOW(3),
|
|
|
'20260616000000_init',
|
|
|
NULL,
|
|
|
NULL,
|
|
|
NOW(3),
|
|
|
1
|
|
|
),
|
|
|
(
|
|
|
'a1000002-0000-4000-8000-000000000002',
|
|
|
'692c72fc58455647451d7a6b623deeb9ca015a040b14bb75016ba5657f8cb018',
|
|
|
NOW(3),
|
|
|
'20260617120000_add_quote_error_message',
|
|
|
NULL,
|
|
|
NULL,
|
|
|
NOW(3),
|
|
|
1
|
|
|
),
|
|
|
(
|
|
|
'a1000003-0000-4000-8000-000000000003',
|
|
|
'2002cabd9c321cf2fd385ce756fe6f3c8e26ca63274ad8fb2938b8a0ab50f736',
|
|
|
NOW(3),
|
|
|
'20260624000000_markup_type_fixed',
|
|
|
NULL,
|
|
|
NULL,
|
|
|
NOW(3),
|
|
|
1
|
|
|
);
|
|
|
|
|
|
SET FOREIGN_KEY_CHECKS = 1;
|
|
|
|
|
|
-- 导入完成
|