# 简化账单架构 — 删除3张bill表 ## Context 当前能源模块有3层架构:原始记录 → energy_bill_detail(统一明细) → 3张bill表(按费用类型拆分的账单)。 实际业务中扣费发生在审核通过创建 bill_detail 时(立即扣),不需要月度账单汇总。 ETC 和电费的 bill 服务是未实现的 stub(`throw UnsupportedOperationException`),氢费 bill 服务虽然实现了但当前阶段不需要账单汇总、站方确认、提交财务等功能。 简化为:原始记录 → 审核 → energy_bill_detail(终态表,直接扣费)。billing 页面直接查 bill_detail 按 feeType 过滤。 ## 改动范围 ### 删除文件(~30个) **Controller (3):** - `modules/energy/controller/EnergyBillController.java` - `modules/etc/controller/EtcBillController.java` - `modules/electricity/controller/ElectricityBillController.java` **Service (4-6):** - `modules/energy/service/IEnergyBillService.java` + `impl/EnergyBillServiceImpl.java` - `modules/etc/service/IEtcBillService.java` + `impl/EtcBillServiceImpl.java`(如存在) - `modules/electricity/service/IElectricityBillService.java` + `impl/ElectricityBillServiceImpl.java`(如存在) - `modules/energy/service/IBillAdjustmentService.java` + `impl/BillAdjustmentServiceImpl.java`(如存在) **Mapper (3-4):** - `modules/energy/mapper/EnergyHydrogenBillMapper.java` - `modules/energy/mapper/EnergyBillAdjustmentMapper.java`(如存在) - `modules/etc/mapper/EnergyEtcBillMapper.java` - `modules/electricity/mapper/EnergyElectricityBillMapper.java` **Entity PO (4):** - `modules/energy/entity/bill/po/EnergyHydrogenBill.java` - `modules/energy/entity/bill/po/EnergyBillAdjustment.java`(如存在) - `modules/etc/entity/bill/po/EnergyEtcBill.java` - `modules/electricity/entity/bill/po/EnergyElectricityBill.java` **Entity VO/Query/Req(整个 bill 子包):** - `modules/energy/entity/bill/vo/` — 所有 VO(EnergyBillVO, EnergyBillDetailVO, BillPreviewVO, BillStatisticsVO, BillAdjustmentVO) - `modules/energy/entity/bill/query/BillQuery.java` - `modules/energy/entity/bill/req/` — 所有 Req(BillGenerateReq, BillReviewReq, AddAdjustmentReq) - `modules/etc/entity/bill/vo/EtcBillVO.java` - `modules/etc/entity/bill/req/EtcBillGenerateReq.java` - `modules/electricity/entity/bill/vo/ElectricityBillVO.java` - `modules/electricity/entity/bill/req/ElectricityBillGenerateReq.java` **State Machine(如存在):** - `modules/energy/statemachine/BillStatusMachine.java` **Finance 相关(仅删 bill 部分):** - `modules/energy/service/finance/model/BillSubmitRequest.java` - FinanceService 接口中的 `submitBill` 方法需移除 ### 修改文件 | 文件 | 改动 | |---|---| | `entity/billdetail/po/EnergyBillDetail.java` | 删除 `billId` 字段 | | `entity/billdetail/vo/EnergyBillDetailVO.java` | 删除 `billId` 字段 | | `service/impl/EnergyBillDetailServiceImpl.java` | toVO 中删除 `.billId()` | | `entity/detail/po/EnergyHydrogenDetail.java` | 删除 `billId` 字段 | | `entity/detail/vo/EnergyDetailVO.java` | 删除 `billId` 字段 | | `entity/account/po/EnergyAccountTransaction.java` | 删除 `relatedBillId` 字段 | | `entity/account/vo/TransactionVO.java` | 删除 `relatedBillId` 字段 | | `service/impl/EnergyAccountTransactionServiceImpl.java` | toVO 中删除 `.relatedBillId()` | | `service/finance/FinanceService.java` | 删除 `submitBill` 方法签名 | | `service/finance/LocalFinanceServiceImpl.java` | 删除 `submitBill` 实现 | ### SQL 迁移 新建 `db/energy/V3__drop_bill_rollup_tables.sql`: ```sql DROP TABLE IF EXISTS energy_bill_adjustment; DROP TABLE IF EXISTS energy_hydrogen_bill; DROP TABLE IF EXISTS energy_etc_bill; DROP TABLE IF EXISTS energy_electricity_bill; ALTER TABLE energy_bill_detail DROP COLUMN IF EXISTS bill_id; ALTER TABLE energy_hydrogen_detail DROP COLUMN IF EXISTS bill_id; ALTER TABLE etc_toll_record DROP COLUMN IF EXISTS bill_id; ALTER TABLE energy_account_transaction DROP COLUMN IF EXISTS related_bill_id; ``` ## 执行顺序 1. **删除所有 bill 相关 Java 文件** 2. **修改 8 个文件**(删除 billId/relatedBillId 字段引用) 3. **编译验证**(确保无断裂引用) 4. **提交并推送** 5. **部署后执行 SQL 迁移** ## 不动的部分 - energy_bill_detail 表 + Controller + Service(核心,保留) - 所有原始记录表和相关代码(station/etc/electricity 模块的 record 部分) - 事件系统和监听器 - 审核流程(RawRecordReviewServiceImpl) - 扣款服务(DeductionService) - 前端(用户自行调整 API 路径) ## 验证 1. 编译通过:`mvn compile` 无错误 2. 直接访问 `GET http://localhost:8702/energy/bill-detail/page?feeType=1` 返回数据 3. 原有的 `/energy/bill/page`、`/etc/bill/page`、`/electricity/bill/page` 返回 404(已删除) 4. 审核+扣费流程不受影响