✨ 异常上报校验上报人必须是该运单的承运司机

This commit is contained in:
2026-10-07 12:18:49 +08:00
parent 7e84b670b6
commit 75cd448e2d
5 changed files with 219 additions and 0 deletions
@@ -115,4 +115,12 @@ public interface IDriverWaybillService {
*/
boolean isNodePunched(Long waybillId, String nodeCode);
/**
* 断言当前登录司机对该运单有归属:运单车牌须落在司机档案自述绑定的车牌内。
* <p>
* 无司机档案、未绑定车辆、车牌不匹配都会抛异常。管理端与调度员账号没有司机档案,
* 会停在「未找到当前登录司机档案」——这是刻意的,不提供代报。
*/
void assertCurrentDriverOwnsWaybill(Long waybillId);
}
@@ -819,6 +819,13 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService {
.anyMatch(key::equalsIgnoreCase);
}
@Override
public void assertCurrentDriverOwnsWaybill(Long waybillId) {
// 与司机打卡、司机接单共用同一套归属判定,不另立第二套规则
Driver driver = requireCurrentDriver();
loadDriverWaybill(waybillId, currentBoundPlates(driver));
}
/**
* 该运单「未处理完成的异常」所属节点 key(未达终态:已完成 / 已撤销)。
* <p>
@@ -138,6 +138,11 @@ public class ExceptionDisposalServiceImpl
throw new ServiceException("请关联运单后再上报");
}
// 上报人只可能是该运单的承运司机本人,取登录态;请求体里的上报人一律忽略。
// 归属按司机绑定车牌判定,与司机打卡、司机接单同一口径。
// 整单异常同样受这条约束:没有节点不等于没有上报人。
driverWaybillService.assertCurrentDriverOwnsWaybill(disposal.getWaybillId());
// 节点可以为空:全局入口(首页快捷格、打卡页底部按钮)上报的异常不指定环节,
// 它无从定位阻断区间,由门禁按「阻断该运单全部未打卡节点」处理。
// 节点非空时才要求它确属该运单;节点名取自过程配置而非请求体,避免落进一个该节点并不叫的名字。