ether-docs/01-REQUIREMENTS/pending-features-spec/spec.md

373 lines
10 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.

# Ether 智慧物业管理平台 - 待开发功能完善规范
## 📋 项目概述
本文档定义了待开发功能的详细实现规范,确保开发过程中不影响已完成的功能模块。
---
## 🎯 开发目标
### 总体目标
完善6个待开发功能模块实现前后端完整对接并通过E2E自动化测试验证。
### 实际状态分析(更新后)
| 模块 | 前端状态 | 后端状态 | API匹配 | 实际工作量 |
|------|---------|---------|---------|-----------|
| 设备管理 | ✅ 页面完整 | ⚠️ 占位接口 | ❌ 路径不匹配 | 中需修复API路径+实现后端) |
| 收费管理 | ✅ 页面完整 | ✅ 已完整实现 | ✅ 匹配 | 低仅需启用前端API调用 |
| 巡检管理 | ✅ 页面完整 | ✅ 已实现 | ✅ 匹配 | 低(联调测试) |
| 工单管理 | ✅ 页面完整 | ✅ 已实现 | ✅ 匹配 | 低(联调测试) |
| 访客管理 | ✅ 页面完整 | ✅ 已实现 | ✅ 匹配 | 低(联调测试) |
| 通知管理 | ✅ 页面完整 | ✅ 已实现 | ✅ 匹配 | 低(联调测试) |
---
## 🚨 关键问题与解决方案
### 问题1: 设备管理 API 路径不匹配
**现状**:
- 前端 API: `/api/v1/asset/equipments` (api/asset/equipment.ts)
- 后端 API: `/api/v1/mdm/equipments` (EquipmentController.java)
**解决方案**:
在后端添加 `/api/v1/asset/equipments` 路径映射,保持前端不变。
### 问题2: 设备表存在两个定义
**现状**:
- `mdm_equipment` (V4迁移脚本)
- `asset_equipment` (V9迁移脚本)
**解决方案**:
统一使用 `mdm_equipment` 表,因为测试数据已使用该表。
### 问题3: 收费管理前端显示"开发中"
**现状**:
- 后端 FeeController 已完整实现所有功能
- 前端代码注释显示"功能开发中"API调用被禁用
**解决方案**:
移除前端"开发中"提示启用API调用。
---
## 📐 技术规范
### 后端开发规范
#### 1. 服务端口分配
```
ether-gateway: 8080
ether-auth: 8081
ether-mdm: 8082
ether-ops: 8083
ether-finance: 8085
```
#### 2. API路径规范
```
/api/v1/{module}/{resource}
```
- module: 模块名 (mdm, ops, finance, asset)
- resource: 资源名 (复数形式)
#### 3. 响应格式规范
```json
{
"code": 200,
"message": "success",
"data": {}
}
```
#### 4. 实体规范
- 所有实体使用UUID作为主键
- 必须包含 `createdAt``updatedAt` 字段
- 使用 `@PrePersist``@PreUpdate` 自动设置时间戳
#### 5. 数据库规范
- PostgreSQL 数据库
- 端口: 5432
- 用户名: ether
- 密码: ether123
- 表名使用下划线命名法 (snake_case)
### 前端开发规范
#### 1. 组件命名
- 组件文件: kebab-case (如 `equipment-list.vue`)
- 组件名称: PascalCase (如 `EquipmentList`)
#### 2. API调用
- 统一使用 `@/api/` 目录下的API模块
- 使用 TypeScript 类型定义
#### 3. 状态管理
- 使用 Pinia 进行状态管理
- Store 文件放置在 `@/stores/` 目录
---
## 🔧 功能模块详细规范
### 1. 设备管理模块 (修复API路径 + 实现后端)
#### 1.1 现有资源
**前端页面** (已存在):
- `views/mdm/equipment/index.vue` - 设备列表页面(完整)
- `views/asset/equipment-statistics/index.vue` - 设备统计页面
**数据库表** (已存在):
- `mdm_equipment` - 设备主表 (V4迁移脚本已创建)
**后端** (需完善):
- `EquipmentController.java` - 仅有占位接口
#### 1.2 需要实现的内容
**后端实现**:
1. 创建设备实体类
- 文件: `ether-mdm/src/main/java/com/ether/mdm/entity/Equipment.java`
- 映射表: `mdm_equipment`
2. 创建Repository
- 文件: `ether-mdm/src/main/java/com/ether/mdm/repository/EquipmentRepository.java`
3. 创建Service
- 文件: `ether-mdm/src/main/java/com/ether/mdm/service/EquipmentService.java`
- 文件: `ether-mdm/src/main/java/com/ether/mdm/service/impl/EquipmentServiceImpl.java`
4. 完善Controller
- 添加 `/api/v1/asset/equipments` 路径映射
- 实现完整CRUD接口
#### 1.3 API接口设计
**设备管理 API** (前端已定义,后端需实现):
| 方法 | 前端调用路径 | 后端实现路径 | 描述 |
|------|-------------|-------------|------|
| GET | /api/v1/asset/equipments | 需映射 | 获取设备列表 |
| GET | /api/v1/asset/equipments/{id} | 需映射 | 获取设备详情 |
| POST | /api/v1/asset/equipments | 需映射 | 创建设备 |
| PUT | /api/v1/asset/equipments/{id} | 需映射 | 更新设备 |
| DELETE | /api/v1/asset/equipments/{id} | 需映射 | 删除设备 |
| GET | /api/v1/asset/equipments/type/{type} | 需映射 | 按类型查询 |
| GET | /api/v1/asset/equipments/status/{status} | 需映射 | 按状态查询 |
| GET | /api/v1/asset/equipments/space-node/{spaceNodeId} | 需映射 | 按空间节点查询 |
| GET | /api/v1/asset/equipments/search | 需映射 | 搜索设备 |
| PATCH | /api/v1/asset/equipments/{id}/status | 需映射 | 更新设备状态 |
| POST | /api/v1/asset/equipments/{id}/maintenance | 需映射 | 记录保养 |
| GET | /api/v1/asset/equipments/generate-code | 需映射 | 生成设备编码 |
| GET | /api/v1/asset/equipment/qrcode/{id} | 需映射 | 获取二维码 |
| GET | /api/v1/asset/equipment/qrcode/info/{qrCode} | 需映射 | 扫码获取设备信息 |
#### 1.4 数据库表结构 (已存在)
```sql
-- mdm_equipment 表已存在于 V4 迁移脚本
CREATE TABLE mdm_equipment (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID NOT NULL,
code VARCHAR(50) NOT NULL,
name VARCHAR(100) NOT NULL,
equipment_type VARCHAR(20) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'NORMAL',
brand VARCHAR(50),
model VARCHAR(50),
specifications VARCHAR(500),
serial_number VARCHAR(100),
manufacturer VARCHAR(100),
supplier VARCHAR(100),
space_node_id UUID,
location_desc VARCHAR(200),
purchase_date DATE,
install_date DATE,
warranty_date DATE,
purchase_price NUMERIC(12, 2),
service_life INTEGER,
maintenance_cycle INTEGER,
last_maintenance_date DATE,
next_maintenance_date DATE,
manager_id UUID,
manager_name VARCHAR(50),
contact_phone VARCHAR(20),
images VARCHAR(1000),
manual_url VARCHAR(255),
remarks VARCHAR(500),
attributes JSONB,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by UUID,
updated_by UUID,
CONSTRAINT uk_equipment_project_code UNIQUE (project_id, code)
);
```
---
### 2. 收费管理模块 (启用前端API调用)
#### 2.1 现有资源
**前端页面** (已存在):
- `views/mdm/fee/index.vue` - 收费管理页面(完整)
**后端** (已完整实现):
- `FeeController.java` - 完整的CRUD接口
- `FeeService.java` - 完整的业务逻辑
#### 2.2 需要修改的内容
**前端修改**:
1. 移除"功能开发中"提示
- 文件: `views/mdm/fee/index.vue`
- 删除 `showFeatureTip` 相关代码
2. 启用API调用
- 文件: `views/mdm/fee/index.vue`
-`fetchBills`、`fetchStatistics` 等方法中启用API调用
#### 2.3 后端已实现的API
| 方法 | 路径 | 描述 |
|------|------|------|
| GET | /api/v1/finance/fee-items | 获取收费项目列表 |
| POST | /api/v1/finance/fee-items | 创建收费项目 |
| PUT | /api/v1/finance/fee-items/{id} | 更新收费项目 |
| DELETE | /api/v1/finance/fee-items/{id} | 删除收费项目 |
| GET | /api/v1/finance/bills | 获取账单列表 |
| POST | /api/v1/finance/bills | 创建账单 |
| PUT | /api/v1/finance/bills/{id} | 更新账单 |
| DELETE | /api/v1/finance/bills/{id} | 删除账单 |
| POST | /api/v1/finance/bills/{billId}/pay | 缴费 |
| GET | /api/v1/finance/payments | 获取支付记录 |
| GET | /api/v1/finance/statistics | 统计数据 |
| GET | /api/v1/finance/statistics/today-receivable | 今日应收 |
| GET | /api/v1/finance/statistics/today-received | 今日实收 |
| GET | /api/v1/finance/statistics/pending-amount | 待收金额 |
| GET | /api/v1/finance/statistics/overdue-amount | 逾期金额 |
---
### 3. 巡检管理模块 (联调测试)
#### 3.1 现有资源
- 前端页面: ✅ 完整
- 后端API: ✅ 完整
- API匹配: ✅ 正确
#### 3.2 验证要点
- 巡检计划CRUD
- 巡检点管理
- 巡检任务生成与执行
- 巡检记录提交
- 统计数据准确性
---
### 4. 工单管理模块 (联调测试)
#### 4.1 现有资源
- 前端页面: ✅ 完整(含组件和单元测试)
- 后端API: ✅ 完整
- API匹配: ✅ 正确
#### 4.2 验证要点
- 工单创建流程
- 工单分配与接单
- 工单状态流转
- 工单完成与关闭
- 工单统计
---
### 5. 访客管理模块 (联调测试)
#### 5.1 现有资源
- 前端页面: ✅ 完整
- 后端API: ✅ 完整
- API匹配: ✅ 正确
#### 5.2 验证要点
- 访客预约流程
- 审批流程
- 入场/离场登记
- 黑名单管理
- 历史访客查询
---
### 6. 通知管理模块 (联调测试)
#### 6.1 现有资源
- 前端页面: ✅ 完整
- 后端API: ✅ 完整
- API匹配: ✅ 正确
#### 6.2 验证要点
- 通知渠道配置
- 通知模板管理
- 通知规则配置
- 通知发送与接收
- 通知状态管理
---
## 🧪 测试规范
### E2E测试策略
#### 测试工具
- Puppeteer 浏览器自动化
- 测试脚本目录: `tests/`
#### 测试覆盖范围
1. 设备管理完整流程测试
2. 收费管理完整流程测试
3. 巡检管理流程测试
4. 工单管理流程测试
5. 访客管理流程测试
6. 通知管理流程测试
---
## 🚀 部署规范
### 服务启动顺序
1. PostgreSQL 数据库
2. ether-auth (8081)
3. ether-mdm (8082)
4. ether-ops (8083)
5. ether-finance (8085)
6. ether-gateway (8080)
7. ether-ui-admin (5175)
---
## 📝 开发注意事项
### 不影响现有功能的措施
1. 所有新代码在独立分支开发
2. 新增数据库表使用新的命名空间
3. API版本控制不修改现有API签名
4. 前端新增页面和组件,不修改现有页面
5. 完整的回归测试
### 代码审查要点
1. 遵循项目代码规范
2. 添加必要的单元测试
3. 更新相关文档
4. 确保无安全漏洞
---
*最后更新: 2026-02-20*