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 5a4ed782..3fe5f102 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 @@ -39,12 +39,12 @@ import org.springframework.stereotype.Component; * 判据是生效快照指针,不是「最新提交状态」展示缓存——重新提交认证会把展示缓存 * 变成「审核中」,照它判定会让司机一提交就接不了单。生效快照只在审核通过时切换。 *
- * 两个开关默认开启,可关掉以回退到不校验认证的行为: + * 两个开关默认关闭,接单不校验认证;显式置 true 恢复拦截: *
* transport: * certification: - * vehicle-gate-enabled: false - * driver-gate-enabled: false + * vehicle-gate-enabled: true + * driver-gate-enabled: true ** * @author Chill @@ -57,14 +57,14 @@ public class CertificationGate { /** * 车辆认证门槛开关 */ - @Value("${transport.certification.vehicle-gate-enabled:true}") - private boolean vehicleGateEnabled = true; + @Value("${transport.certification.vehicle-gate-enabled:false}") + private boolean vehicleGateEnabled = false; /** * 司机认证门槛开关 */ - @Value("${transport.certification.driver-gate-enabled:true}") - private boolean driverGateEnabled = true; + @Value("${transport.certification.driver-gate-enabled:false}") + private boolean driverGateEnabled = false; /** * 判定车辆是否可用 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 8a9bbb0f..3f21819a 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 @@ -11,6 +11,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; /** * 认证可用性门槛测试。 *
+ * 开关默认关闭:未认证的司机与车辆都可接单;只有显式置 true 才按生效快照校验。 + *
* 关键场景:已认证的车被重新提交认证后仍可接单——判定必须走生效快照, * 而重新提交会把「最新提交状态」变成「审核中」。 */ @@ -26,14 +28,33 @@ class CertificationGateTest { // ------------------------------------------------------------ 开关 @Test - @DisplayName("门槛默认开启") - void enabledByDefault() { - assertTrue(gate.isVehicleGateEnabled()); - assertTrue(gate.isDriverGateEnabled()); + @DisplayName("门槛默认关闭") + void disabledByDefault() { + assertFalse(gate.isVehicleGateEnabled()); + assertFalse(gate.isDriverGateEnabled()); } @Test - @DisplayName("关闭后不因未认证而拦截(便于快速回退)") + @DisplayName("默认关闭:未认证的司机与车辆都不拦") + void disabledByDefaultLetsUncertifiedThrough() { + assertTrue(gate.isVehicleAvailable(Boolean.TRUE, null)); + assertTrue(gate.isDriverAvailable(null)); + } + + @Test + @DisplayName("显式置 true:未认证的司机与车辆重新被拒") + void explicitlyEnabledRejectsUncertified() { + gate.setVehicleGateEnabled(true); + gate.setDriverGateEnabled(true); + + assertFalse(gate.isDriverAvailable(null)); + assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null)); + assertTrue(gate.driverUnavailableReason().contains("认证")); + assertTrue(gate.vehicleUnavailableReason(Boolean.TRUE, null).contains("认证")); + } + + @Test + @DisplayName("显式关闭后不因未认证而拦截(配置回退路径)") void disabledLetsEveryoneThrough() { gate.setVehicleGateEnabled(false); gate.setDriverGateEnabled(false); @@ -45,28 +66,32 @@ class CertificationGateTest { // ------------------------------------------------------------ 车辆 @Test - @DisplayName("车辆:有生效快照即可用(核心:重新提交不影响可用性)") + @DisplayName("车辆:开启门槛时有生效快照即可用(核心:重新提交不影响可用性)") void vehicleWithEffectiveSnapshotIsAvailable() { + gate.setVehicleGateEnabled(true); assertTrue(gate.isVehicleAvailable(Boolean.TRUE, 7001L)); } @Test @DisplayName("车辆:重新提交后【状态变成审核中】但仍有生效快照 → 仍可用") void resubmittedVehicleStaysAvailable() { + gate.setVehicleGateEnabled(true); // 展示缓存变成「审核中」,但 effective_cert_record_id 仍指着上一次通过的记录。 assertTrue(gate.isVehicleAvailable(Boolean.TRUE, 7001L), "已认证的车重新提交后必须仍可接单,否则司机一提交就停工"); } @Test - @DisplayName("车辆:从未认证(无生效快照)被拒绝") + @DisplayName("车辆:开启门槛时从未认证(无生效快照)被拒绝") void vehicleWithoutEffectiveSnapshotIsRejected() { + gate.setVehicleGateEnabled(true); assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null)); } @Test @DisplayName("车辆:停用状态优先于认证——停用的车即便有生效快照也不可用") void disabledVehicleIsRejectedEvenIfCertified() { + gate.setVehicleGateEnabled(true); assertFalse(gate.isVehicleAvailable(Boolean.FALSE, 7001L), "启用/停用是运营状态,认证门槛只叠加不覆盖"); assertFalse(gate.isVehicleAvailable(null, 7001L)); @@ -75,20 +100,23 @@ class CertificationGateTest { // ------------------------------------------------------------ 司机 @Test - @DisplayName("司机:有生效快照即可用") + @DisplayName("司机:开启门槛时有生效快照即可用") void driverWithEffectiveSnapshotIsAvailable() { + gate.setDriverGateEnabled(true); assertTrue(gate.isDriverAvailable(9001L)); } @Test - @DisplayName("司机:从未认证被拒绝") + @DisplayName("司机:开启门槛时从未认证被拒绝") void driverWithoutEffectiveSnapshotIsRejected() { + gate.setDriverGateEnabled(true); assertFalse(gate.isDriverAvailable(null)); } @Test @DisplayName("司机门槛可单独关闭") void driverGateCanBeDisabledIndependently() { + gate.setVehicleGateEnabled(true); gate.setDriverGateEnabled(false); assertTrue(gate.isDriverAvailable(null), "司机门槛关闭时不应拦截"); assertFalse(gate.isVehicleAvailable(Boolean.TRUE, null), "车辆门槛不受影响"); @@ -99,6 +127,7 @@ class CertificationGateTest { @Test @DisplayName("停用与未认证分开报:前者让人去启用车辆,后者才让人去认证") void unavailableReasonsDistinguishDisabledFromUncertified() { + gate.setVehicleGateEnabled(true); String disabled = gate.vehicleUnavailableReason(Boolean.FALSE, 7001L); assertTrue(disabled.contains("停用"), disabled); assertFalse(disabled.contains("认证审核"), "已认证的车被停用,不该报成认证没通过"); @@ -111,6 +140,7 @@ class CertificationGateTest { @Test @DisplayName("可用时没有原因;两种不可用文案都不泄露内部字段名") void availableHasNoReasonAndTextIsReadable() { + gate.setVehicleGateEnabled(true); assertNull(gate.vehicleUnavailableReason(Boolean.TRUE, 7001L)); assertFalse(gate.vehicleUnavailableReason(Boolean.TRUE, null).contains("effective_cert_record_id")); assertFalse(gate.vehicleUnavailableReason(Boolean.FALSE, null).contains("effective_cert_record_id"));