🐛 修复启用/停用司机与关联账号时清空驾驶车辆绑定
blade_transport_driver.driving_vehicle 标了 FieldStrategy.ALWAYS,更新时忽略 null 直接写。changeStatus 与同步小程序账号的 linkDriverUserId 都是只带少数 几列的 patch,没带这一列就会把司机的车辆绑定清成 NULL,司机端车辆列表随即 变成「暂无绑定车辆」,司机在界面上无法自行恢复。 两处改为按库中原值一并带上(与认证缓存、审核写回两处的既有做法一致), 并补 DriverServiceImplTest 四个用例:撤下修复后两条断言即变红。
This commit is contained in:
+19
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user