🐛 修复认证记录提交人记成司机档案ID

提交时把 driver.getId()(司机档案ID)当提交人写进了 submit_user,
而该字段要靠 UserCache.getUserRealName(userId) 翻译成姓名,
两处ID都是雪花ID、类型也相同,传错不报任何错,
只在审核页表现为「提交人」显示成一串数字。

改为 driver.getUserId(),并补回归测试锁住(用两个不同的ID常量,
传错必然断言失败)。
This commit is contained in:
2026-10-02 19:58:11 +08:00
parent 2983ef78af
commit bd01122409
2 changed files with 37 additions and 2 deletions
@@ -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 {
* <p>
* 状态必须显式设置为待审:框架在插入时会把空的 {@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) {
@@ -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<TransportCertRecord> 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;