Files
tms-erp-api/blade-service-api
weicw-dshsa 5747975152 ✨ 管理端认证审核接口,并弃用旧车辆审核入口
审核作用于**一条认证记录**,不是车辆行或司机行。两条路径的差别是本次改造的关键:
- 通过:记录转已通过 + 写审核人/审核时间,并把该对象的生效快照指针**切换**到它
  (切换而非追加,故一个对象至多一条生效快照);
- 驳回:记录转已驳回并留原因,生效快照指针**一个字都不动**。

因此「已认证的车被驳回」不会掉出可用池,只是这次提交没被采纳。

已终态(已通过/已驳回/已作废)的记录拒绝再次审核。理由:若允许,
把指针指着的那条「已通过」改成「已驳回」,生效值就凭空消失了。

审核详情同时返回待审快照与当前生效值两侧,供审核页做字段级 diff
(这正是「看出司机改了什么」的实质要求),并附 certified 标记,
便于前端提示「本次驳回不影响该对象继续使用」。

旧接口 POST /transport-vehicle/audit-certification 置为 @Deprecated 并加告警日志:
它作用于车辆行且原地覆盖,在生效值/待审值分离后语义已不成立。
保留而不删除是为了避免小程序历史版本或其它系统 404;它只写展示缓存,
不再影响可用性判定(可用性只看 effective_cert_record_id)。

修复过程中被测试抓到两个真实问题:
1. 通过路径原先对同一行连发两次 UPDATE(先切指针、再刷展示缓存),
   合并为一次,消除了「后写覆盖先写」的可能;
2. 新增 EffectivePointerUpdateSqlTest,直接断言 MyBatis-Plus 生成的 UPDATE SET 片段:
   指针列必须被「值非 null 才写」的 if 包住——驳回传 null 因此物理上碰不到它。
   把「靠约定」变成「靠语句」,若有人给该字段加 ALWAYS 策略,测试立刻变红。

13 个审核用例 + 全模块 48 个测试通过:mvn -o test -pl blade-service/blade-transport -am
2026-10-02 16:26:20 +08:00
..
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-08-12 12:42:07 +08:00
2026-07-08 17:57:11 +08:00
2026-07-08 17:57:11 +08:00
2026-08-19 06:53:39 +08:00
2026-08-15 20:52:17 +08:00