ZHCT Android Collaboration

ZhctWeightingTableYoukate

识别介质确认(2026-09-09):本410项目使用扫码器扫描二维码;SDK字段 rfidData / rfidLen 承载扫码结果,不代表RFID硬件。菜盆秤用于取餐计量。

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

项目型号确认:项目负责人于 2026-09-09 确认,本仓库对应 410 型优卡特称重台。代码拉取、分支核验、构建和真机验收请阅读 COLLABORATION_GUIDE.md;浏览版见 COLLABORATION_GUIDE.html。

项目概述

ZhctWeightingTableYoukate 是智慧餐厅称重台 Android 应用,用于在取餐场景中实时识别餐盘、读取称重数据、展示当前菜品和营养建议,并把取餐记录上传到服务端。

典型流程:

  1. 用餐人员将餐盘放到识别区。
  2. 扫码器读取餐盘/码牌上的二维码,秤体读取菜盆载荷重量。
  3. 应用根据餐盘码查询绑定人员和营养推荐。
  4. 用餐人员取餐后移走餐盘。
  5. 应用计算本次取餐重量,先把完整记录写入本地库,再由后台任务上传。

当前工程是单模块 Android 项目,包名为 com.cpt.zhct.weighting,主入口是 StartActivity。

核心能力

启动流程

StartActivity

启动页负责应用初始化和页面分流:

  1. 申请运行权限。
  2. 校验 API_ADDRESS、TERMINAL_NUMBER、PAIR_CODE。
  3. 配置缺失时进入 SetActivity。
  4. 调用 /p/api/equipmentStart 获取 MQTT、首页展示模式、单次最大取餐重量等配置。
  5. 启动 CustomMqttService。
  6. 调用 /api/weigh/dishes 同步当前排菜。
  7. 有排菜进入 HomeActivity,无排菜进入 UnSetDishActivity。

HomeActivity

首页负责核心取餐链路:

  1. 初始化称体扫码秤。
  2. 切换到“打餐前”页面。
  3. 拉取或读取当前菜品信息。
  4. 监听称重和扫码数据。
  5. 识别餐盘后切换到“打餐中”页面,并查询取餐人。
  6. 餐盘离开后计算取餐重量。
  7. 上传取餐记录,失败时写入本地库。
  8. 处理 MQTT 云端排菜消息和首页展示刷新。

主要代码结构

app/src/main/java/com/cpt/zhct/weighting/
├── StartActivity.java                 # 启动初始化和页面分流
├── activity/                          # 首页、设置、排菜、未排菜、调试页面
├── application/CustomCptApplication.java
│                                      # 全局初始化:MMKV、数据库、网络、日志、RUM、定时任务、崩溃恢复
├── database/                          # 本地取餐记录缓存和补传 DAO
├── entity/                            # 菜品、取餐记录、MQTT 消息等实体
├── fragment/                          # 首页打餐前/打餐中展示 Fragment
├── hardware/                          # 称体扫码秤、灯带、称重工具封装
├── mqtt/                              # 阿里云 MQTT 连接、订阅、消息分发
├── network/                           # Retrofit 接口、请求、响应和网络管理
├── receiver/                          # 开机广播和闹钟广播
├── service/CustomMqttService.java     # MQTT 后台服务
├── utils/                             # 配置、日志、上传、声音、崩溃、MMKV 等工具类
└── workmanager/                       # 心跳和离线取餐记录补传任务

关键配置

本地配置主要通过 MmkvUtils 读写,常量集中在 Constants:

配置项 说明
API_ADDRESS 服务端接口地址
TERMINAL_NUMBER 设备编号
PAIR_CODE 设备配对码
CURRENT_DISH_ID 当前已排菜品 UUID
CURRENT_DISH_NAME 当前菜品名称
SPOON_WEIGHT 勺重,默认 20g
SKIP_WEIGHT 起跳值,默认 5g
DISH_LOW_REMINDER_VALUE 菜品余量提醒值,默认 2000g
SINGLE_PICK_WEIGHT_MAX 单次取餐最大重量,服务端下发,默认 5000g
SETTING_VOICE_SWITCH 语音开关
SETTING_LIGHT_SWITCH 灯带开关
SETTING_SUGGEST_SWITCH 菜品取用建议开关
SETTING_SUGGEST_SWITCH_STATUS 菜品取用建议展示状态
STYLE_HOME_DISPLAY 首页展示模式,1 汇总余额,2 纯营养,3 现金余额+补贴余额
WEIGHER_INTERVAL_MS 称体采样间隔,默认 100ms,支持 50/100/150/200/250ms

默认接口地址为 http://zlssdev.cptshop.net.cn。实际部署时通常在设置页写入正式地址、设备编号和配对码。

服务端接口

接口定义集中在 CPTNetworkRequest,主要接口包括:

接口 用途
POST /p/api/equipmentStart 启动初始化,返回 MQTT、展示模式、取餐限制等配置
POST /p/api/getMeal 获取排菜用菜品列表
POST /p/api/find 获取菜品详情
POST /p/api/zhctPushMeal 上传取餐记录
POST /p/api/selectPlate 根据餐盘码查询取餐人、营养和推荐
POST /p/api/currentMealNutrition 获取取餐人当前餐次营养详情
POST /p/api/matecode 根据配对码获取设备配对信息
POST /p/api/heartbeat 设备心跳
POST /p/api/CaterList 获取菜品库列表
POST /p/api/addRecipe 添加菜品到菜谱库
POST /p/api/getRestaurantsInfo 获取当前餐段时间
POST /p/api/delRecipe 从菜谱库删除菜品
POST /p/api/feedback MQTT 消息处理反馈
POST /api/weigh/pushDishes 推送设备排菜结果
POST /api/weigh/dishes 获取当前设备排菜信息
POST /api/weigh/pushWeight 轮询上传当前菜品重量
POST /p/api/getNewVersion 获取版本更新信息

硬件说明

当前项目面向称体 PC681 扫码秤:

注意:当前 SDK 的 release() 路径存在 native 字段契约不一致风险,YoukateHardwareManager.release() 已避开直接调用 scaleManager.release(),改为停止监听、关闭输入输出流并清理 SDK 状态。不要在业务代码里绕过封装直接调用 SDK release。

构建环境

工程使用较旧的 Android 构建栈。下表版本信息已按 2026-09-09 只读核验的远端 master@2f759f9415b4 更新:

项 当前值
Gradle Wrapper 5.1.1
Android Gradle Plugin 3.4.1
compileSdkVersion 30
minSdkVersion 26
targetSdkVersion 30
Java compatibility 1.8
applicationId com.cpt.zhct.weighting
versionName 2.6.0
versionCode 21

本机验证建议使用 JDK 8:

JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash ./gradlew :app:assembleDebug

如果 ./gradlew 有执行权限,也可以运行:

JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./gradlew :app:assembleDebug

当前 app/build.gradle 未声明自定义 signingConfigs,debug 包使用 Android Gradle Plugin 默认 debug 签名。

运行与调试

  1. 使用 Android Studio 打开项目根目录。
  2. 确认本机 JDK 切到 1.8。
  3. 连接目标硬件设备。
  4. 构建并安装 debug 包。
  5. 首次启动进入设置页,配置接口地址、设备编号、配对码。
  6. 确认服务端有当前设备排菜信息。
  7. 回到首页后放置餐盘,观察扫码、人员信息、称重、上传日志。

调试入口:

日志与后台任务

常见注意事项