Files
HarmonyOS--waterapp/CODEBASE_OVERVIEW.md
T
2026-07-13 04:23:56 +00:00

294 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Waterapp — 代码库总览
## 项目简介
**Waterapp** 是一款基于 **华为鸿蒙(HarmonyOS / OpenHarmony** 原生开发的水生态全流程管理系统,结合 AI 能力实现实时水质监测、数据分析与预警。应用采用 ArkUI(ArkTS)框架构建,同时包含一个 Node.js MQTT 后端用于数据模拟与消息代理。
### 核心功能
- 实时水质六项指标监测(水温、pH、电导率、COD、氨氮、余氯)
- ECharts 图表可视化
- 设备管理(绑定/列表/状态查看)
- 设备报警追踪与统计分析
- 六项水质指标年度对比分析
- AI 智能分析(Dify API / OpenAI 兼容 API
- 碳汇计算与趋势展示
- 用户登录注册
---
## 技术栈
| 层级 | 技术 |
|------|------|
| 平台 | HarmonyOS / OpenHarmony 6.x+API 22-23 |
| UI 框架 | ArkUI(声明式 UIArkTS 语言) |
| 构建系统 | Hvigor |
| 包管理器 | Ohpm |
| 开发工具 | DevEco Studio |
| 跨平台 | ArkUI-X(支持 Android / iOS 导出) |
| HTTP 客户端 | `@kit.NetworkKit` |
| MQTT | `@ohos/mqtt` |
| 图表 | ECharts 5.xWebView 内嵌) |
| AI API | Dify API(主)+ OpenAI 兼容 API(备用) |
| 后端 | Node.js + aedesMQTT Broker+ mqtt 客户端 |
| 测试 | `@ohos/hypium` + `@ohos/hamock` |
---
## 目录结构
```
Waterapp/
├── AppScope/ # 应用级资源
│ ├── app.json5 # 应用元数据(bundleName、版本号等)
│ └── resources/base/
│ ├── element/string.json # 应用名称字符串
│ └── media/ # 自适应图标(前景/背景/layered_image
├── entry/ # 主模块(entry 类型)
│ ├── build-profile.json5 # 模块构建配置
│ ├── hvigorfile.ts # 模块 Hvigor 构建脚本
│ ├── oh-package.json5 # 模块 Ohpm 包配置
│ ├── obfuscation-rules.txt # 代码混淆规则
│ └── src/
│ ├── main/
│ │ ├── module.json5 # 模块清单(权限、abilities、deviceTypes
│ │ ├── ets/
│ │ │ ├── entryability/
│ │ │ │ └── EntryAbility.ets # 应用入口(UIAbility
│ │ │ ├── pages/
│ │ │ │ ├── Login.ets # 登录/注册页
│ │ │ │ ├── Index.ets # 主首页(Tab 导航)
│ │ │ │ └── Details.ets # 设备详情页(Tab 导航)
│ │ │ ├── components/
│ │ │ │ ├── Equipment.ets # 设备管理列表
│ │ │ │ ├── Add.ets # 添加/绑定设备
│ │ │ │ ├── user.ets # 用户个人中心
│ │ │ │ ├── WaterMonitor.ets # 实时水质监测面板
│ │ │ │ ├── DeviceAlarm.ets # 设备报警列表与统计
│ │ │ │ ├── ContrastAnalysis.ets # 对比分析 + AI 分析
│ │ │ │ └── CarbonCalc.ets # 碳汇计算
│ │ │ ├── utils/
│ │ │ │ ├── Config.ets # 应用配置常量(API URL、密钥等)
│ │ │ │ ├── RequestUtil.ets # HTTP 请求工具(GET/POST/PUT
│ │ │ │ ├── ApiService.ets # API 服务层(主版本)
│ │ │ │ ├── ApiService.ts.ets # API 服务层(备用版本)
│ │ │ │ └── MqttService.ets # MQTT 客户端服务
│ │ │ └── model/
│ │ │ ├── LoginInterface.ets
│ │ │ ├── UserInfoInterface.ets
│ │ │ ├── DeviceListInterface.ets
│ │ │ ├── AlarmItemInterface.ets
│ │ │ ├── Alarmltemlnterface.ets # 重复文件(拼写错误)
│ │ │ ├── AlarmStatisticsInterface.ets
│ │ │ ├── CarbonInfoInterface.ets
│ │ │ ├── StatisticalInterface.ets
│ │ │ ├── EutrophicationItemInterface.ets
│ │ │ ├── SeaRangeInterface.ets
│ │ │ ├── WaterTemperatureStore.ets
│ │ │ ├── AiMessageInterface.ets
│ │ │ ├── OpenAiRequestBody.ets
│ │ │ ├── DifyRequestBody.ets
│ │ │ └── RequestModel.ets
│ │ ├── resources/
│ │ │ ├── base/
│ │ │ │ ├── element/ # string.json / color.json / float.json
│ │ │ │ ├── media/ # 启动图标、自适应图标
│ │ │ │ └── profile/
│ │ │ │ └── main_pages.json # 路由配置(3 个页面)
│ │ │ └── rawfile/ # 原始资源(图标 + ECharts HTML
│ │ │ ├── Equipment/ # 设备图标
│ │ │ ├── Login/ # 登录图标
│ │ │ ├── add/ # 添加设备图标
│ │ │ ├── daohang/ # 导航栏图标(5 个标签)
│ │ │ ├── index_false/ # 未选中标签图标
│ │ │ ├── index_true/ # 选中标签图标
│ │ │ ├── user/ # 用户页图标
│ │ │ ├── ces/ # 地图图片
│ │ │ └── chart/ # ECharts HTML 文件
│ │ │ ├── line_chart.html # 实时水质折线图
│ │ │ ├── carbon_chart.html # 碳汇趋势图
│ │ │ └── contrast_chart.html # 对比分析图
│ ├── mock/
│ │ └── mock-config.json5 # Mock 配置(空)
│ ├── ohosTest/ # 设备端测试
│ │ └── ets/test/
│ │ ├── List.test.ets
│ │ └── Ability.test.ets
│ └── test/ # 本地单元测试
│ ├── List.test.ets
│ └── LocalUnit.test.ets
├── mqtt-backend/ # Node.js MQTT 后端
│ ├── package.json # 依赖(aedes, mqtt
│ ├── server.js # MQTT Brokeraedes + TCP 服务器)
│ ├── simulator.js # 模拟水质数据生成器
│ └── README.md # 后端使用说明
├── .arkui-x/ # ArkUI-X 跨平台配置
│ ├── arkui-x-config.json5
│ ├── android/ # Android 平台输出
│ └── ios/ # iOS 平台输出
├── .hvigor/ # Hvigor 构建缓存
├── .idea/ # IDE 配置
├── oh_modules/ # Ohpm 依赖
├── build-profile.json5 # 应用级构建配置
├── hvigorfile.ts # 根级 Hvigor 构建脚本
├── oh-package.json5 # 根级 Ohpm 依赖
├── oh-package-lock.json5 # 依赖锁文件
├── local.properties # 本地属性(指向 ArkUI-X SDK
├── code-linter.json5 # 代码检查规则
└── .gitignore
```
---
## 页面路由与导航
应用采用 **两层 Tab 导航架构**
### 第一层:Index.ets(主首页,3 个 Tab
| Tab | 组件 | 功能 |
|-----|------|------|
| 设备 | `Equipment` | 设备列表卡片,点击进入详情 |
| 添加 | `Add` | 绑定新设备表单 |
| 我的 | `User` | 个人中心、统计概览、退出登录 |
### 第二层:Details.ets(设备详情,5 个 Tab
| Tab | 组件 | 功能 |
|-----|------|------|
| 水情检测 | `WaterMonitor` | MQTT 实时水质数据 + ECharts 折线图 |
| 设备报警 | `DeviceAlarm` | 报警列表、统计、点位地图 |
| AI 预测 | `AiPredict` | **组件缺失,选中会崩溃** |
| 对比分析 | `ContrastAnalysis` | 六项指标年度对比 + AI 分析 |
| 碳汇计算 | `CarbonCalc` | 碳汇能力统计与趋势图 |
页面间使用 `router.pushUrl()` 导航,数据通过 `AppStorage` 传递。
---
## 状态管理
使用 HarmonyOS 内置 **`AppStorage`** 进行全局状态管理:
| 键 | 类型 | 用途 |
|----|------|------|
| `token` | string | 认证令牌(登录设置,退出删除) |
| `point` | object | 当前选中设备(设备列表设置,详情页读取) |
| `newDevice` | object | 新绑定设备(添加页设置,设备列表消费) |
组件内部使用 `@State` 管理局部 UI 状态。
---
## 数据流架构
```
MQTT 设备 → MQTT Broker (server.js) → @ohos/mqtt (MqttService.ets)
→ EventEmitter → WaterMonitor 组件 → ECharts 图表
HTTP API (:8080) → RequestUtil.ets → ApiService.ets → 各组件
AI API (Dify / Volcengine) → ContrastAnalysis 组件(SSE 流式调用)
```
---
## 各文件详细说明
### 应用入口
**EntryAbility.ets** — 继承 `UIAbility`,在 `onWindowStageCreate` 中加载 `pages/Login` 作为首页。处理应用生命周期(创建、销毁、前后台切换)。
### 页面
**Login.ets** — 登录/注册页。支持测试账号(`test` / `123456`)和 HTTP API 登录。含光晕动画和波纹效果。标题:"鸿蒙+AI水生态全流程管理系统"。
**Index.ets** — 主首页。深色科技蓝渐变主题,含 3 个 Tab 的底部导航栏。
**Details.ets** — 设备详情页。从 `AppStorage('point')` 读取当前设备,含 5 个 Tab 的底部导航栏。
### 组件
**Equipment.ets** — 设备卡片列表,显示名称、编号、状态(正常运行/异常报警)。含两个硬编码初始设备(长江监测点 A、B)。点击进入详情页。
**Add.ets** — 设备绑定表单。输入设备编号和名称,通过 AppStorage 传递给设备列表。
**user.ets** — 个人中心。含头像、统计卡片(设备总数/异常数)、菜单项(报告生成 TODO、系统设置 TODO、退出登录)、版本信息。
**WaterMonitor.ets** — 核心监测组件:
- MQTT 连接(`tcp://192.168.31.100:1883`,主题 `sea_status`
- 显示 4 个基础指标(水温、pH、电导率、COD)+ 氨氮 + 余氯
- ECharts WebView 实时折线图(5 秒更新)
- 无 MQTT 数据时回退至模拟数据
**DeviceAlarm.ets** — 报警监控:
- 报警统计(总数 + 水质超标数)
- 设备点位地图
- 按时间段统计(今日/本周/本月)
- 报警记录列表(含当前值 vs 标准值)
- 5 条模拟报警 + API 真实数据
**ContrastAnalysis.ets** — 对比分析:
- 六项指标切换(水温、COD、pH、余氯、电导率、氨氮)
- 月度年度趋势 ECharts 图
- AI 分析:SSE 流式调用 Dify API
- 错误状态处理(网络/API/空数据)
**CarbonCalc.ets** — 碳汇计算:
- 3 张统计卡片(上月平均温度、碳汇能力、平均 pH)
- 6 个月碳汇趋势 ECharts 图
- 监测点分布地图(4 个模拟点 + API 数据)
### 工具/服务
**Config.ets** — 应用配置常量:
| 常量 | 值 |
|------|-----|
| `BASE_URL` | `http://192.168.31.100:8080` |
| `AI_PRIMARY_URL` | `http://192.168.31.26` |
| `AI_BACKUP_URL` | `https://ark.cn-beijing.volces.com` |
| `AI_BACKUP_MODEL` | `doubao-seed-2-0-code-preview-260215` |
| `TIMEOUT` | 30000ms |
**RequestUtil.ets** — HTTP 工具类,封装 GET/POST/PUT 请求,支持 Bearer Token 认证。
**ApiService.ets** — API 端点封装:登录、注册、设备列表、水质数据、报警、碳汇等。
**MqttService.ets** — MQTT 单例客户端。连接 `tcp://192.168.31.100:1883`,订阅 `sea_status` 主题,通过 EventEmitter 广播数据。
### 模型(14 个接口文件)
定义应用中所有数据结构:登录/用户/设备/报警/碳汇/水质指标/AI 消息等。
### 图表(rawfile HTML
- **line_chart.html** — 余氯 + 氨氮实时双线图
- **carbon_chart.html** — 12 个月碳汇趋势面积图
- **contrast_chart.html** — 年度指标对比图(含最值标记)
---
## 设计主题
全应用统一使用科技蓝/水质主题:
- 深色渐变背景(`#0a1628``#0d2847``#1677FF`
- 荧光绿强调色(`#00FF88`
- 指标卡片红/橙/紫色编码
- 毛玻璃/发光效果 UI 元素
---
## 已知问题
1. **缺失组件**`AiPredict.ets``Details.ets` 导入但不存在,切换至该 Tab 会导致应用崩溃
2. **硬编码凭据**`Config.ets``ContrastAnalysis.ets` 中包含明文 API Key
3. **硬编码 IP**`192.168.31.100``192.168.31.26` 遍布代码
4. **重复文件**`ApiService.ets` / `ApiService.ts.ets``AlarmItemInterface.ets` / `Alarmltemlnterface.ets`
5. **模拟数据依赖**:所有组件在 API 失败时回退至硬编码模拟数据,生产环境缺乏降级策略
6. **测试缺失**:测试文件均为样板代码,无实际测试逻辑