becomer 9bf2d46f84 修人脸识别排队被误判为失败:识别中应继续等待
问题(162 服务器日志实证):
  ERROR 人脸识别被系统驳回,判定签到失败 userId=1043 message=识别中,预计等待4位
  ERROR 人脸识别被系统驳回,判定签到失败 userId=1043 message=识别中,预计等待8位

「识别中,预计等待N位」是服务端识别队列的进度提示,不是失败。
但 evalFaceIdentify 里只要 recognitionProgress 非空就判 Rejected+Settled,
于是提交后的复核立刻判定签到失败,用户看到报错,实际签到可能仍在排队后成功。

根因:
  if res.Progress != "" { res.Rejected = true; res.Settled = true; return }

修复:
1. 新增 faceProgressIsPending / faceProgressIsTerminalFailure 两个判定:
   - 含「识别中/排队/处理中/等待」等 → 进行中,继续等待;
   - 含「未通过/失败/驳回/人脸不匹配/未检测到人脸」等 → 终止失败;
   - 两者皆无的未知文案 → 保守按进行中处理,不误杀(超时后仍走原有
     「未出结果按成功」兜底);
   - 判定失败前先排除排队文案,避免「识别中」被误伤。
2. handler 轮询策略调整:原先固定 4 轮(0/1/2/3 秒)就收手,排队靠后
   必然等不到结果。现在前 4 轮快速取结果,之后每 3 秒一轮,最长再等
   90 秒;期间把最新排队提示透传给前端(queued=true),用户能看见进度。

测试:用日志里的真实文案断言不判驳回;同时保留 FRS.0036 等真实失败
文案必须判驳回;progressCode=2 无文案时仍判驳回;未知文案不误杀。
2026-10-17 21:37:07 +08:00
S
Description
No description provided
6.6 MiB
Languages
Go 58.2%
Vue 35.3%
TypeScript 4.1%
CSS 1.5%
JavaScript 0.6%
Other 0.2%