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;