diff --git a/doc/sql/transport/blade_transport_cert_record_20261002.sql b/doc/sql/transport/blade_transport_cert_record_20261002.sql index 20d199e7..8e9b8870 100644 --- a/doc/sql/transport/blade_transport_cert_record_20261002.sql +++ b/doc/sql/transport/blade_transport_cert_record_20261002.sql @@ -1,10 +1,7 @@ -- ---------------------------- --- 认证记录数据模型:新建 blade_transport_cert_record,为司机表、车辆表补认证字段与 --- 生效快照指针,订正司机表排序规则,并新增认证审核菜单。 +-- 认证记录:建表,司机表 / 车辆表补认证字段与生效快照指针,订正司机表排序规则, +-- 并新增认证审核菜单。可重复执行。 -- ---------------------------- --- 司机与车辆共用本表,由 biz_type 区分;每次提交产生一条不可变记录, --- 审核只改状态,不覆盖已提交内容。 --- 全部语句可重复执行。MySQL 5.7+ 兼容。 -- ---------------------------- -- 1. 认证记录表 @@ -47,8 +44,6 @@ BEGIN DECLARE db_name varchar(128); SET db_name = DATABASE(); - -- 司机表:认证字段 + 生效快照指针 - -- certification_status 为 NULL 表示「从未提交」,与「审核中(0)」不同义。 IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'certification_status') THEN ALTER TABLE `blade_transport_driver` ADD COLUMN `certification_status` int(11) DEFAULT NULL COMMENT '最新提交状态展示缓存:0审核中 1已通过 2已驳回 3已作废,NULL为从未提交' AFTER `remark`; END IF; @@ -59,7 +54,6 @@ BEGIN ALTER TABLE `blade_transport_driver` ADD COLUMN `effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退' AFTER `certification_reject_reason`; END IF; - -- 司机表:身份证有效期(小程序标为必填,原表缺列) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND column_name = 'id_card_valid_start') THEN ALTER TABLE `blade_transport_driver` ADD COLUMN `id_card_valid_start` date DEFAULT NULL COMMENT '身份证有效期起' AFTER `id_card_back`; END IF; @@ -70,20 +64,14 @@ BEGIN ALTER TABLE `blade_transport_driver` ADD COLUMN `id_card_long_term` int(11) DEFAULT '0' COMMENT '身份证长期有效:0否 1是' AFTER `id_card_valid_end`; END IF; - -- 车辆表:生效快照指针(车辆可用性判定改读它,认证状态列降级为展示缓存) - -- 该指针一经写入永不回退,提交/驳回/作废都不得改它,故重新提交不会让已认证的车掉出可用池。 IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_vehicle' AND column_name = 'effective_cert_record_id') THEN ALTER TABLE `blade_transport_vehicle` ADD COLUMN `effective_cert_record_id` bigint(20) DEFAULT NULL COMMENT '生效快照指针:指向 blade_transport_cert_record.id,NULL 表示从未认证通过;一经设置永不回退' AFTER `certification_reject_reason`; END IF; - -- 司机表排序规则订正:建表未显式指定 COLLATE,MySQL 8+ 会落到服务器默认 - -- utf8mb4_0900_ai_ci;车辆表曾因此报 Illegal mix of collations。 IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = db_name AND table_name = 'blade_transport_driver' AND table_collation <> 'utf8mb4_general_ci') THEN ALTER TABLE `blade_transport_driver` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; END IF; - -- 待审唯一键自修复:生成列必须排除已逻辑删除的行,否则被删的待审记录 - -- 会一直占用唯一键,该对象永远无法再次提交(removeById 只改 is_deleted)。 IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_cert_record' @@ -93,8 +81,7 @@ BEGIN MODIFY COLUMN `pending_biz_id` bigint(20) GENERATED ALWAYS AS (if((`status` = 0) and (`is_deleted` = 0),`biz_id`,NULL)) STORED COMMENT '待审唯一键:仅未删除的审核中记录非空,用于保证同对象至多一条待审快照'; END IF; - -- tenant_id 收紧为 NOT NULL:它是待审唯一键的第一列,而唯一索引不对 NULL 去重, - -- 允许 NULL 就能并存两条待审记录,绕开「同对象至多一条待审」。 + -- tenant_id 必须 NOT NULL:唯一索引不对 NULL 去重,允许 NULL 则同一对象可并存两条待审记录 IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_cert_record' @@ -105,8 +92,6 @@ BEGIN MODIFY COLUMN `tenant_id` varchar(12) NOT NULL DEFAULT '000000' COMMENT '租户ID'; END IF; - -- 车辆认证状态缓存词表对齐:旧词表不含「已作废」,新流程会写入 3。 - -- 0/1/2 两套词表同义,故只补措辞,不改数据。 IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = db_name AND table_name = 'blade_transport_vehicle' @@ -131,9 +116,8 @@ DROP PROCEDURE `upgrade_transport_cert_record_20261002`$$ DELIMITER ; -- ---------------------------- --- 5. 菜单与权限码 --- 挂在「运力管理」2079000000000000001 下,与司机管理 / 车辆管理同级。 --- 列表页权限码 cert_certification_audit_{driver|vehicle},审核动作加 _audit 后缀。 +-- 5. 菜单 +-- 挂在「运力管理」2079000000000000001 下;ON DUPLICATE KEY UPDATE 使重跑可覆盖旧值。 -- ---------------------------- INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2079000000000000300, 2079000000000000001, 'cert_certification_audit_driver', '司机审核', 'cert_certification_audit_driver', '/transportCapacity/cert-audit-driver', 'iconfont iconicon_doc', 4, 1, 0, 1, '', '司机认证待审列表', 0), diff --git a/doc/sql/transport/blade_transport_driver_driving_vehicle_widen_20261003.sql b/doc/sql/transport/blade_transport_driver_driving_vehicle_widen_20261003.sql index 48197fd1..b845ecba 100644 --- a/doc/sql/transport/blade_transport_driver_driving_vehicle_widen_20261003.sql +++ b/doc/sql/transport/blade_transport_driver_driving_vehicle_widen_20261003.sql @@ -1,9 +1,5 @@ --- ---------------------------- --- 司机「驾驶车辆」字段扩长:varchar(30) -> varchar(100) --- ---------------------------- --- 该字段是逗号并列的车牌列表,一个司机最多 5 辆;30 字符连 4 辆都放不下, --- 超长会静默截断成半个车牌,被拆车牌逻辑当成一辆不存在的车。 --- 排序规则不变:与车辆表、认证记录表之间有按车牌的关联查询。 +-- 司机「驾驶车辆」字段扩长:varchar(30) -> varchar(100)。 +-- 该字段是逗号并列的车牌列表,一个司机最多 5 辆,30 字符不够;超长会静默截断成半个车牌。 DELIMITER $$ diff --git a/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql b/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql index 5209c445..5ac828c0 100644 --- a/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql +++ b/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql @@ -1,9 +1,5 @@ --- ---------------------------- --- 车辆档案补两列:所有人、车辆识别代号(车架号) --- ---------------------------- --- owner_name 是行驶证上登记的单位名称,不是司机,与「所属组织」也是两个字段。 --- vin 司机端认证一直在收并写入快照,车辆表此前没有对应列,补上后档案与快照才一致。 --- 两列均可空:存量车辆没有值,VIN 在原型里也是选填。 +-- 车辆档案补两列:所有人(行驶证登记的单位名称,不是司机)、车辆识别代号(车架号)。 +-- 两列均可空,存量车辆没有值。 DELIMITER $$