🐛 运次详情也按项目生效配置判接单需求,与列表同口径

详情取数漏跑生效配置解析,子单只带运单快照:同一趟车在列表里是待接单、
在详情里是运输中,卡片点进去没有接单入口;运次接单与拒单的子单集合也来自
详情,会被判成无需确认接单而直接拒绝。现在详情两条分支都跑同一份解析,
status / requireAccept / 子单 requireAccept 三处与列表一致,且仍只读——
生效配置只写回内存里的行,不落库。
This commit is contained in:
2026-10-17 22:08:35 +08:00
parent 076d04471f
commit 30c5606832
3 changed files with 49 additions and 6 deletions
@@ -124,11 +124,6 @@ public class ManageWaybillServiceImpl implements IManageWaybillService {
private static final String SQL_MAX_REJECT_TIME = "MAX(driver_reject_time)";
/** 待重新派单的排序键:运次内子单创建时刻取最大值(与运次列表同一排序口径) */
private static final String SQL_MAX_CREATE_TIME = "MAX(create_time)";
/** 关键字在子单上匹配的字段:与运次读服务同一份口径,待重新派单列表按它筛 */
private static final String[] REASSIGN_REASSIGN_KEYWORD_COLUMNS = {
"waybill_no", "loading_no", "departure_name", "arrival_name",
"departure_address", "arrival_address", "vehicle_no"
};
private static final DateTimeFormatter DATE_MD = DateTimeFormatter.ofPattern("MM-dd");
private static final DateTimeFormatter DATE_YMD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -336,7 +331,7 @@ public class ManageWaybillServiceImpl implements IManageWaybillService {
if (Func.isEmpty(tripIds)) {
return Set.of();
}
// 被拒子单只有几十行量级:一次取回后在服务层换算运次键,比在库层按分组键表达式反查更省事
// 被拒子单一次取回后在服务层换算运次键
return waybillService.list(pendingReassignQuery().select(Waybill::getId, Waybill::getLoadingNo))
.stream()
.map(this::tripKeyOf)
@@ -162,12 +162,15 @@ public class TripQueryServiceImpl implements ITripQueryService {
// 子单全部被拒单(或已释放)的配载运次对司机不可见,与列表口径一致
throw new ServiceException("运次不存在或无权操作");
}
// 详情与列表同一份分档口径:接单需求也按项目生效中的配置判,否则列表说待接单、详情与接收入口说无需接单
applyLiveProcessConfig(children);
return loadingTrip(loading, children, true);
}
Waybill waybill = visibleWaybill(id, condition);
if (waybill == null) {
throw new ServiceException("运次不存在或无权操作");
}
applyLiveProcessConfig(List.of(waybill));
return waybillTrip(waybill, true);
}