6.6 KiB
6.6 KiB
REV004 / 分账现状对照摘要(2026-04-14)
1. 目的
本摘要用于把 旧设计、老数据字典、当前代码状态 三者放在一起,对“分账(SplitAdjust)”给出一页式结论,回答:
- 旧系统/旧设计里的分账到底是什么
- 当前 REV004 设计里把它定位成什么
- 当前后端代码做到哪一步了
- 三者之间的差距到底在哪里
2. 一句话结论
旧系统里的分账是“真正的账单拆分/重分摊业务对象”,有汇总表、明细表和拆分后的结果对象;当前 REV004 设计也把它定义为独立正式对象,但当前后端代码只落到了“分账申请态”,还没有落到“审批通过后真正拆账生成子账单”的执行态。
3. 旧设计口径(12_REV_Detailed.md)
来源:
../water-docs/docs/design/02_Detailed_Design/12_REV_Detailed.md
旧设计里怎么定义分账
文档明确把:
SplitAdjust列为:- 目标正式业务对象
- 并且属于:
- L2 独立业务层
旧设计里的关键语义
文档明确写到:
SplitAdjust | 分账调整 | 当前作为费用组成重分摊场景表达 | 支持按水量 / 按费用组成等分摊策略
并在迁移补充里写到:
- 分账调整汇总 / 明细
- 承接方式:
- 在线主模型 + 费用重分摊场景
- 需要保留:
- 原分摊结果
- 调整后结果
- 策略类型
- 责任链
从旧设计可得的结论
旧设计的分账不是普通字段修改,也不是一条审批备注,而是:
- 有独立业务语义
- 有汇总/明细层
- 有原结果与新结果的前后对照
- 有策略与责任链
4. 老数据字典口径(营收数据字典.md)
来源:
../water-docs/docs/design/04_Appendix/Archive/05_Data_Dictionary/营收数据字典.md
老系统真实表结构
4.1 汇总表
PM_SEPARATE_RECORDS
关键字段:
ApplicantMobileApplyTypeSeparateTypeStateRemarkTaskIdStepIdFlowRemarkBusinessType
4.2 明细表
PM_SEPARATE_RECORD_DETAILS
关键字段:
SeparateRecordIdCustId / CustCode / CustName / CustAddressFeeIdNewFeeIdBillMonthBillWater / NewBillWaterLateFee / NewLateFeeBillAmount / NewBillAmountExtendedAmount / NewExtendedAmountItemStrProcType / ProcPerson / ProcDate / ProcRemarkState
从老数据字典可得的结论
老系统里的分账已经明显是执行态对象,因为它不只是有申请信息,还已经有:
- 原费用对象:
FeeId - 新产生对象:
NewFeeId - 原水量 / 分账水量
- 原金额 / 新金额
- 原滞纳金 / 新滞纳金
- 费用组成
也就是说,老系统分账不是“申请单”,而是:
有申请、有明细、有拆后结果对象的完整业务表族。
5. 当前代码状态
来源:
sw-business/sw-business-server/src/main/java/.../AccountingAdjustProcessServiceImpl.javasw-business/sw-business-server/src/main/java/.../ChargeServiceImpl.java
当前入口
当前分账提交入口:
POST /admin-api/business/accounting-adjust/unsold-split-submit
调用路径:
AccountingAdjustProcessServiceImpl.createUnsoldSplit(...)- 转成统一账务调整:
objectType = SPLIT_ADJUSTadjustType = SPLIT
- 进入
chargeService.adjustAccounting(...)
当前真正处理逻辑
在 ChargeServiceImpl.handleSplitAdjust(...) 中,只做了:
approvalRequired = trueresultStatus = PENDING_APPROVALapprovalStatus = PENDING_APPROVALwriteBackStatus = PENDINGmessage = 账单拆分申请已提交,待审批needUpdate = false
当前校验逻辑
只校验:
- 原账单必须未收费
splitCount >= 2splitCount <= 12- 必须填写原因编码
- 必须填写调整原因
从当前代码可得的结论
当前代码实现的是:
- 分账申请态
没有做到:
- 生成分账主表/明细表
- 生成目标账单
- 回填新账单 ID
- 原账单失效/已拆分标记
- 执行态回看
6. 三者对照
| 对照维度 | 旧设计 | 老数据字典 | 当前代码 |
|---|---|---|---|
| 是否独立对象 | 是,SplitAdjust |
是,汇总表+明细表 | 语义上是,代码上仍挂统一入口 |
| 是否支持按水量 / 按费用组成 | 是 | 是(SeparateType) |
申请态支持对象类型,但未落执行规则 |
| 是否有汇总表 | 有方向 | 有真实表 | 当前没有真实表落地 |
| 是否有明细表 | 有方向 | 有真实表 | 当前没有真实表落地 |
| 是否有“原对象 -> 新对象”关系 | 有方向 | 有(FeeId -> NewFeeId) |
没有 |
| 是否有拆前拆后水量/金额 | 有方向 | 有 | 没有执行态数据 |
| 是否只到审批申请 | 否 | 否 | 是 |
| 是否真正生成子账单 | 应该要 | 已有新费用ID表达 | 当前未实现 |
7. 当前最大的差距
最核心的差距不是“少几个字段”,而是:
旧系统 / 旧设计的分账
是:
- 完整业务对象
- 有结果承接
- 有拆后对象
当前 REV004 代码的分账
只是:
- 申请态入口
- 待审批状态表达
- 统一日志/查询承接
所以差距本质上是:
从“受理态”到“执行态”的整层能力还没有落。
8. 为什么会停在这里
结合三者判断,原因可以归纳成:
- 当前这轮 REV004 后端优先目标是统一入口、状态、日志、查询,不是重建所有独立执行对象。
- 真正分账执行涉及:
- 分摊规则
- 主表/明细表
- 目标账单生成
- 守恒校验
- 收费/开票承接
- 因此当前才先落成:
SPLIT_ADJUST申请态
而没有一步到位落成:
SplitAdjust执行态。
9. 最终判断
业务真值
分账本质上是:
- 账单拆分 / 重分摊
- 不是退款
- 不是减免
- 也不只是审批单
当前状态
当前 REV004:
- 已经把“分账”纳入正式对象语义
- 但后端实现仍停在申请态
最适合对外讲的一句话
旧系统与旧设计里的分账本来就是“有汇总、有明细、有拆后结果对象”的正式业务对象;当前 REV004 后端只先落了统一申请与审批承接,没有把真正的拆账执行态一起落出来,所以它现在更像“分账申请”,还不是“已执行的分账对象”。
10. 建议下一步
若要继续推进分账执行态,建议:
- 以老表结构 + 旧设计为真值来源,先冻结最小执行态模型
- 先做按水量分账 MVP
- 再扩按费用组成分账
- 最后补前端执行态页面与回看能力