“我的营养”扫码后立即停扫实施计划

Goal:付款码扫码帧被当前识别弹框接受后立即停止扫码器,并在查询失败时提示后关闭弹框,杜绝同一弹框内重复扫码和重复网络请求。

Architecture:保留单次请求门禁,把停扫动作前移到门禁成功之后、网络请求之前。成功沿用原跳转流程;失败不释放同一弹框的请求状态,提示后直接关闭弹框。

Tech Stack:Android Java、DialogFragment、Retrofit/OkHttp、JUnit 4、Gradle、JDK 8。

文件结构

Task 1:前移停扫动作并关闭失败弹框

  1. 用设备日志确认当前重复请求证据。
  2. 在 tryStartPaycodeRequest() 成功后、网络请求前调用 stopPaycodeScanner()。
  3. 失败回调不再调用 markPaycodeRequestFailed(),提示错误后调用 dismiss()。
  4. 通过定向 git diff 确认未修改人脸识别、扫码模式选择、请求参数和成功跳转。
if (!viewActive || !mIdentitySession.tryStartPaycodeRequest()) {
    return;
}
// 完整付款码帧一旦被接受就立即停扫,避免扫码器重复上报并触发重复请求。
stopPaycodeScanner();
updateIdentityStatus(getString(R.string.identity_paycode_querying));
@Override
public void onFailure(String message) {
    if (!viewActive || !isAdded()) {
        return;
    }
    updateIdentityStatus(message);
    ToastUtils.toast(mContext, message);
    dismiss();
}

Task 2:自动验证与真机验收准备

  1. 使用 JDK 8 运行 IdentityResolutionSessionTest。
  2. 运行 :app:testDebugUnitTest assembleDebug,预期 BUILD SUCCESSFUL。
  3. 检查未新增魔法值,且注释只解释立即停扫的业务原因。
  4. 在提示词工程的 CHANGELOG.md 追加源码实施记录。

真机验收

  1. 点击“我的营养”,持续保持同一二维码在扫码区域。
  2. 客户端日志只出现一次 paycodeUserInfo 请求。
  3. 失败时提示错误并关闭弹框,再次进入后可以重新扫码。
  4. 成功时关闭弹框并进入营养报告页。

本计划不自动安装 APK,不修改后端接口或生产设备数据,也不执行 Git 暂存、提交、推送或分支操作。