From bd011224098f9370276420764562853fc1e84965 Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Fri, 2 Oct 2026 19:58:11 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8F=90=E4=BA=A4=E4=BA=BA=E8=AE=B0=E6=88=90?= =?UTF-8?q?=E5=8F=B8=E6=9C=BA=E6=A1=A3=E6=A1=88ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提交时把 driver.getId()(司机档案ID)当提交人写进了 submit_user, 而该字段要靠 UserCache.getUserRealName(userId) 翻译成姓名, 两处ID都是雪花ID、类型也相同,传错不报任何错, 只在审核页表现为「提交人」显示成一串数字。 改为 driver.getUserId(),并补回归测试锁住(用两个不同的ID常量, 传错必然断言失败)。 --- .../service/impl/DriverCertServiceImpl.java | 8 +++-- .../impl/DriverCertServiceImplTest.java | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverCertServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverCertServiceImpl.java index 53d1e811..f6b51273 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverCertServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverCertServiceImpl.java @@ -90,7 +90,7 @@ public class DriverCertServiceImpl implements IDriverCertService { TransportCertRecord record = newRecord( TransportCertRecord.BIZ_TYPE_DRIVER, driver.getId(), - Func.toStr(driver.getDriverName(), ""), snapshotJson, driver.getId()); + Func.toStr(driver.getDriverName(), ""), snapshotJson, driver.getUserId()); transportCertRecordService.save(record); // 展示缓存:让小程序卡片显示「审核中」。可用性判定不看这个字段。 @@ -122,7 +122,7 @@ public class DriverCertServiceImpl implements IDriverCertService { TransportCertRecord record = newRecord( TransportCertRecord.BIZ_TYPE_VEHICLE, vehicle.getId(), - Func.toStr(vehicle.getPlateNo(), ""), snapshotJson, driver.getId()); + Func.toStr(vehicle.getPlateNo(), ""), snapshotJson, driver.getUserId()); transportCertRecordService.save(record); updateVehicleDisplayCache(vehicle.getId(), TransportCertRecord.STATUS_PENDING, null); @@ -202,6 +202,10 @@ public class DriverCertServiceImpl implements IDriverCertService { *

* 状态必须显式设置为待审:框架在插入时会把空的 {@code status} 静默填成 1, * 而 1 在本表是「已通过」,那会让一次提交凭空变成审核通过。 + * + * @param submitUser 提交人**用户ID**(blade_user.id)——审核页要靠它翻译成姓名。 + * 不要传司机档案ID:两者都是雪花ID、类型也相同,传错不会报任何错, + * 只会让「提交人」一栏显示成一串数字。 */ private TransportCertRecord newRecord(String bizType, Long bizId, String bizKey, String snapshotJson, Long submitUser) { diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverCertServiceImplTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverCertServiceImplTest.java index 0f8dcf7a..c1e48274 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverCertServiceImplTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverCertServiceImplTest.java @@ -41,6 +41,7 @@ import static org.mockito.Mockito.when; class DriverCertServiceImplTest { private static final Long DRIVER_ID = 9001L; + private static final Long USER_ID = 7001L; private static final Long VEHICLE_ID = 8001L; private static final String PLATE = "桂A32523"; @@ -89,9 +90,37 @@ class DriverCertServiceImplTest { assertNull(saved.getRejectReason(), "新提交不得继承上一条的驳回原因"); } + @Test + @DisplayName("提交人必须记用户ID:记成司机档案ID会让审核页「提交人」显示一串数字") + void submitRecordsUserIdAsSubmitUser() { + when(driverAppService.currentDriverEntity()).thenReturn(driver(PLATE)); + when(transportVehicleService.getById(VEHICLE_ID)).thenReturn(vehicle(VEHICLE_ID, PLATE, null)); + when(certRecordService.selectPendingRecord(any(), anyLong())).thenReturn(null); + + VehicleCertSubmitRequest vehicleRequest = new VehicleCertSubmitRequest(); + vehicleRequest.setId(VEHICLE_ID); + vehicleRequest.setPlateNo(PLATE); + service.submitVehicleCert(vehicleRequest); + + PersonCertSubmitRequest personRequest = new PersonCertSubmitRequest(); + personRequest.setRealName("张三"); + service.submitPersonCert(personRequest); + + ArgumentCaptor captor = ArgumentCaptor.forClass(TransportCertRecord.class); + verify(certRecordService, times(2)).save(captor.capture()); + + for (TransportCertRecord saved : captor.getAllValues()) { + assertEquals(USER_ID, saved.getSubmitUser(), + "提交人必须是用户ID(审核页靠它翻译姓名),不能是司机档案ID"); + assertNotEquals(saved.getBizId(), saved.getSubmitUser(), + "提交人与认证对象主键是两种ID,不应相同"); + } + } + @Test @DisplayName("车辆提交:不修改生效快照指针(提交不影响车辆可用性)") void submitVehicleDoesNotTouchEffectivePointer() { + Long effectiveId = 777L; when(driverAppService.currentDriverEntity()).thenReturn(driver(PLATE)); when(transportVehicleService.getById(VEHICLE_ID)) @@ -454,6 +483,8 @@ class DriverCertServiceImplTest { private Driver driver(String drivingVehicle) { Driver driver = new Driver(); driver.setId(DRIVER_ID); + // 司机档案ID与用户ID是两个不同的ID:提交人字段要的是后者 + driver.setUserId(USER_ID); driver.setDriverName("张三"); driver.setDrivingVehicle(drivingVehicle); return driver;