ether-docs/_archive/domains-old/REVERSE-FINANCE.md

427 lines
24 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.

# 财务域功能详细设计文档(反推自代码)
**文档类型**: 反推设计文档(基于实际代码逆向分析)
**生成日期**: 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 后端APIEnergyController
**基础路径**: `/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 中标注"已实现"的状态需修正。