From e3d860668b411876b81d7a44fd52e3d3b5f14213 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Sun, 4 Oct 2026 23:55:22 +0800 Subject: [PATCH] =?UTF-8?q?:memo:=20=E5=88=A0=E9=99=A4=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E5=88=86=E6=94=AF=E6=B3=A8=E9=87=8A=E9=87=8C=E7=9A=84=E5=8F=99?= =?UTF-8?q?=E4=BA=8B=E6=80=A7=E6=8E=AA=E8=BE=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 把「本改造的核心」「这正是要避免的事」「本次改造要保住的东西」这类 写作时的叙事从注释中去掉,只留读者需要的事实(反直觉的约束、坑、兼容性)。 测试的 @DisplayName 同步去掉「改造前/改造期间」等时间状语。 注释与文案调整,无逻辑改动;CertificationGateTest 等 35 个测试通过。 --- .../transport/pojo/entity/TransportVehicle.java | 2 +- .../service/impl/CertAuditServiceImpl.java | 8 ++++---- .../transport/support/CertificationGate.java | 15 +++++---------- .../service/impl/CertAuditServiceImplTest.java | 2 +- .../service/impl/PersonCertRoundTripTest.java | 4 ++-- .../transport/support/CertificationGateTest.java | 14 +++++--------- 6 files changed, 18 insertions(+), 27 deletions(-) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/TransportVehicle.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/TransportVehicle.java index 2e309bc6..1fe16eb9 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/TransportVehicle.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/TransportVehicle.java @@ -243,7 +243,7 @@ public class TransportVehicle extends TenantEntity { * 「该车辆是否已认证」的唯一判据。为 null 表示从未认证通过; * 一经设置永不回退——重新提交、待审、被驳回都不得修改它, * 因此重新提交认证不会让一辆已认证的车掉出可用池。 - * 改造后 {@link #certificationStatus} 降级为「最新提交状态」的展示缓存。 + * {@link #certificationStatus} 是「最新提交状态」的展示缓存,不代表是否已认证。 *

* ⚠️ {@code READ_ONLY}:本字段只能由审核通过时写入。 * {@code POST /transport-vehicle/submit} 直接以本实体接收请求体, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CertAuditServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CertAuditServiceImpl.java index d1bedbb3..07248769 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CertAuditServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CertAuditServiceImpl.java @@ -55,10 +55,10 @@ import java.util.List; /** * 认证审核服务实现 *

- * 审核作用于**一条记录**。两条路径的差别是本次改造的关键: + * 审核作用于一条记录,两条路径的差别在于是否切换生效快照: *

* 因此「已认证的车被驳回」不会让它掉出可用池,只是这次提交没被采纳。 * @@ -354,10 +354,10 @@ public class CertAuditServiceImpl implements ICertAuditService { } catch (Exception exception) { throw new ServiceException("该认证记录的提交内容无法解析,未写入车辆档案"); } - // 字段名对不上时 JSON 会解析成「全是 null」而不报错(改造前的历史快照就是这种情况), + // 字段名对不上时 JSON 会解析成「全是 null」而不报错(早期格式的历史快照就是这种情况), // 那样写回等于什么也没写。故用证件内容里的关键字段判定「这份快照是否是当前格式」。 if (Func.isEmpty(snapshot.getDrivingLicenseNo()) && Func.isEmpty(snapshot.getApprovedLoadKg())) { - throw new ServiceException("该认证记录的提交内容与当前字段定义不匹配(可能是改造前的历史快照)," + throw new ServiceException("该认证记录的提交内容与当前字段定义不匹配(可能是早期格式的历史快照)," + "未写入车辆档案;请重新提交一次认证"); } vehicle.setOwnerName(snapshot.getOwnerName()); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/CertificationGate.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/CertificationGate.java index cd5e4185..2af6ae62 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/CertificationGate.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/CertificationGate.java @@ -33,18 +33,13 @@ import org.springframework.stereotype.Component; /** * 认证可用性门槛 *

- * 在原有的运营状态(启用 / 停用)之上**叠加**一层「是否已认证」: - *

+ * 在运营状态(启用 / 停用)之上叠加一层「是否已认证」: + * 车辆需运营状态为启用且存在生效快照;司机需存在生效快照。 *

- * ⚠️ 判据是**生效快照指针**,不是「最新提交状态」展示缓存。 - * 这一区别是本改造的核心:司机重新提交认证会把展示缓存变成「审核中」, - * 若照它判定,司机一提交认证就立刻接不了单——正是要避免的事。 - * 生效快照只在审核通过时才切换,故「曾认证通过即持续可用」。 + * 判据是生效快照指针,不是「最新提交状态」展示缓存——重新提交认证会把展示缓存 + * 变成「审核中」,照它判定会让司机一提交就接不了单。生效快照只在审核通过时切换。 *

- * 两个开关默认开启,可通过配置关闭以便线上快速回退到改造前的行为: + * 两个开关默认开启,可关掉以回退到不校验认证的行为: *

  * transport:
  *   certification:
diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/CertAuditServiceImplTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/CertAuditServiceImplTest.java
index ae268991..93416743 100644
--- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/CertAuditServiceImplTest.java
+++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/CertAuditServiceImplTest.java
@@ -97,7 +97,7 @@ class CertAuditServiceImplTest {
 	}
 
 	@Test
-	@DisplayName("通过车辆认证:快照是改造前的旧格式时明确失败,不能「通过但什么也没写」")
+	@DisplayName("通过车辆认证:快照是旧格式时明确失败,不能「通过但什么也没写」")
 	void approveRejectsLegacySnapshot() {
 		// 旧快照的键名与当前字段定义不同,会解析成「全是 null」而不报错——最危险的一种情况
 		TransportCertRecord record = vehicleRecord(TransportCertRecord.STATUS_PENDING,
diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/PersonCertRoundTripTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/PersonCertRoundTripTest.java
index b72b4182..ca07ae88 100644
--- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/PersonCertRoundTripTest.java
+++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/PersonCertRoundTripTest.java
@@ -322,11 +322,11 @@ class PersonCertRoundTripTest {
 	@Test
 	@DisplayName("历史快照:读不懂就跳过写回,审核本身照常通过")
 	void legacySnapshotSkipsWriteBackWithoutFailingAudit() {
-		// 改造前的快照没有 idCardNo / driverFileNo,解析出来字段全是 null;
+		// 早期格式的快照没有 idCardNo / driverFileNo,解析出来字段全是 null;
 		// 此时既不能把 null 当成「司机没填」写进档案,也不能让这次审核直接失败
 		Long recordId = driverCertService.submitPersonCert(personCert("张三", "110101199001011234"));
 		TransportCertRecord record = recordStore.get(recordId);
-		record.setSnapshotJson("{\"legacyField\":\"改造前的旧内容\"}");
+		record.setSnapshotJson("{\"legacyField\":\"早期格式的旧内容\"}");
 
 		certAuditService.audit(recordId, true, null);
 
diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/CertificationGateTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/CertificationGateTest.java
index 08ee25b7..afa32c0f 100644
--- a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/CertificationGateTest.java
+++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/CertificationGateTest.java
@@ -10,10 +10,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 /**
  * 认证可用性门槛测试。
  * 

- * 这是整个认证改造的**核心验收点**:一辆已认证的车被重新提交认证后,必须**仍可接单**。 - * 改造前的判定只看车辆的启用/停用状态;本门槛叠加一层「是否已认证」。 - * 之所以必须叠加在生效快照上而不是「最新提交状态」,正是因为重新提交会把 - * 「最新提交状态」变成「审核中」——若照它判定,司机一提交认证就立刻接不了单。 + * 关键场景:已认证的车被重新提交认证后仍可接单——判定必须走生效快照, + * 而重新提交会把「最新提交状态」变成「审核中」。 */ class CertificationGateTest { @@ -34,7 +32,7 @@ class CertificationGateTest { } @Test - @DisplayName("关闭后行为回到改造前:不因未认证而拦截(便于快速回退)") + @DisplayName("关闭后不因未认证而拦截(便于快速回退)") void disabledLetsEveryoneThrough() { gate.setVehicleGateEnabled(false); gate.setDriverGateEnabled(false); @@ -54,9 +52,7 @@ class CertificationGateTest { @Test @DisplayName("车辆:重新提交后【状态变成审核中】但仍有生效快照 → 仍可用") void resubmittedVehicleStaysAvailable() { - // 关键场景:司机提交了新资料,展示缓存变成「审核中」, - // 但 effective_cert_record_id 仍指着上一次通过的记录。 - // 门槛只看指针,故这辆车照跑不误——这就是本次改造要保住的东西。 + // 展示缓存变成「审核中」,但 effective_cert_record_id 仍指着上一次通过的记录。 assertTrue(gate.isVehicleAvailable(Boolean.TRUE, 7001L), "已认证的车重新提交后必须仍可接单,否则司机一提交就停工"); } @@ -90,7 +86,7 @@ class CertificationGateTest { } @Test - @DisplayName("司机门槛可单独关闭(改造期间用于渐进放开)") + @DisplayName("司机门槛可单独关闭") void driverGateCanBeDisabledIndependently() { gate.setDriverGateEnabled(false); assertTrue(gate.isDriverAvailable(null), "司机门槛关闭时不应拦截");