164 lines
8.6 KiB
SQL
164 lines
8.6 KiB
SQL
-- =============================================================================
|
|
-- 运输计划 · 车辆/人员/证书重构 — 增量 DDL
|
|
-- 日期: 2026-06-19
|
|
-- 说明: 在已有 pl_ 表基础上新增/扩展,不删除 pl_driver(迁移后另脚本处理)
|
|
-- =============================================================================
|
|
|
|
SET NAMES utf8mb4;
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
-- 1. pl_personnel(人员主表)
|
|
-- -----------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `pl_personnel` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键ID',
|
|
`personnel_name` varchar(100) NOT NULL COMMENT '姓名',
|
|
`phone_no` varchar(32) DEFAULT NULL COMMENT '手机号(非必填)',
|
|
`age` int(11) DEFAULT NULL COMMENT '年龄',
|
|
`id_card_no` varchar(32) DEFAULT NULL COMMENT '身份证号',
|
|
`status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 1-在职 0-停用',
|
|
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
|
|
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_tenant` (`tenant_no`),
|
|
KEY `idx_phone` (`phone_no`),
|
|
KEY `idx_personnel_name` (`personnel_name`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输计划-人员表';
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
-- 2. pl_cert(证书实例表)
|
|
-- -----------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `pl_cert` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键ID',
|
|
`owner_type` varchar(20) NOT NULL COMMENT '归属类型 vehicle-车辆 personnel-人员',
|
|
`owner_id` varchar(64) NOT NULL COMMENT '归属主体ID',
|
|
`cert_name` varchar(100) NOT NULL COMMENT '证书名称',
|
|
`cert_no` varchar(64) DEFAULT NULL COMMENT '证号',
|
|
`expire_date` date DEFAULT NULL COMMENT '有效期',
|
|
`remind_days` int(11) NOT NULL DEFAULT 30 COMMENT '提前提醒天数',
|
|
`attachment_urls` varchar(2000) DEFAULT NULL COMMENT '附件URL(逗号分隔)',
|
|
`status` varchar(20) NOT NULL DEFAULT 'valid' COMMENT '状态 valid-有效 expired-已过期 revoked-已作废',
|
|
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
|
|
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_tenant` (`tenant_no`),
|
|
KEY `idx_owner` (`owner_type`, `owner_id`),
|
|
KEY `idx_expire_date` (`expire_date`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运输计划-证书表';
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
-- 3. pl_vehicle_personnel(车辆-人员关联,由 pl_vehicle_driver 演进)
|
|
-- -----------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `pl_vehicle_personnel` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键ID',
|
|
`vehicle_id` varchar(64) NOT NULL COMMENT '车辆ID',
|
|
`personnel_id` varchar(64) NOT NULL COMMENT '人员ID',
|
|
`role` varchar(20) NOT NULL DEFAULT 'driver' COMMENT '角色 driver-司机 escort-押运员',
|
|
`is_default` smallint(6) NOT NULL DEFAULT 0 COMMENT '是否默认司机 0-否 1-是',
|
|
`tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
|
|
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(512) DEFAULT NULL COMMENT '关联备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_vehicle_id` (`vehicle_id`),
|
|
KEY `idx_personnel_id` (`personnel_id`),
|
|
KEY `idx_tenant` (`tenant_no`),
|
|
KEY `idx_vehicle_role` (`vehicle_id`, `role`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆-人员关联表';
|
|
|
|
-- 若存在旧表 pl_vehicle_driver 且无 pl_vehicle_personnel 数据,由迁移脚本处理
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
-- 4. pl_document_reminder 扩展字段
|
|
-- -----------------------------------------------------------------------------
|
|
-- cert_id
|
|
SET @col_exists = (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'cert_id'
|
|
);
|
|
SET @sql = IF(@col_exists = 0,
|
|
'ALTER TABLE `pl_document_reminder` ADD COLUMN `cert_id` varchar(64) DEFAULT NULL COMMENT ''证书ID'' AFTER `id`',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
-- owner_type
|
|
SET @col_exists = (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_type'
|
|
);
|
|
SET @sql = IF(@col_exists = 0,
|
|
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_type` varchar(20) DEFAULT NULL COMMENT ''归属类型 vehicle/personnel'' AFTER `cert_id`',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
-- owner_id
|
|
SET @col_exists = (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_id'
|
|
);
|
|
SET @sql = IF(@col_exists = 0,
|
|
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_id` varchar(64) DEFAULT NULL COMMENT ''归属主体ID'' AFTER `owner_type`',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
-- owner_label
|
|
SET @col_exists = (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'owner_label'
|
|
);
|
|
SET @sql = IF(@col_exists = 0,
|
|
'ALTER TABLE `pl_document_reminder` ADD COLUMN `owner_label` varchar(200) DEFAULT NULL COMMENT ''归属展示名(车牌/姓名)'' AFTER `owner_id`',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
-- driver_id 改为可空(兼容车辆主体提醒)
|
|
SET @col_nullable = (
|
|
SELECT IS_NULLABLE FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'driver_id'
|
|
);
|
|
SET @sql = IF(@col_nullable = 'NO',
|
|
'ALTER TABLE `pl_document_reminder` MODIFY COLUMN `driver_id` varchar(64) DEFAULT NULL COMMENT ''司机/人员ID(兼容)''',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
SET @col_nullable = (
|
|
SELECT IS_NULLABLE FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND COLUMN_NAME = 'driver_name'
|
|
);
|
|
SET @sql = IF(@col_nullable = 'NO',
|
|
'ALTER TABLE `pl_document_reminder` MODIFY COLUMN `driver_name` varchar(100) DEFAULT NULL COMMENT ''司机/人员姓名(兼容)''',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
|
|
-- document_type 扩长以存 cert_name
|
|
ALTER TABLE `pl_document_reminder`
|
|
MODIFY COLUMN `document_type` varchar(100) NOT NULL COMMENT '证件类型/证书名称';
|
|
|
|
-- 新索引
|
|
SET @idx_exists = (
|
|
SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pl_document_reminder' AND INDEX_NAME = 'idx_cert_id'
|
|
);
|
|
SET @sql = IF(@idx_exists = 0,
|
|
'ALTER TABLE `pl_document_reminder` ADD KEY `idx_cert_id` (`cert_id`)',
|
|
'SELECT 1');
|
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|