ZHCT Android Collaboration

ZhctWeightingTableYoukate 410 型称重台协作指南

识别介质已确认(2026-09-09):本410使用扫码器扫描二维码。SDK字段 rfidData 不代表RFID硬件;二维码身份、物体在位和菜盆重量分别判断。

由同目录 Markdown 自动生成 · 更新日期:2026-09-09

本指南沉淀 ZhctWeightingTableYoukate Android 项目的代码拉取、构建、硬件、接口、测试和维护协作方式,面向后续开发、问题排查、新人交接和 AI 协作。项目技术说明请先阅读 README.md。

型号事实:项目负责人于 2026-09-09 确认,Codeup 仓库 ZhctWeightingTableYoukate 对应 410 型优卡特称重台。源码中仍保留“称重台450型”和 ZhctWeightingTable 等历史标识;协作者不得据此把本仓库重新归类为 450,也不得在没有接口与真机回归的情况下直接改动这些兼容字段。

项目位置

最近核验快照

以下信息只表示 2026-09-09 的只读核验结果,协作者开始任务前必须重新执行后文的状态检查:

项目 已核验值
远端默认分支 HEAD master@2f759f9415b4
默认分支版本 versionName 2.6.0、versionCode 21
梁工本机任务分支 zymy_ongoing@21a5d3d956f0,工作树干净
梁工本机任务分支版本 versionName 2.6.2、versionCode 23

新协作者的完成目标

新协作者读取本页后,应能完成以下闭环:

  1. 从 Codeup 拉取 410 项目代码到统一 Android 目录。
  2. 确认远端、分支、HEAD 和工作树状态,避免在错误副本或错误客户分支上开发。
  3. 使用 JDK 8 完成 Gradle Sync、单元测试和 Debug APK 构建。
  4. 连接指定 410 真机,完成安装、启动及称重、扫码、取餐上传主流程验证。
  5. 将方案、排查、测试和变更记录归档到本协作目录,不向业务仓库复制叙述型过程文档。

快速开始

方式一:使用 Android Studio 拉取

  1. 打开 Android Studio,选择 Get from VCS。
  2. 填写 SSH 或 HTTPS 仓库地址。
  3. 本地目录选择 zhct/zhctproject/android/ZhctWeightingTableYoukate。
  4. 拉取完成后打开项目根目录,等待 Gradle Sync。
  5. 将 Gradle JDK 切换为 JDK 8。
  6. 按 Android Studio 提示补齐 Android SDK Platform 30 和对应 Build Tools。
  7. 先完成 Debug 构建,再连接项目负责人指定的 410 真机运行。

方式二:命令行拉取

在个人 zhct 工作区根目录执行:

mkdir -p zhctproject/android
git clone \
  git@codeup.aliyun.com:60069db88deaa14d9e02b875/zhct/device/restaurant/billedBygram/ZhctWeightingTableYoukate.git \
  zhctproject/android/ZhctWeightingTableYoukate

如果 SSH 权限不可用,在已获得 Codeup HTTPS 权限的前提下使用:

git clone \
  https://codeup.aliyun.com/60069db88deaa14d9e02b875/zhct/device/restaurant/billedBygram/ZhctWeightingTableYoukate.git \
  zhctproject/android/ZhctWeightingTableYoukate

拉取后的固定核验

repo_dir="zhctproject/android/ZhctWeightingTableYoukate"
git -C "$repo_dir" remote -v
git -C "$repo_dir" branch --show-current
git -C "$repo_dir" rev-parse HEAD
git -C "$repo_dir" status --short --branch

核验要求:

项目概述

ZhctWeightingTableYoukate 是运行在 410 型优卡特称重台上的 Android 应用,负责餐盘识别、实时称重、菜品与营养展示、取餐量计算、取餐记录上传、离线补传、云端排菜、设备心跳和异常告警。

典型取餐流程:

  1. 设备启动并检查 API 地址、设备编号和配对码。
  2. 应用通过启动接口获取 MQTT、首页展示模式和取餐限制。
  3. 应用同步当前排菜;无排菜时进入未排菜页。
  4. 410 称体读取餐盘码、重量和稳定状态。
  5. 应用查询餐盘绑定人员、营养信息和推荐结果。
  6. 餐盘离开后计算本次取餐重量。
  7. 取餐记录先写入本地数据库,再由后台任务串行上传。
  8. 网络或服务异常时保留本地记录,满足条件后继续补传。

核心能力

启动与运行主链路

StartActivity

  1. 申请存储、网络、相机等运行权限。
  2. 校验 API_ADDRESS、TERMINAL_NUMBER 和 PAIR_CODE。
  3. 配置缺失时进入 SetActivity。
  4. 调用 /p/api/equipmentStart 获取设备运行配置。
  5. 启动 CustomMqttService。
  6. 调用 /api/weigh/dishes 获取当前设备排菜。
  7. 有排菜进入 HomeActivity,无排菜进入 UnSetDishActivity。

HomeActivity

  1. 通过 YoukateHardwareManager 初始化并监听称体。
  2. 展示打餐前页面和当前菜品。
  3. 接收称重状态、净重和餐盘码。
  4. 识别有效餐盘后查询人员、营养和推荐数据。
  5. 进入打餐中状态并记录开始重量。
  6. 餐盘离开且满足稳定条件后计算取餐重量。
  7. 保存并上传取餐记录;失败时保留本地数据等待补传。
  8. 处理 MQTT 排菜变更、心跳、提示、灯光和告警状态。

关键代码入口

代码位置 职责
app/src/main/java/com/cpt/zhct/weighting/StartActivity.java 启动、权限、配置检查、设备初始化和页面分流
app/src/main/java/com/cpt/zhct/weighting/activity/HomeActivity.java 称重取餐主流程、状态切换、重量和扫码回调
app/src/main/java/com/cpt/zhct/weighting/activity/SetActivity.java API、设备、提示、硬件调试和版本配置
app/src/main/java/com/cpt/zhct/weighting/hardware/YoukateHardwareManager.java PC681 SDK、称重状态、扫码数据和串口生命周期统一入口
app/src/main/java/com/cpt/zhct/weighting/network/CPTNetworkRequest.java Retrofit 接口定义
app/src/main/java/com/cpt/zhct/weighting/network/CPTService.java 网络请求封装
app/src/main/java/com/cpt/zhct/weighting/database/ 本地取餐记录与补传数据
app/src/main/java/com/cpt/zhct/weighting/workmanager/ 心跳和离线取餐记录后台任务
app/src/main/java/com/cpt/zhct/weighting/service/CustomMqttService.java MQTT 连接、订阅和消息处理
app/src/main/java/com/cpt/zhct/weighting/antiescape/ A01/A02/A03 等防逃餐检测与告警策略

主要接口

功能 接口
启动初始化 POST /p/api/equipmentStart
当前设备排菜 POST /api/weigh/dishes
推送设备排菜 POST /api/weigh/pushDishes
餐盘人员与推荐查询 POST /p/api/selectPlate
取餐记录上传 POST /p/api/zhctPushMeal
当前餐次营养 POST /p/api/currentMealNutrition
配对码校验 POST /p/api/matecode
设备心跳 POST /p/api/heartbeat
菜品库与菜品详情 POST /p/api/CaterList、POST /p/api/find
餐段信息 POST /p/api/getRestaurantsInfo
MQTT 处理反馈 POST /p/api/feedback
当前菜品重量 POST /api/weigh/pushWeight
版本检查 POST /p/api/getNewVersion

接口字段、错误码和兼容行为必须以目标分支源码及对应服务端契约为准。本页只用于快速定位,不替代接口评审。

配置与本地数据

本地配置主要通过 MMKV 管理,关键键集中在 Constants.java:

配置 作用
API_ADDRESS 服务端地址;部署时必须使用任务指定环境
TERMINAL_NUMBER 设备编号
PAIR_CODE 配对码
CURRENT_DISH_ID、CURRENT_DISH_NAME 当前排菜信息
SPOON_WEIGHT、SKIP_WEIGHT 勺重和起跳阈值
SINGLE_PICK_WEIGHT_MAX 单次最大取餐重量,支持服务端下发
WEIGHER_INTERVAL_MS 称体采样间隔
STYLE_HOME_DISPLAY 首页余额与营养展示模式
报警、灯光、语音相关开关 控制提示和防逃餐策略

注意:源码保留历史默认接口地址,仅用于旧环境兼容。协作者不得把默认值当作生产环境,也不得把客户地址、配对码、账号或密钥写入 Git 和协作文档。

构建基线

远端 master@2f759f9415b4 于 2026-09-09 核验的基线:

项目 值
工程结构 单模块 :app
Android Gradle Plugin 3.4.1
Gradle Wrapper 5.1.1
Java Java 8
compileSdkVersion 30
minSdkVersion 26
targetSdkVersion 30
ABI arm64-v8a、armeabi-v7a
applicationId com.cpt.zhct.weighting
入口 Activity com.cpt.zhct.weighting.StartActivity
核心硬件依赖 app/libs/DeviceSDK-80.1.10.12.20260129.aar

命令行验证

Jack于2026-09-09要求使用Docker内不同JDK,不在Mac安装或调用任务JDK。JDK8容器构建Android,JDK17容器做SDK审计;Linux Android工具由容器准备。

请先review 整体方案,再按 双JDK执行说明 运行;本任务当前PENDING_REVIEW。

Debug APK 默认位于:

app/build/outputs/apk/debug/app-debug.apk

真机运行与验收

410 的称重、扫码、灯光、告警和串口能力不能用普通手机或模拟器代替。设备地址由现场或项目负责人提供,不在文档中固定某个客户设备 IP。

adb devices
adb connect <410-device-ip>:5555
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n com.cpt.zhct.weighting/.StartActivity

最低真机验收:

协作文档目录

路径 用途
README.md / README.html 项目概述、技术说明和协作入口
COLLABORATION_GUIDE.md / COLLABORATION_GUIDE.html 代码拉取、构建、真机验收和协作交付说明
docs/ 设计、现状、业务流程和故障说明
implementation_plans/ 开发实施计划与验证步骤
change_records/ 每次独立代码或协作文档变更的记录

推荐先阅读:

  1. README.md:了解项目能力、代码结构、配置、接口和硬件边界。
  2. COLLABORATION_GUIDE.md:确认 410 项目边界并完成代码拉取。
  3. docs/2026-08-05-alarm-and-prompt-current-state.md:了解报警和提示现状。
  4. docs/2026-08-11-anti-escape-alarm-comprehensive-plan.md:了解防逃餐总体方案。
  5. implementation_plans/2026-07-14-reliable-pick-meal-upload-phase1.md:了解本地落库和补传机制。
  6. docs/2026-07-31-pc681-receive-cache-race-fix.md:了解 PC681 接收缓存和监听生命周期风险。
  7. change_records/ 中与当前任务最接近的最新记录。

已知风险与停止规则

410 型号与历史代码标识不一致

老构建链路

PC681 SDK 生命周期

现场硬件门禁

Git 与资料边界

协作者交付清单

事实来源与边界