diff --git a/doc/sql/transport/blade_transport_cert_record_20261002.sql b/doc/sql/transport/blade_transport_cert_record_20261002.sql index de7ad409..e5c445e8 100644 --- a/doc/sql/transport/blade_transport_cert_record_20261002.sql +++ b/doc/sql/transport/blade_transport_cert_record_20261002.sql @@ -1,14 +1,16 @@ +-- ---------------------------- -- 认证记录数据模型:新建 blade_transport_cert_record,为司机表、车辆表补认证字段与 -- 生效快照指针,订正司机表排序规则,并新增认证审核菜单。 --- +-- ---------------------------- -- 认证对象(司机 / 车辆)每次提交产生一条不可变记录,审核只改记录的状态, -- 不覆盖已提交的内容。司机与车辆共用本表,由 biz_type 区分。 -- --- ⚠️ effective_cert_record_id(生效快照指针)是判定「该对象是否已认证」的唯一依据: --- NULL = 从未审核通过;一经写入永不回退,提交、驳回、作废都不得修改它。 --- 因此「重新提交审核」不会让一辆已认证的车掉出可用池。 +-- effective_cert_record_id(生效快照指针)是判定「该对象是否已认证」的唯一依据: +-- NULL = 从未审核通过;一经写入永不回退,提交、驳回、作废都不得修改它。 +-- 因此「重新提交审核」不会让一辆已认证的车掉出可用池。 -- --- 幂等:全部语句可重复执行(建表 IF NOT EXISTS、加列先查 information_schema)。 +-- 幂等:全部语句可重复执行(建表 IF NOT EXISTS、加列先查 information_schema、 +-- 改列/改排序规则/改菜单都先判定当前状态;菜单用 ON DUPLICATE KEY UPDATE)。 -- MySQL 5.7+ 兼容。 -- ---------------------------- @@ -152,8 +154,13 @@ DELIMITER ; -- ---------------------------- -- 5. 菜单与权限码 --- 挂在「运力管理」(2079000000000000001) 下,与司机管理 / 车辆管理同级。 +-- 挂在「运力管理」(2079000000000000001,与 blade_transport_driver.sql / +-- blade_transport_vehicle.sql / blade_vehicle_dispatch.sql 用的是同一个 ID) 下, +-- 与司机管理 / 车辆管理同级。 -- 列表页权限码 cert_certification_audit_{driver|vehicle},审核动作加 _audit 后缀。 +-- +-- 幂等:ON DUPLICATE KEY UPDATE 同时把 parent_id / name 等回写, +-- 故对已存在(曾按早期版本建过菜单、或手工改过)的环境重跑即可收敛到本脚本的值。 -- ---------------------------- 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 34194030..bbd9b162 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 @@ -2,12 +2,38 @@ -- 司机「驾驶车辆」字段扩长:varchar(30) -> varchar(100) -- ---------------------------- -- 一个司机最多绑定 5 辆车(与小程序端「车辆认证一个司机最多添加 5 辆」一致), --- 该字段是**逗号并列的车牌列表**,5 个普通车牌连分隔符要 39 字符, +-- 该字段是逗号并列的车牌列表,5 个普通车牌连分隔符要 39 字符, -- 新能源号牌(8 位)要 44 字符 —— 30 字符连 4 辆车都放不下。 --- 超长写入的后果不是报错而是**静默截断**:字段里会留下半个车牌, +-- 超长写入的后果不是报错而是静默截断:字段里会留下半个车牌, -- 而拆车牌的规则会把这段残渣当成一辆车,司机名下于是多出一辆不存在的车。 -- -- 排序规则保持不变(utf8mb4_general_ci):车辆表与认证记录表都用这个规则, -- 三张表之间已有按车牌的关联查询,改规则会引发 Illegal mix of collations。 -ALTER TABLE `blade_transport_driver` - MODIFY COLUMN `driving_vehicle` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '驾驶车辆车牌号,多个用逗号分隔'; +-- +-- 幂等:已是目标长度时不再执行(MODIFY COLUMN 会重建表,重复执行无意义且有大表代价)。 +-- MySQL 5.7+ 兼容。 + +DELIMITER $$ + +DROP PROCEDURE IF EXISTS `upgrade_transport_driver_driving_vehicle_widen_20261003`$$ +CREATE PROCEDURE `upgrade_transport_driver_driving_vehicle_widen_20261003`() +BEGIN + DECLARE db_name varchar(128); + SET db_name = DATABASE(); + + IF EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = db_name + AND table_name = 'blade_transport_driver' + AND column_name = 'driving_vehicle' + AND character_maximum_length < 100 + ) THEN + ALTER TABLE `blade_transport_driver` + MODIFY COLUMN `driving_vehicle` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '驾驶车辆车牌号,多个用逗号分隔'; + END IF; +END$$ + +CALL `upgrade_transport_driver_driving_vehicle_widen_20261003`()$$ +DROP PROCEDURE `upgrade_transport_driver_driving_vehicle_widen_20261003`$$ + +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 817034f3..982b4dbb 100644 --- a/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql +++ b/doc/sql/transport/blade_transport_vehicle_owner_vin_20261003.sql @@ -1,14 +1,48 @@ -- ---------------------------- -- 车辆档案补两列:所有人、车辆识别代号(车架号) -- ---------------------------- --- 所有人:行驶证上登记的单位名称(如「桂物物流集团」),**不是司机**, +-- 所有人:行驶证上登记的单位名称(如「桂物物流集团」),不是司机, -- 与「所属组织」也是两个字段——组织是内部管理归属,所有人是证件上的登记主体, -- 两者可能不同(挂靠车的所有人不是本组织)。 -- VIN:司机端车辆认证一直在收这个值并写进认证快照,但车辆表此前没有对应列, -- 于是它只存在于快照里、车辆档案上查不到。补列后档案与快照才一致。 -- -- 两列都允许为空:存量车辆(含订正补的那些)没有这两个值, --- 且 VIN 在原型里是**选填**项,不设默认值也不设 NOT NULL。 -ALTER TABLE `blade_transport_vehicle` - ADD COLUMN `owner_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所有人(行驶证登记的单位名称,不是司机)' AFTER `plate_no`, - ADD COLUMN `vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车辆识别代号(车架号)' AFTER `vehicle_type`; +-- 且 VIN 在原型里是选填项,不设默认值也不设 NOT NULL。 +-- +-- 幂等:逐列先查 information_schema,已存在则跳过(可重复执行)。 +-- MySQL 5.7+ 兼容。 + +DELIMITER $$ + +DROP PROCEDURE IF EXISTS `upgrade_transport_vehicle_owner_vin_20261003`$$ +CREATE PROCEDURE `upgrade_transport_vehicle_owner_vin_20261003`() +BEGIN + DECLARE db_name varchar(128); + SET db_name = DATABASE(); + + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = db_name + AND table_name = 'blade_transport_vehicle' + AND column_name = 'owner_name' + ) THEN + ALTER TABLE `blade_transport_vehicle` + ADD COLUMN `owner_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所有人(行驶证登记的单位名称,不是司机)' AFTER `plate_no`; + 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 = 'vin' + ) THEN + ALTER TABLE `blade_transport_vehicle` + ADD COLUMN `vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车辆识别代号(车架号)' AFTER `vehicle_type`; + END IF; +END$$ + +CALL `upgrade_transport_vehicle_owner_vin_20261003`()$$ +DROP PROCEDURE `upgrade_transport_vehicle_owner_vin_20261003`$$ + +DELIMITER ;