设计日期:2026-09-16
项目仓库:/Users/liang/AndroidStudioProjects/CusumptionMachine
当前实施分支:cqhw_logo
当前消费机 HTTP 客户端统一使用 5 秒连接、读取和写入超时。扫码成功后的支付请求也复用该全局客户端,因此服务端处理付款码超过 5 秒未返回数据时,会进入“请求超时”失败流程。
业务需要将扫码支付等待接口返回的时间改为可配置项:默认 30 秒,管理员可在“支付设置”中输入 1~100 的整数秒数。该配置只影响当前可达页面中的扫码支付 HTTP 读取超时,不扩大到其他接口、刷卡支付、人脸支付、扫码弹框等待或 MQTT 支付。
本次覆盖以下 5 个当前可达支付页面:
MainActivityQuotaActivityQuotaNoKeyboardActivityFreeActivityFreeNoKeyboardActivity明确排除:
NewQuotaActivityNewQuotaActivity 使用的 PaymentManager采用“扫码支付专用可配置读取超时”方案。
不直接修改 CustomApplication.TIME_OUT,因为该值被全部 Retrofit 请求共用,改为 30 秒会扩大登录、菜品、同步等接口的等待时间。扫码支付请求将在发起时基于现有 OkHttpClient 创建专用客户端,只覆盖 readTimeout;connectTimeout 和 writeTimeout 继续继承全局 5 秒。
未采用自定义请求头配合拦截器动态切换超时的方案,因为隐藏请求头会引入网络层约定,且当前项目使用较旧的 OkHttp/Retrofit 版本,专用客户端方案更直接、可读且便于测试。
新增职责单一的扫码支付超时配置类,集中维护本地偏好键、默认值 30 秒、最小值 1 秒、最大值 100 秒、输入校验、配置读写和异常回退。
配置值使用整数秒保存,不在 Activity、Fragment、弹框或网络代码中重复硬编码边界和默认值。
在 FragmentPayment 对应的“支付设置”页面增加“扫码支付超时时间”设置行,右侧以“30秒”等格式显示当前值,点击后打开数字输入弹框。
FragmentPayment 持久化并刷新当前值。RetrofitClient 增加创建扫码支付专用 API 实例的能力:
CustomApplication.mOkHttpClient.newBuilder() 创建客户端。readTimeout 设置为扫码支付配置值。RetrofitRequest.orderPayment(...) 增加支付类型参数:paymentType == 2 时使用专用 API 实例,其他支付类型继续使用现有全局 API 实例。5 个支付页面传入当前支付类型,避免在页面中复制客户端创建逻辑。
paymentType == 2 发起 HTTP 支付。REQUEST_TIMEOUT 和“请求超时”。app 模块 Debug Java 编译或 Debug APK 构建。git diff --check。NewQuotaActivity 和 PaymentManager 无代码改动。QrcodeScanPop 倒计时残留等其他扫码问题。