-- ============================================================================= -- 运输计划 · 车辆/人员/证书重构 — 增量 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;