🐛 修复启用/停用司机与关联账号时清空驾驶车辆绑定

blade_transport_driver.driving_vehicle 标了 FieldStrategy.ALWAYS,更新时忽略
null 直接写。changeStatus 与同步小程序账号的 linkDriverUserId 都是只带少数
几列的 patch,没带这一列就会把司机的车辆绑定清成 NULL,司机端车辆列表随即
变成「暂无绑定车辆」,司机在界面上无法自行恢复。

两处改为按库中原值一并带上(与认证缓存、审核写回两处的既有做法一致),
并补 DriverServiceImplTest 四个用例:撤下修复后两条断言即变红。
This commit is contained in:
2026-10-15 21:02:41 +08:00
parent fe35b39f2c
commit 164ef5f8e2
2 changed files with 208 additions and 0 deletions
@@ -113,6 +113,8 @@ public class DriverServiceImpl extends BaseServiceImpl<DriverMapper, Driver> imp
Driver driver = new Driver();
driver.setId(id);
driver.setStatus(status);
// 只改 status 也必须带上 driving_vehicle 原值,理由见 carryDrivingVehicle
carryDrivingVehicle(id, driver);
return updateById(driver);
}
@@ -446,9 +448,26 @@ public class DriverServiceImpl extends BaseServiceImpl<DriverMapper, Driver> imp
Driver patch = new Driver();
patch.setId(driver.getId());
patch.setUserId(userId);
// 同上:这次只改 user_id,不带 driving_vehicle 原值同样会把车辆绑定清掉
carryDrivingVehicle(driver.getId(), patch);
updateById(patch);
}
/**
* 把库里的 driving_vehicle 原值带进 patch。
* <p>
* 该列标了 {@code FieldStrategy.ALWAYS},更新时忽略 null 直接写:patch 里不带这一列,
* 一次只改别的列的更新就会把司机的车辆绑定清成 NULL,而司机端车辆列表正是按这一列
* 的车牌匹配出来的(清空即「暂无绑定车辆」)。读不到该司机时保持原样,
* 让更新自己去失败。
*/
private void carryDrivingVehicle(Long driverId, Driver patch) {
Driver current = getById(driverId);
if (current != null) {
patch.setDrivingVehicle(current.getDrivingVehicle());
}
}
private Long defaultZero(Long value) {
return value == null ? 0L : value;
}