# 化学品智能管理终端 App 功能表格导航

## 1. 文档说明

本文将当前仓库按 **功能 -> 页面 -> 接口 -> 模型** 的方式整理为表格，适合：

- 新开发接手时快速定位代码
- 功能评审时快速查看页面与接口对应关系
- 排查问题时按业务链路反查源码

项目根定位：**实验室化学品智能管理终端（壁挂 Android 一体机）**。

---

## 2. 项目主入口总表

| 功能域 | 入口页面/类 | 作用说明 | 关键文件 |
|---|---|---|---|
| 应用初始化 | `ChemicalApp` | 初始化全局状态、蓝牙、X5、日志、ANR 恢复 | `app/src/main/java/xn/hxp/app/ChemicalApp.kt:32` |
| 启动与设备绑定 | `StartActivity` | 自动授权、读取本地配置、校验设备绑定实验室、跳主页 | `app/src/main/java/xn/hxp/ui/StartActivity.java:34` |
| 主工作台 | `MainActivity` | 主菜单入口、柜体轮播、登录分流、心跳、自动登出 | `app/src/main/java/xn/hxp/ui/MainActivity.java:87` |
| 设置 | `SettingActivity` | 服务地址、管理员密码、蓝牙秤、相机、系统控制 | `app/src/main/java/xn/hxp/ui/SettingActivity.java:24` |

---

## 3. 功能总览表

| 功能模块 | 主页面 | 子页面/辅助类 | 主要接口 | 关键模型 |
|---|---|---|---|---|
| 登录认证 | `SwipeActivity` / `ScanLoginActivity` / `FaceLoginActivity` / `FacialCardActivity` | `AuthenticationDialog` | `cardNum` `userCardValidation` `getScanCode` `faceNewCompare` | `UserData` `UserValidationBean` `ConfigBean` |
| 双人认证 | `TwoVerificationActivity` | `TwoPersonActivity` `SwipeCodeTwoActivity` `ScanCodeTwoActivity` `DoublePeopleDialog` | `useCardVerify` `aioScanLogin` `checkUserFaceByPic` | `UserValidationBean` `DoubleDialogBean` |
| 新增入库 | `PlanAddActivity` | `PlanAddActivityHelp` `AddActivity` `AddActivityHelp` `UnlockActivity` `SaveListActivity` | `getRelList` `getCabinetListBySub` `scanCodeChemical` `certitude` `getControlConfigs` `addStockCheck` `addStock` | `HxpChemicalVo` `InventoryItemBean` `StockModeBean` `StockModel` `ChemicalInfoBean` |
| 已申领未入库 | `AlreadyActivity` | `AlreadyAdapter` | `getHxpStockWait` | `AlreadyBean` `PageHxpStockBean` |
| 领用 | `UseActivity` | `UsageLabelDialog` `WeighDialog` | `getStockList` `getByRfid` `addUseRecord` `lockOperate` `getLocks` `outTimeWarn` | `UseBean` `UsePostDataBean` `ChemistryBean` `LockVoListBean` |
| 归还/空瓶/废弃回流 | `ChemicalsAlsoActivity` | `DiscardDialog` `EmptiesDialog` `CabinetOpenDialog` `AirBottleDialog` `AirBottleNewDialog` | `useList` `backDetail` `giveBack` `returnGiveBack` `updateRfid` `lockOperate` `getLocks` | `ReturningChemicalsBean` `ReturnDetailsBean` `ReturnGiveBackBean` `GiveBackBean` |
| 废弃出库 | `WasteChemicalsActivity` | `DiscardDialog` `StorageDialog` | `stockDetailsList` `discardDetail` `giveBack` `outTimeWarn` `lockOperate` | `WasteChemicalsBean` `ReturnDetailsBean` `GiveBackBean` `TimeWarBean` |
| 查询 | `InquiryActivity` | `QueryOneFragment` `QueryTwoFragment` `PromptDialog` `ScanCodeDialog` | `getCabinetList` `indexDetailbyRfid` `getStockDetailsByCode` `lockOperate` `getLocks` | `RuleBean` `UseNoBean` `UseNoTwoBean` `LockVoListBean` |
| 标签/RFID 管理 | `ChemicalLabelingActivity` | `AirBottleDialog` `AirBottleNewDialog` | `tagDetailsList` `getDetailsById` `updateRfid` `lockOperate` | `QueryTwoBean` `ReturnDetailsBean` |
| 电子台账 | `LedgerActivity` | `UseLedgerFragment` `InventoryIedgerFragment` | `useRecords` `stockLedger` `useReturnList` | `UseLedBean` `InventoryListBean` |
| 预警事件 | `WarningEventsActivity` | `ProcessedActivity` | `warningNoticeList` `warningNoticeDetail` `handleMessage` `warningNoticeCount` | `EarlyWarningBean` `ProcessedBean` |
| MSDS | `MsdsActivity` | `MsdsScreenActivity` | `getMsdsDetails` `msdsDetails` | `MsdsBean` `MsdsListBean` |
| 设备运维 | `SettingActivity` / `MainActivity` / `StartActivity` | `Tool` `HttpTool` | `iot/aio/report` `terminal/machine/heartbeat` `onepcApkUpdate` | `AppInfo` `LabInfo` |

---

## 4. 入口与全局初始化表

### 4.1 应用启动链路

| 环节 | 页面/类 | 主要动作 | 关键接口/工具 | 关键数据 |
|---|---|---|---|---|
| Application 初始化 | `ChemicalApp` | 初始化全局状态、蓝牙、X5、日志、ANR 恢复 | `SppTool.init()` `BleManager` `QbSdk` | `userData` `subjectId` `confs` `labInfo` |
| 启动页 | `StartActivity` | 长按进设置、授权、恢复本地配置 | `Tool.cmd()` `SharedPreferencesHelper.getUrlBase()` | `SettingsBean` |
| 设备绑定实验室 | `StartActivity.initView()` | 调设备上报接口，获取实验室信息 | `HttpTool.getCheck()` | `LabInfo` |
| 主菜单加载 | `MainActivity` | 拉基础配置、柜体轮播、登录态展示 | `ApiRepository.basicConfig()` `ApiRepository.getCabinetBySubId()` | `ConfigBean` `RuleBean` |
| 心跳与在线 | `MainActivity` | 每 20 秒上报设备心跳 | `HttpTool.heartbeat()` | 设备号/IP/前台状态 |

### 4.2 主菜单功能映射

| 主页入口控件 | 跳转页面 | 功能含义 | 关键代码 |
|---|---|---|---|
| `addChemicals` | `PlanAddActivity` / `AlreadyActivity` | 入库/待入库管理 | `MainActivity.java:465-480` `MainActivity.java:645-684` |
| `reDis` | `WasteChemicalsActivity` | 废弃出库 | `MainActivity.java:482-491` |
| `reInq` | `InquiryActivity` | 查询 | `MainActivity.java:493-501` |
| `reCla` | `UseActivity` | 领用 | `MainActivity.java:504-513` |
| `reRet` | `ChemicalsAlsoActivity` | 归还/空瓶/废弃回流 | `MainActivity.java:515-524` |
| `rlLedger` | `LedgerActivity` | 电子台账 | `MainActivity.java:526-535` |
| `reLedger` | `ChemicalLabelingActivity` | 标签/RFID 管理 | `MainActivity.java:537-546` |
| `rlWarning` | `WarningEventsActivity` | 预警事件 | `MainActivity.java:548-557` |
| `rlDem` | `MsdsActivity` | MSDS | `MainActivity.java:559-564` |

---

## 5. 登录认证功能表

### 5.1 登录方式表

| 功能 | 页面 | 触发来源 | 主要接口 | 关键模型 | 备注 |
|---|---|---|---|---|---|
| 刷卡登录 | `SwipeActivity` | 主页登录分流 | `cardNum` `userCardValidation` | `UserData` `UserValidationBean` | 通过卡号获取 token，再校验实验室权限 |
| 扫码登录 | `ScanLoginActivity` | 主页登录分流 | `getScanCode` / 扫码认证相关 | `UserData` | 与二维码/微信码联动 |
| 人脸登录 | `FaceLoginActivity` | 主页登录分流 | `faceNewCompare` | `UserData` | 摄像头拍照比对 |
| 人脸+刷卡 | `FacialCardActivity` | 配置 `loginType` 包含 4 | 组合认证 | `UserData` | 硬件一体机组合登录 |

### 5.2 登录方式配置表

| 配置字段 | 含义 | 使用位置 |
|---|---|---|
| `ConfigBean.loginType` | 登录方式配置 | `MainActivity.java:325-384` `InquiryActivity.java:623-678` |
| `1` | 人脸 | `basicConfLog()` 分流 |
| `2` | 刷卡 | `basicConfLog()` 分流 |
| `3` | 扫码 | `basicConfLog()` 分流 |
| `4` | 人脸+刷卡组合 | `FacialCardActivity` |

### 5.3 登录后角色判定表

| 角色字段 | 说明 | 主要用途 |
|---|---|---|
| `schoolLevelAdmin` | 校级管理员 | 高权限管理/管控类操作 |
| `collegeAdmin` | 院级管理员 | 高权限管理/管控类操作 |
| `adminUser` | 实验室负责人 | 登录、双人认证、柜门操作 |
| `safeUser` | 安全负责人 | 登录、双人认证、柜门操作 |
| `cabinetAdmin` | 柜锁管理员 | 柜门开锁、认证 |
| `belongUser` | 化学品归属人 | 领用/归还相关合法身份 |
| `toipcUser` | 课题组成员 | 领用/归还相关合法身份 |
| `apply` | 实验室准入 | 登录放行 |
| `white` | 白名单 | 登录放行 |

来源：`app/src/main/java/com/rc/httpcore/bean/UserValidationBean.kt:4`

---

## 6. 双人认证功能表

### 6.1 双人认证场景表

| `mTag` | 业务场景 | 调用方页面 | 备注 |
|---|---|---|---|
| `0` | 新增入库 | `PlanAddActivity` / `UnlockActivity` 一线流程 | 对入库相关高风险操作做二次授权 |
| `1` | 归还/废弃/空瓶/标签管理 | `ChemicalsAlsoActivity` `WasteChemicalsActivity` `ChemicalLabelingActivity` | 与开门、回流处理相关 |
| `2` | 待入库 | 待入库相关 | 用于待入库确认场景 |
| `3` | 领用 | `UseActivity` | 领用前双人授权 |

来源：`TwoVerificationActivity.kt:83`

### 6.2 认证方式表

| 配置字段 | 说明 | 页面使用点 |
|---|---|---|
| `ConfigBean.verifyType` | 双人认证方式配置 | `UseActivity` `ChemicalsAlsoActivity` `WasteChemicalsActivity` `ChemicalLabelingActivity` |
| `1` | 人脸 | 调 `checkUserFaceByPic` |
| `2` | 刷卡 | 调 `useCardVerify` |
| `3` | 扫码 | 调 `aioScanLogin` |
| `1,2` / `1,3` / `2,3` / 多组合 | 组合认证 | 统一落到 `TwoVerificationActivity` |

### 6.3 双人认证接口表

| 接口 | 方法 | 用途 | 关键参数 |
|---|---|---|---|
| `chemical/aio/verify/useCardVerify` | `useCardVerify` | 双人刷卡认证 | `cardNum` `subId` `doorId` |
| `chemical/aio/verify/aioScanLogin` | `aioScanLogin` | 双人扫码认证 | `subId` `doorId` `code` |
| `chemical/aio/verify/checkUserFaceByPic` | `checkUserFaceByPic` | 双人人脸认证 | `subId` `doorId` `stockId` `waitId` |

### 6.4 双人认证结果承接表

| 动作 | 存储位置 | 后续消费页面 |
|---|---|---|
| 缓存两位认证人 | `SharedPreferencesHelper.saveList()` | `UseActivity` `ChemicalsAlsoActivity` `WasteChemicalsActivity` `InquiryActivity` 等 |
| 打开认证结果对话框 | `DoublePeopleDialog` | 认证成功后的过渡页 |
| 将双人信息写入业务请求 | `oneUserId/twoUserId` 或 `backOneUser/backTwoUser` | 开锁、归还、废弃、入库提交 |

---

## 7. 入库功能表

### 7.1 入库页面表

| 功能子项 | 页面/类 | 作用 | 关键依赖 |
|---|---|---|---|
| 计划入库工作台 | `PlanAddActivity` | 展示当前柜层待入库清单，发起最终提交 | `PlanAddActivityHelp` `LockerAdapter` `Room DAO` |
| 计划入库辅助 | `PlanAddActivityHelp` | 拉实验室/柜体信息、扫码录入、保存入库 | `HttpTool` `ApiRepository` `PortScanHelper` |
| 手动录入 | `AddActivity` | 录入化学品基础信息与归属信息 | `AddActivityHelp` |
| 手动录入辅助 | `AddActivityHelp` | 化学品搜索、类别/归属人/课题组选择、称重与保存 | `ApiRepository` `BluetoothWeighDialog` `PrintLabelDialog` |
| 入库开锁 | `UnlockActivity` | 按待入库清单逐个柜门开锁 | `UnlockActivityHelp` `UnlockAdapter` |
| 入库结果页 | `SaveListActivity` | 显示已保存完成结果 | 结果展示 |
| 已申领未入库 | `AlreadyActivity` | 处理已申领未入库单据 | `AlreadyAdapter` |

### 7.2 入库接口表

| 接口 | 方法 | 用途 | 调用位置 |
|---|---|---|---|
| `laboratory/subRelInfo/getRelList` | `getRelList` | 获取实验室基础信息 | `PlanAddActivityHelp.getLabInfo()` |
| `chemical/aio/getCabinetListBySub` | `HttpTool.getCabinetList()` | 获取柜体/柜门详情 | `PlanAddActivityHelp.getCabinetList()` |
| `chemical/stockWait/scanCodeChemical` | `scanCodeChemical` | 扫码获取化学品信息 | `PlanAddActivityHelp.chemicalSearchByCode()` |
| `chemical/aio/controlConfig` | `getControlConfigs` | 获取化学品控制配置 | `AddActivityHelp.save()` |
| `chemical/aio/certitude` | `certitude` | 化学品确认/补全 | `AddActivityHelp.save()` |
| `chemical/aio/addStockCheck` | `addStockCheck` | 称重/入库合法性校验 | `BluetoothWeighDialog` |
| `chemical/aio/addStock` | `addChemical` / `stockWaitAdd` | 最终提交入库 | `PlanAddActivityHelp.save()` |
| `chemical/aio/getHxpStockWait` | `HttpTool.getHxpStockWait()` | 获取已申领未入库列表 | `MainActivity.getHxpStockWait()` |

### 7.3 入库核心模型表

| 模型 | 作用 | 关键字段 |
|---|---|---|
| `HxpChemicalVo` | 入库主数据模型 | `chemicalId` `chemicalLevel` `belongId` `cabinetId` `doorId` `joinType` `stockType` |
| `InventoryItemBean` | 本地待入库 item | 柜体/柜门/层/数量/绑定的化学品 |
| `StockModel` | 校验用入参 | 称重校验相关 |
| `StockModeBean` | 提交入库入参 | 待入库整体提交 |
| `ChemicalInfoBean` | 实验室基础信息 | 实验室维度数据 |
| `ChemicalTypeBean` | 化学品类别字典 | `label` `value` |
| `BelongingPersonBean` | 归属人 | `userId` `userName` `account` |
| `TopicDataBean` | 课题组 | `topicId` `topicName` |

### 7.4 入库现场动作表

| 动作 | 页面/类 | 说明 |
|---|---|---|
| 柜层选择 | `LockerFragment` + Room DAO | 选择最终存储柜层 |
| 手动录入 | `AddActivity` | 普通人工录入 |
| 扫码录入 | `PlanAddActivityHelp.startScanEventListener()` | 兼容多种二维码/条码 |
| 标签打印确认 | `PrintLabelDialog` | 录入后是否打印标签 |
| 蓝牙称重 | `BluetoothWeighDialog` | 入库前称重校验 |
| 智能柜开门 | `UnlockActivity` | 提交前先开门 |

---

## 8. 领用功能表

### 8.1 领用页面表

| 功能子项 | 页面/类 | 说明 |
|---|---|---|
| 领用工作台 | `UseActivity` | 柜门选择、库存查询、开门、扫描、称重、提交 |
| 领用弹窗 | `UsageLabelDialog` | 开门后在弹窗中刷标签/RFID、移除条目、再次开门 |
| 称重弹窗 | `WeighDialog` / 页面内蓝牙逻辑 | 领用称重或手动录入 |

### 8.2 领用接口表

| 接口 | 方法 | 用途 | 调用位置 |
|---|---|---|---|
| `chemical/aio/stockList` | `getStockList` | 查询可领用库存列表 | `UseActivity.getStockList()` |
| `chemical/aio/byRfid` | `getByRfid` | 根据 RFID 查询领用对象 | `UseActivity.getByRfid()` |
| `chemical/aio/addUserecord` | `addUseRecord` | 提交领用记录 | `UseActivity.putDataUse()` |
| `chemical/aio/getCabinetList` | `getCabinetList` | 获取柜门列表 | `UseActivity.getCabinet()` |
| `chemical/aio/lockOperate` | `lockOperate` | 开锁 | `UseActivity.openLock()` |
| `chemical/aio/getLockStatus` | `getLocks` | 轮询锁状态 | `UseActivity.getLocks()` |
| `chemical/aio/outTimeWarn` | `outTimeWarn` | 异常退出上报 | `UseActivity.outTimeWarnData()` |

### 8.3 领用模型表

| 模型 | 用途 | 关键字段 |
|---|---|---|
| `UseBean` | RFID 领用详情 | 领用前化学品信息 |
| `ChemistryBean` | 单条领用记录 | 数量、出库方式、标签等 |
| `UsePostDataBean` | 领用提交体 | `userecordModelList` |
| `LockVoListBean` | 柜锁信息 | `lockNum` `unlockingMethod` `isOk` |
| `RuleBean` | 柜体/柜门容器 | `cabinetDoorVoList` |
| `TimeWarBean` | 异常上报 | 超时/异常柜门记录 |

### 8.4 领用现场流程表

| 步骤 | 页面动作 | 关键点 |
|---|---|---|
| 选择柜体 | 左侧柜体列表 | `CabinetDoorAdapter` |
| 选择柜门 | 右侧柜门列表 | `CabinetDoorRighAdapter` |
| 判断双人认证 | `verify == true` | 走 `TwoVerificationActivity` |
| 判断智能锁 | `unlockingMethod == 2` | 先 `openLock()` |
| 扫描化学品 | `onCardInContent()` | 查 `getByRfid` |
| 称重/录入 | `weighData()` | 蓝牙秤或手动 |
| 提交 | `putDataUse()` | 调 `addUseRecord` |
| 异常离开 | `outTimeWarnData()` | 上报开门未完成场景 |

---

## 9. 归还/空瓶/废弃回流功能表

### 9.1 页面表

| 功能子项 | 页面/类 | 说明 |
|---|---|---|
| 归还总工作台 | `ChemicalsAlsoActivity` | 待归还查询、详情展示、归还、空瓶、废弃、换标、补打 |
| 废弃原因录入 | `DiscardDialog` | 录入废弃原因 |
| 空瓶确认 | `EmptiesDialog` | 空瓶处理 |
| RFID 更换/打印 | `AirBottleDialog` `AirBottleNewDialog` | 换标和补打 |
| 柜门已开提示 | `CabinetOpenDialog` | 开门后的引导交互 |

### 9.2 接口表

| 接口 | 方法 | 用途 | 调用位置 |
|---|---|---|---|
| `chemical/aio/useList` | `useList` | 查询待归还列表 | `ChemicalsAlsoActivity.useList()` |
| `chemical/aio/backDetail` | `backDetail` | 获取归还详情 | 扫描/点击进入详情 |
| `chemical/aio/giveBack` | `giveBack` | 归还/空瓶/废弃提交 | `ChemicalsAlsoActivity` |
| `chemical/aio/giveBack` | `returnGiveBack` | 返回更丰富归还结果 | `ChemicalsAlsoActivity` |
| `chemical/aio/updateRfid` | `updateRfid` | 更换 RFID | `ChemicalsAlsoActivity.updateRfid()` |
| `chemical/aio/lockOperate` | `lockOperate` | 柜门开锁 | `ChemicalsAlsoActivity.openLock()` |
| `chemical/aio/getLockStatus` | `getLocks` | 轮询锁状态 | `ChemicalsAlsoActivity.getLocks()` |

### 9.3 模型表

| 模型 | 用途 | 关键字段 |
|---|---|---|
| `ReturningChemicalsBean` | 待归还列表 | 分页记录 |
| `ReturnDetailsBean` | 归还详情 | `chemicalLevel` `verify` `cabinetLockVoList` `rfidCode` |
| `GiveBackBean` | 归还/废弃提交体 | `returnType` `useStatus` `weigh` `disuseReason` `backOneUser/backTwoUser` |
| `ReturnGiveBackBean` | 归还结果 | 结果回显 |

### 9.4 状态字段表

| 字段 | 取值 | 含义 | 来源 |
|---|---|---|---|
| `returnType` | `1` / `2` | 归还方式：称重 / 录入 | `GiveBackBean.kt:20` |
| `outType` | `1` / `2` | 领用方式：称重 / 录入 | `GiveBackBean.kt:13` |
| `useStatus` | `0` | 归还 | 代码使用线索 |
| `useStatus` | `3` | 空瓶/废弃出库 | `GiveBackBean.kt:23` |
| `useStatus` | `4` | 作废/归还相关状态流转 | 页面使用线索 |

---

## 10. 废弃功能表

### 10.1 页面表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| 废弃列表与处理 | `WasteChemicalsActivity` | 查询可废弃对象、扫描进入详情、录入原因、提交废弃 |
| 废弃原因弹窗 | `DiscardDialog` | 录入废弃原因 |
| 柜位选择弹窗 | `StorageDialog` | 柜体/柜门过滤 |

### 10.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `chemical/aio/stockDetailsList` | `stockDetailsList` | 查询可废弃化学品列表 |
| `chemical/aio/discardDetail` | `discardDetail` | 获取废弃详情 |
| `chemical/aio/giveBack` | `giveBack` | 提交废弃出库 |
| `chemical/aio/lockOperate` | `lockOperate` | 柜门开锁 |
| `chemical/aio/outTimeWarn` | `outTimeWarn` | 开门后异常退出上报 |

### 10.3 模型表

| 模型 | 用途 |
|---|---|
| `WasteChemicalsBean` | 废弃列表分页容器 |
| `ReturnDetailsBean` | 废弃详情承接 |
| `GiveBackBean` | 废弃提交体 |
| `TimeWarBean` | 异常上报体 |

---

## 11. 查询功能表

### 11.1 页面表

| 功能子项 | 页面/类 | 说明 |
|---|---|---|
| 查询主页面 | `InquiryActivity` | 柜体柜门选择、扫码查询、开门 |
| 查询页签一 | `QueryOneFragment` | 当前柜门库存列表 |
| 查询页签二 | `QueryTwoFragment` | 标签/库存详情 |
| 详情弹窗 | `PromptDialog` `ScanCodeDialog` | 根据登录态显示不同详情 |

### 11.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `chemical/aio/getCabinetList` | `getCabinetList` | 查询柜体柜门 |
| `chemical/aio/indexDetailbyRfid` | `indexDetailbyRfid` | 未登录态按 RFID 查询 |
| `chemical/aio/getStockDetailsByCode` | `getStockDetailsByCode` | 登录态按 RFID/标签查询 |
| `chemical/aio/lockOperate` | `lockOperate` | 柜门开锁 |
| `chemical/aio/getLockStatus` | `getLocks` | 锁状态轮询 |

### 11.3 模型表

| 模型 | 用途 |
|---|---|
| `RuleBean` | 柜体柜门容器 |
| `CabinetDoorVo` | 柜门 item |
| `UseNoBean` | 未登录态查询结果 |
| `UseNoTwoBean` | 登录态查询结果 |
| `LockVoListBean` | 柜锁明细 |

---

## 12. 标签/RFID 管理功能表

### 12.1 页面表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| 标签列表与详情 | `ChemicalLabelingActivity` | 标签查询、详情查看、补打、换 RFID、定位开柜 |
| RFID 输入/更换 | `AirBottleDialog` `AirBottleNewDialog` | 补写/改写 RFID |

### 12.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `chemical/aio/tagDetailsList` | `tagDetailsList` | 标签列表查询 |
| `chemical/aio/getDetailsById` | `getDetailsById` | 标签详情 |
| `chemical/aio/updateRfid` | `updateRfid` | 更新 RFID |
| `chemical/aio/lockOperate` | `lockOperate` | 打开柜门定位 |
| `chemical/aio/getLockStatus` | `getLocks` | 锁状态轮询 |

### 12.3 模型表

| 模型 | 用途 |
|---|---|
| `QueryTwoBean` | 标签列表分页 |
| `ReturnDetailsBean` | 标签详情回显 |
| `LockVoListBean` | 柜锁信息 |

---

## 13. 电子台账功能表

### 13.1 页面表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| 电子台账容器 | `LedgerActivity` | 切换使用台账/库存台账 |
| 使用台账 | `UseLedgerFragment` | 按柜门/类别/级别/时间查询使用记录 |
| 库存台账 | `InventoryIedgerFragment` | 按柜门/类别/级别/出库方式查询库存记录 |
| 待归还清单 | `ChecklistsActivity` | 使用台账中的待归还入口 |

### 13.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `chemical/aio/useRecords` | `useRecords` | 使用台账查询 |
| `chemical/aio/stockLedger` | `stockLedger` | 库存台账查询 |
| `chemical/aio/useReturnList` | `useReturnList` | 待归还清单 |
| `system/dict/item/option` | `getOptions` | 化学品类别字典 |

### 13.3 模型表

| 模型 | 用途 |
|---|---|
| `UseLedBean` | 使用台账分页 |
| `InventoryListBean` | 库存台账分页 |
| `ChemicalTypeBean` | 化学品类别字典 |

### 13.4 台账筛选字段表

| 页面 | 筛选项 | 字段 |
|---|---|---|
| `UseLedgerFragment` | 月份 | `numberMonths` |
| `UseLedgerFragment` | 类别 | `chemicalCategory` |
| `UseLedgerFragment` | 级别 | `chemicalLevel` |
| `UseLedgerFragment` | 柜体/柜门 | `cabinetId` `doorId` |
| `InventoryIedgerFragment` | 月份 | `numberMonths` |
| `InventoryIedgerFragment` | 类别 | `chemicalCategory` |
| `InventoryIedgerFragment` | 级别 | `chemicalLevel` |
| `InventoryIedgerFragment` | 出库方式 | `status` |

---

## 14. 预警事件功能表

### 14.1 页面表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| 预警列表 | `WarningEventsActivity` | 预警统计、分页、筛选 |
| 预警详情/处理 | `ProcessedActivity` | 查看详情、提交处理备注 |

### 14.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `system/aioUnify/warningNoticeCount` | `warningNoticeCount` | 获取预警总数 |
| `system/aioUnify/warningNoticeList` | `warningNoticeList` | 查询预警列表 |
| `system/aioUnify/warningNoticeDetail` | `warningNoticeDetail` | 查询预警详情 |
| `system/warningNotice/handleMessage` | `handleMessage` | 提交处理说明 |

### 14.3 模型表

| 模型 | 用途 |
|---|---|
| `EarlyWarningBean` | 预警列表分页 |
| `ProcessedBean` | 预警详情/处理结果 |

### 14.4 筛选项表

| 筛选项 | 字段 | 备注 |
|---|---|---|
| 处理状态 | `noticeStatus` | `0` 待处理，`1` 已处理 |
| 时间范围 | `timeType` | 近一月 / 近三月 |
| 指定日期 | `warnTime` | 日期筛选 |

---

## 15. MSDS 功能表

### 15.1 页面表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| MSDS 列表与预览 | `MsdsActivity` | 搜索、列表、HTML 展示、二维码 |
| MSDS 全屏查看 | `MsdsScreenActivity` | 全屏文档查看 |

### 15.2 接口表

| 接口 | 方法 | 用途 |
|---|---|---|
| `chemical/aio/msds` | `getMsdsDetails` | 搜索 MSDS 列表 |
| `chemical/aio/msdsDetails` | `msdsDetails` | 查询单条文档详情 |

### 15.3 模型表

| 模型 | 用途 |
|---|---|
| `MsdsBean` | MSDS 列表分页 |
| `MsdsListBean` | 单条 MSDS 详情 |

---

## 16. 设置与设备运维功能表

### 16.1 设置页功能表

| 功能 | 页面/类 | 说明 |
|---|---|---|
| 服务地址配置 | `SettingActivity` | 保存 HTTP/图片/二维码基础地址 |
| 管理员密码 | `SettingActivity` | 主页隐藏入口密码 |
| 蓝牙秤绑定 | `SettingActivity` + `BleSelectorDialog` | 扫描并绑定 `sppMac/sppName` |
| 相机方向 | `SettingActivity` | 前后摄配置 |
| 系统操作 | `SettingActivity` + `Tool` | 重启、打开系统设置、文件浏览器、状态栏控制 |

### 16.2 设备接口表

| 接口/工具 | 类型 | 用途 |
|---|---|---|
| `iot/aio/report` | 后端接口 | 设备绑定实验室 / 版本上报 |
| `terminal/machine/heartbeat` | 后端接口 | 心跳上报 |
| `onepcApkUpdate` | 后端接口 | APK 升级状态回传 |
| `Tool` | 本地工具 | su 命令、重启、状态栏、设置 |
| `HttpTool.getCheck()` | 本地 HTTP 工具 | 启动校验设备信息 |
| `HttpTool.heartbeat()` | 本地 HTTP 工具 | 心跳 |

---

## 17. 硬件接入功能表

### 17.1 硬件能力表

| 硬件/能力 | 主要类 | 说明 |
|---|---|---|
| 摄像头/人脸 | `FaceLoginActivity` `TwoVerificationActivity` | 登录与双人认证 |
| 刷卡/扫码输入 | `PortScanHelper` `UsbReceiver` `PortScanService` | 键盘流/USB 输入统一分发 |
| 蓝牙秤 | `SppTool` `BluetoothHelper` `BluetoothWeighDialog` | 入库/领用/归还称重 |
| 智能柜锁 | `lockOperate` `getLocks` + 各业务页 `openLock()` | 柜门控制 |
| 标签打印 | `PrintTool` | 打印化学品标签并切纸 |
| Web 文档引擎 | `QbSdk` `WebViewHelper` | MSDS 展示 |

### 17.2 蓝牙秤相关表

| 类/页面 | 用途 | 关键点 |
|---|---|---|
| `SppTool` | 蓝牙 SPP 封装 | 连接、收包、断开 |
| `BluetoothHelper` | 旧版蓝牙连接实现 | RFCOMM 连接特定设备 |
| `BluetoothWeighDialog` | 入库称重校验 | 规格/净含量/称重值比较，再调 `addStockCheck` |
| `UseActivity` | 领用称重 | 页面内蓝牙接秤 |
| `ChemicalsAlsoActivity` | 归还称重 | 页面内蓝牙接秤 |

### 17.3 打印相关表

| 类/页面 | 用途 |
|---|---|
| `PrintTool` | 打印标签、切纸 |
| `PrintLabelDialog` | 入库前标签打印确认 |
| `ChemicalLabelingActivity` | 补打标签 |
| `ChemicalsAlsoActivity` | 归还页补打标签 |

---

## 18. 核心业务模型表

### 18.1 化学品域

| 模型 | 说明 | 重点字段 |
|---|---|---|
| `ChemicalSearchBean` | 化学品搜索结果 | `chemicalId` `chemicalName` `casNum` `chemicalLevel` `specNum` `packNum` `msdsId` |
| `HxpChemicalVo` | 入库/待入库主对象 | `chemicalLevel` `belongType` `joinType` `stockType` `doorUniqueId` `stockDetailsModelList` |
| `ChemicalTypeBean` | 类别字典 | `label` `value` |
| `ChemicalConfsBean` / `HxpControlConfig` | 化学品控制配置 | 是否打印、称重等 |

### 18.2 柜体与锁域

| 模型 | 说明 | 重点字段 |
|---|---|---|
| `RuleBean` | 柜体及柜门集合 | `cabinetId` `cabinetName` `cabinetDoorVoList` |
| `CabinetDoorVo` | 柜门 | `doorUniqueId` `doorName` `verify` `isControl` `cabinetLockVoList` |
| `LockVoListBean` | 单把锁 | `lockNum` `unlockingMethod` `isOk` |

### 18.3 领用与归还域

| 模型 | 说明 | 重点字段 |
|---|---|---|
| `UseBean` | RFID 领用详情 | 当前待领用化学品信息 |
| `ChemistryBean` | 领用记录 item | 数量、出库方式、标签信息 |
| `UsePostDataBean` | 领用提交体 | `userecordModelList` |
| `ReturningChemicalsBean` | 待归还列表 | 分页记录 |
| `ReturnDetailsBean` | 归还/废弃/标签详情 | `verify` `chemicalLevel` `cabinetLockVoList` |
| `GiveBackBean` | 归还/废弃提交体 | 双人信息、称重、原因、状态 |
| `ReturnGiveBackBean` | 归还后结果 | 回显使用量等 |

### 18.4 台账与预警域

| 模型 | 说明 |
|---|---|
| `UseLedBean` | 使用台账分页 |
| `InventoryListBean` | 库存台账分页 |
| `EarlyWarningBean` | 预警分页 |
| `ProcessedBean` | 预警处理详情 |
| `TimeWarBean` | 开锁后异常超时上报 |

### 18.5 用户与配置域

| 模型 | 说明 |
|---|---|
| `UserData` | 登录用户信息 |
| `UserValidationBean` | 用户权限角色信息 |
| `ConfigBean` | 实验室基础配置、登录方式、认证方式、超时配置 |
| `LabInfo` | 设备绑定实验室信息 |

---

## 19. 关键配置字段速查表

| 字段 | 模型 | 含义 |
|---|---|---|
| `loginType` | `ConfigBean` | 登录方式配置 |
| `verifyType` | `ConfigBean` | 双人认证方式配置 |
| `backTime` | `ConfigBean` | 自动返回时间 |
| `signOutTime` | `ConfigBean` | 自动注销时间 |
| `offTime` | `ConfigBean` | 弹窗关闭时间 |
| `vinVex` | `ConfigBean` | 称重入库容差率 |
| `chemicalLevel` | `ChemicalSearchBean` / `HxpChemicalVo` | 1 管控，2 非管控 |
| `unlockingMethod` | `LockVoListBean` | 2 表示智能锁 |
| `joinType` | `HxpChemicalVo` | 入库方式：1 称重，2 录入 |
| `stockType` | `HxpChemicalVo` | 入库来源类型 |
| `useStatus` | `GiveBackBean` | 归还/废弃状态 |

---

## 20. 接手开发建议

### 20.1 如果你要改某个功能，优先看这些文件

| 目标 | 优先看 |
|---|---|
| 改登录 | `MainActivity` `SwipeActivity` `ScanLoginActivity` `FaceLoginActivity` `UserValidationBean` |
| 改双人认证 | `TwoVerificationActivity` `SharedPreferencesHelper` |
| 改入库 | `PlanAddActivity` `PlanAddActivityHelp` `AddActivity` `AddActivityHelp` `UnlockActivity` |
| 改领用 | `UseActivity` `UsageLabelDialog` |
| 改归还/空瓶/废弃 | `ChemicalsAlsoActivity` `WasteChemicalsActivity` |
| 改查询 | `InquiryActivity` `QueryOneFragment` `QueryTwoFragment` |
| 改标签/RFID | `ChemicalLabelingActivity` `PrintTool` |
| 改台账 | `LedgerActivity` `UseLedgerFragment` `InventoryIedgerFragment` |
| 改预警 | `WarningEventsActivity` `ProcessedActivity` |
| 改 MSDS | `MsdsActivity` `MsdsScreenActivity` |
| 改设备设置 | `SettingActivity` `Tool` `SppTool` |

### 20.2 如果你要改接口层，优先看这些文件

| 层级 | 文件 |
|---|---|
| 接口声明 | `app/src/main/java/com/rc/httpcore/client/retrofit/ApiService.java` |
| 请求封装 | `app/src/main/java/com/rc/httpcore/client/retrofit/ChemicalRetrofit.kt` |
| 页面调用入口 | `app/src/main/java/com/rc/httpcore/client/ApiRepository.kt` |
| HTTP 客户端 | `app/src/main/java/com/rc/httpcore/HttpClient.kt` |
| 老接口直连 | `app/src/main/java/com/rc/httpcore/client/HttpTool.java` |

### 20.3 如果你要改设备层，优先看这些文件

| 能力 | 文件 |
|---|---|
| 系统控制 | `xn/hxp/utils/Tool.java` |
| 蓝牙秤 | `xn/hxp/utils/bluetooth/SppTool.java` |
| 蓝牙旧实现 | `xn/hxp/blu/BluetoothHelper.kt` |
| USB/扫码输入 | `xn/hxp/receiver/UsbReceiver.kt` `xn/hxp/receiver/PortScanService.kt` |
| 打印 | `xn/hxp/utils/PrintTool.java` |

---

## 21. 文档结论

如果把这个项目压缩成一句话：

> 这是一个以实验室安全柜为中心，把登录认证、双人授权、入库、领用、归还、废弃、标签、RFID、称重、台账、预警、MSDS 与终端设备能力整合在一起的实验室化学品智能管理终端。

而从开发接手角度，最重要的三条主线是：

1. **业务页主线**：`MainActivity -> 各业务 Activity`
2. **认证主线**：`TwoVerificationActivity -> SharedPreferencesHelper -> 各业务提交体`
3. **接口主线**：`ApiService -> ChemicalRetrofit -> ApiRepository -> UI`

---

## 22. 扩展表：功能 -> 页面 -> 接口 -> 模型 -> 关键适配器/对话框

本章是在前文基础上的 UI 依赖增强版，重点补充每个功能线的：

- 关键适配器
- 关键对话框
- 常用辅助控件/Fragment

### 22.1 登录认证扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 刷卡登录 | `SwipeActivity` | `cardNum` `userCardValidation` | `UserData` `UserValidationBean` | `AuthenticationDialog` `PortScanHelper` `UsbReceiver` |
| 扫码登录 | `ScanLoginActivity` | `getScanCode` / 扫码认证链路 | `UserData` | 二维码/扫码输入控件、`PortScanHelper` |
| 人脸登录 | `FaceLoginActivity` | `faceNewCompare` | `UserData` | 摄像头、Fotoapparat、人脸检测相关 UI |
| 人脸+刷卡 | `FacialCardActivity` | 组合认证 | `UserData` | 刷卡输入 + 摄像头识别 UI |
| 登录结果确认 | 多登录页共用 | 无 | 登录人信息 | `AuthenticationDialog` `CustomDialog` |

### 22.2 双人认证扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 双人人脸/刷卡/扫码组合认证 | `TwoVerificationActivity` | `useCardVerify` `aioScanLogin` `checkUserFaceByPic` | `UserValidationBean` `DoubleDialogBean` | `DoublePeopleDialog` `CustomDialog` `PortScanHelper` `UsbReceiver` 二维码 ImageView |
| 双人认证历史兼容页 | `TwoPersonActivity` `SwipeCodeTwoActivity` `ScanCodeTwoActivity` | 认证相关接口 | `UserValidationBean` | 旧版组合认证页面 |
| 双人认证结果承接 | 业务页侧 | 无 | `DoubleDialogBean` | `SharedPreferencesHelper` |

### 22.3 新增入库扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 计划入库总控 | `PlanAddActivity` | `getRelList` `getCabinetListBySub` `addStock` | `ChemicalInfoBean` `InventoryItemBean` `HxpChemicalVo` | `PlanAdapter` `LockerAdapter` `LockerFragment` |
| 扫码录入 | `PlanAddActivityHelp` | `scanCodeChemical` | `HxpChemicalVo` | `PortScanHelper` |
| 手动录入 | `AddActivity` | `searchChemica` `getOptions` `getSelects` `getTopicList` | `HxpChemicalVo` `ChemicalTypeBean` `BelongingPersonBean` `TopicDataBean` | `ChemicalTypeDialog` `BelongingPersonDialog` `SelectTopicDialog` `SelectChemicalDialog` |
| 标签打印确认 | `AddActivityHelp` | `getControlConfigs` `certitude` | `HxpControlConfig` `HxpChemicalVo` | `PrintLabelDialog` |
| 蓝牙称重校验 | `BluetoothWeighDialog` | `addStockCheck` | `HxpChemicalVo` | 称重提示图、净含量输入框、蓝牙连接态 UI |
| 柜门开锁 | `UnlockActivity` | `lockOperate` `getLocks` | 柜门/锁模型 | `UnlockAdapter` `CustomDialog` |
| 入库完成 | `SaveListActivity` | 无 | 结果数据 | 结果列表 UI |
| 已申领未入库 | `AlreadyActivity` | `getHxpStockWait` | `AlreadyBean` | `AlreadyAdapter` `PlanDialog` `SelectAlreadyDialog` |

### 22.4 领用扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 柜门选择与列表 | `UseActivity` | `getCabinetList` `getStockList` | `RuleBean` `LockVoListBean` | `CabinetDoorAdapter` `CabinetDoorRighAdapter` `UseListAdapter` |
| 柜门双人认证 | `UseActivity -> TwoVerificationActivity` | `useCardVerify` `aioScanLogin` `checkUserFaceByPic` | `UserValidationBean` | `CustomDialog` |
| 开门后领用工作台 | `UsageLabelDialog` | `getByRfid` | `UseBean` `ChemistryBean` | `UsageLabelDialogAdapter` |
| 称重/录入 | `UseActivity` / `WeighDialog` | 页面内蓝牙逻辑 | `ChemistryBean` | `WeighDialog` 蓝牙提示 UI |
| 再次开门 | `UsageLabelDialog.openLock()` | `lockOperate` | `LockVoListBean` | 柜门状态提示音/弹窗 |
| 异常退出上报 | `UseActivity` | `outTimeWarn` | `TimeWarBean` | `CustomDialog` |

### 22.5 归还/空瓶/废弃回流扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 待归还列表 | `ChemicalsAlsoActivity` | `useList` | `ReturningChemicalsBean` | `ReturningChemicalsAdapter` |
| 扫描进入详情 | `ChemicalsAlsoActivity` | `backDetail` | `ReturnDetailsBean` | `PortScanHelper` `UsbReceiver` |
| 正常归还 | `ChemicalsAlsoActivity` | `giveBack` `returnGiveBack` | `GiveBackBean` `ReturnGiveBackBean` | 柜门开门提示、归还称重 UI |
| 空瓶处理 | `ChemicalsAlsoActivity` | `giveBack` | `GiveBackBean` | `EmptiesDialog` |
| 废弃处理 | `ChemicalsAlsoActivity` | `giveBack` | `GiveBackBean` | `DiscardDialog` |
| RFID 更换/补打 | `ChemicalsAlsoActivity` | `updateRfid` | `ReturnDetailsBean` | `AirBottleDialog` `AirBottleNewDialog` |
| 柜门开门 | `ChemicalsAlsoActivity` | `lockOperate` `getLocks` | `LockVoListBean` | `CabinetOpenDialog` `CustomDialog` |
| 柜位过滤 | `ChemicalsAlsoActivity` | `getCabinetList` | `RuleBean` | `StorageDialog` |

### 22.6 废弃出库扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 废弃列表 | `WasteChemicalsActivity` | `stockDetailsList` | `WasteChemicalsBean` | `WasteChemicalsAdapter` |
| 扫描获取详情 | `WasteChemicalsActivity` | `discardDetail` | `ReturnDetailsBean` | `PortScanHelper` `UsbReceiver` |
| 输入废弃原因 | `WasteChemicalsActivity` | `giveBack` | `GiveBackBean` | `DiscardDialog` |
| 柜门开门 | `WasteChemicalsActivity` | `lockOperate` `getLocks` | `LockVoListBean` | `StorageDialog` `CustomDialog` |
| 异常开门退出 | `WasteChemicalsActivity` | `outTimeWarn` | `TimeWarBean` | 提示弹窗/返回计时 UI |

### 22.7 查询扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 柜体/柜门查询 | `InquiryActivity` | `getCabinetList` | `RuleBean` `LockVoListBean` | `CabinetDoorAdapter` `CabinetDoorRighAdapter` |
| 查询页签一 | `QueryOneFragment` | `indexStockList` 等 | 库存查询模型 | 列表 RecyclerView |
| 查询页签二 | `QueryTwoFragment` | `indexDetailsList` 等 | 详情查询模型 | 列表 RecyclerView |
| 未登录扫码查询 | `InquiryActivity` | `indexDetailbyRfid` | `UseNoBean` | `PromptDialog` |
| 已登录扫码查询 | `InquiryActivity` | `getStockDetailsByCode` | `UseNoTwoBean` | `ScanCodeDialog` |
| 查询场景开门 | `InquiryActivity` | `lockOperate` `getLocks` | `LockVoListBean` | `CustomDialog` |

### 22.8 标签/RFID 管理扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 标签列表 | `ChemicalLabelingActivity` | `tagDetailsList` | `QueryTwoBean` | `ChemicalLabelingAdapter` `CustomSpinnerTwoAdapter` |
| 标签详情 | `ChemicalLabelingActivity` | `getDetailsById` | `ReturnDetailsBean` | 详情区 UI |
| 补打标签 | `ChemicalLabelingActivity` | 无 | `PrintBean` `ReturnDetailsBean` | `PrintTool` |
| 更换 RFID | `ChemicalLabelingActivity` | `updateRfid` | `ReturnDetailsBean` | `AirBottleDialog` `AirBottleNewDialog` |
| 柜门开门定位 | `ChemicalLabelingActivity` | `lockOperate` `getLocks` | `LockVoListBean` | `StorageDialog` `CustomDialog` |
| 标签场景双人认证 | `ChemicalLabelingActivity -> TwoVerificationActivity` | 认证链路接口 | `UserValidationBean` | 认证 UI |

### 22.9 电子台账扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 台账容器页 | `LedgerActivity` | 无 | 无 | `SwipeViewPager` `TabFragmentPagerAdapter` |
| 使用台账 | `UseLedgerFragment` | `useRecords` `getOptions` | `UseLedBean` `ChemicalTypeBean` | `UseLedgerAdapter` `CabinetDoorAdapter` `CabinetDoorRighAdapter` `ChemicalTypeDialog` `StorageDialog` |
| 待归还入口 | `UseLedgerFragment` | 无 | 无 | 跳转 `ChecklistsActivity` |
| 库存台账 | `InventoryIedgerFragment` | `stockLedger` `getOptions` | `InventoryListBean` `ChemicalTypeBean` | `InventoryAdapter` `CabinetDoorAdapter` `CabinetDoorRighAdapter` `ChemicalTypeDialog` `StorageDialog` `CustomSpinnerTwoAdapter` |

### 22.10 预警事件扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 预警列表 | `WarningEventsActivity` | `warningNoticeList` `warningNoticeCount` | `EarlyWarningBean` | `WarningEventsAdapter` `DatePickDialog` |
| 预警详情/处理 | `ProcessedActivity` | `warningNoticeDetail` `handleMessage` | `ProcessedBean` | 详情与处理表单 UI |

### 22.11 MSDS 扩展表

| 功能 | 主页面 | 主要接口 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| MSDS 列表 | `MsdsActivity` | `getMsdsDetails` | `MsdsBean` | `MsdsListAdapter` |
| 文档详情预览 | `MsdsActivity` | `msdsDetails` | `MsdsListBean` | `WebViewHelper` `VideoFullScreenWebChromeClient` |
| 全屏查看 | `MsdsScreenActivity` | 文档展示 | `MsdsListBean` | 全屏 WebView |

### 22.12 设置与设备运维扩展表

| 功能 | 主页面 | 主要接口/工具 | 关键模型 | 关键适配器/对话框/控件 |
|---|---|---|---|---|
| 服务地址/管理员密码/相机配置 | `SettingActivity` | `SharedPreferencesHelper` | `SettingsBean` | 表单输入控件 |
| 蓝牙秤设备选择 | `SettingActivity` | `SppTool` | 本地 SP 配置 | `BleSelectorDialog` |
| 系统控制 | `SettingActivity` | `Tool` | 无 | 系统按钮 |
| 心跳与设备状态 | `MainActivity` | `HttpTool.heartbeat()` | 无 | 心跳计时器 |

### 22.13 设备工具与通用组件扩展表

| 类/组件 | 类型 | 主要服务对象 | 用途 |
|---|---|---|---|
| `PrintTool` | 工具类 | 入库/标签/归还页 | USB 标签打印与切纸 |
| `BluetoothWeighDialog` | 对话框 | 入库 | 蓝牙秤接入与称重校验 |
| `SppTool` | 工具类 | 入库/领用/归还 | 蓝牙串口秤连接 |
| `Tool` | 工具类 | 启动页/设置页/全局 | 设备系统控制 |
| `StorageDialog` | 对话框 | 归还/废弃/台账/标签 | 柜体柜门筛选 |
| `CustomDialog` | 对话框 | 全局 | 通用业务提示/异常提示 |
| `PlanDialog` | 对话框 | 主页入库入口 | 待入库/新增分流 |
| `PortScanHelper` | 工具类 | 登录/查询/领用/归还/废弃 | 扫码/刷卡输入分发 |
| `UsbReceiver` | 广播接收器 | 登录/查询/领用/归还/废弃 | USB 设备监听 |

### 22.14 推荐使用方式

如果你后续继续扩展文档，建议按以下模板补充：

| 功能 | 页面 | 接口 | 模型 | 适配器/对话框 |
|---|---|---|---|---|
| 某功能 | 某 Activity/Fragment | 某 API | 某 Bean | 某 Adapter/Dialog |

这样后续无论做：

- 需求评审
- Bug 定位
- 页面重构
- 接口替换
- 新同事交接

都可以直接沿着同一张表往下查。
