docs: 优化产品需求文档和功能模块文档结构
- 重构了产品需求文档的章节组织和内容结构 - 改进了智能功能模块的文档格式和可读性 - 优化了一键邻回收和用户故事文档的排版 - 新增了完整的规格文档模板和内容框架 - 统一了文档风格和格式规范,提升文档质量
This commit is contained in:
170
01_设计/初步设计文档.md
170
01_设计/初步设计文档.md
@@ -58,47 +58,69 @@
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph 用户端 (User Layer)
|
||||
C_MP[C端居民小程序<br>(uni-app / Vue.js)]
|
||||
B_MP[B端小站小程序<br>(uni-app / Vue.js)]
|
||||
C_MP[C端用户小程序<br>(uni-app / Vue.js)]
|
||||
Admin[管理后台Web<br>(Vue 3 + Element Plus)]
|
||||
Maintenance[运维端APP<br>(Flutter / React Native)]
|
||||
end
|
||||
|
||||
subgraph 智能终端层 (Terminal Layer)
|
||||
Terminal1[智能终端设备#1<br>(嵌入式Linux + Qt)]
|
||||
Terminal2[智能终端设备#2<br>(嵌入式Linux + Qt)]
|
||||
TerminalN[智能终端设备#N<br>(嵌入式Linux + Qt)]
|
||||
end
|
||||
|
||||
subgraph 网关层 (API Gateway)
|
||||
Gateway[API Gateway<br>(Nginx)]
|
||||
Gateway[API Gateway<br>(Nginx + Load Balancer)]
|
||||
end
|
||||
|
||||
subgraph 后端服务 (Backend Service)
|
||||
Backend[后端应用服务器<br>(Node.js + NestJS)]
|
||||
AIService[AI识别服务<br>(Python + TensorFlow)]
|
||||
DeviceManager[设备管理服务<br>(MQTT Broker)]
|
||||
end
|
||||
|
||||
subgraph 数据层 (Data Layer)
|
||||
DB[(PostgreSQL<br>核心业务数据)]
|
||||
Cache[(Redis<br>缓存/会话)]
|
||||
TimeSeries[(InfluxDB<br>设备时序数据)]
|
||||
end
|
||||
|
||||
C_MP --> Gateway
|
||||
B_MP --> Gateway
|
||||
Admin --> Gateway
|
||||
Maintenance --> Gateway
|
||||
Terminal1 --> DeviceManager
|
||||
Terminal2 --> DeviceManager
|
||||
TerminalN --> DeviceManager
|
||||
Gateway --> Backend
|
||||
Backend --> AIService
|
||||
Backend --> DeviceManager
|
||||
Backend --> DB
|
||||
Backend --> Cache
|
||||
DeviceManager --> TimeSeries
|
||||
AIService --> Cache
|
||||
```
|
||||
|
||||
### 3.2 技术选型理由
|
||||
- **前端 (uni-app + Vue)**: 一次开发,多端发布,极大提升MVP开发效率,统一技术栈。
|
||||
- **后端 (Node.js + NestJS)**: 全栈语言统一(TypeScript),架构清晰,适合企业级应用,保证代码质量和可维护性。
|
||||
- **数据库 (PostgreSQL + Redis)**: PostgreSQL功能强大,满足地理位置查询等复杂需求;Redis作为缓存,保证系统响应速度。
|
||||
- **前端 (uni-app + Vue)**: 一次开发,多端发布,极大提升MVP开发效率,C端小程序和运维端APP统一技术栈。
|
||||
- **智能终端 (嵌入式Linux + Qt)**: 稳定可靠的嵌入式系统,Qt提供良好的触屏界面开发体验,支持多媒体和网络通信。
|
||||
- **后端 (Node.js + NestJS)**: 全栈语言统一(TypeScript),微服务架构清晰,适合处理高并发的设备连接。
|
||||
- **AI服务 (Python + TensorFlow)**: 成熟的机器学习框架,支持物品识别模型的训练和推理。
|
||||
- **设备通信 (MQTT)**: 轻量级物联网协议,适合终端设备与云端的实时通信。
|
||||
- **数据库 (PostgreSQL + Redis + InfluxDB)**: PostgreSQL处理业务数据,Redis提供缓存和会话,InfluxDB专门存储设备时序数据。
|
||||
|
||||
### 3.3 风险评估与应对策略
|
||||
- **技术风险**:
|
||||
- **风险点**: `uni-app` 在部分低端安卓机型上可能存在性能瓶颈。
|
||||
- **应对策略**: 在开发中期,选取核心页面(如扫码、列表)进行专项性能测试,预留优化时间。
|
||||
- **团队风险**:
|
||||
- **风险点**: 团队成员对 `NestJS` 或 `uni-app` 的熟练度可能不一。
|
||||
- **应对策略**: 在项目启动前安排1-2天的技术预研(Spike),统一代码规范和最佳实践。
|
||||
- **需求风险**:
|
||||
- **风险点**: MVP开发期间出现重大需求变更,影响核心交付范围。
|
||||
- **应对策略**: 建立需求变更控制流程。所有需求变更需经由产品、项目、研发三方共同评估影响后,再决定是否纳入当前版本。
|
||||
- **硬件风险**:
|
||||
- **风险点**: 智能终端设备的硬件稳定性和恶劣环境适应性。
|
||||
- **应对策略**: 选择工业级硬件组件,进行充分的环境测试(高温、低温、湿度、振动)。
|
||||
- **AI识别风险**:
|
||||
- **风险点**: 物品识别准确率可能达不到预期,影响用户体验。
|
||||
- **应对策略**: 建立持续学习机制,收集错误样本不断优化模型;设置人工审核机制作为兜底。
|
||||
- **网络风险**:
|
||||
- **风险点**: 终端设备网络不稳定导致数据传输中断。
|
||||
- **应对策略**: 实现本地数据缓存机制,支持断网重连和数据补传。
|
||||
- **成本风险**:
|
||||
- **风险点**: 单台设备成本超出3000元预算,影响盈利模式。
|
||||
- **应对策略**: 严格控制硬件BOM成本,探索批量采购降本,优化设计减少不必要功能。
|
||||
|
||||
---
|
||||
|
||||
@@ -111,6 +133,7 @@ graph TD
|
||||
CREATE TABLE users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
wx_openid VARCHAR(255) UNIQUE NOT NULL,
|
||||
phone_number VARCHAR(20) UNIQUE,
|
||||
nickname VARCHAR(255),
|
||||
avatar_url TEXT,
|
||||
balance DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
|
||||
@@ -118,26 +141,33 @@ CREATE TABLE users (
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 2. B端回收小站表
|
||||
CREATE TABLE stations (
|
||||
-- 2. 智能终端设备表
|
||||
CREATE TABLE terminals (
|
||||
id SERIAL PRIMARY KEY,
|
||||
device_code VARCHAR(100) UNIQUE NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
address TEXT NOT NULL,
|
||||
location GEOGRAPHY(POINT, 4326),
|
||||
manager_name VARCHAR(100),
|
||||
phone_number VARCHAR(20),
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'active',
|
||||
venue_type VARCHAR(50) NOT NULL, -- supermarket, express_station, etc.
|
||||
venue_contact_name VARCHAR(100),
|
||||
venue_contact_phone VARCHAR(20),
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'online', -- online, offline, maintenance, error
|
||||
hardware_version VARCHAR(50),
|
||||
software_version VARCHAR(50),
|
||||
deployment_cost DECIMAL(10, 2) DEFAULT 3000.00,
|
||||
deployment_date DATE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 3. 小站员工表
|
||||
CREATE TABLE staff (
|
||||
-- 3. 终端配置表
|
||||
CREATE TABLE terminal_configs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
station_id INT NOT NULL REFERENCES stations(id),
|
||||
phone_number VARCHAR(20) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
role VARCHAR(50) NOT NULL DEFAULT 'staff',
|
||||
terminal_id INT NOT NULL REFERENCES terminals(id),
|
||||
bag_count INT NOT NULL DEFAULT 3,
|
||||
max_weight_per_bag DECIMAL(10, 2) DEFAULT 50.00,
|
||||
ai_confidence_threshold DECIMAL(3, 2) DEFAULT 0.85,
|
||||
network_config JSONB,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -146,7 +176,9 @@ CREATE TABLE staff (
|
||||
CREATE TABLE categories (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(100) UNIQUE NOT NULL,
|
||||
code VARCHAR(20) UNIQUE NOT NULL, -- bottle, paper, textile
|
||||
unit VARCHAR(20) NOT NULL DEFAULT 'kg',
|
||||
ai_model_labels TEXT[], -- AI识别标签数组
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -155,20 +187,22 @@ CREATE TABLE categories (
|
||||
CREATE TABLE prices (
|
||||
id SERIAL PRIMARY KEY,
|
||||
category_id INT NOT NULL REFERENCES categories(id),
|
||||
station_id INT NOT NULL REFERENCES stations(id),
|
||||
terminal_id INT NOT NULL REFERENCES terminals(id),
|
||||
price DECIMAL(10, 2) NOT NULL,
|
||||
effective_date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
UNIQUE(category_id, station_id)
|
||||
UNIQUE(category_id, terminal_id)
|
||||
);
|
||||
|
||||
-- 6. 交易记录总表
|
||||
CREATE TABLE transactions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INT NOT NULL REFERENCES users(id),
|
||||
station_id INT NOT NULL REFERENCES stations(id),
|
||||
staff_id INT NOT NULL REFERENCES staff(id),
|
||||
terminal_id INT NOT NULL REFERENCES terminals(id),
|
||||
total_amount DECIMAL(10, 2) NOT NULL,
|
||||
payment_method VARCHAR(20) DEFAULT 'balance', -- balance, wechat_pay
|
||||
ai_confidence_score DECIMAL(3, 2),
|
||||
transaction_images TEXT[], -- 交易过程图片
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
@@ -177,9 +211,44 @@ CREATE TABLE transaction_items (
|
||||
id SERIAL PRIMARY KEY,
|
||||
transaction_id INT NOT NULL REFERENCES transactions(id) ON DELETE CASCADE,
|
||||
category_id INT NOT NULL REFERENCES categories(id),
|
||||
bag_number INT NOT NULL, -- 投入的袋子编号
|
||||
weight DECIMAL(10, 2) NOT NULL,
|
||||
price_per_unit DECIMAL(10, 2) NOT NULL,
|
||||
amount DECIMAL(10, 2) NOT NULL,
|
||||
ai_identified_category VARCHAR(100), -- AI识别的品类
|
||||
ai_confidence DECIMAL(3, 2), -- AI置信度
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 8. 终端状态监控表
|
||||
CREATE TABLE terminal_status (
|
||||
id SERIAL PRIMARY KEY,
|
||||
terminal_id INT NOT NULL REFERENCES terminals(id),
|
||||
cpu_usage DECIMAL(5, 2),
|
||||
memory_usage DECIMAL(5, 2),
|
||||
disk_usage DECIMAL(5, 2),
|
||||
network_status VARCHAR(20),
|
||||
temperature DECIMAL(5, 2),
|
||||
bag_weights JSONB, -- 各袋子当前重量 {"bag1": 25.5, "bag2": 30.2}
|
||||
error_codes VARCHAR(255)[],
|
||||
last_heartbeat TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 9. 设备维护记录表
|
||||
CREATE TABLE maintenance_records (
|
||||
id SERIAL PRIMARY KEY,
|
||||
terminal_id INT NOT NULL REFERENCES terminals(id),
|
||||
maintenance_type VARCHAR(50) NOT NULL, -- routine, repair, emergency
|
||||
operator_name VARCHAR(100),
|
||||
operator_phone VARCHAR(20),
|
||||
description TEXT,
|
||||
before_images TEXT[],
|
||||
after_images TEXT[],
|
||||
cost DECIMAL(10, 2),
|
||||
status VARCHAR(20) DEFAULT 'completed', -- pending, in_progress, completed
|
||||
scheduled_at TIMESTAMPTZ,
|
||||
completed_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
@@ -189,28 +258,43 @@ CREATE TABLE transaction_items (
|
||||
## 5. 核心API接口设计
|
||||
|
||||
### 5.1 管理后台API (`/api/admin`)
|
||||
- **终端管理**: `GET, POST, PUT /terminals/:id`
|
||||
- **品类管理**: `GET, POST, PUT /categories/:id`
|
||||
- **小站管理**: `GET, POST, PUT /stations/:id`
|
||||
- **价格管理**: `GET, POST /prices`
|
||||
- **员工管理**: `GET, POST /staff`
|
||||
- **维护管理**: `GET, POST /maintenance`
|
||||
- **数据监控**: `GET /monitoring/dashboard`
|
||||
|
||||
### 5.2 C端小程序API (`/api/c`)
|
||||
- **认证**: `POST /auth/login` (微信Code换JWT)
|
||||
- **用户信息**: `GET /profile`
|
||||
- **核心功能**:
|
||||
- `GET /features/prices` (今日回收价)
|
||||
- `GET /features/nearby-stations` (附近小站)
|
||||
- `GET /features/nearby-terminals` (附近终端)
|
||||
- `GET /features/transactions` (交易记录)
|
||||
- `GET /features/qrcode` (生成登录二维码)
|
||||
|
||||
### 5.3 B端小程序API (`/api/b`)
|
||||
- **认证**: `POST /auth/login` (手机号密码登录)
|
||||
- **回收流程**:
|
||||
- `GET /recycle/user-info` (扫码识客)
|
||||
- `POST /recycle/transactions` (创建交易)
|
||||
- **数据查询**:
|
||||
- `GET /data/summary` (今日汇总)
|
||||
- `GET /data/inventory` (库存盘点)
|
||||
- `GET /data/categories` (可用回收品类)
|
||||
### 5.3 智能终端设备API (`/api/terminal`)
|
||||
- **设备认证**: `POST /auth/device` (设备注册登录)
|
||||
- **用户识别**: `POST /user/identify` (二维码/手机号识别)
|
||||
- **交易流程**:
|
||||
- `POST /transaction/start` (开始交易)
|
||||
- `POST /transaction/weigh` (称重数据上传)
|
||||
- `POST /transaction/ai-verify` (AI识别验证)
|
||||
- `POST /transaction/complete` (完成交易)
|
||||
- **设备状态**:
|
||||
- `POST /status/heartbeat` (设备心跳)
|
||||
- `POST /status/error` (错误报告)
|
||||
- `GET /config` (获取设备配置)
|
||||
|
||||
### 5.4 运维端API (`/api/maintenance`)
|
||||
- **认证**: `POST /auth/login` (运维人员登录)
|
||||
- **任务管理**:
|
||||
- `GET /tasks` (获取维护任务)
|
||||
- `POST /tasks/:id/start` (开始任务)
|
||||
- `POST /tasks/:id/complete` (完成任务)
|
||||
- **设备检测**:
|
||||
- `POST /device/:id/diagnose` (设备诊断)
|
||||
- `POST /device/:id/repair` (维修记录)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user