# 财务域功能详细设计文档(反推自代码) **文档类型**: 反推设计文档(基于实际代码逆向分析) **生成日期**: 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` | | GET | `/meters` | 查询计量点列表 | projectId(必填), energyType(可选) | `ApiResponse>` | | GET | `/meters/{id}` | 获取计量点详情 | path: id | `ApiResponse` | | PUT | `/meters/{id}` | 更新计量点 | path: id, EnergyMeter JSON | `ApiResponse` | | DELETE | `/meters/{id}` | 删除计量点(软删除) | path: id | `ApiResponse` | #### 3.1.2 能耗记录 | 方法 | 路径 | 说明 | 请求参数 | 响应类型 | |------|------|------|---------|---------| | POST | `/consumption` | 录入能耗数据 | `{meterId, currentReading, recordedBy}` | `ApiResponse` | | GET | `/consumption/{meterId}` | 查询能耗记录 | path: meterId, startDate(可选), endDate(可选) | `ApiResponse>` | #### 3.1.3 能耗统计 | 方法 | 路径 | 说明 | 请求参数 | 响应类型 | |------|------|------|---------|---------| | GET | `/statistics/by-type` | 按类型统计消耗 | projectId, month(yyyy-MM-dd) | `ApiResponse>` | | GET | `/statistics/unit-consumption` | 单方能耗 | projectId, month(yyyy-MM-dd) | `ApiResponse` | ### 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 中标注"已实现"的状态需修正。