427 lines
24 KiB
Markdown
427 lines
24 KiB
Markdown
# 财务域功能详细设计文档(反推自代码)
|
||
|
||
**文档类型**: 反推设计文档(基于实际代码逆向分析)
|
||
**生成日期**: 2026-04-23
|
||
**分析方法**: 全量搜索 ether-pms 后端代码 + ether-admin 前端代码
|
||
**对比基线**: `ether-docs/02-DESIGN/domains/04-FINANCE.md`
|
||
|
||
---
|
||
|
||
## 一、领域概述(当前实现状态)
|
||
|
||
### 1.1 总体结论
|
||
|
||
**财务域核心功能(FeeItem / FeeBill / FeePayment / FeeRefund)均未实现。** 不存在 `module-finance` 模块,不存在任何 `fin_*` 数据库表,不存在任何收费/账单/支付/退款相关的后端实体、服务或控制器。
|
||
|
||
当前已实现的与财务域有间接关联的功能,仅有 **能耗计量管理**(EnergyMeter / EnergyConsumption),归属在 `module-mdm` 模块中,实现了能耗数据的采集和简单费用计算(消耗量 × 单价),但未与账单系统对接。
|
||
|
||
### 1.2 实现状态总览
|
||
|
||
| 功能模块 | 设计文档状态 | 实际代码状态 | 差异 |
|
||
|---------|------------|------------|------|
|
||
| FeeItem(收费项目) | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
|
||
| FeeBill(收费账单) | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
|
||
| FeePayment(支付记录) | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
|
||
| FeeRefund(退款记录) | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
| 费用催缴定时任务 | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
|
||
| 滞纳金计算 | 🟢 已实现 | 🔴 **未实现** | 设计文档与实际代码不符 |
|
||
| 能耗计量管理 | 未在设计文档中 | 🟢 **已实现** | 在 module-mdm 中实现 |
|
||
| 能耗费用计算 | 未在设计文档中 | 🟢 **已实现** | 简单的 consumption × unitPrice |
|
||
| 支付网关对接 | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
| 财务报表 | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
|
||
### 1.3 关键发现
|
||
|
||
1. **`module-finance` 模块不存在** — 在 `ether-pms` 中无此目录
|
||
2. **`fin_*` 数据库表不存在** — 无 FeeItem / FeeBill / FeePayment / FeeRefund 对应的表
|
||
3. **设计文档 04-FINANCE.md 标注"已实现"的功能实际未实现** — 文档中 FeeItem/FeeBill/FeePayment 标记为 🟢 已实现,但代码中找不到任何对应实体
|
||
4. **能耗管理在 module-mdm 中实现** — EnergyMeter / EnergyConsumption 实体、服务、控制器、前端页面均已实现
|
||
5. **前端无任何财务相关页面** — ether-admin 中无 fee/bill/payment/refund 相关视图,仅有 energy 相关视图
|
||
6. **员工端/业主端无财务功能** — ether-app-employee 和 ether-app-owner 中无任何财务相关代码
|
||
|
||
---
|
||
|
||
## 二、已实现的数据结构(能耗计量相关实体)
|
||
|
||
### 2.1 EnergyMeter(能源计量点)
|
||
|
||
**所在模块**: `module-mdm`
|
||
**数据库表**: `ops_energy_meter`
|
||
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyMeter.java`
|
||
|
||
| 字段名 | 类型 | 数据库列名 | 约束 | 说明 |
|
||
|--------|------|-----------|------|------|
|
||
| id | UUID | id | PK | 主键 |
|
||
| projectId | UUID | project_id | NOT NULL | 所属项目 |
|
||
| meterCode | String | meter_code | NOT NULL, UNIQUE | 计量点编码(自动生成:EM + yyyyMMddHHmmss) |
|
||
| meterName | String | meter_name | NOT NULL | 计量点名称 |
|
||
| energyType | EnergyType | energy_type | NOT NULL | 能源类型枚举 |
|
||
| spaceNodeId | UUID | space_node_id | — | 关联空间节点 |
|
||
| installationLocation | String | installation_location | — | 安装位置 |
|
||
| ratedCapacity | BigDecimal(10,2) | rated_capacity | — | 额定容量 |
|
||
| unitPrice | BigDecimal(10,4) | unit_price | — | 单价(用于费用计算) |
|
||
| status | Status | status | NOT NULL | 状态枚举,默认 ACTIVE |
|
||
| createdAt | LocalDateTime | created_at | — | 创建时间 |
|
||
| updatedAt | LocalDateTime | updated_at | — | 更新时间 |
|
||
|
||
**枚举定义**:
|
||
|
||
```java
|
||
public enum EnergyType {
|
||
LIGHTING("照明插座用电"),
|
||
HVAC("空调用电"),
|
||
POWER("动力用电"),
|
||
SPECIAL("特殊用电"),
|
||
WATER("给排水"),
|
||
GAS("燃气");
|
||
}
|
||
|
||
public enum Status {
|
||
ACTIVE, INACTIVE
|
||
}
|
||
```
|
||
|
||
**与原设计文档的差异**:
|
||
|
||
| 项目 | 原设计(04-FINANCE.md) | 实际实现 | 差异说明 |
|
||
|------|------------------------|---------|---------|
|
||
| 所属模块 | ether-finance | module-mdm | 归属不同模块 |
|
||
| 能源类型 | FeeType: PROPERTY/PARKING/WATER/ELECTRICITY/GAS/HEATING/REPAIR_FUND/OTHER | EnergyType: LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS | 实际更细分(按用电分项),但缺少供暖、物业费等 |
|
||
| 单价精度 | NUMERIC(12,2) | BigDecimal(10,4) | 实际精度更高(4位小数) |
|
||
| 计费方式 | BillingMethod: FIXED/AREA/USAGE/CUSTOM | 无 | 未实现计费方式枚举 |
|
||
| 账期/到期日 | billDay/dueDay/overdueDay | 无 | 未实现账期管理 |
|
||
| 滞纳金 | enableLateFee/lateFeeRate/maxLateFee | 无 | 未实现滞纳金 |
|
||
|
||
### 2.2 EnergyConsumption(能耗记录)
|
||
|
||
**所在模块**: `module-mdm`
|
||
**数据库表**: `ops_energy_consumption`
|
||
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyConsumption.java`
|
||
|
||
| 字段名 | 类型 | 数据库列名 | 约束 | 说明 |
|
||
|--------|------|-----------|------|------|
|
||
| id | UUID | id | PK | 主键 |
|
||
| projectId | UUID | project_id | NOT NULL | 所属项目 |
|
||
| meterId | UUID | meter_id | NOT NULL | 关联计量点 |
|
||
| consumptionDate | LocalDate | consumption_date | NOT NULL | 记录日期 |
|
||
| previousReading | BigDecimal(12,2) | previous_reading | — | 上次读数 |
|
||
| currentReading | BigDecimal(12,2) | current_reading | — | 当前读数 |
|
||
| consumption | BigDecimal(12,2) | consumption | NOT NULL | 消耗量 = current − previous |
|
||
| amount | BigDecimal(10,2) | amount | — | 费用 = consumption × unitPrice |
|
||
| recordedBy | UUID | recorded_by | — | 记录人 |
|
||
| recordMethod | RecordMethod | record_method | — | 记录方式,默认 MANUAL |
|
||
| remarks | String(1000) | remarks | — | 备注 |
|
||
| createdAt | LocalDateTime | created_at | — | 创建时间 |
|
||
|
||
**数据库索引**:
|
||
|
||
```sql
|
||
idx_ec_meter_date -- (meter_id, consumption_date)
|
||
idx_ec_project_date -- (project_id, consumption_date)
|
||
```
|
||
|
||
**枚举定义**:
|
||
|
||
```java
|
||
public enum RecordMethod {
|
||
MANUAL, // 手动录入
|
||
IOT // IoT自动采集
|
||
}
|
||
```
|
||
|
||
**与原设计文档的差异**:
|
||
|
||
| 项目 | 原设计(FeeBill) | 实际实现(EnergyConsumption) | 差异说明 |
|
||
|------|------------------|---------------------------|---------|
|
||
| 实体性质 | 账单(应收费用单据) | 能耗记录(抄表数据) | 本质不同,能耗记录不是账单 |
|
||
| 账单编号 | billNo | 无 | 无账单编号 |
|
||
| 关联业主 | ownerId | 无 | 未关联业主 |
|
||
| 关联房产 | spaceNodeId | 间接通过meter.spaceNodeId | 未直接关联 |
|
||
| 账期 | billPeriod/billDate/dueDate/overdueDate | consumptionDate | 无账期概念 |
|
||
| 金额体系 | amount/lateFee/discount/payableAmount/paidAmount | amount(仅计算值) | 无应收/已付/优惠/滞纳金 |
|
||
| 状态流转 | UNPAID/PARTIAL_PAID/PAID/OVERDUE/CANCELLED | 无状态 | 无支付状态 |
|
||
| 用量单位 | usageAmount + usageUnit | consumption | 无独立用量单位 |
|
||
|
||
---
|
||
|
||
## 三、已实现的API接口
|
||
|
||
### 3.1 后端API(EnergyController)
|
||
|
||
**基础路径**: `/api/ops/energy`
|
||
**源码位置**: `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java`
|
||
|
||
#### 3.1.1 计量点管理
|
||
|
||
| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|
||
|------|------|------|---------|---------|
|
||
| POST | `/meters` | 创建计量点 | EnergyMeter JSON | `ApiResponse<EnergyMeter>` |
|
||
| GET | `/meters` | 查询计量点列表 | projectId(必填), energyType(可选) | `ApiResponse<List<EnergyMeter>>` |
|
||
| GET | `/meters/{id}` | 获取计量点详情 | path: id | `ApiResponse<EnergyMeter>` |
|
||
| PUT | `/meters/{id}` | 更新计量点 | path: id, EnergyMeter JSON | `ApiResponse<EnergyMeter>` |
|
||
| DELETE | `/meters/{id}` | 删除计量点(软删除) | path: id | `ApiResponse<Void>` |
|
||
|
||
#### 3.1.2 能耗记录
|
||
|
||
| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|
||
|------|------|------|---------|---------|
|
||
| POST | `/consumption` | 录入能耗数据 | `{meterId, currentReading, recordedBy}` | `ApiResponse<EnergyConsumption>` |
|
||
| GET | `/consumption/{meterId}` | 查询能耗记录 | path: meterId, startDate(可选), endDate(可选) | `ApiResponse<List<EnergyConsumption>>` |
|
||
|
||
#### 3.1.3 能耗统计
|
||
|
||
| 方法 | 路径 | 说明 | 请求参数 | 响应类型 |
|
||
|------|------|------|---------|---------|
|
||
| GET | `/statistics/by-type` | 按类型统计消耗 | projectId, month(yyyy-MM-dd) | `ApiResponse<Map<EnergyType, BigDecimal>>` |
|
||
| GET | `/statistics/unit-consumption` | 单方能耗 | projectId, month(yyyy-MM-dd) | `ApiResponse<BigDecimal>` |
|
||
|
||
### 3.2 前端API封装
|
||
|
||
**源码位置**: `ether-admin/src/api/energy.ts`
|
||
|
||
| 函数名 | HTTP方法 | URL | 说明 |
|
||
|--------|---------|-----|------|
|
||
| `getEnergyMeters` | GET | `/api/ops/energy/meters` | 获取计量点列表 |
|
||
| `getEnergyMeter` | GET | `/api/ops/energy/meters/{id}` | 获取计量点详情 |
|
||
| `createEnergyMeter` | POST | `/api/ops/energy/meters` | 创建计量点 |
|
||
| `updateEnergyMeter` | PUT | `/api/ops/energy/meters/{id}` | 更新计量点 |
|
||
| `deleteEnergyMeter` | DELETE | `/api/ops/energy/meters/{id}` | 删除计量点 |
|
||
| `recordEnergyConsumption` | POST | `/api/ops/energy/consumption` | 录入能耗 |
|
||
| `getEnergyConsumption` | GET | `/api/ops/energy/consumption/{meterId}` | 获取能耗记录 |
|
||
| `getConsumptionByType` | GET | `/api/ops/energy/statistics/by-type` | 按类型统计 |
|
||
| `getUnitConsumption` | GET | `/api/ops/energy/statistics/unit-consumption` | 单方能耗 |
|
||
|
||
### 3.3 前端页面路由
|
||
|
||
**源码位置**: `ether-admin/src/router/index.ts`
|
||
|
||
| 路径 | 路由名 | 组件 | 说明 |
|
||
|------|--------|------|------|
|
||
| `energy/meters` | EnergyMeters | `views/energy/MeterList.vue` | 计量点管理 |
|
||
| `energy/consumption` | EnergyConsumption | `views/energy/ConsumptionRecord.vue` | 能耗录入 |
|
||
| `energy/statistics` | EnergyStatistics | `views/energy/EnergyStatistics.vue` | 能耗统计 |
|
||
|
||
---
|
||
|
||
## 四、已实现的业务规则
|
||
|
||
### 4.1 计量点管理规则
|
||
|
||
| 规则 | 实现位置 | 说明 |
|
||
|------|---------|------|
|
||
| 编码自动生成 | `EnergyMeterServiceImpl.generateMeterCode()` | 格式:`EM` + `yyyyMMddHHmmss`,确保唯一性(冲突时追加后缀) |
|
||
| 默认状态 | `EnergyMeterServiceImpl.createMeter()` | 新建计量点默认状态为 ACTIVE |
|
||
| 软删除 | `EnergyMeterServiceImpl.deleteMeter()` | 删除操作将状态设为 INACTIVE,非物理删除 |
|
||
| 查询过滤 | `EnergyMeterRepository.findByProjectIdAndStatus()` | 按项目查询时仅返回 ACTIVE 状态的计量点 |
|
||
| 部分更新 | `EnergyMeterServiceImpl.updateMeter()` | 仅更新非空字段 |
|
||
|
||
### 4.2 能耗录入规则
|
||
|
||
| 规则 | 实现位置 | 说明 |
|
||
|------|---------|------|
|
||
| 仪表状态校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 只能对 ACTIVE 状态的仪表进行抄表(错误码 6102) |
|
||
| 读数递增校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 当前读数不能小于上次读数(错误码 6103) |
|
||
| 仪表存在性校验 | `EnergyConsumptionServiceImpl.recordConsumption()` | 仪表不存在时抛出异常(错误码 6101) |
|
||
| 自动获取上次读数 | `EnergyConsumptionServiceImpl.recordConsumption()` | 从最近一条记录获取 previousReading,首次抄表为 0 |
|
||
| 自动计算消耗量 | `EnergyConsumptionServiceImpl.recordConsumption()` | consumption = currentReading − previousReading |
|
||
| 自动计算费用 | `EnergyConsumptionServiceImpl.recordConsumption()` | amount = consumption × meter.unitPrice(单价为空时为 0) |
|
||
| 默认手动录入 | `EnergyConsumptionServiceImpl.recordConsumption()` | recordMethod 默认设为 MANUAL |
|
||
|
||
### 4.3 能耗统计规则
|
||
|
||
| 规则 | 实现位置 | 说明 |
|
||
|------|---------|------|
|
||
| 按月统计 | `EnergyConsumptionServiceImpl.getConsumptionByType()` | 根据 month 参数计算月份起止日期 |
|
||
| 类型初始化 | `EnergyConsumptionServiceImpl.getConsumptionByType()` | 所有 EnergyType 初始化为 BigDecimal.ZERO |
|
||
| 按类型汇总(简化) | `EnergyConsumptionServiceImpl.getConsumptionByType()` | ⚠️ 当前实现将项目总消耗全部归入 LIGHTING 类型,未按 meter.energyType 真正分项汇总 |
|
||
| 单方能耗 | `EnergyConsumptionServiceImpl.getUnitConsumption()` | 遍历项目所有 ACTIVE 计量点,累加月度消耗量 |
|
||
|
||
### 4.4 已知实现缺陷
|
||
|
||
| 缺陷 | 严重度 | 说明 |
|
||
|------|--------|------|
|
||
| 按类型统计不准确 | 🔴 高 | `getConsumptionByType()` 将总消耗全部归入 LIGHTING,代码注释也承认"实际业务中应按 meter.energyType 汇总" |
|
||
| 前后端能源类型不一致 | 🟡 中 | 后端 EnergyType 枚举为 LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS,前端 energyTypeMap 为 ELECTRICITY/WATER/GAS/CENTRAL_HEATING/CENTRAL_COOLING |
|
||
| 无账期概念 | 🟡 中 | 能耗记录只有 consumptionDate,无账单周期、到期日等概念 |
|
||
| 费用仅为计算值 | 🟡 中 | amount 字段仅是 consumption × unitPrice 的计算结果,非正式账单金额 |
|
||
| 无支付流程 | 🔴 高 | 无支付记录、支付状态、支付方式等 |
|
||
| 无业主关联 | 🟡 中 | 能耗记录不关联业主,无法按业主统计费用 |
|
||
|
||
---
|
||
|
||
## 五、与原需求文档 04-FINANCE.md 的差异对比表
|
||
|
||
### 5.1 实体级差异
|
||
|
||
| 设计项 | 04-FINANCE.md 设计方案 | 实际代码实现 | 差异等级 |
|
||
|--------|----------------------|------------|---------|
|
||
| **FeeItem 实体** | 已定义完整实体(code/name/type/billingMethod/unitPrice/unit/billDay/dueDay/overdueDay/enableLateFee/lateFeeRate/maxLateFee) | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **FeeBill 实体** | 已定义完整实体(billNo/feeItemId/spaceNodeId/ownerId/billPeriod/billDate/dueDate/overdueDate/usageAmount/amount/lateFee/discount/payableAmount/paidAmount/status) | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **FeePayment 实体** | 已定义完整实体(paymentNo/amount/method/thirdPartyNo/status/failReason/paymentTime) | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **FeeRefund 实体** | 已定义完整实体(refundNo/amount/reason/status/approverId/approveTime/thirdPartyRefundNo/refundTime) | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **fin_fee_item 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **fin_fee_bill 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **fin_fee_payment 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **fin_fee_refund 表** | 已定义 DDL | ❌ 不存在 | 🔴 完全缺失 |
|
||
| **EnergyMeter 实体** | 未在设计文档中 | ✅ 在 module-mdm 中实现 | 🟡 设计文档遗漏 |
|
||
| **EnergyConsumption 实体** | 未在设计文档中 | ✅ 在 module-mdm 中实现 | 🟡 设计文档遗漏 |
|
||
| **ops_energy_meter 表** | 未在设计文档中 | ✅ 已创建 | 🟡 设计文档遗漏 |
|
||
| **ops_energy_consumption 表** | 未在设计文档中 | ✅ 已创建 | 🟡 设计文档遗漏 |
|
||
|
||
### 5.2 功能级差异
|
||
|
||
| 功能 | 04-FINANCE.md 状态 | 实际状态 | 差异说明 |
|
||
|------|-------------------|---------|---------|
|
||
| 收费项目管理(CRUD) | 🟢 已实现 | 🔴 未实现 | 无 FeeItem 代码 |
|
||
| 账单生成 | 🟢 已实现 | 🔴 未实现 | 无 FeeBill 代码 |
|
||
| 账单状态流转 | 🟢 已实现 | 🔴 未实现 | 无状态机 |
|
||
| 支付处理 | 🟢 已实现 | 🔴 未实现 | 无 FeePayment 代码 |
|
||
| 费用催缴(定时任务) | 🟢 已实现 | 🔴 未实现 | 无 FeeReminderJob 代码 |
|
||
| 滞纳金计算 | 🟢 已实现 | 🔴 未实现 | 无计算逻辑 |
|
||
| 退款流程 | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
| 支付网关对接 | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
| 财务报表 | 🔴 未实现 | 🔴 未实现 | 一致 |
|
||
| 能耗计量点管理 | 未提及 | 🟢 已实现 | 设计文档遗漏 |
|
||
| 能耗抄表录入 | 未提及 | 🟢 已实现 | 设计文档遗漏 |
|
||
| 能耗费用计算 | 未提及 | 🟢 已实现(简化) | 设计文档遗漏 |
|
||
| 能耗统计分析 | 未提及 | 🟢 已实现(有缺陷) | 设计文档遗漏 |
|
||
|
||
### 5.3 枚举差异
|
||
|
||
| 枚举 | 04-FINANCE.md 定义 | 实际代码定义 | 差异 |
|
||
|------|-------------------|------------|------|
|
||
| 收费类型 FeeType | PROPERTY/PARKING/WATER/ELECTRICITY/GAS/HEATING/REPAIR_FUND/OTHER | ❌ 不存在 | 完全缺失 |
|
||
| 计费方式 BillingMethod | FIXED/AREA/USAGE/CUSTOM | ❌ 不存在 | 完全缺失 |
|
||
| 账单状态 BillStatus | UNPAID/PARTIAL_PAID/PAID/OVERDUE/CANCELLED | ❌ 不存在 | 完全缺失 |
|
||
| 支付方式 PaymentMethod | WECHAT/ALIPAY/CASH/BANK_TRANSFER/CARD | ❌ 不存在 | 完全缺失 |
|
||
| 支付状态 PaymentStatus | PENDING/SUCCESS/FAILED/REFUNDED | ❌ 不存在 | 完全缺失 |
|
||
| 退款状态 RefundStatus | PENDING/APPROVED/REJECTED/REFUNDED | ❌ 不存在 | 完全缺失 |
|
||
| 能源类型 EnergyType | 未定义 | LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS | 设计文档遗漏 |
|
||
| 记录方式 RecordMethod | 未定义 | MANUAL/IOT | 设计文档遗漏 |
|
||
|
||
---
|
||
|
||
## 六、待实现功能清单
|
||
|
||
### 6.1 P0 — 核心财务功能(必须实现)
|
||
|
||
| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|
||
|------|------|------|------|-----------|
|
||
| FIN-001 | 创建 module-finance 模块 | 独立的财务模块,包含 entity/service/controller/repository 分层 | 无 | 0.5天 |
|
||
| FIN-002 | FeeItem 收费项目实体 | 含 code/name/type/billingMethod/unitPrice/unit/billDay/dueDay/overdueDay/enableLateFee/lateFeeRate/maxLateFee | FIN-001 | 1天 |
|
||
| FIN-003 | FeeItem CRUD API | 创建/查询/更新/禁用收费项目 | FIN-002 | 1.5天 |
|
||
| FIN-004 | FeeBill 账单实体 | 含 billNo/feeItemId/spaceNodeId/ownerId/billPeriod/billDate/dueDate/overdueDate/amount/lateFee/discount/payableAmount/paidAmount/status | FIN-002 | 1.5天 |
|
||
| FIN-005 | 账单自动生成 | 根据收费项目规则,按账期自动生成账单 | FIN-003, FIN-004 | 3天 |
|
||
| FIN-006 | 账单状态流转 | UNPAID → PARTIAL_PAID → PAID / OVERDUE → CANCELLED | FIN-004 | 1天 |
|
||
| FIN-007 | FeePayment 支付记录实体 | 含 paymentNo/amount/method/thirdPartyNo/status/failReason/paymentTime | FIN-004 | 1天 |
|
||
| FIN-008 | 支付记录 API | 线下收款登记、支付记录查询 | FIN-007 | 1.5天 |
|
||
| FIN-009 | 能耗数据与账单对接 | 将 EnergyConsumption 的 amount 作为按用量计费的账单数据来源 | FIN-005, 能耗模块 | 2天 |
|
||
| FIN-010 | 财务管理前端页面 | 收费项目/账单/支付记录的管理页面 | FIN-003, FIN-006, FIN-008 | 4天 |
|
||
|
||
### 6.2 P1 — 重要功能(近期实现)
|
||
|
||
| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|
||
|------|------|------|------|-----------|
|
||
| FIN-011 | 费用催缴定时任务 | 到期提醒(3天内)、逾期催缴、周汇总 | FIN-006 | 2天 |
|
||
| FIN-012 | 滞纳金自动计算 | 逾期天数 × 日利率,不超过上限 | FIN-006, FIN-002 | 1.5天 |
|
||
| FIN-013 | FeeRefund 退款实体与流程 | 退款申请 → 审批 → 执行 | FIN-007 | 3天 |
|
||
| FIN-014 | 业主端缴费功能 | 业主查看账单、在线缴费 | FIN-006, FIN-008 | 3天 |
|
||
| FIN-015 | 修复能耗按类型统计 | getConsumptionByType() 应按 meter.energyType 真正分项汇总 | 无 | 0.5天 |
|
||
| FIN-016 | 统一前后端能源类型枚举 | 后端 LIGHTING/HVAC/POWER/SPECIAL/WATER/GAS 与前端 ELECTRICITY/WATER/GAS/CENTRAL_HEATING/CENTRAL_COOLING 对齐 | 无 | 0.5天 |
|
||
|
||
### 6.3 P2 — 增强功能(中期实现)
|
||
|
||
| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|
||
|------|------|------|------|-----------|
|
||
| FIN-017 | 支付网关对接 | 微信支付/支付宝 SDK 集成 | FIN-008 | 5天 |
|
||
| FIN-018 | 财务报表 | 收费统计、欠费分析、收入趋势 | FIN-006, FIN-008 | 4天 |
|
||
| FIN-019 | 按面积计费 | 根据房产面积 × 单价计算物业费 | FIN-002, 空间节点面积数据 | 2天 |
|
||
| FIN-020 | 固定金额计费 | 每月固定金额的收费项目(如停车费) | FIN-002 | 1天 |
|
||
| FIN-021 | 批量账单生成 | 一次性为项目所有业主生成账单 | FIN-005 | 2天 |
|
||
| FIN-022 | 账单导出 | 导出 Excel/PDF 格式账单 | FIN-006 | 1.5天 |
|
||
| FIN-023 | IoT 自动抄表 | 对接 IoT 平台自动采集能耗数据 | 能耗模块 | 3天 |
|
||
|
||
### 6.4 P3 — 远期规划
|
||
|
||
| 编号 | 功能 | 说明 | 依赖 | 预估工作量 |
|
||
|------|------|------|------|-----------|
|
||
| FIN-024 | 自定义计费规则 | 支持阶梯电价、分时计费等复杂规则 | FIN-002 | 5天 |
|
||
| FIN-025 | 预缴费管理 | 业主预存费用、自动扣款 | FIN-008 | 3天 |
|
||
| FIN-026 | 发票管理 | 开票申请、发票打印 | FIN-008 | 3天 |
|
||
| FIN-027 | 对账功能 | 支付流水与银行流水对账 | FIN-017 | 3天 |
|
||
| FIN-028 | 财务审批流 | 大额退款、减免审批流程 | FIN-013 | 4天 |
|
||
|
||
---
|
||
|
||
## 七、架构建议
|
||
|
||
### 7.1 模块归属调整
|
||
|
||
当前能耗管理(EnergyMeter / EnergyConsumption)放在 `module-mdm` 中,建议:
|
||
|
||
- **方案A(推荐)**: 保持能耗管理在 module-mdm,财务域通过接口引用能耗数据。能耗是基础数据(MDM),费用计算是业务逻辑(Finance),职责分离清晰。
|
||
- **方案B**: 将能耗管理迁移至 module-finance。耦合度高,不推荐。
|
||
|
||
### 7.2 数据流设计
|
||
|
||
```
|
||
EnergyMeter (module-mdm) FeeItem (module-finance)
|
||
│ │
|
||
▼ ▼
|
||
EnergyConsumption ──费用计算──→ FeeBill (自动/手动生成)
|
||
(抄表数据) │
|
||
▼
|
||
FeePayment (支付记录)
|
||
│
|
||
▼
|
||
FeeRefund (退款记录)
|
||
```
|
||
|
||
### 7.3 设计文档修正建议
|
||
|
||
04-FINANCE.md 中标记 FeeItem/FeeBill/FeePayment 为"🟢 已实现"与实际代码不符,建议:
|
||
|
||
1. 将 FeeItem/FeeBill/FeePayment/FeeReminderJob 的状态修正为"🔴 未实现"
|
||
2. 补充 EnergyMeter / EnergyConsumption 的设计说明
|
||
3. 明确能耗管理与财务计费的边界和对接方式
|
||
|
||
---
|
||
|
||
## 八、代码文件索引
|
||
|
||
### 8.1 后端文件
|
||
|
||
| 文件 | 路径 |
|
||
|------|------|
|
||
| EnergyMeter 实体 | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyMeter.java` |
|
||
| EnergyConsumption 实体 | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/entity/EnergyConsumption.java` |
|
||
| EnergyController | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java` |
|
||
| EnergyMeterService | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/EnergyMeterService.java` |
|
||
| EnergyMeterServiceImpl | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyMeterServiceImpl.java` |
|
||
| EnergyConsumptionService | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/EnergyConsumptionService.java` |
|
||
| EnergyConsumptionServiceImpl | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java` |
|
||
| EnergyMeterRepository | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/repository/EnergyMeterRepository.java` |
|
||
| EnergyConsumptionRepository | `ether-pms/module-mdm/src/main/java/com/ether/pms/mdm/repository/EnergyConsumptionRepository.java` |
|
||
| EnergyMeterServiceTest | `ether-pms/module-mdm/src/test/java/com/ether/pms/mdm/service/EnergyMeterServiceTest.java` |
|
||
|
||
### 8.2 前端文件
|
||
|
||
| 文件 | 路径 |
|
||
|------|------|
|
||
| 能耗 API | `ether-admin/src/api/energy.ts` |
|
||
| 计量点管理页面 | `ether-admin/src/views/energy/MeterList.vue` |
|
||
| 能耗录入页面 | `ether-admin/src/views/energy/ConsumptionRecord.vue` |
|
||
| 能耗统计页面 | `ether-admin/src/views/energy/EnergyStatistics.vue` |
|
||
| 路由配置(能耗部分) | `ether-admin/src/router/index.ts` (L121-135) |
|
||
|
||
### 8.3 文档文件
|
||
|
||
| 文件 | 路径 |
|
||
|------|------|
|
||
| 原设计文档 | `ether-docs/02-DESIGN/domains/04-FINANCE.md` |
|
||
| 特性清单 | `ether-docs/01-REQUIREMENTS/FEATURE_LIST.md` |
|
||
|
||
---
|
||
|
||
> **文档说明**: 本文档基于 2026-04-23 对 ether-pms 和 ether-admin 代码库的全量搜索结果生成。核心结论:财务域的 FeeItem/FeeBill/FeePayment/FeeRefund 四大实体及所有相关功能均未在代码中实现,仅能耗计量管理(EnergyMeter/EnergyConsumption)在 module-mdm 中有完整实现。04-FINANCE.md 中标注"已实现"的状态需修正。
|