上传文件至「/」
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
# 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(声明式 UI,ArkTS 语言) |
|
||||
| 构建系统 | Hvigor |
|
||||
| 包管理器 | Ohpm |
|
||||
| 开发工具 | DevEco Studio |
|
||||
| 跨平台 | ArkUI-X(支持 Android / iOS 导出) |
|
||||
| HTTP 客户端 | `@kit.NetworkKit` |
|
||||
| MQTT | `@ohos/mqtt` |
|
||||
| 图表 | ECharts 5.x(WebView 内嵌) |
|
||||
| AI API | Dify API(主)+ OpenAI 兼容 API(备用) |
|
||||
| 后端 | Node.js + aedes(MQTT 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 Broker(aedes + 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. **测试缺失**:测试文件均为样板代码,无实际测试逻辑
|
||||
Reference in New Issue
Block a user