hl-api-changelog/changelogs-v2/2026-06/15_投保下单选择司机下拉改用轻量options端点-性能-管理后台.md
API Changelog Bot e7467fc9bb docs(前端通知): 投保下单选择司机下拉改调轻量 /options 端点 (PR #3817)
/page 作类型搜索下拉太慢(全表seasonCounts聚合+N+1标签+常驻车反查);
新增 GET /admin/fleet/drivers/options 只返 driverId/name/脱敏phone,默认10上限20,
keyword 姓名模糊/11位手机精确同 /page 语义;前端只换数据源。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:15:41 +08:00

3.6 KiB

【性能·管理后台】投保下单「选择司机」搜索下拉改调轻量端点 GET /admin/fleet/drivers/options别再用 /page

hl-ui保险订单 / 投保下单 → 人员类型=司机 → 「选择司机」搜索下拉)| 服务hl-fleet-service DriverController(新增端点)| 后端已实现 + 部署测试服双实例 + 网关 9443 实测通过 | PR #3817 已合并 dev-v3 | 2026-06-15 背景wx 反馈「选择司机」搜索下拉太慢、需限 10 条。排查发现下拉复用了重型档案分页列表 /admin/fleet/drivers/page,作类型搜索框(每敲字一次请求)开销过大。已新增专用轻量端点,请前端切过去。

⚠️ 关键说明:为什么 /page 慢(一句话)

/admin/fleet/drivers/page 是司机档案分页列表,每次调用都干一堆下拉用不到的活:

  1. 全表 GROUP BY season 聚合seasonCounts,和返回几条无关,每次必跑全表
  2. N+1 标签查询(每个司机单独查一次 tags
  3. 常驻车反查 IN 查 + 每行 activeYears 解析。

下拉只需要「姓名 + 脱敏手机号」,上面全是浪费。光传 pageSize=10 治标不治本(全表 seasonCounts + N+1 标签每次还在跑)。

1. 前端要改什么(只换数据源)

把「选择司机」搜索下拉的数据源/admin/fleet/drivers/page 换成 GET /admin/fleet/drivers/options。投保提交、保险计划下拉等其它逻辑都不变。

2. 新端点契约

内容
方法 + 路径 GET /admin/fleet/drivers/options
入参 keyword(可选):姓名模糊;输入完整 11 位手机号精确匹配(手机号 AES 加密存储、密文等值,不支持手机号模糊/前缀搜——这就是搜索框提示「11 位手机号」的原因)。limit(可选):默认 10,上限 20(超出封顶)。
出参 Result<List<{driverId, name, phone}>>driverId(雪花,字符串,别转 JS Number/ name / phone脱敏 135****5020仅这三字段,不再返 tags / 常驻车 / seasonCounts 等。
网关 /admin/fleet/** 已覆盖,无需改网关。

3. 注意

  • 下拉口径与原 /page 一致:返回全部未软删司机(不按赛季/状态收紧,keyword 同语义。
  • 类型搜索框建议输入时带 keyword 调用(如防抖 300ms;不传 keyword 也会返回最新 10 条作首屏候选。
  • 手机号要精确命中必须输满 11 位(密文等值),输前几位搜不到——属设计限制,请在交互上明确提示已写「搜索司机姓名或11位手机号」即可

curl 实测(测试服网关 9443,真 admin token

# 默认 10 条
curl -k "https://api.test.1814.love:9443/admin/fleet/drivers/options?limit=10" \
  -H "Authorization: Bearer <adminToken>"
# → code=200, data 10 条: [{"driverId":"2065272153565020161","name":"巴特尔","phone":"135****5020"}, ...]

# 姓名模糊
curl -k "https://api.test.1814.love:9443/admin/fleet/drivers/options?keyword=巴" -H "Authorization: Bearer <adminToken>"
# → code=200, 4 条(含 巴特尔/135****5020

# limit 超限封顶 20
curl -k "https://api.test.1814.love:9443/admin/fleet/drivers/options?limit=999" -H "Authorization: Bearer <adminToken>"
# → code=200, 20 条

验收

「投保下单 → 司机 → 选择司机」下拉改调 options键入姓名片段即时返候选≤10 条,秒回,不再卡);输入完整 11 位手机号能精确命中;选中后 driverId 正确带入投保提交。