From 107bba565f512797bb15acef6352d2482e2594f1 Mon Sep 17 00:00:00 2001 From: tangweijie <877588133@qq.com> Date: Mon, 18 May 2026 17:37:36 +0800 Subject: [PATCH] docs(rev004): add formal document snapshots (RWB-01~RWB-04) --- .../2026-04-03-RWB-01-12_REV_Detailed.md | 721 +++ .../2026-04-03-RWB-02-01_Database_Design.md | 2082 ++++++++ .../2026-04-03-RWB-03-03_Interface_Design.md | 1808 +++++++ .../2026-04-03-RWB-04-03_Summary_Design.md | 4231 +++++++++++++++++ 4 files changed, 8842 insertions(+) create mode 100644 docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-01/2026-04-03-RWB-01-12_REV_Detailed.md create mode 100644 docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-02/2026-04-03-RWB-02-01_Database_Design.md create mode 100644 docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-03/2026-04-03-RWB-03-03_Interface_Design.md create mode 100644 docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-04/2026-04-03-RWB-04-03_Summary_Design.md diff --git a/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-01/2026-04-03-RWB-01-12_REV_Detailed.md b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-01/2026-04-03-RWB-01-12_REV_Detailed.md new file mode 100644 index 0000000..0b120f2 --- /dev/null +++ b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-01/2026-04-03-RWB-01-12_REV_Detailed.md @@ -0,0 +1,721 @@ +--- +doc_id: DT-12-REV +doc_role: module_body +authority: secondary +scope: 详细设计-营收业务 +source_of_truth: false +last_reviewed: 2026-03-11 +retrieval_priority: P1 +--- + +# 福建水务营收系统详细设计-营收业务模块正文 + +## 章节导航(精简) + +- [文档定位](#sec-position) +- [营收业务详细设计正文](#sec-content) + - [营收模块统一约束](#sec-rev-rules) + - [接口与数据追溯矩阵](#sec-rev-trace) + - [REV-001 客户资料管理](#mod-rev-001) + - [REV-002 抄表开账](#mod-rev-002) + - [REV-003 营业收费](#mod-rev-003) + - [REV-004 账务处理](#mod-rev-004) + - [REV-005 发票与税务处理](#mod-rev-005) + - [REV-006 催缴与通知](#mod-rev-006) + - [REV-007 统计分析](#mod-rev-007) + - [REV-008 代收与银行业务](#mod-rev-008) + - [REV-009 业务参数配置](#mod-rev-009) + + + +## 文档定位 + +本文档为 `01_Detailed_Design.md` 中“营收业务详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。 + + + +# 营收业务详细设计 + + + +## 营收模块统一约束 + +1. `SYS-002` 负责营收主流程,发票、支付结算、消息触达分别通过 `SYS-008`、`SYS-009`、`SYS-010` 协同完成,外部系统仅回写结果状态。 +2. 账单、收费、发票、代扣等关键状态变更必须通过业务流程驱动,不允许绕过业务校验直接改写主业务对象。 +3. 幂等控制遵循接口主键约束:支付以业务订单号为主,发票以申请单号或账单组合为主,代扣以批次号为主,消息以业务事件号为主。 +4. 账务调整、发票申请、催缴触达、银行批次下发等关键动作必须写入操作留痕,满足审计与问题追踪要求。 +5. 数据口径统一采用 `biz_*` 与 `bk_*` 命名体系,历史命名仅用于追溯,不作为本章节正式设计口径。 + + + +## 接口与数据追溯矩阵 + +> 说明:详细字段与报文以 `../03_Technical_Design/03_Interface_Design.md` 为准,数据库字段口径以 `../03_Technical_Design/01_Database_Design.md` 为准。 + +| REV 模块 | 关键接口 | 核心数据域(摘要) | 主要协同对象 | +|---|---|---|---| +| REV-001 客户资料管理 | `IF-REV-001` | `biz_cust`、`biz_account`、`biz_cust_*` | 客户服务模块、报装模块 | +| REV-002 抄表开账 | `IF-REV-004`、`IF-REV-005` | `biz_meter_book`、`biz_meter_read`、`biz_reading_*`、`biz_charge*` | 抄表APP、物联网集抄 | +| REV-003 营业收费 | `IF-REV-006` | `biz_charge*`、`biz_collection`、`bk_transaction*` | `SYS-009` | +| REV-004 账务处理 | `IF-REV-007` | `biz_charge*`、`biz_operat_log*` | 财务与营业人员 | +| REV-005 发票与税务处理 | `IF-REV-008` | `biz_invoice*`、`biz_cust_invoice` | `SYS-008` | +| REV-006 催缴与通知 | `IF-REV-013` | `biz_charge*`、催缴结果留痕 | `SYS-010` | +| REV-007 统计分析 | `IF-REV-010` | 客户、抄表、收费、渠道聚合对象 | 统计分析端 | +| REV-008 代收与银行业务 | `IF-REV-011` | `bk_withholding_*`、`bk_reconcile_*`、`bk_settlement_*` | `SYS-009`、银行 | +| REV-009 业务参数配置 | `IF-REV-012` | `biz_parameter_settings`、`biz_page_settings*`、`biz_price_*` | 统一平台、营收模块 | + + + +## REV-001 客户资料管理 + +### 功能说明 + +负责客户主档、账户主档、联系人、客户分组、客户与水表关系、客户开票信息、客户渠道绑定及托收/代扣关系维护,是抄表、收费、发票、代扣等后续业务的主数据基础。 + +### 关键设计 + +1. 客户建档覆盖立户、变更、更名、过户、销户、报停等全生命周期处理。 +2. 客户资料支持按客户类型、用水性质、片区、集团客户、重点客户等维度管理。 +3. 客户与水表、开票主体、托收/代扣签约关系按关联表维护,避免在主表中堆叠多类属性。 +4. 客户编号、集收标记、计划用水方案等规则类数据由统一配置与客户关系表共同支撑。 + +### 核心数据 + +- `biz_cust`:客户主档。 +- `biz_account`:客户账户与账户状态。 +- `biz_cust_contact`:联系人及联系方式。 +- `biz_cust_group`:客户分组。 +- `biz_cust_meter`:客户与水表绑定关系。 +- `biz_cust_invoice`:客户开票信息。 +- `biz_cust_app_binds`:渠道绑定关系。 +- `biz_cust_collection_rel`:客户托收关系。 +- `biz_cust_withholding_rel`:客户代扣关系。 +- `biz_cust_water_use_scheme`、`biz_cust_water_scheme_rel`:客户计划用水方案关系。 +- `biz_cust_no_rule`:客户编号规则。 +- `biz_cust_hub_marks`:集收号/集收标记关系。 + +### 迁移补充(旧系统承接) + +#### 定额共享 + +- 旧系统在“客户资料”下提供定额主客户、子客户绑定与共享清单管理能力。 +- 当前正式设计不新增并行主模型,统一归入客户与计划用水方案关系对象承接。 +- 迁移时必须至少保留主客户、子客户、绑定状态、生效时间、解除时间、备注与操作留痕,确保共享清单可查询、可解绑、可追溯。 + +#### 定额核定 + +- 旧系统支持对已建立共享关系的客户执行定额核定、撤销核定和共享清单联查。 +- 当前建议以客户关系对象和计划用水方案关系为主承接核定结果,不额外发明独立账务主表。 +- 核定结果迁移后应支持按客户、站点、核定状态、核定时间查询,并保留核定依据、操作人和变更留痕。 + +#### 批量修改 + +- 旧系统已形成“手工修改 + 模板导入修改”的双模式客户资料维护能力。 +- 当前正式设计应将其视为客户主数据治理能力的一部分,而不是临时导入工具。 +- 迁移时需明确三类口径:可批量修改字段范围、导入模板校验规则、批量修改审计留痕;历史批量修改结果至少需保留任务来源、修改字段、执行结果和失败原因。 + +### 接口映射 + +- `IF-REV-001`:客户档案、账户状态、联系人与水表绑定关系查询。 +- `IF-CS-001`、`IF-CS-002`:客户服务侧账户绑定与信息查询场景复用客户域数据。 + +### 落地边界 + +- **已落地**:客户主档、账户、联系人、分组、绑定、开票、托收/代扣关系。 +- **部分落地**:客户扩展关系、集收与规则类对象已见明确关系表,但具体业务场景仍需结合流程进一步细化。 +- **文档先行**:主副卡、部分复杂客户关系对象在当前 backend 中未见完全独立表族,文档中仅保留业务对象表述。 + + + +## REV-002 抄表开账 + +### 功能说明 + +负责抄表计划、册本管理、抄表录入、抄表状态跟踪、异常复核、计费计算与账单生成,是营收核心处理链路的起点。 + +### 业务流程 + +```mermaid +flowchart TD + A[制定抄表计划] --> B[生成抄表册本] + B --> C[分配抄表任务] + C --> D[人工/远传/自报抄表] + D --> E[数据校验] + E --> F{是否异常} + F -->|是| G[异常复核处理] + F -->|否| H[生成开账数据] + G --> H + H --> I[按价格模板与费用组成计费] + I --> J[生成营业账与明细] + J --> K[账单审核确认] + K --> L[进入收费/催缴/开票] +``` + +### 关键规则 + +1. 抄表数据同时校验本次读数、上次读数、用量波动和抄表状态,只有通过校验或完成异常复核的数据才能进入开账。 +2. 异常抄表支持估抄、补抄、重录、人工复核;异常处理的目标是形成可继续开账或明确阻断的统一结论,而不是绕开开账规则单独落账。 +3. `IF-REV-005` 的正式边界是“抄表校验完成后的账单生成”,不负责收费核销、发票开具、催缴执行和统计分析。 +4. 开账计费按价格归属、价格模板、费用组成、阶梯规则、计划用水方案综合计算;价格配置缺失、费用组成不完整或规则冲突时,必须阻断生成并返回失败原因。 +5. 账单生成结果统一由 `biz_charge` 与 `biz_charge_detail` 承接:主表表达客户、账期、应收日期、账单总金额和主状态,明细表表达费用组成、用量、单价和明细金额。 +6. 特殊开账、无码客户开账、罚款类开账等非标准来源,仍纳入同一营业账主明细模型承接,通过来源类型、业务类型、依据说明和操作留痕区分,不单独扩展平行账表。 +7. 审核通过后的营业账方可进入收费、催缴和发票流程;后续链路只能消费已生成账单结果,不反向改变本接口的生成边界。 +8. 远传抄表数据可由 `SYS-006` / IoT 能力提供采集支撑,但账单生成仍归属 SYS-002。 + +### 开账触发与结果表达 + +- 触发前提:正式口径下可按抄表批次、指定客户范围或指定抄表任务范围组织生成;当前 backend 已落地的入口为按 `readingDataIds` 批量复核并开账,对应 `ChargeController.generateCheckChargeBatch`、`ChargeServiceImpl.generateCheckChargeBatch` 与 `ReadingDataServiceImpl.batchReCheckReadingData`。 +- 规则来源:价格归属决定客户适用的价格口径;价格模板、阶梯规则、费用组成和计划用水方案共同决定营业账主表金额与明细拆分方式。 +- 当前承接证据:`ChargeServiceImpl.generateSingleChargeWithCache` 成功路径会写入 `biz_charge` 主表、循环写入 `biz_charge_detail` 明细,并回写抄表数据开账状态,说明现有实现已具备“按抄表数据 ID 生成营业账主明细”的 backend 基础。 +- 结果表达:正式 `IF-REV-005` 应返回成功清单、失败清单、生成汇总及主明细级结果;当前 backend 返回仍为“本次复核成功X条 / 本次开账成功Y条”的字符串拼接,尚未形成结构化成功/失败结果对象。 +- 阻断与限制:价格模板不存在、费用调整配置缺失、结算方式非 `ACTUAL_USAGE` 等场景当前会直接阻断单条生成;其中固定水量、按人口数、最低消费等非实际水量结算方式仍未纳入当前实现。 +- 下游边界:`REV-002` 只负责生成营业账结果并交由后续审核/收费链路消费,不在本章节扩展收费核销、发票申请或催缴执行细节。 + +### 核心数据 + +- `biz_meter_book`:册本与抄表计划。 +- `biz_meter_read`:抄表任务状态/执行状态。 +- `biz_reading_data`:抄表数据。 +- `biz_last_reading`:上次抄表结果。 +- `biz_reading_logs`:抄表日志与过程留痕。 +- `biz_meter`:计量水表主档引用。 +- `biz_charge`:营业账主表。 +- `biz_charge_detail`:营业账明细。 +- `biz_price_category`:价格归属。 +- `biz_price_template`:价格模板。 +- `biz_price_adjustment_snap`:调价快照。 +- `biz_price_tier_adjustment`:阶梯规则。 +- `biz_cost_component`:费用组成。 +- `biz_water_use_scheme`、`biz_water_use_scheme_tier`:计划用水方案与阶梯。 + +### 迁移补充(旧系统承接) + +#### 特殊开账 + +- 旧系统支持在非标准客户、无码客户或罚款类场景下直接开账。 +- 新系统仍以 `biz_charge`、`biz_charge_detail` 作为开账结果承载对象,不建议额外平行建设“特殊开账账表”。 +- 迁移与新建场景均需保留特殊开账来源、业务类型、经办人、依据说明、打印状态与后续收费关联,避免与普通抄表开账混淆。 + +#### 开账记录迁移 + +- 旧系统“开账记录”是历史查询与账务核对的核心入口,必须纳入迁移最小保留集。 +- 迁移后的开账记录应至少支持按站点、账务年月、册本、客户、抄表员、欠费状态查询,并支持统计水量、总金额及费用构成。 +- 对已收费、已作废、销户拆表、特殊开账等旧状态,不要求照搬旧表结构,但必须保留可对照的新状态映射关系。 + +### 接口映射 + +- `IF-REV-004`:抄表数据提交与异常标记。 +- `IF-REV-005`:账单生成与开账结果返回。 +- `IF-METER-004`:远传抄表数据接收后进入开账流程。 + +### 落地边界 + +- **已落地**:册本、抄表数据、上次抄表、抄表日志、营业账主明细、价格模板与阶梯规则。 +- **部分落地**:部分异常场景对象可能仍通过状态字段和日志表承载,而非全部拆成独立业务表。 +- **文档先行**:个别精细稽查、轨迹、下载同步对象当前未在本轮映射中确认为独立表。 + + + +## REV-003 营业收费 + +### 功能说明 + +支持柜台收费、预存款/余额抵扣、线上缴费回写、柜面扫码、营业网点收费及收费凭证管理,统一承接营收账单的核销处理。 + +### 业务流程 + +```mermaid +flowchart TD + A[查询客户及待缴账单] --> B[选择账单与核销方式] + B --> C[选择支付渠道] + C --> D{支付方式} + D -->|柜台现金/POS/扫码| E[现场收费] + D -->|微信/支付宝/聚合支付| F[渠道下单] + D -->|预存款/余额抵扣| G[账户余额核销] + E --> H[更新营业账状态] + F --> I[等待异步回调确认] + G --> H + I --> H + H --> J[生成收费记录与凭证] + J --> K[进入发票/对账流程] +``` + +### 关键规则 + +1. 一次缴费可对应多个账单或账单明细的组合核销。 +2. 收费记录必须保留渠道、流水号、网点、操作员、终端信息。 +3. 线上支付必须以回调或查询确认结果为准,不得以发起状态直接记账。 +4. 支付能力由 `SYS-009` 提供,SYS-002 负责账单核销与业务状态回写。 +5. 当前实现侧已确认 `PayCeb` 的欠费查询、缴费处理基础闭环可用,但代理收费对账仍为预留能力;正式文档不得将实时收费对账写成已闭环能力。 + +### 核心数据 + +- `biz_charge`、`biz_charge_detail`:待缴与已缴账单主明细。 +- `biz_collection`:托收/代收主表。 +- `biz_withholding`:代扣/托收主表。 +- `bk_transaction`:渠道交易流水。 +- `bk_transaction_callback`:支付回调记录。 +- `bk_transaction_exception`:支付异常记录。 + +### 迁移补充(旧系统承接) + +#### 柜台结账 + +- 旧系统将“柜台收费”和“柜台结账”拆分为两个菜单,结账阶段包含未结/已结查询、结账红冲、追加抄表和打印动作。 +- 当前设计可继续采用统一收费核销模型,但必须补出“收费记录 → 班结结果 → 打印/红冲/查询”的业务闭环,避免柜面日终处理缺口。 +- 迁移时需保留结账时间、结账人、网点、收费汇总口径和结账后红冲痕迹,保证财务对账与审计连续。 + +#### 账单打印服务 + +- 旧系统存在账单打印、补打、打印次数控制与打印记录查询能力。 +- 新系统不要求单独建立打印主模块,但必须明确打印模板、补打权限、打印状态与打印留痕的承接关系。 +- 对历史账单迁移,应允许基于账单主明细和打印配置恢复打印视图,避免割接后只能查账不能补打。 + +#### 红冲记录 + +- 旧系统支持红冲记录查询、导出与明细展开,是收费差错追溯的重要入口。 +- 当前设计可将红冲视为收费核销后的修正场景,不强制要求独立实体表,但必须提供历史只读查询口径。 +- 红冲迁移最小保留信息应包括原收费记录、红冲时间、红冲金额、原因、经办人、关联账单和后续账务状态。 + +### 接口映射 + +- `IF-REV-006`:创建收费记录、执行账单核销并回写状态。 +- `IF-CS-003`、`IF-CS-007`:客户渠道与柜面扫码支付场景复用收费核销链路。 + +### 落地边界 + +- **已落地**:营业账主明细、交易流水、回调、异常、托收/代扣主对象。 +- **部分落地**:柜台班结、部分收费汇总类对象可能通过业务流程与报表实现,不一定存在独立表。 +- **文档先行**:部分红冲、实时收费汇总类台账暂不表述为已确认独立实体表。 + + + +## REV-004 账务处理 + +### 功能说明 + +REV-004 一期仅覆盖水量调整、金额调整、退款、冲正、坏账申请五类场景,统一挂靠 `IF-REV-007` 作为账务处理入口,目标是在既有正式文档体系内先收敛范围、承接口径、留痕要求与审批边界。 + +本阶段按“共性能力先统一、场景能力再分批”组织:先统一账单承接、原交易校验、结果表达、操作留痕与审批边界,再分别展开五类场景。违约金减免、分账调整、价差调整、跨周期水量、预存退款细表等内容仅作为旧系统迁移语义或后续扩展参考,不作为一期新增独立范围。 + +### 业务流程 + +```mermaid +flowchart TD + A[发起账务调整申请] --> B[校验账单状态与权限] + B --> C{是否通过} + C -->|否| D[驳回并记录原因] + C -->|是| E[执行重算或退款冲正] + E --> F[更新账单与明细状态] + F --> G[写入操作日志与审批留痕] + G --> H[返回处理结果] +``` + +### 关键规则 + +1. 一期场景严格限定为水量调整、金额调整、退款、冲正、坏账申请,不扩展到其他接口族或独立账务台账重构。 +2. 所有场景均以 `biz_charge` / `biz_charge_detail` 为主承接对象,并通过 `biz_operat_log` / `biz_operat_log_detail` 记录处理依据、前后变化和责任归属。 +3. 退款、冲正必须联动 `bk_transaction`、`bk_transaction_callback`、`bk_transaction_exception` 等原支付流水及渠道状态校验,不允许仅依据账单状态直接处理。 +4. 接口结果统一返回 `resultStatus`、`writeBackStatus`,其中 `resultStatus` 表示处理结论,`writeBackStatus` 表示账单状态回写结论,两者不得混用。 +5. 审批相关内容一期仅保留 `approvalRequired`、`PENDING_APPROVAL` 与审批边界说明,不展开完整 BPM 流程、节点、流转规则或审批回写实现细节。 +6. 对于当前未见明确独立实体表的特账、跨周期水量、退款账等对象,文档以“业务处理场景”表述,不强行落为已实现表。 + +### 核心数据 + +- `biz_charge`、`biz_charge_detail`:账务调整的核心对象,承接调整前后账单主明细状态。 +- `bk_transaction`、`bk_transaction_callback`、`bk_transaction_exception`:退款、冲正场景的原交易校验与异常追溯对象。 +- 价格调整/优惠相关表:用于重算账单或差额追溯。 +- `biz_operat_log`、`biz_operat_log_detail`:操作与变更留痕,记录字段差异、处理说明、附件依据与责任归属。 + +### 主要场景 + +| 场景 | 说明 | 控制要点 | +|---|---|---| +| 水量调整 | 更正异常水量 | 需复核原因、附件和原抄表依据 | +| 金额调整 | 更正账单金额 | 需记录依据、差异金额和审批边界 | +| 退款 | 退回客户支付资金或预存款 | 需校验原交易、退款余额与幂等性 | +| 冲正 | 修正误收/误核销记录 | 需关联原交易与账单状态 | +| 坏账申请 | 对长期欠费进行分类处理 | 需结合账龄、客户状态与审批边界 | + +### 迁移补充(旧系统承接) + +| 旧账务对象 | 当前承接方式 | 迁移口径 | +|---|---|---| +| 预存退款 / 预存退款详情 | 作为账务处理场景承接 | 保留申请单、原支付引用、退款结果与审批留痕 | +| 已销调整汇总 / 明细 | 作为已收费后修正场景承接 | 保留原账单、调整原因、前后差异、处理结果 | +| 价差调整汇总 / 明细 | 作为重算与差额修正场景承接 | 保留原价格口径、新价格口径、差额和生效时间 | +| 分账调整汇总 / 明细 | 作为费用组成重分摊场景承接 | 保留原分摊结果、调整后结果、责任人和审批链 | +| 账单-违约金减免 | 作为滞纳金修正场景承接 | 保留减免原因、减免金额、审批结果和生效时间 | +| 账单-呆坏账 | 作为坏账申请与生效场景承接 | 保留账龄、申请原因、审批结果、核销状态 | + +1. P0 阶段不要求为每一类旧账务台账都新增独立实体表,但必须在业务对象和历史查询层形成可追溯闭环。 +2. 旧系统精细台账迁移后至少保留:原单据标识、原账单标识、处理类型、处理原因、处理前后金额/水量、申请/审批/生效时间、经办人与附件依据。 +3. 与支付、发票、渠道回调强关联的处理场景,必须保留与原交易、原发票、原收费记录的关联关系,避免后续对账和审计断链。 + +### 接口映射 + +- `IF-REV-007`:账务调整、退款、冲正、坏账等处理入口。 +- `IF-REV-006`:与收费核销状态联动,确保调账后账单状态一致。 + +### 落地边界 + +- **已落地**:营业账主明细、操作日志、价格/方案相关重算支撑。 +- **部分落地**:精细化账务对象更多表现为流程与场景,并未在 backend 中全部体现为独立表族。 +- **文档先行**:特账、退款账、跨周期水量等对象保留业务语义,不宣称为已实现独立表。 + + + +## REV-005 发票与税务处理 + +### 功能说明 + +负责发票业务闭环的业务接入与状态落账,覆盖后台发票申请、开票校验、`SYS-008` 异步协同、查询兜底、结果回写、账单关联、客户侧已开票电子发票查询/下载/推送,以及后台作废与红冲处理。 + +### 业务流程 + +```mermaid +flowchart TD + A[后台提交发票申请] --> B[校验账单、客户开票信息、税率与限额] + B --> C{是否满足开票条件} + C -->|否| D[返回不可开票原因] + C -->|是| E[生成申请单号并写入SUBMITTED] + E --> F[调用SYS-008发起异步开票] + F --> G[记录受理号并转为PENDING] + G --> H[系统轮询或后台查询兜底] + H --> I{开票结果} + I -->|成功| J[回写SUCCESS并更新账单-发票关联] + I -->|失败| K[回写FAIL并记录失败原因] + J --> L[客户侧查询/下载/推送电子发票] +``` + +### 状态说明 + +- `SUBMITTED`:后台申请已受理,已完成本地校验并生成申请单。 +- `PENDING`:已提交 `SYS-008`,等待异步结果或查询补偿结果。 +- `SUCCESS`:已取得有效发票代码、号码或电子票地址,且账单关联已完成更新。 +- `FAIL`:开票失败,需保留失败原因、最近查询结果与后续人工核查依据。 +- `INVALID`:发票已作废,作为后续能力预留状态。 +- `RED_INK`:发票已红冲,作为后续能力预留状态。 + +### 关键规则 + +1. 一期采用“后台申请开票 + 客户侧查询下载推送”的入口模式,客户侧不直接发起开票申请。 +2. 发票申请以客户信息、已收费未开票账单、税率配置和开票限额为基础;原始单账单不支持直接任意部分金额开票。 +3. 个人与企业开票均通过客户开票信息与税率表完成合法性校验;如需多张发票,沿用拆账/分账后的账单分别开票口径。 +4. `SYS-008` 采用“异步申请 + 查询兜底”模式,成功状态不得被后续失败查询结果覆盖。 +5. 电子发票仅在 `SUCCESS` 且存在票据文件地址时允许客户侧下载或推送。 +6. 发票作废、红冲仍由 `SYS-008` 统一承接税控侧处理,`SYS-002` 负责后台触发入口、状态校验、查询补偿、结果落账与日志留痕;当前轮次按二期范围补齐 backend 实现入口。 + +### 后台申请入口与校验补充 + +- 后台支持营业收费员、财务人员按单笔或批量已收费账单发起开票申请。 +- 申请时至少校验:账单收费状态、开票状态、客户开票信息完整性、票种适配性、开票限额、账单集合是否属于同一客户。 +- 企业抬头场景重点校验纳税人识别号;电子发票场景重点校验邮箱/手机号;不满足条件时直接返回不可开票原因。 +- 申请成功后生成申请单号并进入 `SUBMITTED/PENDING` 状态流转,失败校验场景不进入外部协同。 +- 幂等控制以 `applicationNo` 或 `custId + chargeIds` 为主,避免相同账单组合重复申请。 + +### SYS-008 异步协同与查询补偿 + +- 本地申请校验通过后,`SYS-002` 先写入 `biz_invoice` 申请记录,再向 `SYS-008` 发起异步开票请求,并记录 `sysRequestNo` 作为后续查询与回写的协同主键。 +- `SYS-008` 返回“已受理”后,发票状态转为 `PENDING`;若仅完成本地受理但尚未拿到受理号,则保留 `SUBMITTED` 并进入待补偿查询状态。 +- 查询补偿采用“回写优先、主动查询兜底”原则:`IF-EXT-007` 回写为首选结果来源,后台人工查询与系统定时补偿查询共用同一结果落账逻辑。 +- 系统补偿查询至少保留最近查询时间、下次计划查询时间、累计查询次数、最近一次返回结果摘要与异常原因,便于问题追踪和人工核查。 +- 后台按申请单号或受理号触发查询时,应同步刷新查询上下文;查询仍未取得终态时,仅更新补偿上下文,不得伪造成功或失败结论。 + +### 终态保护与异常核查 + +- `SUCCESS` 属于正常开票闭环终态,一旦已取得有效发票代码、发票号码或电子票据地址,后续失败查询结果不得覆盖成功状态。 +- `FAIL` 仅在 `SYS-008` 明确返回失败结论或多次补偿查询确认失败时写入,并同步保留失败原因、最近查询结果与人工核查依据。 +- 当后台人工查询、系统补偿查询与外部回写结果不一致时,应以最新有效外部凭据为准,并记录差异说明,不允许直接覆盖既有成功票据关键信息。 +- 每次提交协同、主动查询、状态变更和异常分支均应写入操作留痕,确保能够追溯责任人、触发来源、状态前后值与异常说明。 + +### 结果回写、账单关联与客户侧消费 + +- `IF-EXT-007` 回写成功结果时,除更新 `biz_invoice.invoice_status`、`invoice_code`、`invoice_number`、`file_url` 外,还应同步刷新账单快照、账单关联状态与推送状态初值。 +- 账单关联以 `biz_invoice.charge_id` + `charge_ids_snapshot` 记录本次开票覆盖账单集合,并同步把对应 `biz_charge.invoice_state` 更新为“开票完成”,保留失败原因与开票时间,便于账单明细、收费记录和客户侧结果统一展示。 +- 客户侧查询仅允许按本人 `custId` 访问已存在的发票记录;可通过 `invoiceId`、`applicationNo` 或 `sysRequestNo` 定位,但都必须命中同一客户名下记录。 +- 客户侧下载与推送前必须校验发票状态为 `SUCCESS` 且 `fileUrl` 非空;不满足条件时仅返回不可下载/推送原因,不得伪造文件地址。 +- 推送动作应记录推送渠道、目标邮箱/手机号与结果状态;成功后更新 `pushStatus=PUSHED`,失败则写入 `FAIL` 并保留失败原因供人工处理。 + +### 核心数据 + +- `biz_invoice`:发票主记录。 +- `biz_invoice_taxrate`:税率配置。 +- `biz_cust_invoice`:客户开票信息。 + +### 迁移补充(旧系统承接) + +- 旧系统数据字典中存在“发票明细表、营业账开票表、开票配置表”等更细粒度对象。 +- 当前正式设计已明确主承接对象为 `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice`,但迁移时不能忽略旧开票明细和账单关联关系。 +- P0 阶段建议先补三类迁移口径:账单与发票的关联关系、发票申请与结果回写记录、开票配置与税率的有效期;未确认已落地的细表对象仍按“历史只读或辅助映射”处理。 + +### 接口映射 + +- `IF-REV-008`:后台发票申请接口,负责单笔/批量申请、幂等控制与受理号生成。 +- `IF-REV-009`:发票结果查询接口,负责后台按申请单号/受理号查询以及系统补偿查询。 +- `IF-CS-004`:客户侧电子发票消费接口,负责已开票结果查看、下载、推送。 +- `IF-EXT-007`:发票结果回写协同接口(由发票服务侧回传)。 + +### 落地边界 + +- **已落地**:发票主记录、税率配置、客户开票信息,以及一期正常开票闭环所需的后台申请、查询兜底、结果回写、账单关联与客户侧电子发票消费能力。 +- **部分落地**:发票修改、开票过程留痕在后端中已有相关对象,但整套发票明细/批次类对象尚未全部确认。 +- **二期补齐**:发票作废、红冲及其查询补偿仍由 `SYS-008` 统一承接,但当前轮次补齐后台触发入口、状态流转、结果回写与日志留痕,不再仅停留于文档预留。 +- **文档先行**:发票明细、营业账开票关系等对象仍按设计能力描述,不表述为本轮已确认独立表。 + + + +## REV-006 催缴与通知 + +### 功能说明 + +针对欠费账单按账龄、金额、客户类别等规则生成催缴任务,通过短信、微信、站内通知等方式触达客户,并回写催缴结果;本模块同时定义催缴与停复水/工单处置之间的联动边界与追溯关系,但不展开停复水内部处置流程。 + +### 业务流程 + +```mermaid +flowchart TD + A[生成欠费客户清单] --> B[按策略分组催缴任务] + B --> C[触发IF-REV-013生成催缴任务] + C --> D[调用IF-EXT-008协同SYS-010] + D --> E[接收发送结果回写] + E --> F[更新催缴状态与后续策略] + F --> G[按联动边界挂接停复水/工单处置] +``` + +### 关键规则 + +1. 催缴策略以营业账状态、欠费金额、账龄分布、客户类别和渠道偏好为基础,支持按策略编码进行任务分组与频控。 +2. 自动催缴与人工催缴可并行;自动任务用于常规批量催缴,人工任务用于补发、核查或例外处置。 +3. `SYS-002` 负责催缴对象筛选、任务生成、业务事件编号、结果承接与历史查询;`SYS-010` 负责短信、微信公众号、站内信等触达执行与结果回传。 +4. `REV-006` 正式结果状态固定为 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态,其中 `MANUAL_VERIFIED` 仅用于外部结果未定或需人工核查补记的场景。 +5. 停复水在本模块中仅定义联动触发条件、处置引用与追溯关系,不展开停复水内部审批、派工或现场执行流程。 +6. 当前后端中部分催缴汇总、停水明细对象未确认独立落表,文档中保持保守描述,不误写为已确认在线主表。 + +#### 催缴对象筛选、排除与频控边界 + +- `IF-REV-013` 任务生成前必须完成候选筛选,筛选最小维度为:欠费状态、欠费金额、账龄分组、客户类别、渠道偏好和策略编码。 +- 候选对象必须以有效欠费账单为前提;以下场景不得进入正式催缴任务:已收费核销、已作废、已进入不允许催缴的处置流程、策略规则未命中。 +- 触发类型按 `triggerType` 区分自动与人工;自动用于批量触发,人工用于补发、核查和例外补记,不改变正式接口编号与状态语义。 +- 频控以“同客户/同策略/同渠道/同账期窗口”为最小拦截单元;命中频控时允许部分阻断,并返回被跳过对象及原因摘要。 + +### 核心数据 + +- `biz_charge`、`biz_charge_detail`:催缴对象来源。 +- 催缴结果与通知日志:通过业务状态与消息结果联动留痕。 + +#### 催缴对象与规则摘要 + +- `Reminder Candidate`:由欠费账单、客户类别、账龄分组、欠费金额、联系方式集合和命中策略编码组成,是催缴任务的输入对象。 +- `Reminder Strategy`:定义账龄规则、金额规则、客户类别规则、渠道优先级、重复触达拦截窗口和是否触发后续处置关注。 +- `Reminder Task`:一次正式催缴执行单元,至少包含 `taskNo`、`eventNo`、`strategyCode`、`channelType`、`triggerType`、`status` 和关联账单信息;正式业务接口编号固定为 `IF-REV-013`。 +- `Reminder Result`:承接 `IF-EXT-008` 回传结果后由业务侧映射的正式四态结果,最少记录 `status`、`lastCallbackTime`、`failReason` 与回传摘要。 +- `Disposal Link`:用于记录催缴结果与停水、复水、工单或人工跟进之间的关联引用,只承担追溯职责,不替代下游业务对象。 + +#### 四态与人工核查边界 + +- `PENDING`:已生成任务并完成外部受理或等待外部终态回传,尚未形成业务终态。 +- `SUCCESS`:外部触达结果明确成功,且业务侧已完成结果承接。 +- `FAIL`:外部返回明确失败或业务判定失败,必须记录失败原因。 +- `MANUAL_VERIFIED`:仅用于外部结果长期未定、人工核查补记或例外核销说明场景;必须留存核查说明与核查人。 +- 人工核查是状态收口手段,不得用于绕过候选筛选、排除条件或频控约束。 + +### 迁移补充(旧系统承接) + +#### 催缴记录 + +- 旧系统支持催缴记录查询、导出和明细展开,记录中包含推送内容、号码、方式、结果等信息。 +- 新系统可继续以消息协同结果和账单状态联动承接,但必须明确催缴记录查询口径,而不能仅保留“已发送/未发送”状态。 +- 历史查询最少保留客户号、账期、催缴方式、发送对象、发送时间、执行结果、关联账单、关联处置引用等字段,并兼容四态结果或其历史映射值。 +- 历史催缴记录按只读口径承接,作为查询与追溯来源,不反推为已确认在线主表。 + +#### 停水记录 + +- 停水记录不是孤立账务对象,应由催缴结果、业务处置和现场执行工单共同形成闭环。 +- 迁移后需支持按客户、站点、停水原因、停水时间、复水状态查询,并能追溯到对应欠费账单和工单执行结果。 +- 正式设计只定义“何时建立联动、如何保存处置引用、如何追溯关联结果”,不在 `REV-006` 中展开停复水内部流程设计。 +- 停复水关联以 `Disposal Link` 的处置引用承接,最少包含任务号、处置类型、处置引用号和建联时间。 + +#### 预存短信 + +- 旧系统对预存款余额不足客户提供短信推送和发送记录查询。 +- 新系统建议将其纳入催缴与通知统一策略,不再单建平行模型,但必须保留触发条件、发送内容、发送结果和补发记录。 +- 该类记录与催缴记录一样,按历史只读口径承接,不表述为新增同名在线主表。 + +### 接口映射 + +- `IF-REV-013`:催缴任务生成、任务查询与结果承接接口,负责业务侧任务生成、四态状态维护和历史查询挂接。 +- `IF-EXT-008`:消息协同结果回写接口(由 `SYS-010` 协同)。 + +### 落地边界 + +- **已落地**:以营业账为基础的欠费识别前提数据、催缴对象来源字段和消息协同边界约束。 +- **部分落地**:催缴登记汇总、停水汇总等对象暂未在 backend 中确认独立表,当前以业务事件、操作留痕和历史查询口径承接。 +- **文档先行**:复杂催缴台账、停复水统计和人工核查界面仅作为业务场景保留,不表述为 backend 已完成能力。 + + + +## REV-007 统计分析 + +### 功能说明 + +提供营收、抄表、收费、欠费、渠道、客户等多维度统计查询能力,为经营分析、业务监管和迁移核查提供统一的数据口径支撑;本模块以经营查询为主,不扩展到预测分析、专题大屏或独立 BI 平台实现。 + +### 关键设计 + +1. 统计查询按“主题 + 维度 + 指标”三层口径组织,避免仅以报表名称堆砌需求。 +2. 主题范围至少包括营收汇总、收费与实收统计、欠费规模与账龄统计、客户结构统计、渠道交易统计、抄表完成率统计以及营收相关业务概览类摘要。 +3. 查询维度至少包括时间区间、账期、营业所/片区、客户类别、渠道、客户/账户、状态等,并支持必要的分组汇总。 +4. 指标口径需明确区分应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、抄表完成率等相近但不等价的统计概念。 +5. 导出与查询结果受数据权限控制;导出属于查询扩展能力,但不在本轮展开具体导出实现细节。 +6. 重点查询可按聚合视图、汇总口径或预聚合结果承接,但不将未确认存在的统计表、专题分析表或离线数仓对象写成已实现事实。 + +### 核心数据 + +- 客户维度:`biz_cust`、`biz_account`。 +- 抄表维度:`biz_meter_book`、`biz_reading_data`、`biz_last_reading`。 +- 账务与收费维度:`biz_charge`、`biz_charge_detail`。 +- 收费与交易维度:`biz_collection`、`bk_transaction`。 +- 渠道维度:`bk_transaction`、`bk_payment_channel`。 +- 组织与权限维度:`system_dept`、数据权限控制结果。 + +#### 统计主题与口径摘要 + +- `Statistics Theme`:按经营主题组织查询,至少覆盖营收、收费、欠费、客户、渠道、抄表完成率和必要的业务概览。 +- `Statistics Dimension`:按时间、账期、营业所/片区、客户类别、渠道、客户/账户、状态等条件筛选或分组。 +- `Statistics Indicator`:至少明确应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、完成率等指标含义和单位。 +- `Aggregation Source`:统计结果以现有在线主数据聚合、视图或汇总口径承接,不反推为已存在独立统计表族。 + +### 接口映射 + +- `IF-REV-010`:营收、收费、欠费、渠道、客户等统计查询接口,承接主题查询、维度筛选、指标汇总和权限/导出边界。 + +### 落地边界 + +- **已落地**:主要统计源数据在客户、抄表、账单、收费、交易和渠道等领域均已具备,足以支撑经营统计口径设计。 +- **部分落地**:部分统计结果可能依赖聚合视图、汇总查询或报表层实现,当前未见明确的 backend 统计控制器或独立统计模型入口。 +- **文档先行**:预测类、专题分析类深度模型、BI 大屏和独立数仓能力暂不写成后端已实现能力。 + + + +## REV-008 代收与银行业务 + +### 功能说明 + +支持银行代收、银行代扣、实时收费、夜间批量扣款、对账与结算处理,是 SYS-002 面向 `SYS-009` 支付与银行结算能力的业务承接模块。 + +### 业务流程 + +```mermaid +flowchart TD + A[生成代扣批次] --> B[校验签约与待扣账单] + B --> C[调用IF-REV-011下发批次] + C --> D[SYS-009对接银行处理] + D --> E[回写扣款结果] + E --> F[执行对账与差异识别] + F --> G{差异是否已处理} + G -->|否| H[进入人工补偿] + G -->|是| I[确认结算并更新状态] +``` + +### 关键规则 + +1. 渠道、路由、接口配置、签约、交易、回调、异常、对账、结算形成完整银行业务链条。 +2. 实时收费场景由渠道交易流水驱动账单核销,批量代扣场景由签约关系与批次处理驱动。 +3. 对账结果区分一致、长款、短款、失败待处理等状态,支持差异追踪与人工补偿。 +4. 国密报文、批量文件、标准 API 等技术细节由 `SYS-009` 承载,SYS-002 保留业务规则与状态协同。 +5. 当前 backend 已确认 `BankWithholding` 六条银行入口(客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询)已形成最小实现态闭环;`BankCollection` 平行链路、对账与结算协同仍以“部分实现或文档先行”表述,不得统一写成已闭环能力。 +6. 银行代扣文件传输配置按“默认规则 + 银行通道覆盖 + 租户覆盖 + 租户-银行通道覆盖”建模,命中优先级固定为 `TENANT_CHANNEL > TENANT > CHANNEL > DEFAULT`。 +7. 目录字段至少区分 `send/back/reconcile/archive/localTemp` 五类阶段;上层覆盖未完整定义时按字段级回退,不允许生成空路径。 +8. 路径模板仅允许 `{tenantId}`、`{companyId}`、`{channelCode}`、`{yyyyMMdd}`、`{yyyyMM}`、`{batchNo}`、`{fileName}` 七个固定变量;命中未声明变量或缺少变量取值时立即阻断文件动作。 +9. `BankWithholding` 在送盘创建时固化 `sendProtocol/sendDir/sendFilePath` 与 `backProtocol/backDir`,配置切换仅影响新发起文件动作,已落库批次继续沿用原解析结果。 + +### 核心数据 + +- `bk_payment_channel`:支付渠道。 +- `bk_channel_api_config`:渠道接口配置。 +- `bk_channel_route_rule`:渠道路由规则。 +- `bk_withholding_agreement`:代扣签约。 +- `bk_withholding_batch`、`bk_withholding_item`:代扣批次与明细。 +- `bk_reconcile_batch`、`bk_reconcile_diff`:对账批次与差异。 +- `bk_settlement_batch`:结算批次。 +- `bk_transaction`、`bk_transaction_callback`、`bk_transaction_exception`:交易、回调、异常。 +- `biz_collection`、`biz_withholding`:代收/代扣业务主对象。 + +#### 文件传输配置与审计补充 + +- 环境默认规则通过 Spring profile + Nacos 承接,不在仓库样例中写入真实密码、私钥或证书。 +- `bk_channel_api_config` 使用专用 `apiType=FILE_TRANSFER_CONFIG` 承接文件传输覆盖配置,`extParams` 记录作用域、业务类型、协议、连接引用和五类目录字段。 +- `bk_withholding_batch` 固化送盘/回盘目录与协议,`bk_reconcile_batch` 固化对账阶段最终 `protocol/dir/filePath/fileName`,用于审计与问题回放。 + +### 迁移补充(旧系统承接) + +#### 银行托收 + +- 旧系统“银行托收”菜单重点承接托收送盘、托收信息查询和托收结果回看。 +- 当前设计已形成 `biz_collection` + `bk_*` 渠道模型,迁移时应补出“旧托收菜单 → 托收批次/交易/回盘结果”的映射,而不是按旧菜单名平移建模。 +- 旧托收历史记录应至少保留送盘批次、客户范围、送盘结果、回盘结果和账单核销结果。 + +#### 实时收费查询与对账 + +- 旧系统“实时收费”更偏运营查询和渠道对账入口,不只是支付成功回写。 +- 当前建议以 `bk_transaction*` 作为主承接对象,并补充按结算日期、银行/渠道、收费结果、差异状态查询和导出能力说明。 +- 对旧“实时收费汇总/日志/明细”对象,P0 阶段先按历史只读查询口径保留,不误写为当前已落地的独立主模型。 + +#### 当前实现对齐说明 + +- `PayCeb` 路径已具备欠费查询、缴费处理、流水唯一性校验和交易日志留痕,可作为实时收费基础闭环的实现证据。 +- `BankWithholding` 路径已具备签约、解约、客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询及对应交易留痕的实现证据,可作为代扣最小实现态闭环依据。 +- `BankCollection` 路径当前仍仅能确认签约、解约与协议/交易日志处理具备实现证据。 +- 对账、结算、真实银行文件解析、SFTP/文件通道联调和运行态样本补证当前仍未闭环,正式文档应继续保留为后续完善项。 + +### 接口映射 + +- `IF-REV-011`:代扣批次、对账与结算协同入口。 +- `IF-EXT-001`:银行代扣批次下发与回盘协同。 +- `IF-EXT-003`:银行实时收费查询、缴费与结果确认协同。 + +### 落地边界 + +- **已落地**:渠道、路由、交易、回调、异常、代扣/托收签约、解约,以及 `BankWithholding` 的客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询和对应日志留痕等主对象已具备明确实现证据。 +- **部分落地**:`BankCollection` 批次、明细、送盘、回盘、状态查询、差异台账和后台资源管理入口已具备对象或骨架,但不等同于银行协同闭环全部完成;`BankWithholding` 的真实文件解析、异常补偿和运行态联调证据仍待补齐。 +- **文档先行**:夜间批量代扣调度、完整对账处理、结算确认、扩展银行台账等内容不得在当前阶段写成已完成能力。 + + + +## REV-009 业务参数配置 + +### 功能说明 + +负责营收域的价格参数、客户编号规则、页面配置、打印与渠道相关业务参数配置,为客户、开账、收费、发票、催缴等模块提供统一配置支撑。 + +### 关键设计 + +1. 业务参数按租户、单位、片区、业务类别分层管理。 +2. 价格体系、客户编号规则、页面字段配置、打印与通知参数统一归口维护。 +3. 配置变更应具备版本化、操作留痕与生效范围控制。 + +### 核心数据 + +- `biz_parameter_settings`:业务参数配置。 +- `biz_page_settings`、`biz_page_settings_detail`:页面配置。 +- `biz_price_category`、`biz_price_template`、`biz_template_dept_rel`:价格归属与模板站点关系。 +- `biz_cust_no_rule`:客户编号规则。 + - `sys_wechat_app_settings`:微信/微网厅基础配置。 + +### 迁移补充(旧系统承接) + +- 旧系统后台存在“页面配置、业务字段、微信参数、打印维护”等运营配置入口。 +- 当前建议统一按业务参数、页面配置、渠道参数与打印参数归口承接,不新增“微客服后台配置”并行主文档。 +- 迁移时需明确三类配置映射:客户/业务办理字段展示与校验规则、微信/微网厅基础参数、打印模板与补打策略;未确认已实现的高级灰度能力继续按“文档先行”处理。 + +### 接口映射 + +- `IF-REV-012`:查询与维护价格模板、业务参数、页面参数配置。 +- `IF-UP-004`:统一平台参数字典能力协同,为营收域参数提供基础字典支撑。 + +### 落地边界 + +- **已落地**:业务参数、页面配置、价格归属与模板站点关系、客户编号规则等核心配置对象。 +- **部分落地**:部分打印模板、通知策略等参数由统一平台或外部渠道参数共同承载,营收域仅保留业务侧映射。 +- **文档先行**:参数灰度发布、多版本并行生效等高级治理能力当前仅保留设计语义,不宣称为独立实现模块。 diff --git a/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-02/2026-04-03-RWB-02-01_Database_Design.md b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-02/2026-04-03-RWB-02-01_Database_Design.md new file mode 100644 index 0000000..84ff12a --- /dev/null +++ b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-02/2026-04-03-RWB-02-01_Database_Design.md @@ -0,0 +1,2082 @@ +--- +doc_id: TC-01-DB +doc_role: master_document +authority: primary +scope: 数据库设计 +source_of_truth: true +last_reviewed: 2026-03-12 +retrieval_priority: P0 +--- + +# 福建水务营收系统数据库设计说明书 + +## 章节导航(精简) + +- [前言](#sec-preface) +- [外部设计](#sec-external-design) +- [数据库设计说明](#sec-database-design-note) +- [表结构设计](#sec-table-design) +- [METER/INST 专题表边界](#sec-meter-inst-topic) +- [移动端表设计优化说明](#sec-mobile-table-optimization) +- [视图的设计](#sec-view-design) +- [索引设计与性能优化](#sec-index-performance) +- [安全保密设计](#sec-security-design) + +| 文件状态: | 文档密级: | 公开 | +| :--- | :--- | :--- | +| 【 】草稿 | | | +| 【 】修改稿 | | | +| 【√】正式发布 | | | +| | **当前版本:** | **V1.6** | +| | **作者:** | **唐伟杰** | +| | **完成日期:** | **2025-08-01** | + +## 版本历史 + +| **日期** | **版本号** | **作者** | **备注** | +| :--- | :--- | :--- | :--- | +| 2025-07-17 | V1.0 | 唐伟杰 | 初稿 | +| 2025-07-17 | V1.1 | 唐伟杰 | 根据用户要求,严格对齐SQL文件,确保所有表和字段的完整性。 | +| 2025-08-01 | V1.2 | 唐伟杰 | 1. 根据详细设计说明书调整目录结构,按6个子系统重新组织表结构。
2. 补充移动端表设计优化说明,明确移动端与Web端表复用策略。
3. 新增5个移动端特有表的详细设计,符合表设计优化原则。 | +| 2025-08-01 | V1.3 | 唐伟杰 | 数据库系统变更:将OpenGauss替换为达梦数据库 8.0+,作为主力国产数据库方案。 | +| 2025-08-01 | V1.4 | 唐伟杰 | 单点登录采用OAuth2.0协议:新增OAuth2.0相关数据表设计,包括客户端信息表、访问令牌表、刷新令牌表、授权码表。 | +| 2026-03-12 | V1.6 | 唐伟杰 | 补充旧系统历史台账迁移与只读查询口径,明确在线主模型承接范围、历史最小保留集与迁移验收对账基线。 | + + +# 前言 +本文档详细描述了福建水务营收系统的数据库设计,包括总体架构、E-R图、数据表结构、字段定义和索引策略。旨在为开发和运维人员提供清晰的数据结构参考。 + + +# 外部设计 + +- **数据库系统**: 主力采用国产数据库 **达梦数据库 8.0+**。系统设计上兼容 **MySQL 8.x** 或 **MariaDB 10.x**。 +- **数据库工具**: 使用 Navicat, DBeaver, DataGrip 等主流数据库管理工具。 +- **约定**: + - **表名**: 全部小写,单词间使用下划线 `_` 分隔。业务表以 `biz_` 开头,系统管理表以 `system_` 开头。 + - **字段名**: 全部小写,单词间使用下划线 `_` 分隔(如 `user_id`),与当前数据库主文档及主表命名口径保持一致。 + - **主键**: 统一命名为 `id`,类型为 `bigint`,自增。 + - **通用字段**: 所有表必须包含 `id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id` 字段。 + - **字符集**: 统一使用 `utf8mb4` 字符集。 + + +# 数据库设计说明 +数据库设计遵循第三范式(3NF),并采用基于`tenant_id`字段隔离的SaaS多租户架构。 + + +# 表结构设计 + +## 数据表总体概览 + +> 说明:本次重点对齐 `SYS-002` 相关数据库口径。`SYS-002` 的核心表命名已统一收敛为 `biz_*` 与 `bk_*`,并已清理旧稿中分散的历史表模型。对于旧数据字典中仍未在 backend 识别到独立实体表的对象,本文以“业务对象/处理场景”描述,不强行拆分为真实表。 + +| 模块 | 表前缀 | 主要功能 | 当前口径 | +| :--- | :--- | :--- | :--- | +| 系统公共 | `system_` | 用户、角色、权限、部门、租户、字典、日志、OAuth2 等统一平台能力 | 保持现稿 | +| SYS-002 基础配置与价格体系 | `biz_community`, `biz_company_*`, `biz_meter_*`, `biz_price_*`, `biz_template_*` | 小区、水司账户、水表参数、价格体系、调价快照、优惠方案、模板关系等 | 已按真实表对齐 | +| SYS-002 客户主数据与账户关系 | `biz_cust*`, `biz_account` | 客户主档、联系人、客户组、水表绑定、开票信息、托收/代扣关系、编号规则等 | 已按真实表对齐 | +| SYS-002 抄表开账与账单 | `biz_meter`, `biz_meter_book`, `biz_meter_read`, `biz_reading_*`, `biz_charge*` | 抄表册本、抄表状态、读数留痕、开账主单与明细 | 已按真实表对齐 | +| SYS-002 收费票据与操作留痕 | `biz_collection`, `biz_withholding`, `biz_invoice*`, `biz_operat_log*` | 收费、托收/代扣、发票、操作留痕与审计支撑 | 已按真实表对齐 | +| SYS-002 业务办理与资料 | `biz_process*`, `biz_business_*`, `biz_content*` | 业务办理流程、流转、装表资料、附件与扩展数据 | 已按真实表对齐 | +| SYS-002 银行代收与结算 | `bk_*` | 渠道路由、交易回调、代扣签约、批次、对账、结算 | 已按真实表对齐 | +| SYS-003 手机抄表 APP | `mobile_*` | 移动作业缓存、登录日志、离线任务与现场上报 | 保持现稿 | +| METER/INST 专题表 | `biz_meter_*`、`installation_*`、历史 `water_meter_*` | 表务专题与报装签章专题扩展 | 已纳入专题边界(见 `METER/INST 专题表边界`) | + +## 系统公共表 (system_*) +(基于 `sw_system_publcli.sql`) + +
+点击展开/折叠系统表详情 + +### system_dept (部门表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 部门id | +| name | varchar(30) | Y | | 部门名称 | +| parent_id | int8 | N | 0 | 父部门id | +| sort | int4 | N | 0 | 显示顺序 | +| leader_user_id | int8 | Y | | 负责人 | +| phone | varchar(11) | Y | | 联系电话 | +| email | varchar(50) | Y | | 邮箱 | +| type | varchar(10) | Y | | 部门类型 | +| code | varchar(50) | Y | | 部门代码 | +| status | int2 | N | | 部门状态(0正常 1停用) | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | +| longitude | numeric(10,7) | Y | | 经度 | +| latitude | numeric(10,7) | Y | | 纬度 | +| remark | varchar(500) | Y | | 备注 | + +### system_dict_data (字典数据表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 字典编码 | +| sort | int4 | N | 0 | 字典排序 | +| label | varchar(100) | Y | | 字典标签 | +| value | varchar(100) | Y | | 字典键值 | +| dict_type | varchar(100) | Y | | 字典类型 | +| status | int2 | N | 0 | 状态(0正常 1停用) | +| color_type | varchar(100) | Y | | 颜色类型 | +| css_class | varchar(100) | Y | | css 样式 | +| remark | varchar(500) | Y | | 备注 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_dict_type (字典类型表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 字典主键 | +| name | varchar(100) | Y | | 字典名称 | +| type | varchar(100) | Y | | 字典类型 | +| status | int2 | N | 0 | 状态(0正常 1停用) | +| remark | varchar(500) | Y | | 备注 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| deleted_time | timestamp(6) | Y | | 删除时间 | + +### system_login_log (系统访问记录) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 访问ID | +| log_type | int8 | N | | 日志类型 | +| trace_id | varchar(64) | Y | | 链路追踪编号 | +| user_id | int8 | N | 0 | 用户编号 | +| user_type | int2 | N | 0 | 用户类型 | +| username | varchar(50) | Y | | 用户账号 | +| result | int2 | N | | 登陆结果 | +| user_ip | varchar(50) | N | | 用户 IP | +| user_agent | varchar(512) | N | | 浏览器 UA | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_mail_account (邮箱账号表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 主键 | +| mail | varchar(255) | N | | 邮箱 | +| username | varchar(255) | N | | 用户名 | +| password | varchar(255) | N | | 密码 | +| host | varchar(255) | N | | SMTP 服务器域名 | +| port | int4 | N | | SMTP 服务器端口 | +| ssl_enable | bool | N | false | 是否开启 SSL | +| starttls_enable | bool | N | false | 是否开启 STARTTLS | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_mail_log (邮件日志表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| user_id | int8 | Y | | 用户编号 | +| user_type | int2 | Y | | 用户类型 | +| to_mail | varchar(255) | N | | 接收邮箱地址 | +| account_id | int8 | N | | 邮箱账号编号 | +| from_mail | varchar(255) | N | | 发送邮箱地址 | +| template_id | int8 | N | | 模板编号 | +| template_code | varchar(63) | N | | 模板编码 | +| template_nickname | varchar(255) | Y | | 模版发送人名称 | +| template_title | varchar(255) | N | | 邮件标题 | +| template_content | varchar(10240) | N | | 邮件内容 | +| template_params | varchar(255) | N | | 邮件参数 | +| send_status | int2 | N | 0 | 发送状态 | +| send_time | timestamp(6) | Y | | 发送时间 | +| send_message_id | varchar(255) | Y | | 发送返回的消息 ID | +| send_exception | varchar(4096) | Y | | 发送异常 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_mail_template (邮件模版表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| name | varchar(63) | N | | 模板名称 | +| code | varchar(63) | N | | 模板编码 | +| account_id | int8 | N | | 发送的邮箱账号编号 | +| nickname | varchar(255) | Y | | 发送人名称 | +| title | varchar(255) | N | | 模板标题 | +| content | varchar(10240) | N | | 模板内容 | +| params | varchar(255) | N | | 参数数组 | +| status | int2 | N | | 开启状态 | +| remark | varchar(255) | Y | | 备注 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_users (用户表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 用户ID | +| username | varchar(30) | N | | 用户账号 | +| password | varchar(100) | N | | 密码 | +| nickname | varchar(30) | N | | 用户昵称 | +| remark | varchar(500) | Y | | 备注 | +| dept_id | int8 | Y | | 部门ID | +| post_ids | varchar(255) | Y | | 岗位编号数组 | +| email | varchar(50) | Y | | 用户邮箱 | +| mobile | varchar(11) | Y | | 手机号码 | +| sex | int2 | Y | | 用户性别 | +| avatar | varchar(512) | Y | | 头像地址 | +| status | int2 | N | | 帐号状态(0正常 1停用) | +| login_ip | varchar(50) | Y | | 最后登录IP | +| login_date | timestamp(6) | Y | | 最后登录时间 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_role (角色信息表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 角色ID | +| name | varchar(30) | N | | 角色名称 | +| code | varchar(100) | N | | 角色权限字符串 | +| sort | int4 | N | | 显示顺序 | +| data_scope | int2 | N | 1 | 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限) | +| data_scope_dept_ids | varchar(500) | N | | 数据范围(指定部门数组) | +| status | int2 | N | | 角色状态(0正常 1停用) | +| type | int2 | N | | 角色类型 | +| remark | varchar(500) | Y | | 备注 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_menu (菜单权限表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 菜单ID | +| name | varchar(50) | N | | 菜单名称 | +| permission | varchar(100) | N | | 权限标识 | +| type | int2 | N | | 菜单类型 | +| sort | int4 | N | 0 | 显示顺序 | +| parent_id | int8 | N | 0 | 父菜单ID | +| path | varchar(200) | Y | | 路由地址 | +| icon | varchar(100) | Y | | 菜单图标 | +| component | varchar(255) | Y | | 组件路径 | +| component_name | varchar(255) | Y | | 组件名 | +| status | int2 | N | | 菜单状态 | +| visible | bool | N | true | 是否可见 | +| keep_alive | bool | N | true | 是否缓存 | +| always_show | bool | N | true | 是否总是显示 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_tenant (租户表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 租户编号 | +| name | varchar(30) | N | | 租户名 | +| contact_user_id | int8 | Y | | 联系人的用户编号 | +| contact_name | varchar(30) | N | | 联系人 | +| contact_mobile | varchar(500) | Y | | 联系手机 | +| status | int2 | N | | 租户状态(0正常 1停用) | +| website | varchar(256) | Y | | 绑定域名 | +| package_id | int8 | N | | 租户套餐编号 | +| expire_time | timestamp(6) | N | | 过期时间 | +| account_count | int4 | N | | 账号数量 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_user_session (用户会话表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 会话ID | +| user_id | int8 | N | | 用户ID | +| session_id | varchar(100) | N | | 会话标识 | +| token | varchar(500) | N | | 访问令牌 | +| refresh_token | varchar(500) | Y | | 刷新令牌 | +| login_ip | varchar(50) | N | | 登录IP | +| login_location | varchar(100) | Y | | 登录地点 | +| user_agent | varchar(500) | Y | | 用户代理 | +| session_timeout | int4 | N | 1800 | 会话超时时间(秒) | +| last_access_time | timestamp(6) | N | pg_systimestamp() | 最后访问时间 | +| is_active | int2 | N | 1 | 是否活跃:0-否,1-是 | +| logout_time | timestamp(6) | Y | | 登出时间 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_user_role (用户角色关联表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| user_id | int8 | N | | 用户ID | +| role_id | int8 | N | | 角色ID | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_role_menu (角色菜单关联表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| role_id | int8 | N | | 角色ID | +| menu_id | int8 | N | | 菜单ID | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +
+ +## 子系统1: 统一平台数据表 + +统一平台主要负责系统基础功能,包括用户管理、权限管理、部门管理等。这些表主要为system_*系列,已在上一节详细描述。 + +### OAuth2.0单点登录相关表 + +为支持OAuth2.0协议的单点登录功能,系统新增以下OAuth2.0相关数据表: + +
+点击展开/折叠OAuth2.0表详情 + +### system_oauth2_client (OAuth2客户端表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| client_id | varchar(255) | N | | 客户端编号 | +| secret | varchar(255) | N | | 客户端密钥 | +| name | varchar(255) | N | | 应用名 | +| logo | varchar(255) | N | | 应用图标 | +| description | varchar(255) | Y | | 应用描述 | +| status | int2 | N | | 状态 | +| access_token_validity_seconds | int4 | N | | 访问令牌的有效期 | +| refresh_token_validity_seconds | int4 | N | | 刷新令牌的有效期 | +| redirect_uris | varchar(255) | N | | 可重定向的 URI 地址 | +| authorized_grant_types | varchar(255) | N | | 授权类型 | +| scopes | varchar(255) | Y | | 授权范围 | +| auto_approve_scopes | varchar(255) | Y | | 自动通过的授权范围 | +| authorities | varchar(255) | Y | | 权限 | +| resource_ids | varchar(255) | Y | | 资源 | +| additional_information | varchar(4096) | Y | | 附加信息 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | + +### system_oauth2_access_token (OAuth2访问令牌表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| user_id | int8 | N | | 用户编号 | +| user_type | int2 | N | | 用户类型 | +| user_info | varchar(512) | N | | 用户信息 | +| access_token | varchar(255) | N | | 访问令牌 | +| refresh_token | varchar(32) | N | | 刷新令牌 | +| client_id | varchar(255) | N | | 客户端编号 | +| scopes | varchar(255) | Y | | 授权范围 | +| expires_time | timestamp(6) | N | | 过期时间 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_oauth2_refresh_token (OAuth2刷新令牌表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| user_id | int8 | N | | 用户编号 | +| refresh_token | varchar(32) | N | | 刷新令牌 | +| user_type | int2 | N | | 用户类型 | +| client_id | varchar(255) | N | | 客户端编号 | +| scopes | varchar(255) | Y | | 授权范围 | +| expires_time | timestamp(6) | N | | 过期时间 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_oauth2_code (OAuth2授权码表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| user_id | int8 | N | | 用户编号 | +| user_type | int2 | N | | 用户类型 | +| code | varchar(32) | N | | 授权码 | +| client_id | varchar(255) | N | | 客户端编号 | +| scopes | varchar(255) | Y | | 授权范围 | +| expires_time | timestamp(6) | N | | 过期时间 | +| redirect_uri | varchar(255) | Y | | 可重定向的 URI 地址 | +| state | varchar(255) | Y | | 状态 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### system_oauth2_approve (OAuth2批准表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | | 编号 | +| user_id | int8 | N | | 用户编号 | +| user_type | int2 | N | | 用户类型 | +| client_id | varchar(255) | N | | 客户端编号 | +| scope | varchar(255) | Y | | 授权范围 | +| approved | bool | N | false | 是否接受 | +| expires_time | timestamp(6) | N | | 过期时间 | +| creator | varchar(64) | Y | | 创建者 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新者 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +
+ +## 子系统2: 营收系统数据表 + +营收系统是核心业务系统,包括客户管理、抄表管理、账务管理、发票管理等核心业务功能。 + +
+点击展开/折叠营收系统表详情 + +### biz_community (所属小区表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(200) | N | | 小区名称 | +| code | varchar(100) | N | | 小区代码 | +| address | varchar(500) | Y | | 小区地址 | +| contact_number | varchar(100) | Y | | 联系号码 | +| dept_code | varchar(50) | N | | 部门代码,关联系统部门表 | +| parent_id | int8 | Y | | 父级小区id,支持小区层级管理 | +| ancestor_list | varchar(1000) | Y | | 祖级列表,格式:1,2,3表示祖级小区id列表 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### system_user_form_config (用户表单字段配置表-标准) + +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键ID | +| obj_id | int8 | Y | | 对象ID(用户id/角色id等) | +| config_type | int2 | N | | 配置类型:1-个人配置,2-角色配置 | +| code | varchar(100) | N | | 表格标识/模版号(与菜单或功能标识关联) | +| column_key | varchar(100) | N | | 列字段标识 | +| column_title | varchar(100) | Y | | 自定义列标题 | +| column_width | int4 | Y | | 列宽度 | +| is_visible | int2 | N | 0 | 是否显示:0-显示,1-隐藏 | +| is_printable | int2 | N | 0 | 是否可打印:0-是,1-否 | +| sort_order | int4 | N | 0 | 排序序号 | +| creator | varchar(64) | Y | | 创建人 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| updater | varchar(64) | Y | | 更新人 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户编号 | + +### biz_company_account (水司账户表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| account_name | varchar(200) | N | | 账户名称 | +| account_address | varchar(500) | Y | | 账户地址 | +| bank_name | varchar(200) | N | | 开户行名称 | +| bank_code | varchar(100) | N | | 开户行代码 | +| bank_account | varchar(100) | N | | 开户行账户 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_cost_component (费用组成表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 费用名称 | +| code | varchar(100) | N | | 费用代码 | +| penalty_coefficient | numeric(10,4) | Y | | 违约金系数,违约金计算系数,默认为0表示不收取违约金 | +| zero_usage_calculation | int2 | N | 0 | 零用量是否计算,0-不计算,1-计算 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_dept_account_rel (部门和水司账户关系表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| dept_code | varchar(50) | N | | 部门代码,关联系统部门表 | +| account_id | int8 | N | | 水司账户id,关联水司账户表 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_meter_caliber (水表口径表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 口径名称 | +| code | varchar(100) | N | | 口径代码 | +| value | numeric(10,2) | Y | | 口径值(单位:毫米) | +| check_period | int4 | Y | | 强检周期(单位:年) | +| replace_period | int4 | Y | | 定换周期(单位:年) | +| high_coefficient | numeric(10,4) | Y | | 量高系数,抄表量高提醒系数 | +| low_coefficient | numeric(10,4) | Y | | 量低系数,抄表量低提醒系数 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_meter_maker (水表厂家表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 厂家名称 | +| code | varchar(100) | N | | 厂家代码 | +| recharge_type | varchar(10) | Y | | 充值类型 | +| address | varchar(500) | Y | | 地址 | +| contact | varchar(100) | Y | | 联系人 | +| contact_number | varchar(100) | Y | | 联系号码 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_meter_model (水表型号表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| maker_code | varchar(100) | N | | 厂家代码,关联水表厂家表 | +| name | varchar(100) | Y | | 型号名称 | +| code | varchar(100) | N | | 型号代码 | +| caliber_range | varchar(200) | Y | | 口径范围,如:DN15-DN200 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_meter_range (水表量程表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 量程名称 | +| code | varchar(100) | N | | 量程代码 | +| value | numeric(15,3) | Y | | 量程值 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_category (水价归属表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 归属名称 | +| code | varchar(100) | N | | 归属代码 | +| parent_id | int8 | Y | | 父级归属id | +| ancestor_list | varchar(1000) | Y | | 祖级列表,格式:1,2,3表示祖级归属id列表 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_adjustment_history (水价调整历史表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| adjustment_id | int8 | N | | 调整id,关联水价调整表 | +| before_value | numeric(15,4) | Y | | 调整前价格 | +| after_value | numeric(15,4) | Y | | 调整后价格 | +| adjustment_reason | varchar(500) | Y | | 调整原因 | +| effective_date | timestamp(6) | Y | | 生效日期 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_cost_adjustment (价格成本调整表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| cost_component_code | varchar(100) | N | | 费用组成代码,关联费用组成表 | +| price_category_code | varchar(100) | N | | 价格归属代码,关联价格归属表 | +| price_value | numeric(15,4) | Y | | 价格值 | +| effective_date | timestamp(6) | Y | | 生效日期 | +| expire_date | timestamp(6) | Y | | 失效日期 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_dept_rel (价格部门关系表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| price_category_code | varchar(100) | N | | 价格归属代码,关联价格归属表 | +| dept_code | varchar(50) | N | | 部门代码,关联系统部门表 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_cost (价格折扣成本表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| scheme_id | int8 | N | | 折扣方案id,关联价格折扣方案表 | +| cost_component_code | varchar(100) | N | | 费用组成代码,关联费用组成表 | +| discount_rate | numeric(10,4) | Y | | 折扣率,0-1之间的小数 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_scheme (价格折扣方案表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 方案名称 | +| code | varchar(100) | N | | 方案代码 | +| price_category_code | varchar(100) | N | | 价格归属代码,关联价格归属表 | +| discount_type | varchar(20) | Y | | 折扣类型,如:百分比、固定金额等 | +| effective_date | timestamp(6) | Y | | 生效日期 | +| expire_date | timestamp(6) | Y | | 失效日期 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_tier (价格折扣阶梯表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| scheme_id | int8 | N | | 折扣方案id,关联价格折扣方案表 | +| tier_level | int4 | Y | | 阶梯级别 | +| start_value | numeric(15,3) | Y | | 起始值 | +| end_value | numeric(15,3) | Y | | 结束值 | +| discount_rate | numeric(10,4) | Y | | 折扣率 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_tier_adjustment (价格阶梯调整表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| cost_component_code | varchar(100) | N | | 费用组成代码,关联费用组成表 | +| price_category_code | varchar(100) | N | | 价格归属代码,关联价格归属表 | +| tier_level | int4 | Y | | 阶梯级别 | +| start_value | numeric(15,3) | Y | | 起始值 | +| end_value | numeric(15,3) | Y | | 结束值 | +| price_value | numeric(15,4) | Y | | 价格值 | +| effective_date | timestamp(6) | Y | | 生效日期 | +| expire_date | timestamp(6) | Y | | 失效日期 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_adjustment_snap (水价调整快照表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| code | int4 | N | | 快照编号/版本号,1->2->3递增 | +| effective_date | timestamp(6) | N | | 生效日期 | +| expiry_date | timestamp(6) | Y | | 失效日期,为空表示长期有效 | +| adjuster | varchar(100) | Y | | 调价人 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间/调价时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_template (水价调整模版表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| name | varchar(100) | Y | | 用水性质名称 | +| code | varchar(100) | N | | 模版代码/简号 | +| price_category_code | varchar(100) | N | | 水价归属代码,关联价格归属表 | +| adjustment_snap_code | varchar(100) | N | | 调价快照code,关联水价调整快照表 | +| meter_start | int4 | Y | | 起开量 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_template_dept_rel (模版部门关系表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| dept_code | varchar(50) | N | | 部门代码,关联系统部门表 | +| template_code | varchar(100) | N | | 水价调整模版代码 | +| adjustment_snap_code | varchar(100) | N | | 调价快照code | +| is_default | int2 | N | 0 | 是否默认:0-否,1-是 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_tier_adjustment (水价阶梯调整表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| cost_adjustment_id | int8 | N | | 水价费用调整id | +| cost_component_code | varchar(100) | N | | 费用组成代码 | +| tier_level | int4 | N | 0 | 阶梯级别,如1、2、3等 | +| start_volume | numeric(15,3) | Y | | 开始水量,单位:立方米 | +| end_volume | numeric(15,3) | Y | | 结束水量,为空表示无上限 | +| price | numeric(10,4) | N | | 价格,单位:元/立方米或元 | +| volume_coefficient | numeric(10,4) | N | 1 | 水量系数,用于特殊计算场景 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_scheme (水价优惠方案表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| scheme_name | varchar(200) | N | | 方案名称,如:居民用户优惠方案2024 | +| scheme_code | varchar(100) | N | | 方案代码 | +| template_code | varchar(100) | N | | 水价模版代码 | +| discount_type | int4 | N | | 优惠方式:1-按水量,2-按比例 | +| effective_date | date | N | | 生效日期 | +| expiry_date | date | Y | | 失效日期,为空表示长期有效 | +| scheme_description | varchar(1000) | Y | | 方案描述 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_tier (水价优惠阶梯表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| scheme_id | int8 | N | | 优惠方案id | +| tier_level | int4 | N | 0 | 阶梯级别,如1、2、3等 | +| start_volume | numeric(15,3) | Y | | 开始水量,单位:立方米 | +| end_volume | numeric(15,3) | Y | | 结束水量,为空表示无上限 | +| include_in_tier | int2 | N | 1 | 是否计入阶梯:0-不计入,1-计入 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### biz_price_discount_cost (水价优惠费用表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| tier_id | int8 | N | | 优惠阶梯id | +| cost_component_code | varchar(100) | N | | 费用组成代码 | +| discount_price | numeric(10,4) | N | | 优惠价格,单位:元/立方米或元 | +| sort | int4 | N | 0 | 排序 | +| remark | varchar(500) | Y | | 备注 | +| status | int2 | N | 0 | 状态:0-否,1-是 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +## SYS-002 客户与账户关系表 (`biz_cust*` / `biz_account`) + +> 说明:以下内容按 `sql/lhc_数据库设计.md`、`docs/guides/BACKEND_TABLE_MAPPING.md` 与当前 backend 真实表名进行整编,字段以“数据库专项设计阶段需重点关注的核心字段”为主,不再延续旧稿中的 `customer_*` 系列表命名。 + +### biz_cust (客户主档表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 客户编号 | +| `name` | 客户名称 | +| `cust_type` | 客户类型 | +| `id_type` / `id_no` | 证件类型 / 证件号码 | +| `mobile` / `address` | 联系电话 / 地址 | +| `dept_code` | 所属营业部门 | +| `status` | 客户状态 | +| `tenant_id` | 租户编号 | + +### biz_account (客户账户表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 账户编号 | +| `cust_id` | 客户主档 ID | +| `balance` | 账户余额 | +| `arrears_amount` | 欠费金额 | +| `account_status` | 账户状态 | +| `tenant_id` | 租户编号 | + +### biz_cust_contact (客户联系人表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `cust_id` | 客户主档 ID | +| `name` | 联系人姓名 | +| `mobile` | 联系电话 | +| `contact_type` | 联系人类型 | +| `is_default` | 是否默认联系人 | + +### biz_cust_group (客户分组表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 分组编码 | +| `name` | 分组名称 | +| `parent_id` | 上级分组 | +| `status` | 状态 | + +### biz_cust_meter (客户与水表关系表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `cust_id` | 客户主档 ID | +| `meter_id` | 水表主档 ID | +| `bind_type` | 绑定类型 | +| `is_main` | 是否主表 | +| `status` | 关系状态 | + +### biz_cust_invoice (客户开票信息表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `cust_id` | 客户主档 ID | +| `invoice_title` | 开票抬头 | +| `tax_no` | 纳税人识别号 | +| `email` | 发票接收邮箱 | +| `mobile` | 联系手机号 | + +### biz_cust_app_binds (客户应用绑定表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `cust_id` | 客户主档 ID | +| `app_type` | 应用类型 | +| `app_user_id` | 外部应用用户标识 | +| `status` | 绑定状态 | + +### biz_cust_collection_rel / biz_cust_withholding_rel (托收/代扣关系表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_cust_collection_rel` | `cust_id`, `collection_id`, `status` | 客户与托收关系 | +| `biz_cust_withholding_rel` | `cust_id`, `withholding_id`, `status` | 客户与代扣关系 | + +### biz_cust_water_use_scheme / biz_cust_water_scheme_rel (用水方案关系表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_cust_water_use_scheme` | `cust_id`, `scheme_code`, `effective_date` | 客户用水方案 | +| `biz_cust_water_scheme_rel` | `cust_id`, `template_code`, `status` | 客户与价格模板关系 | + +### biz_cust_no_rule / biz_cust_hub_marks (客户编号与集抄标识表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_cust_no_rule` | `rule_code`, `prefix`, `dept_code`, `status` | 客户编号规则 | +| `biz_cust_hub_marks` | `cust_id`, `hub_code`, `mark_type` | 集抄/枢纽标识 | + +## SYS-002 抄表、水表与价格支撑表 (`biz_meter*` / `biz_reading_*` / `biz_price_*`) + +### biz_meter (水表主档表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 水表编号 | +| `meter_no` | 出厂表号 | +| `maker_code` / `model_code` | 厂家 / 型号 | +| `caliber_code` / `range_code` | 口径 / 量程 | +| `install_address` | 安装地址 | +| `meter_status` | 水表状态 | +| `tenant_id` | 租户编号 | + +### biz_meter_book (抄表册本表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 册本编号 | +| `name` | 册本名称 | +| `dept_code` | 所属部门 | +| `reader_user` | 抄表员 | +| `reading_cycle` | 抄表周期 | +| `status` | 册本状态 | + +### biz_meter_read (抄表任务/状态表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `book_id` | 册本 ID | +| `cust_id` | 客户 ID | +| `meter_id` | 水表 ID | +| `read_period` | 抄表期间 | +| `read_status` | 抄表状态 | +| `read_type` | 抄表方式 | + +### biz_reading_data (抄表数据表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `meter_read_id` | 抄表任务 ID | +| `last_reading` | 上次读数 | +| `current_reading` | 本次读数 | +| `water_usage` | 用水量 | +| `read_time` | 抄见时间 | +| `photo_url` | 抄表照片 | + +### biz_last_reading / biz_reading_logs (上次读数与抄表日志) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_last_reading` | `meter_id`, `last_reading`, `last_read_time` | 水表最近有效读数 | +| `biz_reading_logs` | `meter_id`, `operate_type`, `operator`, `operate_time` | 抄表处理留痕 | + +### 价格与模板支撑表 +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_price_category` | `code`, `name`, `parent_id` | 水价归属 | +| `biz_price_template` | `code`, `price_category_code`, `adjustment_snap_code` | 水价模板 | +| `biz_price_adjustment_snap` | `code`, `effective_date`, `expiry_date` | 调价快照 | +| `biz_price_cost_adjustment` | `price_category_code`, `cost_component_code`, `price_value` | 费用调价 | +| `biz_price_tier_adjustment` | `cost_component_code`, `tier_level`, `start_volume`, `end_volume`, `price` | 阶梯价格 | +| `biz_cost_component` | `code`, `name`, `penalty_coefficient` | 费用组成 | +| `biz_water_use_scheme` | `code`, `name`, `status` | 用水方案 | +| `biz_water_use_scheme_tier` | `scheme_code`, `tier_level`, `start_volume`, `end_volume` | 用水阶梯 | +| `biz_exceed_water_use_scheme` | `scheme_code`, `exceed_type`, `price_rule` | 超计划规则 | + +## SYS-002 开账、收费与票据表 (`biz_charge*` / `biz_collection` / `biz_withholding` / `biz_invoice*`) + +### biz_charge (营业账主表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `code` | 账单编号 | +| `cust_id` | 客户 ID | +| `record_id` | 抄表记录或开账来源 ID | +| `bill_period` | 账单期间 | +| `total_amount` | 账单总金额 | +| `charge_status` | 收费状态 | +| `due_date` | 应缴日期 | + +### biz_charge_detail (营业账明细表) +| 字段名 | 说明 | +| :--- | :--- | +| `id` | 主键 | +| `charge_id` | 营业账主表 ID | +| `cost_component_code` | 费用组成代码 | +| `usage_amount` | 用量 | +| `unit_price` | 单价 | +| `detail_amount` | 明细金额 | + +#### REV-002 账单生成承接口径 + +| 对象 | 正式口径 | 承接说明 | +| :--- | :--- | :--- | +| `biz_charge` | 账单生成主结果对象 | 统一表达客户、账期、抄表/开账来源、账单总金额、收费状态与应缴日期,不单独发明新的在线账单主模型 | +| `biz_charge_detail` | 账单生成明细对象 | 统一表达费用组成、用量、单价、明细金额,与主表通过 `charge_id` 建立主明细关系 | +| `biz_price_category`、`biz_price_template`、`biz_price_adjustment_snap`、`biz_price_tier_adjustment` | 计费规则来源对象 | 用于表达价格归属、基础价格、调价快照与阶梯规则来源,支撑账单金额计算与追溯 | +| `biz_cost_component` | 费用组成定义对象 | 用于表达水费、污水费、附加费、罚款类费用等明细分类,不将费用组成直接硬编码到主表 | +| `biz_water_use_scheme`、`biz_water_use_scheme_tier`、`biz_exceed_water_use_scheme` | 计划用水与超计划规则对象 | 用于承接计划用水、超计划与阶梯类扩展规则,不额外发明平行的特殊开账规则表 | +| 历史开账记录、特殊开账 | 历史只读 / 同模型承接对象 | 统一纳入 `biz_charge`、`biz_charge_detail` 与操作留痕承接,通过来源类型、业务类型、依据说明区分,不单设“特殊开账表” | + +> REV-002 承接口径:账单生成结果统一由 `biz_charge`、`biz_charge_detail` 承接,关键规则来源继续由 `biz_price_*`、`biz_cost_component` 与计划用水相关对象提供;当价格模板、费用组成或规则关系不完整时,应按“阻断生成”口径处理。 +> +> 当前 backend 证据:`ChargeServiceImpl.generateSingleChargeWithCache` 成功路径已执行 `chargeMapper.insert(charge)`、`chargeDetailService.insertChargeDetail(detail)` 与 `updateReadingDataCheckState(readingDataId, 1)`,说明现有实现已能把按 `readingDataIds` 复核/开账的结果落入 `biz_charge`、`biz_charge_detail`。 +> +> 当前承接缺口:接口层返回仍为成功条数字符串,失败阻断主要依赖日志与布尔值,且仅支持 `ACTUAL_USAGE` 结算方式;`biz_charge` / `biz_charge_detail` 的主明细结果、失败对象范围和结构化原因尚未提升为正式 `IF-REV-005` 契约返回。 +> +> REV-004 承接口径:水量调整、金额调整、退款、冲正、坏账申请统一以 `biz_charge`、`biz_charge_detail` 作为账单主明细承接对象;当前数据库主文档不新增独立账务细表来承接一期场景。 + +### biz_collection / biz_withholding (托收与代扣主表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_collection` | `code`, `cust_id`, `charge_id`, `collection_status` | 托收主表 | +| `biz_withholding` | `code`, `cust_id`, `charge_id`, `withholding_status` | 代扣主表 | + +### biz_invoice / biz_invoice_taxrate (发票主表与税率表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_invoice` | `code`, `cust_id`, `charge_id`, `invoice_status`, `invoice_amount` | 发票主表,统一承接申请单号、账单关联、受理号、开票结果与电子票地址等核心状态 | +| `biz_invoice_taxrate` | `tax_code`, `tax_name`, `tax_rate`, `status` | 税率基础配置 | + +#### REV-005 发票承接口径 + +| 对象 | 已有字段 | 待补字段 | 仅快照/历史只读字段 | +| :--- | :--- | :--- | :--- | +| `biz_invoice` 发票申请/结果主对象 | `code`、`cust_id`、`charge_id`、`invoice_status`、`invoice_amount` | `application_no`、`sys_request_no`、`invoice_type`、`invoice_title`、`tax_no`、`email`、`mobile`、`source_channel`、`fail_reason`、`invoice_code`、`invoice_number`、`file_url`、`last_try_time`、`next_try_time`、`try_count`、`push_status`、`charge_ids_snapshot`、`charge_bind_status`、作废原因/备注、红冲原因/备注、原票/红票关联标识、作废/红冲申请来源、补偿查询/结果回写上下文 | 旧开票批次号、旧配置版本号、旧平台扩展回执 | +| `biz_cust_invoice` 客户开票信息 | `cust_id`、`invoice_title`、`tax_no`、`email`、`mobile` | 企业/个人抬头类型、默认推送方式等扩展属性按后续实现补齐 | 旧抬头版本、历史修改快照 | +| `biz_invoice_taxrate` 税率配置 | `tax_code`、`tax_name`、`tax_rate`、`status` | 税率生效区间、适用票种范围等扩展控制字段 | 旧税率版本快照 | +| 账单-发票关系快照 | 当前主模型通过 `biz_invoice` 与 `biz_charge*` 关联承接 | `charge_ids_snapshot`、账单集合来源、客户侧身份匹配结果、操作留痕标识 | 旧营业账开票关系表、旧发票明细表 | + +### biz_operat_log / biz_operat_log_detail (操作留痕表) +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_operat_log` | `biz_type`, `biz_id`, `operate_user`, `operate_time` | 业务操作主日志 | +| `biz_operat_log_detail` | `log_id`, `field_name`, `before_value`, `after_value` | 字段级变更留痕 | + +> REV-004 留痕口径:`biz_operat_log*` 统一承接账务处理的一期留痕,至少覆盖处理类型、目标账单、原交易引用、处理前后差异、原因说明、附件依据与操作人。 +> +> 边界说明:旧数据字典中的“跨周期水量、特账、红冲、已销调整、呆坏账、实时收费日志”等对象,在当前 backend 范围内未全部识别到独立实体表,数据库专项中统一按业务处理场景描述,不误写为已明确落地的真实表。 + +### 旧系统历史台账迁移与只读查询口径 + +#### 在线主模型承接范围 + +| 旧对象/旧菜单 | 当前主口径 | 承接方式 | 数据策略 | +| :--- | :--- | :--- | :--- | +| 开账记录、特殊开账 | `biz_charge`、`biz_charge_detail`、`biz_operat_log*` | 统一纳入营业账主表与明细表,特殊开账按来源类型、业务类型、依据说明留痕,不单设平行“特殊开账表” | 在线保留 | +| 柜台收费、实时收费、代收代扣 | `biz_collection`、`biz_withholding`、`bk_transaction*`、`bk_withholding_*` | 统一纳入收费主模型与渠道交易模型,柜台班结/实时收费日志按交易结果和操作留痕归并 | 在线保留 | +| 发票申请、开票结果、票据税率 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` | 统一纳入发票主表、税率表和客户开票信息,不为旧“营业账开票表”机械复制新在线表 | 在线保留 | +| 微网厅业务字段、页面配置、微信参数 | `biz_business_types`、`biz_business_datas`、`biz_page_settings*`、`biz_parameter_settings`、`sys_wechat_app_settings` | 统一归并为业务类型、页面配置和渠道参数模型 | 在线保留 | +| 办理附件、电子档案 | `biz_content`、`biz_content_attach` | 当前新增与迁移后新增资料统一按资料主表与附件表承接 | 在线保留 | + +#### 历史只读保留范围 + +| 历史对象 | 当前正式口径 | 保留策略 | 查询要求 | +| :--- | :--- | :--- | :--- | +| 红冲记录、红冲原因、红冲前后账务快照 | 账单状态 + 账务处理场景 + 操作留痕 | 保留历史只读,不强制拆为新主库独立实体表 | 至少支持原单号、红冲单号、金额、原因、经办人、时间查询 | +| 预存退款、已销调整、价差调整、分账调整、违约金减免、呆坏账明细 | `REV-004` 账务处理业务场景 | 旧细粒度台账以历史只读方式保留;新发生业务由流程与日志承接 | 至少支持汇总、明细、状态、审批结果和关联账单查询 | +| 柜台结账、打印记录、补打记录 | 收费结果 + 打印/操作留痕 | 旧查询菜单作为历史只读能力保留,不单独建设新结账台账表 | 至少支持班次、营业所、柜员、打印类型、结账状态查询 | +| 发票明细、营业账开票关系、开票配置快照 | 发票主模型 + 历史关系快照 | 旧细表和配置快照按历史只读保留;新在线模型只保留开票必需主数据 | 至少支持发票号、账单号、开票批次、配置版本和结果状态查询 | +| 催缴记录、停水记录、预存短信记录 | 催缴/停复水/消息联动业务场景 | 旧记录菜单按历史只读保留,与 `IF-REV-013` 的任务结果、通知链路和工单处置引用分层承接,不新增同名在线主表 | 至少支持客户、账期、催缴方式、执行结果、发送对象、发送时间、关联账单、处置引用查询 | +| 水表检定、领用、出库、退库、报废单据 | `METER-003` 生命周期场景 | 当前在线主表承接水表状态,旧单据与检定证书按历史只读保留 | 至少支持表号、仓库、单据类型、检定结论、证书编号查询 | + +#### 迁移验收最低对账口径 + +| 对账主题 | 最低核对维度 | 主口径来源 | 验收要求 | +| :--- | :--- | :--- | :--- | +| 开账记录 | 客户数、账单数、账期、应收金额 | `biz_charge`、`biz_charge_detail` + 历史账单来源 | 支持按账期、营业所、客户类型汇总比对 | +| 缴费记录 | 收费笔数、实收金额、渠道、核销状态 | `biz_collection`、`bk_transaction*` | 支持按渠道、日期、营业所汇总比对 | +| 发票记录 | 开票笔数、金额、状态、票据类型 | `biz_invoice*` + 历史开票关系 | 支持按发票状态、开票日期比对 | +| 红冲与账务调整 | 调整笔数、调整金额、处理结果 | 账务处理结果 + 历史台账 | 支持汇总与单据级差异定位 | +| 催缴与停复水 | 通知笔数、执行结果、停复水状态 | `IF-REV-013` 任务结果 + 历史记录 | 支持按账期、客户、执行状态、处置引用比对 | +| 电子档案 | 附件数、附件类型、关联业务单数 | `biz_content_attach` + 历史档案目录 | 支持按业务类型、上传时间、来源系统比对 | + +#### 设计约束 + +- 不以“旧菜单一项对应一张新表”为原则,优先复用当前已确认的 `biz_*`、`bk_*` 在线主模型。 +- 对 backend 当前未识别到独立实体表的旧细粒度台账,仅写为“历史只读查询对象”,不误写为“已存在新在线表”。 +- 历史只读对象必须保留原系统关键标识(原单号、原客户号、原批次号或原附件标识)以支撑迁移验收与问题追溯。 +- 涉及历史附件、影像、高拍仪资料时,正式数据库设计只约束“资料元数据 + 文件引用”口径,不在本轮臆造新的文件表族。 +- `REV-006` 的正式结果状态按 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态统一,数据库设计仅约束查询与追溯口径,不反推为已存在独立催缴结果主表。 +- 停复水、复水和工单处置在本轮仅保留“关联引用 + 状态摘要 + 建链时间”三类追溯字段要求,不展开下游业务表设计。 + +## SYS-002 业务办理与资料表 (`biz_process*` / `biz_business_*` / `biz_content*`) + +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `biz_process` | `code`, `biz_type_code`, `cust_id`, `process_status` | 业务办理流程主表 | +| `biz_process_transfer` | `process_id`, `from_user`, `to_user`, `transfer_time` | 流转/转办记录 | +| `biz_process_cust_contact` | `process_id`, `contact_name`, `mobile` | 办理过程联系人信息 | +| `biz_process_meter_install` | `process_id`, `meter_id`, `install_addr` | 装表安装信息 | +| `biz_process_invoice_modifys` | `process_id`, `invoice_id`, `modify_type` | 发票变更记录 | +| `biz_business_types` | `code`, `name`, `status` | 业务类型定义 | +| `biz_business_datas` | `biz_id`, `data_key`, `data_value` | 业务扩展数据 | +| `biz_content` | `biz_id`, `content_type`, `content_title` | 办理资料主表 | +| `biz_content_attach` | `content_id`, `file_name`, `file_url` | 办理附件表 | + +## SYS-002 银行代收与结算表 (`bk_*`) + +| 表名 | 关键字段 | 说明 | +| :--- | :--- | :--- | +| `bk_payment_channel` | `channel_code`, `channel_name`, `channel_type`, `status` | 支付渠道主表 | +| `bk_channel_api_config` | `channel_code`, `api_type`, `endpoint`, `crypto_type` | 渠道接口配置 | +| `bk_channel_route_rule` | `channel_code`, `route_type`, `priority`, `status` | 渠道路由规则 | +| `bk_channel_statistics` | `channel_code`, `stat_date`, `success_count`, `success_amount` | 渠道统计 | +| `bk_transaction` | `trade_no`, `biz_order_no`, `channel_code`, `trade_amount`, `trade_status` | 渠道交易流水 | +| `bk_transaction_callback` | `trade_no`, `callback_time`, `callback_status`, `raw_message` | 回调留痕 | +| `bk_transaction_exception` | `trade_no`, `exception_code`, `exception_desc`, `handle_status` | 异常处理 | + +> REV-004 原交易校验口径:退款、冲正场景统一依赖 `bk_transaction*` 校验原交易存在性、状态、回调结果与异常处理状态,数据库专项不再为一期新增平行退款交易表。 +| `bk_withholding_agreement` | `agreement_no`, `cust_id`, `channel_code`, `sign_status` | 代扣签约 | +| `bk_withholding_batch` | `batch_no`, `channel_code`, `batch_date`, `batch_status` | 代扣批次 | +| `bk_withholding_item` | `batch_id`, `cust_id`, `charge_id`, `item_status` | 代扣明细 | +| `bk_reconcile_batch` | `batch_no`, `channel_code`, `bill_date`, `reconcile_status` | 对账批次 | +| `bk_reconcile_diff` | `batch_id`, `trade_no`, `diff_type`, `diff_amount` | 对账差异 | +| `bk_settlement_batch` | `batch_no`, `channel_code`, `settlement_date`, `settlement_status` | 结算批次 | + +> 当前实现边界说明:`bk_*` 表族已形成较完整的对象承接口径,且签约、解约、交易流水与后台资源管理具备明确实现证据;但送盘、回盘、对账、结算等业务编排仍缺少完整闭环与统一迁移证据,数据库专项不得据此倒推出“银行协同已全部落地”。 + +
+ + +## METER/INST 专题表边界 + +本章节用于收敛 `SYS-002` 主表之外、但在详细设计与附录中反复出现的表务与报装签章专题表口径,避免“主文档未覆盖、分文档各写一套”。 + +### METER 专题(表务管理) + +#### 实现态(当前主库口径) + +| 表名 | 角色定位 | 说明 | +| :--- | :--- | :--- | +| `biz_meter` | 水表主档 | 水表基础信息、状态、型号、口径、量程等主数据入口 | +| `biz_meter_read` / `biz_reading_data` / `biz_last_reading` | 抄表与读数 | 支撑抄表任务、读数提交、最新读数维护 | +| `biz_meter_log` | 表务留痕 | 记录换表、移表、校表、维修等过程动作 | +| `biz_meter_in_out` / `biz_meter_in_out_rel` | 库存与出入库 | 支撑领用、退库、报废及批次追踪 | +| `biz_process` / `biz_process_transfer` | 工单协同 | 与业务办理流程共享工单流转和处理状态 | + +#### 历史命名映射(存量资料口径) + +| 历史命名(存量) | 当前主口径(建议对齐) | 说明 | +| :--- | :--- | :--- | +| `water_meter_workorder` | `biz_meter_log` + `biz_process*` | 旧稿“工单”能力在主文档统一并入表务日志与流程流转模型 | +| `water_meter_stock` / `water_meter_inventory` | `biz_meter_in_out` + `biz_meter_in_out_rel` | 旧稿库存/出入库能力按 `biz_meter_*` 专题表收敛 | +| `water_meter_archive` | `biz_meter` + `biz_last_reading` | 旧稿档案口径统一并入水表主档与读数状态模型 | + +> 说明:`water_meter_*` 仅用于历史资料追溯,不作为当前正式交付主口径。 + +### INST 专题(报装与签章) + +#### 实现态(当前主库口径) + +| 表名 | 角色定位 | 说明 | +| :--- | :--- | :--- | +| `biz_process` / `biz_process_transfer` | 报装流程主线 | 报装申请受理、节点流转、办理状态 | +| `biz_process_meter_install` | 装表落地信息 | 记录安装位置、装表结果等现场信息 | +| `biz_business_datas` | 业务扩展数据 | 踏勘、方案、审批扩展字段 | +| `biz_content` / `biz_content_attach` | 资料与附件 | 报装材料、验收资料、影像与附件管理 | + +#### 设计态(专项扩展口径) + +| 表名 | 角色定位 | 说明 | +| :--- | :--- | :--- | +| `installation_contract` | 报装合同主表 | 合同主数据、合同状态、文件地址 | +| `installation_signature` | 签章记录表 | 签署方、签章任务、签署状态与时间 | +| `installation_evidence` | 电子存证表 | 存证凭证、哈希、存证状态 | +| `installation_ca_config` | CA 配置表 | 泛微 CA 对接配置参数 | +| `installation_signature_template` | 签章模板表 | 签章模板与签署位置配置 | +| `installation_application` | 报装申请映射 | 与报装申请主线对象的关联映射(设计态) | + +> 边界说明:`installation_*` 来源于报装签章专项设计与附录,当前在数据库主文档按“专题扩展”纳管。若实施库落地结构与本表不一致,以实施库与主详设联合评审结果为准。 + +## 子系统5: 客户服务数据表(复用 SYS-002 主数据) + +客户服务模块本身不再单独维护旧稿中分散的平行表模型,而是以 `SYS-002` 主数据和交易表为主,按场景复用客户、账单、支付、发票与业务办理数据。 + +
+点击展开/折叠客户服务系统表详情 + +### 客户服务主要复用表 + +| 场景 | 复用表 | 说明 | +| :--- | :--- | :--- | +| 账户绑定管理 | `biz_cust`, `biz_cust_app_binds`, `biz_account` | 支撑账户绑定、默认客户切换与账号关联 | +| 信息查询服务 | `biz_cust`, `biz_cust_meter`, `biz_meter`, `biz_charge`, `biz_charge_detail` | 支撑客户档案、表计信息、账单与费用查询 | +| 在线缴费服务 | `biz_charge`, `biz_collection`, `biz_withholding`, `bk_transaction`, `bk_transaction_callback` | 支撑缴费下单、支付回写与异步回调 | +| 电子发票服务 | `biz_invoice`, `biz_invoice_taxrate`, `biz_cust_invoice` | 支撑发票申请、税率匹配与抬头信息 | +| 业务办理服务 | `biz_process`, `biz_process_transfer`, `biz_business_datas`, `biz_content_attach` | 支撑业务申请、进度查询与附件资料 | + +> 说明:客户服务模块与 `SYS-008`、`SYS-009`、`SYS-010` 的协同在数据库层主要表现为复用 `SYS-002` 主业务表并接收外部服务回写结果,不再单列一套平行客户服务数据库模型。 + +
+ +## 子系统6: 手机抄表APP数据表 + +手机抄表APP为抄表员和外勤人员提供移动作业工具,支持离线操作,提升现场工作效率。 + +
+点击展开/折叠手机抄表APP表详情 + +### 移动端表 (mobile_*) + +### mobile_user_session (移动端用户会话表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| user_id | int8 | N | | 用户ID | +| device_id | varchar(100) | N | | 设备ID | +| device_type | varchar(20) | N | | 设备类型:Android、iOS | +| app_version | varchar(20) | Y | | 应用版本 | +| login_type | varchar(20) | N | | 登录类型:在线、离线 | +| session_token | varchar(500) | N | | 会话令牌 | +| login_time | timestamp(6) | N | pg_systimestamp() | 登录时间 | +| last_active_time | timestamp(6) | Y | | 最后活跃时间 | +| logout_time | timestamp(6) | Y | | 登出时间 | +| session_duration | int4 | Y | 0 | 会话时长(分钟) | +| login_ip | varchar(50) | Y | | 登录IP | +| login_location | varchar(100) | Y | | 登录位置 | +| network_type | varchar(20) | Y | | 网络类型:WiFi、4G、5G | +| session_status | int2 | N | 1 | 会话状态:0-已结束,1-活跃 | +| sync_status | int2 | N | 0 | 同步状态:0-未同步,1-已同步 | +| last_sync_time | timestamp(6) | Y | | 最后同步时间 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_user_cache (移动端用户缓存表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| user_id | int8 | N | | 用户ID | +| device_id | varchar(100) | N | | 设备ID | +| cache_key | varchar(200) | N | | 缓存键 | +| cache_value | text | Y | | 缓存值 | +| cache_type | varchar(20) | N | | 缓存类型:用户信息、权限、配置、数据 | +| cache_size | int4 | Y | 0 | 缓存大小(字节) | +| expire_time | timestamp(6) | Y | | 过期时间 | +| access_count | int4 | Y | 0 | 访问次数 | +| last_access_time | timestamp(6) | Y | | 最后访问时间 | +| cache_status | int2 | N | 1 | 缓存状态:0-已过期,1-有效 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_login_log (移动端登录日志表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| user_id | int8 | N | | 用户ID | +| username | varchar(50) | N | | 用户名 | +| device_id | varchar(100) | N | | 设备ID | +| device_type | varchar(20) | N | | 设备类型:Android、iOS | +| device_model | varchar(100) | Y | | 设备型号 | +| app_version | varchar(20) | Y | | 应用版本 | +| login_type | varchar(20) | N | | 登录类型:在线、离线 | +| login_time | timestamp(6) | N | pg_systimestamp() | 登录时间 | +| login_result | int2 | N | | 登录结果:0-成功,1-失败 | +| login_ip | varchar(50) | Y | | 登录IP | +| login_location | varchar(100) | Y | | 登录位置 | +| network_type | varchar(20) | Y | | 网络类型:WiFi、4G、5G | +| failure_reason | varchar(200) | Y | | 失败原因 | +| user_agent | varchar(500) | Y | | 用户代理 | +| screen_resolution | varchar(20) | Y | | 屏幕分辨率 | +| operating_system | varchar(50) | Y | | 操作系统 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_reading_task (移动端抄表任务表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| task_no | varchar(32) | N | | 任务编号 | +| book_id | int8 | N | | 册本ID | +| reader_id | int8 | N | | 抄表员ID | +| task_date | date | N | | 任务日期 | +| total_meters | int4 | Y | 0 | 总表数 | +| completed_meters | int4 | Y | 0 | 已完成表数 | +| task_status | int2 | N | 0 | 任务状态:0-待开始,1-进行中,2-已完成 | +| download_time | timestamp(6) | Y | | 下载时间 | +| upload_time | timestamp(6) | Y | | 上传时间 | +| sync_status | int2 | N | 0 | 同步状态:0-未同步,1-已同步 | +| completion_rate | numeric(5,2) | Y | 0 | 完成率 | +| start_time | timestamp(6) | Y | | 开始时间 | +| end_time | timestamp(6) | Y | | 结束时间 | +| work_duration | int4 | Y | 0 | 工作时长(分钟) | +| exception_count | int4 | Y | 0 | 异常数量 | +| photo_count | int4 | Y | 0 | 照片数量 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_reading_record (移动端抄表记录表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| task_id | int8 | N | | 任务ID | +| customer_id | int8 | N | | 客户ID | +| meter_id | int8 | N | | 水表ID | +| reading_value | numeric(15,3) | Y | 0 | 抄表读数 | +| reading_time | timestamp(6) | N | pg_systimestamp() | 抄表时间 | +| reading_type | varchar(20) | N | | 抄表类型:正常、异常、估读 | +| exception_code | varchar(10) | Y | | 异常代码 | +| exception_description | varchar(500) | Y | | 异常描述 | +| photo_path | varchar(500) | Y | | 照片路径 | +| gps_longitude | numeric(10,6) | Y | | GPS经度 | +| gps_latitude | numeric(10,6) | Y | | GPS纬度 | +| location_accuracy | numeric(8,2) | Y | | 位置精度 | +| reading_method | varchar(20) | Y | | 抄表方式:手工、扫码、拍照识别 | +| sync_status | int2 | N | 0 | 同步状态:0-未同步,1-已同步 | +| sync_time | timestamp(6) | Y | | 同步时间 | +| network_type | varchar(20) | Y | | 网络类型:WiFi、4G、5G、离线 | +| device_id | varchar(100) | Y | | 设备ID | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_task_progress (移动端任务进度表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| task_id | int8 | N | | 任务ID | +| user_id | int8 | N | | 用户ID | +| progress_time | timestamp(6) | N | pg_systimestamp() | 进度时间 | +| completed_count | int4 | Y | 0 | 已完成数量 | +| total_count | int4 | Y | 0 | 总数量 | +| completion_rate | numeric(5,2) | Y | 0 | 完成率 | +| current_location | varchar(200) | Y | | 当前位置 | +| working_status | varchar(20) | Y | | 工作状态:工作中、休息中、结束 | +| progress_description | varchar(500) | Y | | 进度描述 | +| device_id | varchar(100) | Y | | 设备ID | +| battery_level | int4 | Y | 0 | 电池电量 | +| network_status | varchar(20) | Y | | 网络状态:在线、离线 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_data_cache (移动端数据缓存表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| user_id | int8 | N | | 用户ID | +| device_id | varchar(100) | N | | 设备ID | +| data_type | varchar(20) | N | | 数据类型:抄表、收费、工单 | +| data_key | varchar(200) | N | | 数据键 | +| data_value | text | Y | | 数据值 | +| data_size | int4 | Y | 0 | 数据大小(字节) | +| cache_time | timestamp(6) | N | pg_systimestamp() | 缓存时间 | +| sync_status | int2 | N | 0 | 同步状态:0-未同步,1-已同步,2-同步失败 | +| sync_time | timestamp(6) | Y | | 同步时间 | +| sync_error | varchar(500) | Y | | 同步错误 | +| retry_count | int4 | Y | 0 | 重试次数 | +| priority | int4 | Y | 0 | 优先级 | +| expire_time | timestamp(6) | Y | | 过期时间 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_problem_report (移动端问题上报表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| report_no | varchar(32) | N | | 上报编号 | +| reporter_id | int8 | N | | 上报人ID | +| problem_type | varchar(20) | N | | 问题类型:水表故障、管道漏水、水质问题 | +| problem_description | text | N | | 问题描述 | +| problem_location | varchar(200) | Y | | 问题位置 | +| gps_longitude | numeric(10,6) | Y | | GPS经度 | +| gps_latitude | numeric(10,6) | Y | | GPS纬度 | +| urgency_level | varchar(20) | N | | 紧急程度:普通、紧急、特急 | +| report_time | timestamp(6) | N | pg_systimestamp() | 上报时间 | +| problem_photos | text | Y | | 问题照片 | +| problem_status | int2 | N | 0 | 问题状态:0-待处理,1-处理中,2-已处理 | +| handler | varchar(100) | Y | | 处理人 | +| handle_time | timestamp(6) | Y | | 处理时间 | +| handle_result | varchar(500) | Y | | 处理结果 | +| customer_id | int8 | Y | | 客户ID | +| meter_id | int8 | Y | | 水表ID | +| device_id | varchar(100) | Y | | 设备ID | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### mobile_work_order (移动端工单表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | int8 | N | nextval() | 主键 | +| work_order_no | varchar(32) | N | | 工单编号 | +| problem_report_id | int8 | Y | | 问题上报ID | +| work_order_type | varchar(20) | N | | 工单类型:维修、更换、检查 | +| assigned_user | varchar(100) | Y | | 指派人员 | +| assignment_time | timestamp(6) | Y | | 指派时间 | +| work_description | text | Y | | 工作描述 | +| work_location | varchar(200) | Y | | 工作位置 | +| scheduled_time | timestamp(6) | Y | | 预约时间 | +| start_time | timestamp(6) | Y | | 开始时间 | +| end_time | timestamp(6) | Y | | 结束时间 | +| work_duration | int4 | Y | 0 | 工作时长(分钟) | +| work_status | int2 | N | 0 | 工单状态:0-待处理,1-处理中,2-已完成 | +| work_result | varchar(500) | Y | | 工作结果 | +| completion_photos | text | Y | | 完成照片 | +| customer_signature | varchar(500) | Y | | 客户签名 | +| satisfaction_rating | int2 | Y | | 满意度评分:1-5分 | +| device_id | varchar(100) | Y | | 设备ID | +| sync_status | int2 | N | 0 | 同步状态:0-未同步,1-已同步 | +| sync_time | timestamp(6) | Y | | 同步时间 | +| remark | varchar(500) | Y | | 备注 | +| create_time | timestamp(6) | N | pg_systimestamp() | 创建时间 | +| update_time | timestamp(6) | N | pg_systimestamp() | 更新时间 | +| creator | varchar(100) | Y | | 创建人id | +| updater | varchar(100) | Y | | 更新人id | +| deleted | int2 | N | 0 | 是否删除 | +| tenant_id | int8 | N | 0 | 租户id | + +### 移动端特有表(优化后) + +根据移动端表设计优化原则,以下为移动端特有的5个表: + +### mobile_user_cache (移动端用户缓存表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | bigint | N | AUTO_INCREMENT | 主键 | +| user_id | bigint | N | | 用户ID,关联system_users.id | +| device_id | varchar(100) | N | | 设备唯一标识 | +| cache_data | longtext | Y | | 缓存数据(JSON格式) | +| cache_type | varchar(50) | N | | 缓存类型:user_info、task_data、config_data | +| expire_time | datetime | Y | | 过期时间 | +| version | int | N | 1 | 版本号,用于数据同步 | +| create_time | datetime | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | N | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar(64) | Y | | 创建者 | +| updater | varchar(64) | Y | | 更新者 | +| deleted | tinyint | N | 0 | 是否删除:0-未删除,1-已删除 | +| tenant_id | bigint | N | 0 | 租户ID | + +### mobile_search_history (移动端搜索历史表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | bigint | N | AUTO_INCREMENT | 主键 | +| user_id | bigint | N | | 用户ID,关联system_users.id | +| search_keyword | varchar(200) | N | | 搜索关键词 | +| search_type | varchar(50) | N | | 搜索类型:customer、meter、address | +| search_result_count | int | N | 0 | 搜索结果数量 | +| search_time | datetime | N | CURRENT_TIMESTAMP | 搜索时间 | +| device_id | varchar(100) | Y | | 设备ID | +| create_time | datetime | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | N | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar(64) | Y | | 创建者 | +| updater | varchar(64) | Y | | 更新者 | +| deleted | tinyint | N | 0 | 是否删除:0-未删除,1-已删除 | +| tenant_id | bigint | N | 0 | 租户ID | + +### mobile_task_sync (移动端任务同步表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | bigint | N | AUTO_INCREMENT | 主键 | +| user_id | bigint | N | | 用户ID,关联system_users.id | +| task_id | bigint | N | | 任务ID,关联biz_meter_book.id | +| sync_status | varchar(20) | N | pending | 同步状态:pending、syncing、completed、failed | +| sync_type | varchar(20) | N | | 同步类型:download、upload | +| data_size | int | N | 0 | 数据大小(字节) | +| sync_progress | decimal(5,2) | N | 0.00 | 同步进度(百分比) | +| error_message | text | Y | | 错误信息 | +| last_sync_time | datetime | Y | | 最后同步时间 | +| retry_count | int | N | 0 | 重试次数 | +| device_id | varchar(100) | Y | | 设备ID | +| create_time | datetime | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | N | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar(64) | Y | | 创建者 | +| updater | varchar(64) | Y | | 更新者 | +| deleted | tinyint | N | 0 | 是否删除:0-未删除,1-已删除 | +| tenant_id | bigint | N | 0 | 租户ID | + +### mobile_work_attachment (移动端工单附件表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | bigint | N | AUTO_INCREMENT | 主键 | +| work_order_id | bigint | N | | 工单ID,关联biz_process.id 或 biz_content.id | +| attachment_type | varchar(20) | N | | 附件类型:image、video、document | +| attachment_name | varchar(200) | N | | 附件名称 | +| attachment_path | varchar(500) | N | | 附件存储路径 | +| attachment_size | bigint | N | 0 | 附件大小(字节) | +| mime_type | varchar(100) | Y | | MIME类型 | +| upload_status | varchar(20) | N | pending | 上传状态:pending、uploading、completed、failed | +| upload_progress | decimal(5,2) | N | 0.00 | 上传进度(百分比) | +| gps_longitude | decimal(10,6) | Y | | GPS经度 | +| gps_latitude | decimal(10,6) | Y | | GPS纬度 | +| capture_time | datetime | Y | | 拍摄/录制时间 | +| device_id | varchar(100) | Y | | 设备ID | +| create_time | datetime | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | N | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar(64) | Y | | 创建者 | +| updater | varchar(64) | Y | | 更新者 | +| deleted | tinyint | N | 0 | 是否删除:0-未删除,1-已删除 | +| tenant_id | bigint | N | 0 | 租户ID | + +### mobile_app_config (移动端应用配置表) +| 字段名 | 类型 | 是否可空 | 默认值 | 注释 | +| :--- | :--- | :--- | :--- | :--- | +| id | bigint | N | AUTO_INCREMENT | 主键 | +| user_id | bigint | N | | 用户ID,关联system_users.id | +| config_key | varchar(100) | N | | 配置项键名 | +| config_value | text | Y | | 配置项值 | +| config_type | varchar(50) | N | | 配置类型:system、user、app | +| config_description | varchar(500) | Y | | 配置描述 | +| is_active | tinyint | N | 1 | 是否启用:0-禁用,1-启用 | +| device_id | varchar(100) | Y | | 设备ID | +| create_time | datetime | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | N | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar(64) | Y | | 创建者 | +| updater | varchar(64) | Y | | 更新者 | +| deleted | tinyint | N | 0 | 是否删除:0-未删除,1-已删除 | +| tenant_id | bigint | N | 0 | 租户ID | + +
+ + +# 移动端表设计优化说明 + +## 设计原则 + +根据系统架构设计原则,移动端优先使用Web端已有的数据表,避免重复建表,确保数据一致性和降低维护成本。 + +## 表复用策略 + +### 复用Web端表(10个) +移动端直接复用以下Web端已有表: + +| 表名 | 用途说明 | 备注 | +|------|----------|------| +| `system_users` | 用户基本信息表 | 复用Web端用户管理 | +| `system_login_log` | 登录日志表 | 扩展设备类型字段记录移动端登录 | +| `biz_cust` | 客户主档表 | 复用 Web 端客户档案 | +| `biz_meter` | 水表主档表 | 复用 Web 端水表档案 | +| `biz_meter_book` | 抄表册本表 | 复用 Web 端抄表任务 | +| `biz_reading_data` | 抄表数据表 | 复用 Web 端抄表数据 | +| `biz_meter_read` | 抄表任务/状态表 | 复用 Web 端抄表过程状态 | +| `biz_process` | 业务办理流程表 | 复用 Web 端现场业务工单/办理数据 | +| `biz_content_attach` | 办理附件表 | 复用 Web 端附件资料 | +| `biz_account` | 客户账户表 | 复用 Web 端账务信息 | + +### 移动端特有表(5个) +仅保留移动端特有的功能表: + +| 表名 | 用途说明 | 特有原因 | +|------|----------|----------| +| `mobile_user_cache` | 移动端用户缓存表 | 用于离线缓存,移动端特有需求 | +| `mobile_search_history` | 移动端搜索历史表 | 移动端搜索记录管理 | +| `mobile_task_sync` | 移动端任务同步表 | 离线任务管理,移动端特有 | +| `mobile_work_attachment` | 移动端工单附件表 | 现场附件管理,移动端特有 | +| `mobile_app_config` | 移动端应用配置表 | 个性化设置,移动端特有 | + +## 优化效果 + +1. **减少冗余**:避免了15+个重复表的创建 +2. **提升一致性**:移动端和Web端共享核心业务数据 +3. **降低维护成本**:统一的数据模型减少维护复杂度 +4. **符合架构原则**:遵循DRY(Don't Repeat Yourself)原则 + +## 数据同步策略 + +- **实时同步**:共用表自然保证数据一致性 +- **离线缓存**:移动端特有表支持离线操作 +- **冲突处理**:通过时间戳和版本控制处理数据冲突 + + +# 视图的设计 + +## 数据库ER图设计 + +### 系统核心表关系图 +```mermaid +erDiagram + system_tenant ||--o{ system_users : "租户关系" + system_users ||--o{ system_user_role : "用户角色" + system_role ||--o{ system_user_role : "角色用户" + system_role ||--o{ system_role_menu : "角色权限" + system_menu ||--o{ system_role_menu : "菜单权限" + system_dept ||--o{ system_users : "部门用户" + + system_tenant { + int8 id PK + varchar name + varchar contact_name + varchar contact_mobile + int2 status + timestamp expire_time + } + + system_users { + int8 id PK + varchar username + varchar nickname + varchar password + int8 dept_id FK + int8 tenant_id FK + int2 status + } + + system_role { + int8 id PK + varchar name + varchar code + int2 data_scope + int8 tenant_id FK + } + + system_dept { + int8 id PK + varchar name + int8 parent_id + varchar code + int8 tenant_id FK + } +``` + +### 业务核心表关系图 +```mermaid +erDiagram + BIZ_CUST ||--|| BIZ_ACCOUNT : 对应账户 + BIZ_CUST ||--o{ BIZ_CUST_CONTACT : 联系人 + BIZ_CUST ||--o{ BIZ_CUST_METER : 绑定水表 + BIZ_METER ||--o{ BIZ_CUST_METER : 被绑定 + BIZ_METER_BOOK ||--o{ BIZ_METER_READ : 生成任务 + BIZ_METER_READ ||--o{ BIZ_READING_DATA : 采集读数 + BIZ_METER ||--o{ BIZ_LAST_READING : 最新读数 + BIZ_READING_DATA ||--o{ BIZ_CHARGE : 触发开账 + BIZ_CHARGE ||--o{ BIZ_CHARGE_DETAIL : 明细拆分 + BIZ_CHARGE ||--o{ BIZ_INVOICE : 开票关联 + BIZ_CHARGE ||--o{ BK_TRANSACTION : 支付核销 + BIZ_PRICE_CATEGORY ||--o{ BIZ_PRICE_TEMPLATE : 模板归属 + BIZ_PRICE_TEMPLATE ||--o{ BIZ_WATER_USE_SCHEME : 计费方案 + BIZ_PRICE_CATEGORY ||--o{ BIZ_PRICE_COST_ADJUSTMENT : 费用调整 + BIZ_PRICE_COST_ADJUSTMENT ||--o{ BIZ_PRICE_TIER_ADJUSTMENT : 阶梯规则 + BK_WITHHOLDING_BATCH ||--o{ BK_WITHHOLDING_ITEM : 批次明细 + BK_RECONCILE_BATCH ||--o{ BK_RECONCILE_DIFF : 对账差异 + + BIZ_CUST { + int8 id PK + varchar code + varchar name + varchar cust_type + varchar mobile + int8 tenant_id FK + } + + BIZ_ACCOUNT { + int8 id PK + varchar code + int8 cust_id FK + numeric balance + numeric arrears_amount + } + + BIZ_METER { + int8 id PK + varchar code + varchar meter_no + varchar maker_code + varchar model_code + } + + BIZ_CHARGE { + int8 id PK + varchar code + int8 cust_id FK + varchar bill_period + numeric total_amount + int2 charge_status + } + + BK_TRANSACTION { + int8 id PK + varchar trade_no + varchar biz_order_no + varchar channel_code + numeric trade_amount + int2 trade_status + } +``` + +## 业务视图设计 + +为简化复杂查询和报表统计,设计以下视图: + +### v_price_info (价格信息视图) +综合展示价格体系信息,包含价格归属、费用组成、调整历史等。 +```sql +CREATE VIEW v_price_info AS +SELECT + pc.id as category_id, + pc.name as category_name, + pc.code as category_code, + cc.name as cost_name, + cc.code as cost_code, + pca.price_value, + pca.effective_date, + pca.expire_date +FROM biz_price_category pc +LEFT JOIN biz_price_cost_adjustment pca ON pc.code = pca.price_category_code +LEFT JOIN biz_cost_component cc ON pca.cost_component_code = cc.code +WHERE pc.deleted = 0 AND pca.deleted = 0 AND cc.deleted = 0; +``` + +### v_meter_info (水表信息视图) +整合水表主档、厂家、型号、口径等基础信息,服务于册本分配、现场抄表和档案查询。 +```sql +CREATE VIEW v_meter_info AS +SELECT + m.id AS meter_id, + m.code AS meter_code, + m.meter_no, + m.maker_code, + maker.name AS maker_name, + m.model_code, + model.name AS model_name, + m.caliber_code, + caliber.name AS caliber_name, + caliber.value AS caliber_value, + m.range_code, + range_cfg.name AS range_name, + m.install_address, + m.meter_status +FROM biz_meter m +LEFT JOIN biz_meter_maker maker ON m.maker_code = maker.code AND maker.deleted = 0 +LEFT JOIN biz_meter_model model ON m.model_code = model.code AND model.deleted = 0 +LEFT JOIN biz_meter_caliber caliber ON m.caliber_code = caliber.code AND caliber.deleted = 0 +LEFT JOIN biz_meter_range range_cfg ON m.range_code = range_cfg.code AND range_cfg.deleted = 0 +WHERE m.deleted = 0; +``` + +### v_dept_hierarchy (部门层级视图) +展示完整的组织架构层级关系。 +```sql +CREATE VIEW v_dept_hierarchy AS +WITH RECURSIVE dept_tree AS ( + SELECT id, name, code, parent_id, 0 as level, name as path + FROM system_dept + WHERE parent_id = 0 AND deleted = 0 + + UNION ALL + + SELECT d.id, d.name, d.code, d.parent_id, dt.level + 1, + CONCAT(dt.path, ' > ', d.name) + FROM system_dept d + INNER JOIN dept_tree dt ON d.parent_id = dt.id + WHERE d.deleted = 0 +) +SELECT * FROM dept_tree; +``` + +## 统计分析视图 + +### v_tenant_summary (租户汇总视图) +按租户维度统计各类数据。 +```sql +CREATE VIEW v_tenant_summary AS +SELECT + t.id as tenant_id, + t.name as tenant_name, + COUNT(DISTINCT u.id) as user_count, + COUNT(DISTINCT d.id) as dept_count, + COUNT(DISTINCT c.id) as community_count +FROM system_tenant t +LEFT JOIN system_users u ON t.id = u.tenant_id AND u.deleted = 0 +LEFT JOIN system_dept d ON t.id = d.tenant_id AND d.deleted = 0 +LEFT JOIN biz_community c ON t.id = c.tenant_id AND c.deleted = 0 +WHERE t.deleted = 0 +GROUP BY t.id, t.name; +``` + +### REV-007 统计承接口径 + +#### 设计定位 + +- `REV-007` 以在线业务主数据聚合、视图或汇总口径支撑经营统计查询,不在本轮确认独立统计仓库、离线批处理表或专题分析表族。 +- 统计结果必须能够追溯到现有客户、账单、收费、交易、抄表和组织维度数据来源。 +- 当前数据库主文档仅约束“统计查询如何承接”,不反推 backend 已存在专门统计模块或已固化全部统计视图。 + +#### 最小统计主题承接口径 + +| 统计主题 | 主数据来源 | 最低维度要求 | 最低指标要求 | 承接方式 | +| :--- | :--- | :--- | :--- | :--- | +| 营收汇总 | `biz_charge`、`biz_charge_detail` | 时间、账期、营业所、客户类别 | 应收金额、账单数、用水量 | 在线聚合 / 汇总口径 | +| 收费与实收统计 | `biz_collection`、`bk_transaction` | 时间、渠道、营业所、收费状态 | 实收金额、收费笔数、成功率 | 在线聚合 / 汇总口径 | +| 欠费规模与账龄统计 | `biz_charge`、`biz_charge_detail` | 账期、账龄、客户类别、区域 | 欠费余额、欠费户数、账龄分布 | 在线聚合 / 汇总口径 | +| 客户结构统计 | `biz_cust`、`biz_account` | 客户类别、区域、状态 | 客户数、账户数、活跃状态分布 | 在线聚合 / 视图口径 | +| 渠道交易统计 | `bk_transaction`、`bk_payment_channel` | 渠道、日期、结果状态 | 交易笔数、交易金额、渠道占比 | 在线聚合 / 汇总口径 | +| 抄表完成率统计 | `biz_meter_book`、`biz_reading_data`、`biz_last_reading` | 抄表周期、册本、片区、人员 | 应抄户数、已抄户数、完成率 | 在线聚合 / 汇总口径 | + +#### 设计约束 + +- 统计查询可以由视图、临时汇总结果或聚合 SQL 承接,但未确认存在的 `stat_*`、`report_*` 或专题报表表不得写成正式已实现对象。 +- 若某类统计仅在历史资料中出现而当前主文档未形成正式口径,应先作为后续专题保留项,不直接扩写为当前正式范围。 +- 涉及历史迁移核查的统计比对时,历史来源只承担补充核对职责,不替代在线主数据统计结果。 +- 导出能力属于查询扩展能力,数据库设计不单独为导出动作臆造新的物理表。 + + +# 索引设计与性能优化 + +## 核心索引设计 + +### 系统表索引 +```sql +-- 用户表核心索引 +CREATE INDEX idx_system_users_username ON system_users(username); +CREATE INDEX idx_system_users_dept_tenant ON system_users(dept_id, tenant_id); +CREATE INDEX idx_system_users_status_tenant ON system_users(status, tenant_id); + +-- 部门表索引 +CREATE INDEX idx_system_dept_parent_tenant ON system_dept(parent_id, tenant_id); +CREATE INDEX idx_system_dept_code ON system_dept(code); + +-- 角色权限索引 +CREATE INDEX idx_system_user_role_user_tenant ON system_user_role(user_id, tenant_id); +CREATE INDEX idx_system_role_menu_role_id ON system_role_menu(role_id); + +-- 日志表索引(支持时间范围查询) +CREATE INDEX idx_system_login_log_user_time ON system_login_log(user_id, create_time); +CREATE INDEX idx_system_login_log_ip_time ON system_login_log(user_ip, create_time); +``` + +### 业务表索引 +```sql +-- 客户主数据索引 +CREATE INDEX idx_biz_cust_code ON biz_cust(code); +CREATE INDEX idx_biz_cust_mobile ON biz_cust(mobile); +CREATE INDEX idx_biz_account_cust_status ON biz_account(cust_id, account_status); + +-- 水表与抄表索引 +CREATE INDEX idx_biz_meter_code ON biz_meter(code); +CREATE INDEX idx_biz_meter_book_dept_status ON biz_meter_book(dept_code, status); +CREATE INDEX idx_biz_meter_read_book_period ON biz_meter_read(book_id, read_period); +CREATE INDEX idx_biz_reading_data_read_time ON biz_reading_data(meter_read_id, read_time); + +-- 开账收费索引 +CREATE INDEX idx_biz_charge_cust_period ON biz_charge(cust_id, bill_period); +CREATE INDEX idx_biz_charge_status_due ON biz_charge(charge_status, due_date); +CREATE INDEX idx_biz_charge_detail_charge_cost ON biz_charge_detail(charge_id, cost_component_code); + +-- 价格体系索引 +CREATE INDEX idx_biz_price_category_code ON biz_price_category(code); +CREATE INDEX idx_biz_price_template_category ON biz_price_template(price_category_code, adjustment_snap_code); +CREATE INDEX idx_biz_price_cost_adj_category_cost ON biz_price_cost_adjustment(price_category_code, cost_component_code); +CREATE INDEX idx_biz_price_tier_adj_cost_tier ON biz_price_tier_adjustment(cost_component_code, tier_level); + +-- 银行代收与对账索引 +CREATE INDEX idx_bk_transaction_trade_no ON bk_transaction(trade_no); +CREATE INDEX idx_bk_transaction_biz_order ON bk_transaction(biz_order_no, trade_status); +CREATE INDEX idx_bk_withholding_batch_date ON bk_withholding_batch(batch_date, batch_status); +CREATE INDEX idx_bk_reconcile_batch_bill_date ON bk_reconcile_batch(bill_date, reconcile_status); +``` + +## 分区表设计 + +### 日志表分区策略 +```sql +-- 登录日志按月分区 +CREATE TABLE system_login_log_partition ( + LIKE system_login_log INCLUDING ALL +) PARTITION BY RANGE (create_time); + +-- 创建月度分区 +CREATE TABLE system_login_log_y2024m01 PARTITION OF system_login_log_partition + FOR VALUES FROM ('2024-01-01') TO ('2024-02-01'); + +CREATE TABLE system_login_log_y2024m02 PARTITION OF system_login_log_partition + FOR VALUES FROM ('2024-02-01') TO ('2024-03-01'); +``` + +### 历史数据分区策略 +```sql +-- 价格调整历史按年分区 +CREATE TABLE biz_price_adjustment_history_partition ( + LIKE biz_price_adjustment_history INCLUDING ALL +) PARTITION BY RANGE (create_time); + +-- 按年度分区 +CREATE TABLE biz_price_adjustment_history_y2024 PARTITION OF biz_price_adjustment_history_partition + FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); +``` + +## 查询优化建议 + +### 多租户查询优化 +```sql +-- 建议查询模式:始终带上租户ID +SELECT * FROM system_users +WHERE tenant_id = ? AND status = 0 AND dept_id = ?; + +-- 使用覆盖索引减少回表 +CREATE INDEX idx_system_users_cover ON system_users(tenant_id, status, dept_id) +INCLUDE (username, nickname, email); +``` + +### 层级查询优化 +```sql +-- 使用递归CTE查询部门层级 +WITH RECURSIVE dept_tree AS ( + SELECT id, name, parent_id, 1 as level + FROM system_dept + WHERE id = ? AND tenant_id = ? + + UNION ALL + + SELECT d.id, d.name, d.parent_id, dt.level + 1 + FROM system_dept d + INNER JOIN dept_tree dt ON d.parent_id = dt.id + WHERE d.tenant_id = ? AND dt.level < 10 -- 防止无限递归 +) +SELECT * FROM dept_tree; +``` + +## 数据归档策略 + +### 日志数据归档 +- **保留策略**: 在线保留3个月,历史数据转移到归档表 +- **归档周期**: 每月执行一次归档作业 +- **存储方式**: 使用列式存储优化查询性能 + +### 历史数据处理 +```sql +-- 创建归档表 +CREATE TABLE system_login_log_archive ( + LIKE system_login_log INCLUDING ALL +); + +-- 归档脚本示例 +INSERT INTO system_login_log_archive +SELECT * FROM system_login_log +WHERE create_time < CURRENT_DATE - INTERVAL '3 months'; + +DELETE FROM system_login_log +WHERE create_time < CURRENT_DATE - INTERVAL '3 months'; +``` + + +# 安全保密设计 +- **用户认证**: 所有数据库连接均需通过应用层的身份认证,禁止数据库密码在配置文件中明文存储。 +- **权限控制**: 数据库用户权限遵循最小权限原则。应用层根据用户角色(RBAC)动态构建SQL,并通过行级安全(RLS)策略限制数据访问范围。 +- **数据加密**: 对数据库中的密码、密钥等敏感信息,采用BCrypt或SM3等算法进行加密存储。 +- **审计日志**: 启用数据库审计功能,记录所有DDL和DML操作,特别是对敏感数据的访问和修改。 diff --git a/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-03/2026-04-03-RWB-03-03_Interface_Design.md b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-03/2026-04-03-RWB-03-03_Interface_Design.md new file mode 100644 index 0000000..45d9790 --- /dev/null +++ b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-03/2026-04-03-RWB-03-03_Interface_Design.md @@ -0,0 +1,1808 @@ +--- +doc_id: TC-03-INTERFACE +doc_role: master_document +authority: primary +scope: 接口设计 +source_of_truth: true +last_reviewed: 2026-03-12 +retrieval_priority: P0 +--- + +# 福建水务营收系统接口设计文档 + +## 文档信息 +| 项目信息 | 详情 | +|---------|------| +| **项目名称** | 福建水务营收系统 | +| **文档类型** | 接口设计文档 | +| **技术框架** | Spring Cloud Alibaba + RuoYi-Vue-Pro + yudao-ui-admin-vue3 | +| **文档版本** | v1.0 | +| **编写日期** | 2026-03-11 | +| **文档状态** | ✅ 已完成(按版本迭代) | + +## 章节导航(精简) +- [接口设计范围](#sec-scope) +- [设计原则与统一约束](#sec-principles) +- [SYS-002 接口视图](#sec-rev-interface-view) +- [外部接口设计](#sec-external-interface) +- [内部接口设计](#sec-internal-interface) +- [数据对象与表口径](#sec-data-object) +- [接口安全与异常处理](#sec-security-exception) +- [历史查询与迁移校验接口口径](#sec-migration-readonly) +- [实现状态说明](#sec-status) + + +## 接口设计范围 + +本文档用于描述福建水务营收系统的接口边界、调用方式、核心接口清单以及与外围子系统的协同关系,重点统一 `SYS-002` 营收业务系统的接口口径。 + +本次接口整编遵循以下事实来源: + +- `docs/design/02_Detailed_Design/01_Detailed_Design.md` +- `docs/design/03_Technical_Design/01_Database_Design.md` +- `docs/guides/BACKEND_CURRENT_STATUS.md` +- `docs/guides/BACKEND_TABLE_MAPPING.md` +- `output/preview/福建水务营收系统整体架构图.html` + +> 说明:本文档优先描述正式设计边界与业务接口职责,不将 backend 中尚未明确识别的内部实现细节误写为既有接口事实。对于历史资料中存在、但当前 backend 未完全确认的接口对象,统一按“文档先行”处理。 + + +## 设计原则与统一约束 + +### 接口设计原则 + +- **统一编号**:接口编号统一采用 `IF-UP-*`、`IF-REV-*`、`IF-CS-*`、`IF-METER-*`、`IF-INST-*`、`IF-EXT-*` 规则。 +- **统一边界**:`SYS-002` 负责营收业务主流程,发票、支付结算、消息触达分别通过 `SYS-008`、`SYS-009`、`SYS-010` 协同完成。 +- **统一数据口径**:接口数据对象优先对齐真实 `biz_*` 与 `bk_*` 表,不再沿用旧稿中的 `customer_*`、`billing_*`、`thirdpay_*`、`service_*` 等历史命名。 +- **统一协议风格**:内部管理接口以 HTTPS REST 为主,跨系统集成根据场景采用 REST、文件交换、消息队列等方式。 +- **统一安全机制**:内部接口采用统一认证鉴权,外部接口按渠道要求实施签名、回调校验、白名单和审计留痕。 + +### 通用响应格式 + +内部 REST 接口统一采用如下响应模型: + +```json +{ + "code": 0, + "data": {}, + "msg": "success" +} +``` + +分页响应统一采用: + +```json +{ + "code": 0, + "data": { + "list": [], + "total": 0, + "pageNo": 1, + "pageSize": 10 + }, + "msg": "success" +} +``` + + +## SYS-002 接口视图 + +### 模块分组 + +#### 营收核心模块群 + +| 模块编号 | 模块名称 | 接口职责定位 | +|---------|----------|-------------| +| REV-001 | 客户资料管理 | 客户、账户、联系人、水表绑定等主数据查询与维护 | +| REV-002 | 抄表开账 | 抄表任务、抄表数据、校验、开账触发 | +| REV-003 | 营业收费 | 收费受理、账单核销、柜台与渠道收款状态回写 | +| REV-004 | 账务处理 | 调整、退款、冲正、坏账等账务处理申请与结果回写 | +| REV-005 | 发票管理 | 发票申请、开票结果回写、票据状态查询 | +| REV-006 | 催缴管理 | 催缴名单生成、催缴任务下发、通知结果回写 | +| REV-007 | 统计分析 | 营收、抄表、收费、客户、渠道统计查询 | +| REV-008 | 代收业务 | 银行代收、代扣、送盘、回盘、对账、结算协同 | +| REV-009 | 业务参数配置 | 水价、费用组成、业务参数、页面参数等配置接口 | + +#### 客户服务模块群 + +| 模块编号 | 模块名称 | 接口职责定位 | +|---------|----------|-------------| +| CS-001 | 账户绑定管理 | 客户绑定、解绑、默认客户切换 | +| CS-002 | 信息查询服务 | 账单、欠费、用水、缴费、停水公告等查询 | +| CS-003 | 在线缴费服务 | 创建线上支付订单、支付状态查询 | +| CS-004 | 电子发票服务 | 发票申请、发票列表、下载与推送 | +| CS-005 | 营业网点服务 | 网点查询、预约、导航、业务事项查询 | +| CS-006 | 业务办理服务 | 更名、过户、低保、换表、自主抄表等线上办理 | +| CS-007 | 柜面扫码支付 | 柜台二维码收款、订单生成、支付结果回写 | + +### 跨系统协同边界 + +| 协同子系统 | 协同内容 | SYS-002 职责 | 对方职责 | +|-----------|----------|--------------|----------| +| SYS-008 发票服务 | 发票开具、作废、红冲、票据查询 | 提供业务上下文、账单信息、客户开票信息,接收结果回写 | 承接税控与电子发票能力 | +| SYS-009 支付与银行结算 | 微信/支付宝支付、银行实时收费、代扣、对账、结算 | 发起订单、接收支付结果、维护账单核销状态 | 承接支付渠道、交易流水、回调、对账与结算 | +| SYS-010 消息服务 | 催缴通知、缴费结果通知、办理进度通知 | 生成待通知业务事件与目标用户 | 承接短信、微信公众号、站内信等触达能力 | + + +## 外部接口设计 + +## 外部接口分类 + +| 接口分类 | 主要对接方 | 典型协议 | 说明 | +|---------|------------|----------|------| +| 银行代收/代扣接口 | 银行、银联、托收平台 | 文件交换 / HTTPS REST | 主要服务 REV-008 | +| 聚合支付接口 | 微信支付、支付宝等 | HTTPS REST + 回调 | 主要服务 REV-003、CS-003、CS-007 | +| 发票协同接口 | 税控/电子发票平台 | HTTPS REST | 主要服务 REV-005、CS-004 | +| 消息通知接口 | 短信平台、消息网关 | HTTPS REST / MQ | 主要服务 REV-006、CS-006 | +| 物联网集抄接口 | 集抄平台、IoT 平台 | HTTPS REST / MQ | 主要服务 REV-002 | + +### IF-EXT-001 银行代扣批次下发接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-001 | +| 接口名称 | 银行代扣批次下发接口 | +| 归属模块 | REV-008 | +| 调用方向 | SYS-002 → SYS-009 / 银行渠道 | +| 接口方式 | 文件交换或 HTTPS REST | +| 业务说明 | 按账期生成待代扣账单批次,交由银行渠道执行代扣 | +| 核心数据支撑 | `biz_withholding`、`bk_withholding_batch`、`bk_withholding_item` | + +关键报文信息包括:客户号、签约号、扣款金额、账期、渠道编码、批次号等。 + +边界约束: +- 当前正式设计包含代扣送盘、回盘与对账的目标边界;其中 `BankWithholding` 已具备送盘、送盘状态查询、取消送盘等六条银行入口的最小实现态闭环证据。 +- 正式文档可将 `BankWithholding` 六条银行入口写为“已实现”,但需同时注明真实银行文件解析、SFTP/文件通道联调与运行态样本仍待补证。 +- 涉及批量文件交互时,正式口径保留 `HTTP/REST/SFTP` 与文件命名、批次号约束,不下沉到特定银行私有报文字段。 +- 运行时文件传输配置统一由解析器输出 `protocol/resolvedDir/resolvedPath/fileName/sourceScope`;优先级固定为 `TENANT_CHANNEL > TENANT > CHANNEL > DEFAULT`,高优先级仅覆盖部分字段时按字段级回退。 +- 命中协议缺少 `host/port/username/credentialRef`、阶段目录为空或模板变量非法时,接口必须立即返回配置错误,不得回退到错误租户或错误通道。 + +### IF-EXT-002 银行代扣回盘接收接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-002 | +| 接口名称 | 银行代扣回盘接收接口 | +| 归属模块 | REV-008 | +| 调用方向 | 银行渠道 / SYS-009 → SYS-002 | +| 接口方式 | 文件交换或 HTTPS REST | +| 业务说明 | 接收代扣成功、失败、退票等结果并回写业务状态 | +| 核心数据支撑 | `bk_withholding_batch`、`bk_withholding_item`、`bk_transaction`、`bk_transaction_exception` | + +边界约束: +- 回盘处理、回盘状态查询、差异核对和结算确认属于同一能力簇;其中 `BankWithholding` 的回盘与回盘状态查询已具备最小实现态闭环证据,但完整差异核对、异常补偿和结算确认仍属后续完善项。 +- 当前正式文档允许保留回盘文件名、批次号、回盘日期、结果状态等正式字段约束,但不得把未落地的真实文件解析、异常补偿和结算闭环写成既成事实。 + +### IF-EXT-003 银行实时收费接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-003 | +| 接口名称 | 银行实时收费接口 | +| 归属模块 | REV-003 / REV-008 | +| 调用方向 | 银行渠道 / SYS-009 ↔ SYS-002 | +| 接口方式 | HTTPS REST | +| 业务说明 | 支撑柜台、网银、手机银行实时查询应收并完成缴费 | +| 核心数据支撑 | `biz_charge`、`biz_charge_detail`、`bk_transaction`、`bk_transaction_callback` | + +边界约束: +- 当前 backend 已确认欠费查询与缴费处理具备实现证据,可作为正式文档中的已落地基础能力。 +- 代理收费对账、汇总对账和当日未对账红冲等扩展能力当前仍未形成完整实现闭环,正式文档须标注为后续完善项。 + +### 银行签约、状态查询与批次控制扩展接口 + +| 接口动作 | 推荐归属 | 当前代码路径 | 当前状态 | 正式口径 | +|---------|----------|-------------|----------|----------| +| 代扣签约 | REV-008 / SYS-009 | `BankWithholdingController#signing` | 已实现 | 可作为正式接口能力写入 | +| 代扣解约 | REV-008 / SYS-009 | `BankWithholdingController#termination` | 已实现 | 可作为正式接口能力写入 | +| 托收签约 | REV-008 / SYS-009 | `BankCollectionController#signing` | 已实现 | 可作为正式接口能力写入 | +| 托收解约 | REV-008 / SYS-009 | `BankCollectionController#termination` | 已实现 | 可作为正式接口能力写入 | +| 客户状态查询 | REV-008 / SYS-009 | `BankWithholdingController#customerCheck` / `BankCollectionController#customerCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与结果状态 | +| 送盘 | REV-008 / SYS-009 | `BankWithholdingController#sendDisc` / `BankCollectionController#sendDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与批次发送语义 | +| 送盘状态查询 | REV-008 / SYS-009 | `BankWithholdingController#sendDiscCheck` / `BankCollectionController#sendDiscCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与批次状态语义 | +| 取消送盘 | REV-008 / SYS-009 | `BankWithholdingController#cancelDisc` / `BankCollectionController#cancelDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与可取消条件 | +| 回盘 | REV-008 / SYS-009 | `BankWithholdingController#backDisc` / `BankCollectionController#backDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与回盘处理语义 | +| 回盘状态查询 | REV-008 / SYS-009 | `BankWithholdingController#backDiscCheck` / `BankCollectionController#backDiscCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与回盘状态语义 | + +### IF-EXT-004 聚合支付下单接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-004 | +| 接口名称 | 聚合支付下单接口 | +| 归属模块 | REV-003 / CS-003 / CS-007 | +| 调用方向 | SYS-002 → SYS-009 | +| 接口方式 | HTTPS REST | +| 业务说明 | 创建微信、支付宝等支付订单,返回二维码、收银参数或支付跳转信息 | +| 核心数据支撑 | `biz_charge`、`biz_collection`、`bk_transaction` | + +### IF-EXT-005 聚合支付结果回调接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-005 | +| 接口名称 | 聚合支付结果回调接口 | +| 归属模块 | REV-003 / CS-003 / CS-007 | +| 调用方向 | SYS-009 → SYS-002 | +| 接口方式 | HTTPS REST + 签名校验 | +| 业务说明 | 接收支付成功、失败、关闭、退款等异步事件,并更新收费状态 | +| 核心数据支撑 | `bk_transaction_callback`、`biz_collection`、`biz_charge` | + +### IF-EXT-006 发票开具协同接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-006 | +| 接口名称 | 发票开具协同接口 | +| 归属模块 | REV-005 / CS-004 | +| 调用方向 | SYS-002 → SYS-008 | +| 接口方式 | HTTPS REST | +| 业务说明 | 传递账单、客户、抬头、税率等信息,由 SYS-008 承接开票 | +| 核心数据支撑 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` | + +### IF-EXT-007 发票结果回写接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-007 | +| 接口名称 | 发票结果回写接口 | +| 归属模块 | REV-005 / CS-004 | +| 调用方向 | SYS-008 → SYS-002 | +| 接口方式 | HTTPS REST | +| 业务说明 | 回写开票状态、票据编号、下载地址、作废/红冲结果 | +| 核心数据支撑 | `biz_invoice`、`biz_process_invoice_modifys` | + +### IF-EXT-008 消息触达接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-008 | +| 接口名称 | 消息触达接口 | +| 归属模块 | REV-006 / CS-006 | +| 调用方向 | SYS-002 → SYS-010 | +| 接口方式 | HTTPS REST 或 MQ | +| 业务说明 | 承接催缴通知、办理进度通知、缴费结果通知等消息事件,返回受理结果并回传执行结果 | +| 核心数据支撑 | `biz_charge`、`biz_process`、`biz_operat_log` | + +边界约束: +- `IF-EXT-008` 只负责渠道触达执行与回执回传,不负责催缴候选对象筛选、任务生成或业务状态主控。 +- `SYS-010` 回传的渠道执行结果需由 `SYS-002` 映射为 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态业务状态。 +- 当仅返回受理成功但未返回终态时,`SYS-002` 维持 `PENDING`;若长期无终态且人工核查确认,可转 `MANUAL_VERIFIED`。 +- 消息模板、供应商协议和重试细节由 `SYS-010` 管理,不在 `IF-EXT-008` 展开实现细节。 + +### IF-EXT-009 集抄数据接入接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-EXT-009 | +| 接口名称 | 集抄数据接入接口 | +| 归属模块 | REV-002 | +| 调用方向 | IoT 平台 / 集抄平台 → SYS-002 | +| 接口方式 | HTTPS REST / MQ | +| 业务说明 | 接收远传读数、设备状态、异常告警,触发抄表校验与开账准备 | +| 核心数据支撑 | `biz_meter_read`、`biz_reading_data`、`biz_last_reading` | + + +## 内部接口设计 + +## SYS-002 内部接口清单 + +### REV 接口清单 + +| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 | +|---------|----------|----------|----------|-------------| +| IF-REV-001 | 客户信息查询接口 | REV-001 | 查询客户档案、联系人、账户、水表绑定关系 | `biz_cust`、`biz_account`、`biz_cust_contact`、`biz_cust_meter` | +| IF-REV-002 | 客户主数据维护接口 | REV-001 | 新增、变更客户档案及开票/托收/代扣关系 | `biz_cust`、`biz_cust_invoice`、`biz_cust_collection_rel`、`biz_cust_withholding_rel` | +| IF-REV-003 | 抄表任务下发接口 | REV-002 | 按册本、片区、抄表周期生成抄表任务 | `biz_meter_book`、`biz_meter_read` | +| IF-REV-004 | 抄表数据提交接口 | REV-002 | 提交抄表数据、图片、异常标记并触发校验 | `biz_reading_data`、`biz_reading_logs`、`biz_last_reading` | +| IF-REV-005 | 账单生成接口 | REV-002 | 根据抄表结果、价格模板和费用组成生成账单 | `biz_charge`、`biz_charge_detail`、`biz_price_template`、`biz_cost_component` | +| IF-REV-006 | 缴费处理接口 | REV-003 | 创建收费记录、核销账单、回写收款结果 | `biz_collection`、`biz_charge`、`bk_transaction` | +| IF-REV-007 | 账务调整接口 | REV-004 | 发起金额调整、退款、冲正、坏账等业务处理 | `biz_charge`、`biz_charge_detail`、`biz_operat_log` | +| IF-REV-008 | 发票申请接口 | REV-005 | 后台发起单笔/批量开票申请并生成受理主键 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` | +| IF-REV-009 | 发票结果查询接口 | REV-005 | 按申请单号/受理号查询开票结果并执行补偿查询 | `biz_invoice`、`biz_operat_log` | +| IF-REV-013 | 催缴任务生成与结果承接接口 | REV-006 | 生成催缴任务、查询任务结果并承接四态状态回写 | `biz_charge`、`biz_operat_log`、历史催缴查询口径 | +| IF-REV-010 | 统计查询接口 | REV-007 | 查询营收、收费、欠费、渠道、客户统计结果 | 聚合视图 / 统计结果集 | +| IF-REV-011 | 银行代收协同接口 | REV-008 | 发起代扣、回盘、对账、结算协同 | `biz_withholding`、`bk_reconcile_batch`、`bk_settlement_batch` | +| IF-REV-012 | 业务参数配置接口 | REV-009 | 查询和维护价格模板、优惠方案、业务参数配置 | `biz_parameter_settings`、`biz_price_*`、`biz_page_settings*` | + +### CS 接口清单 + +| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 | +|---------|----------|----------|----------|-------------| +| IF-CS-001 | 账户绑定接口 | CS-001 | 绑定、解绑、切换默认客户 | `biz_cust_app_binds`、`biz_cust` | +| IF-CS-002 | 历史账单查询接口 | CS-002 | 查询账单、欠费、用水历史、缴费记录 | `biz_charge`、`biz_charge_detail`、`biz_reading_data` | +| IF-CS-003 | 在线支付下单接口 | CS-003 | 创建微信/支付宝线上支付订单 | `biz_charge`、`biz_collection`、`bk_transaction` | +| IF-CS-004 | 电子发票消费接口 | CS-004 | 查询、下载、推送本人已开具电子发票 | `biz_invoice`、`biz_cust_invoice` | +| IF-CS-005 | 网点与业务办理接口 | CS-005 | 查询营业网点、预约信息、可办事项 | `biz_outlets`、`biz_business_types` | +| IF-CS-006 | 业务办理进度接口 | CS-006 | 提交业务申请、查询办理进度与附件 | `biz_process`、`biz_process_transfer`、`biz_content_attach` | +| IF-CS-007 | 柜面扫码支付接口 | CS-007 | 创建柜面扫码支付订单并回写结果 | `biz_collection`、`bk_transaction`、`biz_charge` | + +### UP 接口清单 + +| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 | +|---------|----------|----------|----------|-------------| +| IF-UP-001 | 用户登录接口 | UP-001 | 用户登录并获取访问令牌 | `system_users`、`system_oauth2_access_token`、`system_login_log` | +| IF-UP-002 | 用户信息接口 | UP-001 | 查询当前登录用户上下文信息 | `system_users`、`system_dept` | +| IF-UP-003 | 权限校验接口 | UP-002 | 校验菜单、按钮、数据权限 | `system_role`、`system_role_menu`、`system_user_role` | +| IF-UP-004 | 参数字典接口 | UP-003 | 查询字典、参数、配置项 | `system_dict_type`、`system_dict_data`、`biz_parameter_settings` | + +### METER 接口清单 + +| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 | +|---------|----------|----------|----------|-------------| +| IF-METER-001 | 水表档案查询接口 | METER-001 | 查询水表档案、状态与生命周期信息 | `biz_meter`、`biz_meter_model`、`biz_meter_caliber`、`biz_meter_range` | +| IF-METER-002 | 表务工单处理接口 | METER-003 | 提交换表、移表、校表、维修等工单处理结果 | `biz_meter_log`、`biz_process`、`biz_process_transfer` | +| IF-METER-003 | 库存出入库接口 | METER-002 | 处理领用、退库、报废等库存动作 | `biz_meter_in_out`、`biz_meter_in_out_rel` | +| IF-METER-004 | 集抄数据接收接口 | METER-003 | 接收远传抄表、异常告警并同步状态 | `biz_reading_data`、`biz_meter_read`、`biz_last_reading` | + +### INST 接口清单 + +| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 | +|---------|----------|----------|----------|-------------| +| IF-INST-001 | 报装申请提交接口 | INST-001 | 提交报装申请、附件与基础资料 | `biz_process`、`biz_content`、`biz_content_attach` | +| IF-INST-002 | 踏勘结果回填接口 | INST-001 | 回填现场踏勘、方案与审核结果 | `biz_process_transfer`、`biz_business_datas` | +| IF-INST-003 | 合同签署发起接口 | INST-002 | 发起电子签章任务并传输合同信息 | `installation_contract`、`installation_signature` | +| IF-INST-004 | 签章回执接口 | INST-002 | 回写签章结果、时间戳和存证信息 | `installation_signature`、`installation_evidence` | +| IF-INST-005 | 报装归档接口 | INST-003 | 归档申请、合同、验收与签章回执资料 | `biz_content_attach`、`installation_evidence` | + +## 关键内部接口说明 + +### IF-UP-001 用户登录接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-UP-001 | +| 归属模块 | UP-001 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/system/auth/login` | +| 功能描述 | 统一认证入口,签发访问令牌并输出用户上下文 | +| 核心表 | `system_users`、`system_oauth2_access_token`、`system_login_log` | + +### IF-REV-001 客户信息查询接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-001 | +| 归属模块 | REV-001 | +| 请求方式 | GET | +| 请求路径 | `/admin-api/revenue/customer/{id}` | +| 功能描述 | 查询客户主档、账户状态、联系人、水表绑定及开票资料 | +| 核心表 | `biz_cust`、`biz_account`、`biz_cust_contact`、`biz_cust_meter`、`biz_cust_invoice` | + +响应结果以客户主档为中心,组合返回账户余额、欠费金额、联系人列表、水表列表与开票资料摘要。 + +### IF-REV-004 抄表数据提交接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-004 | +| 归属模块 | REV-002 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/reading-data/create` | +| 功能描述 | 接收人工或远传抄表数据,执行校验、估抄判断、异常标记 | +| 核心表 | `biz_meter_read`、`biz_reading_data`、`biz_last_reading`、`biz_reading_logs` | + +典型请求体: + +```json +{ + "meterReadId": 1001, + "meterId": 2001, + "readTime": "2026-03-11 09:30:00", + "currentReading": 156.32, + "readType": "MANUAL", + "photoList": [ + "file-001", + "file-002" + ], + "gps": "119.2965,26.0745", + "remark": "现场抄表正常" +} +``` + +### IF-REV-005 账单生成接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-005 | +| 归属模块 | REV-002 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/charge/generate` | +| 功能描述 | 基于抄表结果、水价模板、阶梯规则、费用组成生成账单,并返回成功清单、失败清单与生成汇总 | +| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_price_template`、`biz_price_tier_adjustment`、`biz_cost_component` | + +边界约束: +- 本接口只负责抄表校验完成后的账单生成,不直接承接收费核销、发票申请、催缴执行或统计汇总。 +- 正式请求范围可按抄表批次、客户集合或抄表任务集合组织;当前 backend 已实现入口为 `/business/charge/charge-batch` 与 `/business/charge/check-charge-batch`,请求体仅接受 `readingDataIds`。 +- 价格模板、费用组成、阶梯规则、计划用水方案等任一关键规则缺失时,应阻断生成并返回失败原因,而不是生成不完整账单。 +- 特殊开账、无码客户开账、罚款类开账等非标准来源仍沿用同一 `biz_charge` / `biz_charge_detail` 承接口径,不单设平行在线账表。 +- 当前实现仅支持 `SettleTypeEnum.ACTUAL_USAGE`;固定水量、按人口数、最低消费等结算方式暂未纳入现有开账链路。 + +当前 backend 证据与契约缺口: +- `ChargeServiceImpl.generateCheckChargeBatch` 已支持“批量复核 + 批量开账”,并通过 `generateSingleChargeWithCache` 写入 `biz_charge`、`biz_charge_detail`,说明主明细承接路径已存在。 +- 返回值当前为 `CommonResult`,仅表达“本次复核成功X条 / 本次开账成功Y条”,尚未提供正式契约要求的成功清单、失败清单、生成汇总和主明细结果对象。 +- 单条失败当前主要以 `log.warn` + `false` 跳过处理,尚未形成可直接对外返回的结构化阻断码、失败原因集合与对象范围。 + +### IF-REV-006 缴费处理接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-006 | +| 归属模块 | REV-003 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/collection/create` | +| 功能描述 | 处理柜台收费、预存抵扣、渠道收款确认与账单核销 | +| 核心表 | `biz_collection`、`biz_charge`、`bk_transaction` | + +### IF-REV-007 账务调整接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-007 | +| 归属模块 | REV-004 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/accounting/adjust` | +| 功能描述 | 发起水量调整、金额调整、退款、冲正、坏账申请五类账务处理,并统一返回处理结果、审批边界与账单回写状态 | +| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_operat_log`、`bk_transaction*` | + +边界约束: +- 一期仅覆盖 `USAGE`、`AMOUNT`、`REFUND`、`REVERSE`、`BAD_DEBT` 五类 `adjustType`。 +- 退款、冲正必须提供 `sourceTradeNo` 并完成原交易校验;其他场景不得误用支付流水替代业务依据。 +- 审批相关内容仅保留 `approvalRequired`、`PENDING_APPROVAL` 与边界说明,不展开 BPM 节点与审批回写实现细节。 +- `resultStatus` 与 `writeBackStatus` 必须分离表达,前者表示处理结论,后者表示账单状态回写结论。 + +### IF-REV-008 发票申请接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-008 | +| 归属模块 | REV-005 | +| 请求方式 | POST | +| 请求路径 | `/business/invoice/apply` | +| 功能描述 | 后台对已收费未开票账单发起单笔/批量开票申请,并在同一管理域内受理作废/红冲后处理入口 | +| 核心表 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` | + +边界约束: +- 一期仅支持后台营业收费员/财务人员发起申请,客户侧不直接调用本接口。 +- 发票开具、作废、红冲能力均由 `SYS-008` 统一承接税控侧处理,`SYS-002` 负责业务单据归集、申请发起、后台作废/红冲触发、查询补偿与结果落账。 +- 后台发票后处理沿同一管理域补充 `/business/invoice/invalidate` 与 `/business/invoice/red-ink` 两个入口,分别承接作废与红冲动作;处理结果继续通过 `IF-REV-009` 或 `IF-EXT-007` 统一收口。 +- 原始单账单不支持直接任意部分金额开票;如需多张发票,应基于拆账/分账后的账单集合申请。 + +### IF-REV-009 发票结果查询接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-009 | +| 归属模块 | REV-005 | +| 请求方式 | POST | +| 请求路径 | `/business/invoice/query`(补偿查询:`/business/invoice/query/compensate`) | +| 功能描述 | 后台按申请单号/受理号查询开票、作废或红冲结果,并支持系统补偿查询兜底 | +| 核心表 | `biz_invoice`、`biz_operat_log` | + +### IF-REV-013 催缴任务生成与结果承接接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-013 | +| 归属模块 | REV-006 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/reminder/task`(查询:`/admin-api/revenue/reminder/task/query`,人工核查:`/admin-api/revenue/reminder/task/manual-verify`) | +| 功能描述 | 基于欠费账单、催缴策略和渠道偏好生成催缴任务,查询任务状态,并承接业务侧四态结果与处置引用 | +| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_operat_log`、历史催缴查询口径 | + +边界约束: +- `IF-REV-013` 是 `REV-006` 的正式业务接口编号,不再复用 `IF-REV-009`。 +- `SYS-002` 负责催缴对象筛选、任务生成、业务事件号维护、四态状态承接和历史查询;`SYS-010` 只负责触达执行与结果回传。 +- 接口状态固定为 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态,不在本轮扩展“已阅读”“已补发”等细粒度业务状态。 +- 停复水仅作为联动边界与处置引用承接项,不在本接口中展开停复水内部流程。 + +### IF-REV-010 统计查询接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-010 | +| 归属模块 | REV-007 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/statistics/query`(导出:`/admin-api/revenue/statistics/export`) | +| 功能描述 | 面向营收经营分析场景查询统计主题、维度汇总和指标结果,并在权限范围内支持导出 | +| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_collection`、`bk_transaction`、`biz_cust`、`biz_account`、`biz_meter_book`、`biz_reading_data` | + +边界约束: +- `IF-REV-010` 只承接经营统计查询,不扩展到预测分析、BI 专题大屏或独立数仓查询。 +- 统计口径按“主题 + 维度 + 指标”组织,避免仅以报表名称表达接口范围。 +- 导出属于查询扩展能力,必须受数据权限和导出权限控制。 +- 没有明确实现证据的独立统计表、专题分析表或离线汇总表不得写成既成事实。 + +### IF-REV-011 银行代收协同接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-011 | +| 归属模块 | REV-008 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/revenue/bank/withholding/batch` | +| 功能描述 | 创建代扣批次、发起对账、接收结算回写 | +| 核心表 | `biz_withholding`、`bk_withholding_batch`、`bk_reconcile_batch`、`bk_settlement_batch` | + +边界约束: +- `IF-REV-011` 在当前阶段主要承接正式业务协同边界,不等同于送盘、回盘、对账、结算全部已闭环。 +- 已确认的后台管理入口可证明批次、差异、结算台账对象存在,但不能替代银行 app 协同接口的完成度判断。 + +### IF-REV-012 业务参数配置接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-REV-012 | +| 归属模块 | REV-009 | +| 请求方式 | GET / POST | +| 请求路径 | `/admin-api/revenue/parameter/config` | +| 功能描述 | 查询与维护价格模板、业务参数、页面参数与规则配置 | +| 核心表 | `biz_parameter_settings`、`biz_price_*`、`biz_page_settings*` | + +### IF-CS-001 账户绑定接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-001 | +| 归属模块 | CS-001 | +| 请求方式 | POST | +| 请求路径 | `/app-api/customer/account/bind` | +| 功能描述 | 绑定、解绑、切换默认客户账户,并校验渠道身份与客户关系 | +| 核心表 | `biz_cust_app_binds`、`biz_cust`、`biz_account` | + +### IF-CS-002 历史账单查询接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-002 | +| 归属模块 | CS-002 | +| 请求方式 | GET | +| 请求路径 | `/app-api/customer/bill/history` | +| 功能描述 | 查询账单、欠费、缴费、用水历史及发票摘要 | +| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_reading_data`、`biz_invoice` | + +### IF-CS-003 在线支付下单接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-003 | +| 归属模块 | CS-003 | +| 请求方式 | POST | +| 请求路径 | `/app-api/customer/payment/order` | +| 功能描述 | 面向微网厅、微信、支付宝等客户渠道创建支付订单 | +| 核心表 | `biz_charge`、`biz_collection`、`bk_transaction` | + +边界约束: +- 支付通道、支付回调、对账流水由 `SYS-009` 负责。 +- `SYS-002` 负责校验待缴账单、生成业务订单、更新核销结果。 + +### IF-CS-004 电子发票消费接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-004 | +| 归属模块 | CS-004 | +| 请求方式 | POST | +| 请求路径 | `/business/invoice/customer/query`、`/business/invoice/customer/download`、`/business/invoice/customer/push` | +| 功能描述 | 面向客户渠道查询、下载、推送本人已开具电子发票 | +| 核心表 | `biz_invoice`、`biz_cust_invoice`、`biz_invoice_taxrate` | + +边界约束: +- 一期客户侧仅消费已形成 `SUCCESS` 终态且具备票据地址的电子发票结果,不直接发起开票申请。 +- 发票作废、红冲仍由 `SYS-008` 统一承接税控侧处理;`IF-CS-004` 仅消费当前仍可展示、下载、推送的有效电子发票结果,不开放客户侧直接发起作废或红冲。 + +### IF-CS-006 业务办理进度接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-006 | +| 归属模块 | CS-006 | +| 请求方式 | GET / POST | +| 请求路径 | `/app-api/customer/process` | +| 功能描述 | 提交业务办理申请、查询办理进度、补充附件资料 | +| 核心表 | `biz_process`、`biz_process_transfer`、`biz_business_datas`、`biz_content_attach` | + +### IF-CS-007 柜面扫码支付接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-CS-007 | +| 归属模块 | CS-007 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/counter/scan-pay/create` | +| 功能描述 | 柜台生成扫码订单,接收支付结果并回写收费状态 | +| 核心表 | `biz_collection`、`bk_transaction`、`biz_charge` | + +### IF-METER-001 水表档案查询接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-METER-001 | +| 归属模块 | METER-001 | +| 请求方式 | GET | +| 请求路径 | `/admin-api/meter/archive/{id}` | +| 功能描述 | 查询水表档案、状态、参数与生命周期信息 | +| 核心表 | `biz_meter`、`biz_meter_model`、`biz_meter_caliber`、`biz_meter_range` | + +### IF-METER-002 表务工单处理接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-METER-002 | +| 归属模块 | METER-003 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/meter/work-order/handle` | +| 功能描述 | 提交换表、移表、校表、维修等工单处理结果并回写设备状态 | +| 核心表 | `biz_meter_log`、`biz_process`、`biz_process_transfer` | + +### IF-METER-003 库存出入库接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-METER-003 | +| 归属模块 | METER-002 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/meter/stock/in-out` | +| 功能描述 | 处理领用、退库、报废等库存动作并更新生命周期状态 | +| 核心表 | `biz_meter_in_out`、`biz_meter_in_out_rel`、`biz_meter` | + +### IF-METER-004 集抄数据接收接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-METER-004 | +| 归属模块 | METER-003 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/meter/iot/reading/receive` | +| 功能描述 | 接收远传抄表、设备状态和异常告警并同步读数状态 | +| 核心表 | `biz_reading_data`、`biz_meter_read`、`biz_last_reading` | + +### IF-INST-001 报装申请提交接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-INST-001 | +| 归属模块 | INST-001 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/installation/apply/create` | +| 功能描述 | 提交报装申请、基础资料与附件,并创建流程实例 | +| 核心表 | `biz_process`、`biz_content`、`biz_content_attach` | + +### IF-INST-002 踏勘结果回填接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-INST-002 | +| 归属模块 | INST-001 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/installation/survey/result` | +| 功能描述 | 回填现场踏勘结果、方案版本和审核结论 | +| 核心表 | `biz_process_transfer`、`biz_business_datas` | + +### IF-INST-003 合同签署发起接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-INST-003 | +| 归属模块 | INST-002 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/installation/contract/sign/initiate` | +| 功能描述 | 发起报装合同签署流程,并与 CA 系统协同处理签章、时间戳和存证 | +| 核心表 | `installation_contract`、`installation_signature`、`installation_evidence` | + +### IF-INST-004 签章回执接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-INST-004 | +| 归属模块 | INST-002 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/installation/contract/sign/callback` | +| 功能描述 | 回写签章结果、时间戳、存证回执与签章文件地址 | +| 核心表 | `installation_signature`、`installation_evidence` | + +### IF-INST-005 报装归档接口 + +| 项目 | 说明 | +|------|------| +| 接口编号 | IF-INST-005 | +| 归属模块 | INST-003 | +| 请求方式 | POST | +| 请求路径 | `/admin-api/installation/archive/submit` | +| 功能描述 | 归档申请资料、验收附件、合同文件与签章回执 | +| 核心表 | `biz_content_attach`、`installation_evidence`、`biz_process` | + +## 字段级请求与响应定义 + +> 说明:以下字段级定义服务于接口设计说明,重点体现业务含义、来源对象与跨系统协同所需关键字段,不等同于数据库表的完整字段清单。 + +### IF-REV-001 客户信息查询接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源 | +|------|------|------|------|----------| +| id | Long | 否 | 客户主键 ID,与 `code` 二选一 | `biz_cust.id` | +| code | String | 否 | 客户编号,与 `id` 二选一 | `biz_cust.code` | +| mobile | String | 否 | 客户手机号,支持模糊校验查询 | `biz_cust.mobile` / `biz_cust_contact.mobile` | +| queryType | String | 否 | 查询类型:`base`、`account`、`meter`、`invoice`、`all` | 查询控制参数 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| id | Long | 客户主键 ID | `biz_cust.id` | +| code | String | 客户编号 | `biz_cust.code` | +| name | String | 客户名称 | `biz_cust.name` | +| custType | String | 客户类型 | `biz_cust.cust_type` | +| mobile | String | 主要联系电话 | `biz_cust.mobile` | +| address | String | 客户地址 | `biz_cust.address` | +| accountInfo | Object | 账户信息对象 | `biz_account` | +| accountInfo.balance | Decimal | 账户余额 | `biz_account.balance` | +| accountInfo.arrearsAmount | Decimal | 欠费金额 | `biz_account.arrears_amount` | +| accountInfo.status | String | 账户状态 | `biz_account.status` | +| contactList | Array | 联系人列表 | `biz_cust_contact` | +| meterList | Array | 绑定水表列表 | `biz_cust_meter`、`biz_meter` | +| invoiceInfo | Object | 开票信息摘要 | `biz_cust_invoice` | + +### IF-REV-004 抄表数据提交接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| meterReadId | Long | 是 | 抄表任务 ID | `biz_meter_read.id` | +| meterId | Long | 是 | 水表 ID | `biz_meter.id` | +| readTime | Datetime | 是 | 抄表时间 | `biz_reading_data.read_time` | +| currentReading | Decimal | 是 | 本次读数 | `biz_reading_data.current_reading` | +| readType | String | 是 | 抄表方式:`MANUAL`、`IOT`、`IMPORT` | `biz_reading_data.read_type` | +| usageAmount | Decimal | 否 | 本次用量,可由系统自动计算 | `biz_reading_data.usage_amount` | +| photoList | Array | 否 | 表盘照片或现场图片文件标识 | 附件系统 / 文件服务 | +| gps | String | 否 | 现场坐标 | 扩展信息 | +| remark | String | 否 | 异常说明或现场备注 | `biz_reading_logs.remark` | +| abnormalFlag | Boolean | 否 | 是否标记异常 | 过程状态 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| readingId | Long | 抄表数据主键 | `biz_reading_data.id` | +| meterReadId | Long | 抄表任务 ID | `biz_meter_read.id` | +| validateStatus | String | 校验状态:`PASS`、`WARN`、`REJECT` | 校验结果 | +| abnormalFlag | Boolean | 是否识别为异常 | 过程判断 | +| nextAction | String | 后续动作:`BILLING`、`RECHECK`、`MANUAL_REVIEW` | 流程控制 | +| msg | String | 处理说明 | 返回消息 | + +### IF-REV-005 账单生成接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| billPeriod | String | 是 | 账期,如 `2026-03` | 开账批次参数 | +| readingBatchNo | String | 否 | 抄表批次号 | 抄表批次 | +| customerIds | Array | 否 | 指定客户范围 | `biz_cust.id` | +| meterReadIds | Array | 否 | 指定抄表任务范围 | `biz_meter_read.id` | +| dueDate | Date | 是 | 应收截止日期 | `biz_charge.due_date` | +| operatorId | Long | 否 | 发起操作人 | 操作上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| generateCount | Integer | 成功生成账单数量 | 汇总信息 | +| successList | Array | 成功明细列表 | `biz_charge` | +| successList[].chargeId | Long | 账单主键 | `biz_charge.id` | +| successList[].chargeCode | String | 账单编号 | `biz_charge.code` | +| successList[].custId | Long | 客户 ID | `biz_charge.cust_id` | +| successList[].totalAmount | Decimal | 账单总金额 | `biz_charge.total_amount` | +| failureList | Array | 失败明细列表 | 处理结果 | +| failureList[].reason | String | 失败原因 | 异常信息 | + +### IF-REV-006 缴费处理接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| custId | Long | 是 | 客户 ID | `biz_charge.cust_id` | +| chargeIds | Array | 是 | 待核销账单 ID 列表 | `biz_charge.id` | +| paymentChannel | String | 是 | 支付渠道:`CASH`、`WECHAT`、`ALIPAY`、`BANK`、`PREPAY` | 渠道参数 | +| paymentAmount | Decimal | 是 | 本次支付金额 | `biz_collection.amount` | +| actualAmount | Decimal | 否 | 实收金额,柜台收费场景使用 | 柜台收费扩展 | +| tradeNo | String | 否 | 外部交易流水号 | `bk_transaction.trade_no` | +| outletCode | String | 否 | 柜台或网点编号 | `biz_outlets.code` | +| remark | String | 否 | 收费备注 | `biz_collection.remark` | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| collectionId | Long | 收费记录 ID | `biz_collection.id` | +| collectionCode | String | 收费业务编号 | `biz_collection.code` | +| writeOffStatus | String | 核销状态:`SUCCESS`、`PARTIAL`、`PENDING` | 业务状态 | +| paidAmount | Decimal | 已支付金额 | 汇总结果 | +| remainAmount | Decimal | 剩余待支付金额 | 汇总结果 | +| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` | +| invoiceAvailable | Boolean | 是否可发起开票 | 业务判断 | + +### IF-REV-007 账务调整接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| chargeId | Long | 是 | 目标账单 ID | `biz_charge.id` | +| adjustType | String | 是 | 调整类型:`USAGE`、`AMOUNT`、`REFUND`、`REVERSE`、`BAD_DEBT` | 业务类型 | +| adjustAmount | Decimal | 否 | 调整金额 | `biz_charge_detail` / 业务计算 | +| adjustUsage | Decimal | 否 | 调整水量 | 业务计算 | +| sourceTradeNo | String | 否 | 原交易流水号,退款/冲正场景使用 | `bk_transaction.trade_no` | +| reasonCode | String | 是 | 调整原因编码 | 业务字典 | +| remark | String | 否 | 调整说明 | `biz_operat_log.remark` | +| attachmentList | Array | 否 | 依据附件 | 附件系统 | +| operatorId | Long | 是 | 操作人 ID | 操作上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| adjustmentNo | String | 调整业务编号 | 业务流水 | +| chargeId | Long | 目标账单 ID | `biz_charge.id` | +| resultStatus | String | 处理状态:`SUCCESS`、`PENDING_APPROVAL`、`FAIL` | 业务状态 | +| writeBackStatus | String | 账单回写状态 | 业务状态 | +| approvalRequired | Boolean | 是否进入审批 | 流程判断 | +| msg | String | 处理说明 | 返回消息 | + +### IF-REV-008 发票申请接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| applicationNo | String | 否 | 发票申请单号 | 服务端生成,作为幂等主键之一 | +| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` | +| chargeIds | Array | 是 | 开票关联账单 ID 列表 | 业务单据关联 | +| invoiceType | String | 是 | 发票类型:`ELECTRONIC`、`PAPER` | `biz_invoice.invoice_type` | +| invoiceTitle | String | 是 | 发票抬头 | `biz_cust_invoice.invoice_title` | +| taxNo | String | 否 | 税号 | `biz_cust_invoice.tax_no` | +| email | String | 否 | 电子发票接收邮箱 | `biz_cust_invoice.email` | +| mobile | String | 否 | 接收手机号 | `biz_cust_invoice.mobile` | +| sourceChannel | String | 是 | 来源渠道:`COUNTER`、`FINANCE_BACKOFFICE` | 业务来源 | +| remark | String | 否 | 申请备注 | 操作留痕 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| invoiceId | Long | 发票申请记录 ID | `biz_invoice.id` | +| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` | +| invoiceStatus | String | 状态:`SUBMITTED`、`PENDING`、`REJECTED` | `biz_invoice.invoice_status` | +| sysRequestNo | String | 发往 `SYS-008` 的受理号 | 协同流水 | +| msg | String | 处理说明 | 返回消息 | + +#### 申请校验与幂等约束 + +- 所有关联账单必须满足“已收费、未开票、未作废”。 +- 一期不支持原始单账单直接任意部分金额开票;如需多张发票,必须基于拆账/分账后的账单集合发起申请。 +- 企业抬头场景应校验 `taxNo` 完整性;电子发票场景优先校验 `email` 或 `mobile` 至少一项可用。 +- 幂等键优先使用 `applicationNo`,未传入时按 `custId + chargeIds` 组合控制重复申请。 +- 申请成功后必须创建查询补偿上下文,不依赖回调作为唯一结果来源。 + +#### 后台作废请求参数(`/business/invoice/invalidate`) + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` | +| invalidReason | String | 是 | 作废原因 | `biz_invoice.invalid_reason` | +| invalidRemark | String | 否 | 作废备注 | `biz_invoice.invalid_remark` | +| originalInvoiceCode | String | 否 | 原发票代码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_code` | +| originalInvoiceNumber | String | 否 | 原发票号码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_number` | + +#### 后台红冲请求参数(`/business/invoice/red-ink`) + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` | +| redInkReason | String | 是 | 红冲原因 | `biz_invoice.red_ink_reason` | +| redInkRemark | String | 否 | 红冲备注 | `biz_invoice.red_ink_remark` | +| originalInvoiceCode | String | 否 | 原发票代码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_code` | +| originalInvoiceNumber | String | 否 | 原发票号码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_number` | + +#### 后台作废/红冲处理约束 + +- 作废与红冲仅允许对当前 `invoiceStatus=SUCCESS` 的记录发起;已进入 `INVALID` 或 `RED_INK` 的记录必须拒绝重复处理。 +- 后台提交作废或红冲后,应同步写入原因、备注、原票引用与触发来源,当前实现的触发来源分别为 `ADMIN_INVALIDATE`、`ADMIN_RED_INK`。 +- 作废与红冲的即时返回仅表示后台已受理本次后处理动作;最终状态仍通过 `IF-REV-009` 查询补偿或 `IF-EXT-007` 回写统一收口。 +- 后处理动作必须保留操作日志,记录触发人、目标状态、原因、备注与原发票代码/号码。 + +### IF-REV-009 发票结果查询接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| applicationNo | String | 否 | 发票申请单号,与 `sysRequestNo` 二选一 | `biz_invoice.application_no` | +| sysRequestNo | String | 否 | `SYS-008` 受理号,与 `applicationNo` 二选一 | `biz_invoice.sys_request_no` | +| querySource | String | 是 | 查询来源:`MANUAL`、`AUTO_COMPENSATE`、`CALLBACK_VERIFY` | 查询触发上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| invoiceId | Long | 发票主记录 ID | `biz_invoice.id` | +| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` | +| sysRequestNo | String | `SYS-008` 受理号 | `biz_invoice.sys_request_no` | +| invoiceStatus | String | 状态:`SUBMITTED`、`PENDING`、`SUCCESS`、`FAIL`、`INVALID`、`RED_INK` | `biz_invoice.invoice_status` | +| invoiceCode | String | 发票代码 | `biz_invoice.invoice_code` | +| invoiceNumber | String | 发票号码 | `biz_invoice.invoice_number` | +| fileUrl | String | 电子发票文件地址 | `biz_invoice.file_url` | +| failReason | String | 失败原因 | `biz_invoice.fail_reason` | +| pushStatus | String | 电子发票推送状态 | `biz_invoice.push_status` | +| lastQueryTime | DateTime | 最近一次查询时间 | `biz_invoice.last_try_time` | +| tryCount | Integer | 累计查询次数 | `biz_invoice.try_count` | +| latestResult | String | 最近一次查询结果摘要 | `biz_invoice.latest_result` | +| latestError | String | 最近一次查询异常说明 | `biz_invoice.latest_error` | +| msg | String | 处理说明 | 返回消息 | + +#### 查询补偿与状态流转约束 + +- 查询入口同时服务于后台人工查询与系统补偿查询,两类触发必须复用同一状态落账规则。 +- 当 `querySource=AUTO_COMPENSATE` 时,接口语义表示由系统补偿任务触发一次兜底查询,并刷新最近查询时间、下次计划时间与累计次数。 +- 查询结果若确认开票成功,应回写票号、票据地址与账单-发票关联状态;若仍处理中,仅维持 `PENDING` 并更新补偿上下文。 +- 对已发起作废或红冲的记录,查询结果应允许把终态更新为 `INVALID` 或 `RED_INK`,并同步刷新 `latestResult`、`latestError`、账单关联状态与后处理上下文。 +- 已进入 `SUCCESS` 的正常开票终态不得被后续失败查询结果覆盖;若外部返回异常,应记录到操作留痕并保留人工核查入口。 + +### IF-REV-013 催缴任务生成与结果承接接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| taskNo | String | 否 | 催缴任务号;查询/人工核查时必填 | 任务主键 | +| custId | Long | 是 | 客户标识 | `biz_charge.cust_id` | +| chargeIds | Array | 是 | 欠费账单集合 | `biz_charge.id` | +| billPeriod | String | 是 | 账期 | `biz_charge.bill_period` | +| arrearsAmount | Decimal | 是 | 欠费金额汇总 | 欠费汇总结果 | +| strategyCode | String | 是 | 命中的催缴策略编码 | 策略规则 | +| channelType | String | 是 | 触达渠道:短信/微信公众号/站内信等 | 任务分组结果 | +| triggerType | String | 是 | 触发方式:`AUTO` / `MANUAL` | 任务触发上下文 | +| eventNo | String | 否 | 业务事件号;生成后返回,回写承接时作为关联键 | 协同事件主键 | +| relatedDisposalRef | String | 否 | 关联停复水或工单引用 | 联动追溯信息 | +| manualVerifyNote | String | 否 | 人工核查说明;仅人工核查时填写 | 核查留痕 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| taskNo | String | 催缴任务号 | 任务主键 | +| interfaceCode | String | 固定返回 `IF-REV-013` | 接口常量 | +| eventNo | String | 业务事件号 | 协同主键 | +| status | String | 状态:`PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` | 任务状态 | +| resultTime | DateTime | 最近结果时间 | 结果回写时间 | +| failureReason | String | 失败原因 | 失败回写 | +| resultChannel | String | 实际触达渠道 | 协同结果 | +| relatedDisposalRef | String | 关联停复水或工单引用 | 联动追溯 | +| msg | String | 处理说明 | 返回消息 | + +#### 任务生成与状态承接约束 + +- 任务生成前必须完成欠费账单、客户类别、联系方式和策略命中校验;至少存在一个可用触达渠道。 +- 相同业务事件与同一接收对象在去重窗口内不得重复生成等效任务;若为人工补发,应显式记录 `triggerType=MANUAL`。 +- `PENDING` 表示已生成任务并发起协同,等待 `SYS-010` 回写或人工核查;`SUCCESS`、`FAIL` 由协同结果或明确失败确认触发。 +- 当外部结果长期未定、历史回执不足或人工核查已确认结果时,可将任务补记为 `MANUAL_VERIFIED`,并保留核查人和核查说明。 +- 接口返回的 `relatedDisposalRef` 仅用于追溯停复水、复水或工单处置引用,不表示本接口承担下游流程控制。 + +#### 失败阻断与人工核查约束 + +- 候选账单不满足欠费前提、策略编码无效或触达信息缺失时,应阻断任务生成并返回明确原因,不得写入伪成功状态。 +- 频控规则命中时允许部分阻断,必须返回被跳过对象与原因摘要,避免“全成功”误判。 +- 渠道协同超时或仅返回受理结果时,不直接判定 `FAIL`,保持 `PENDING` 并等待回执或进入人工核查流程。 +- 人工核查补记必须校验 `taskNo` 存在且 `manualVerifyNote` 非空;不满足条件时应拒绝补记并返回校验错误。 +- 人工核查仅用于状态收口,不替代 `SYS-010` 的渠道执行职责,也不扩展停复水/工单内部流程控制。 + +### IF-REV-010 统计查询接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| themeCode | String | 是 | 统计主题编码 | 查询主题 | +| dateFrom | Date | 是 | 开始日期 | 时间维度 | +| dateTo | Date | 是 | 结束日期 | 时间维度 | +| billPeriod | String | 否 | 账期 | `biz_charge.bill_period` | +| deptId | Long | 否 | 营业所/部门 | `system_dept.id` | +| regionCode | String | 否 | 片区/区域编码 | 区域维度 | +| customerCategory | String | 否 | 客户类别 | 客户标签/分类 | +| channelCode | String | 否 | 收费/交易渠道 | `bk_payment_channel.channel_code` | +| accountId | Long | 否 | 账户标识 | `biz_account.id` | +| custId | Long | 否 | 客户标识 | `biz_cust.id` | +| statusSet | Array | 否 | 状态集合 | 账单/收费/抄表等状态筛选 | +| groupBy | Array | 否 | 分组维度集合 | 结果分组 | +| exportFlag | Boolean | 否 | 是否导出 | 导出控制 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| themeCode | String | 统计主题编码 | 查询主题 | +| themeName | String | 统计主题名称 | 主题定义 | +| dimensionSummary | Object | 查询维度摘要 | 查询条件 | +| indicatorList | Array | 指标结果集合 | 聚合结果 | +| indicatorList[].indicatorCode | String | 指标编码 | 指标定义 | +| indicatorList[].indicatorName | String | 指标名称 | 指标定义 | +| indicatorList[].indicatorValue | Decimal/String | 指标值 | 聚合结果 | +| indicatorList[].unit | String | 指标单位 | 指标定义 | +| groupRows | Array | 分组结果集合 | 维度分组结果 | +| exportAllowed | Boolean | 是否允许导出 | 权限结果 | +| msg | String | 处理说明 | 返回消息 | + +#### 查询主题与口径约束 + +- 本接口至少支持营收汇总、收费与实收、欠费规模与账龄、客户结构、渠道交易、抄表完成率等主题查询。 +- 应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、完成率等指标必须按业务含义区分,不得混写。 +- 当查询涉及历史只读口径时,历史数据仅作为补充来源或迁移核查辅助,不替代在线主数据统计结果。 +- 权限边界必须同时作用于在线查询和导出动作;不允许越过现有数据权限返回全量统计结果。 + +### IF-REV-011 银行代收协同接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| batchNo | String | 是 | 代扣批次号 | `bk_withholding_batch.batch_no` | +| businessType | String | 是 | 业务类型:`WITHHOLDING`、`RECONCILE`、`SETTLEMENT` | 协同类型 | +| channelCode | String | 是 | 渠道编码 | `bk_payment_channel.channel_code` | +| billPeriod | String | 否 | 账期 | 批处理参数 | +| itemList | Array | 否 | 批次明细列表 | `bk_withholding_item` | +| itemList[].custId | Long | 是 | 客户 ID | `bk_withholding_item.cust_id` | +| itemList[].chargeId | Long | 是 | 账单 ID | `bk_withholding_item.charge_id` | +| itemList[].amount | Decimal | 是 | 扣款金额 | 业务金额 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| batchNo | String | 批次号 | `bk_withholding_batch.batch_no` | +| batchStatus | String | 批次状态:`CREATED`、`SENT`、`RETURNED`、`RECONCILED`、`SETTLED` | 批次状态 | +| successCount | Integer | 成功处理条数 | 汇总结果 | +| failCount | Integer | 失败条数 | 汇总结果 | +| reconcileStatus | String | 对账状态 | `bk_reconcile_batch.status` | +| settlementStatus | String | 结算状态 | `bk_settlement_batch.status` | +| diffList | Array | 差异清单摘要 | `bk_reconcile_diff` | + +### IF-REV-012 业务参数配置接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| action | String | 是 | 动作:`QUERY`、`CREATE`、`UPDATE` | 配置动作 | +| configType | String | 是 | 配置类型:`PRICE`、`RULE`、`PAGE`、`NOTICE` | `biz_parameter_settings.config_type` | +| configCode | String | 否 | 配置编码 | `biz_parameter_settings.config_code` | +| configValue | String | 否 | 配置值或 JSON 内容 | `biz_parameter_settings.config_value` | +| deptId | Long | 否 | 生效单位 | 作用域参数 | +| effectiveDate | Date | 否 | 生效日期 | 生效控制 | +| operatorId | Long | 否 | 操作人 ID | 操作上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| configId | Long | 配置主键 | `biz_parameter_settings.id` | +| configCode | String | 配置编码 | `biz_parameter_settings.config_code` | +| configVersion | String | 配置版本 | 版本信息 | +| effectScope | String | 生效范围 | 作用域结果 | +| effectStatus | String | 生效状态:`DRAFT`、`ACTIVE`、`EXPIRED` | 业务状态 | +| msg | String | 处理说明 | 返回消息 | + +### IF-CS-001 账户绑定接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| action | String | 是 | 动作:`BIND`、`UNBIND`、`SET_DEFAULT` | 绑定动作 | +| channelType | String | 是 | 渠道类型:`WECHAT`、`ALIPAY`、`MINIAPP` | 渠道上下文 | +| channelUserId | String | 是 | 渠道用户标识,如 OpenId | 渠道上下文 | +| custId | Long | 是 | 客户 ID | `biz_cust.id` | +| accountId | Long | 否 | 账户 ID | `biz_account.id` | +| verifyCode | String | 否 | 验证码或身份校验码 | 安全校验 | +| defaultFlag | Boolean | 否 | 是否设为默认账户 | `biz_cust_app_binds.is_default` | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| bindId | Long | 绑定关系 ID | `biz_cust_app_binds.id` | +| bindStatus | String | 绑定状态:`BOUND`、`UNBOUND` | 业务状态 | +| defaultFlag | Boolean | 是否默认账户 | `biz_cust_app_binds.is_default` | +| custSummary | Object | 客户摘要信息 | `biz_cust` | +| msg | String | 处理说明 | 返回消息 | + +### IF-CS-002 历史账单查询接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| custId | Long | 是 | 客户 ID | 客户上下文 | +| queryType | String | 是 | 查询类型:`BILL`、`PAYMENT`、`USAGE`、`ARREARS`、`INVOICE` | 查询控制 | +| billPeriod | String | 否 | 账期,如 `2026-03` | `biz_charge.bill_period` | +| chargeStatus | String | 否 | 账单状态筛选 | `biz_charge.status` | +| pageNo | Integer | 否 | 页码 | 分页参数 | +| pageSize | Integer | 否 | 每页数量 | 分页参数 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| total | Integer | 总记录数 | 分页结果 | +| list | Array | 查询结果列表 | 聚合结果 | +| list[].chargeId | Long | 账单 ID | `biz_charge.id` | +| list[].billPeriod | String | 账期 | `biz_charge.bill_period` | +| list[].usageAmount | Decimal | 用量 | `biz_reading_data.usage_amount` | +| list[].payStatus | String | 缴费状态 | 业务状态 | +| list[].invoiceStatus | String | 开票状态 | `biz_invoice.invoice_status` | + +### IF-CS-004 电子发票消费接口 + +#### 查询/下载请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` | +| invoiceId | Long | 否 | 发票记录 ID,三选一优先键 | `biz_invoice.id` | +| applicationNo | String | 否 | 发票申请单号 | `biz_invoice.application_no` | +| sysRequestNo | String | 否 | `SYS-008` 受理号 | `biz_invoice.sys_request_no` | + +#### 推送请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` | +| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` | +| applicationNo | String | 否 | 发票申请单号 | `biz_invoice.application_no` | +| pushChannel | String | 是 | 推送方式:`EMAIL`、`SMS` | 推送动作 | +| pushEmail | String | 否 | 推送邮箱,`EMAIL` 时优先使用 | 目标地址 | +| pushMobile | String | 否 | 推送手机号,`SMS` 时优先使用 | 目标地址 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| invoiceId | Long | 发票记录 ID | `biz_invoice.id` | +| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` | +| invoiceStatus | String | 当前状态 | `biz_invoice.invoice_status` | +| invoiceCode | String | 发票代码 | `biz_invoice.invoice_code` | +| invoiceNumber | String | 发票号码 | `biz_invoice.invoice_number` | +| fileUrl | String | 发票下载地址 | `biz_invoice.file_url` | +| pushStatus | String | 推送状态:`NONE`、`PUSHED`、`FAIL` | `biz_invoice.push_status` | +| chargeBindStatus | String | 账单关联状态:`UNBOUND`、`BOUND` | `biz_invoice.charge_bind_status` | +| msg | String | 处理说明 | 返回消息 | + +#### 客户侧消费约束 + +- 客户侧仅允许访问本人 `custId` 名下发票记录,`invoiceId`、`applicationNo`、`sysRequestNo` 任一定位成功后仍需再次校验客户归属。 +- 下载与推送前必须校验 `invoiceStatus=SUCCESS` 且 `fileUrl` 非空;已作废、已红冲或缺少电子票地址的记录一律返回不可消费原因。 +- 推送成功后回写 `pushStatus=PUSHED`;失败则更新为 `FAIL` 并记录失败原因。 +- 客户侧只消费已形成有效电子票结果的记录,不暴露后台作废、红冲入口,也不直接展示后处理请求参数。 + +### IF-CS-003 在线支付下单接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| custId | Long | 是 | 客户 ID | 客户上下文 | +| chargeIds | Array | 是 | 待支付账单 ID 列表 | `biz_charge.id` | +| paymentChannel | String | 是 | 支付渠道:`WECHAT`、`ALIPAY` | 渠道参数 | +| paymentAmount | Decimal | 是 | 支付金额 | `bk_transaction.trade_amount` | +| openId | String | 否 | 微信渠道用户标识 | 微信场景 | +| returnUrl | String | 否 | 前端完成跳转地址 | 前端场景 | +| notifyUrl | String | 否 | 支付结果通知地址 | 回调地址 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| bizOrderNo | String | SYS-002 业务订单号 | `biz_collection.code` / 业务单号 | +| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` | +| orderStatus | String | 订单状态:`INIT`、`PAYING`、`SUCCESS`、`FAIL` | 交易状态 | +| payUrl | String | 支付链接或二维码地址 | 渠道返回 | +| prepayInfo | Object | 预支付参数对象 | 渠道返回 | +| expireTime | Datetime | 订单失效时间 | 交易参数 | + +### IF-CS-006 业务办理进度接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| processId | Long | 否 | 办理流程 ID,查询场景使用 | `biz_process.id` | +| businessTypeCode | String | 否 | 业务类型编码,如更名、过户、低保、换表 | `biz_business_types.code` | +| custId | Long | 否 | 客户 ID | 客户上下文 | +| applyData | Object | 否 | 业务申请主体数据 | `biz_business_datas` | +| attachmentList | Array | 否 | 附件文件标识列表 | `biz_content_attach` | +| action | String | 否 | 动作:`CREATE`、`QUERY`、`SUPPLEMENT` | 流程动作 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| processId | Long | 办理流程 ID | `biz_process.id` | +| processCode | String | 流程编号 | `biz_process.code` | +| processStatus | String | 当前状态:`INIT`、`ACCEPTED`、`PROCESSING`、`DONE`、`REJECTED` | `biz_process.status` | +| currentNode | String | 当前办理节点 | 流程状态 | +| transferList | Array | 流转轨迹 | `biz_process_transfer` | +| attachmentRequired | Boolean | 是否需要补件 | 业务判断 | +| msg | String | 办理说明 | 返回消息 | + +### IF-CS-007 柜面扫码支付接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| counterCode | String | 是 | 柜台编号 | 柜面终端 | +| chargeIds | Array | 是 | 待支付账单 ID 列表 | `biz_charge.id` | +| paymentChannel | String | 是 | 支付渠道:`WECHAT`、`ALIPAY` | 渠道参数 | +| orderAmount | Decimal | 是 | 订单金额 | `bk_transaction.trade_amount` | +| operatorId | Long | 是 | 柜台操作员 ID | 操作上下文 | +| scene | String | 否 | 场景标识,默认 `COUNTER_SCAN_PAY` | 场景参数 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| bizOrderNo | String | 柜面业务订单号 | `biz_collection.code` | +| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` | +| qrCode | String | 柜面展示二维码内容 | 渠道返回 | +| orderStatus | String | 当前订单状态:`INIT`、`PAYING`、`SUCCESS`、`FAIL` | 交易状态 | +| writeBackStatus | String | 营收状态回写结果 | 业务状态 | +| msg | String | 处理说明 | 返回消息 | + +### IF-METER-001 水表档案查询接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源 | +|------|------|------|------|----------| +| id | Long | 否 | 水表主键 ID,与 `code` 二选一 | `biz_meter.id` | +| code | String | 否 | 水表编号,与 `id` 二选一 | `biz_meter.code` | +| queryType | String | 否 | 查询类型:`base`、`status`、`lifeCycle`、`all` | 查询控制参数 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| id | Long | 水表主键 ID | `biz_meter.id` | +| code | String | 水表编号 | `biz_meter.code` | +| meterStatus | String | 水表状态 | `biz_meter.status` | +| modelCode | String | 型号编码 | `biz_meter.model_code` | +| caliberCode | String | 口径编码 | `biz_meter.caliber_code` | +| rangeCode | String | 量程编码 | `biz_meter.range_code` | +| installAddress | String | 安装地址 | `biz_meter.install_address` | +| lastReading | Decimal | 最近有效读数 | `biz_last_reading.last_reading` | + +### IF-METER-003 库存出入库接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| action | String | 是 | 动作:`IN`、`OUT`、`RETURN`、`SCRAP` | 库存动作 | +| batchNo | String | 是 | 批次号 | `biz_meter_in_out.batch_no` | +| warehouseCode | String | 否 | 仓库编码 | 仓储参数 | +| meterIds | Array | 是 | 水表 ID 列表 | `biz_meter.id` | +| remark | String | 否 | 出入库说明 | `biz_meter_in_out.remark` | +| operatorId | Long | 是 | 操作人 ID | 操作上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| inOutId | Long | 出入库主记录 ID | `biz_meter_in_out.id` | +| batchNo | String | 批次号 | `biz_meter_in_out.batch_no` | +| actionStatus | String | 处理状态:`SUCCESS`、`PARTIAL`、`FAIL` | 业务状态 | +| successCount | Integer | 成功处理数量 | 汇总结果 | +| failCount | Integer | 失败数量 | 汇总结果 | +| msg | String | 处理说明 | 返回消息 | + +### IF-METER-004 集抄数据接收接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| meterCode | String | 是 | 水表编号 | `biz_meter.code` | +| readTime | Datetime | 是 | 采集时间 | `biz_reading_data.read_time` | +| currentReading | Decimal | 是 | 当前读数 | `biz_reading_data.current_reading` | +| deviceStatus | String | 否 | 设备状态:`ONLINE`、`OFFLINE`、`ALARM` | 设备状态 | +| alarmList | Array | 否 | 告警编码列表 | 告警结果 | +| fileSerialNo | String | 否 | 上送批次或文件序列号 | 幂等辅助键 | +| sourceSystem | String | 是 | 来源系统:`IOT`、`MDC` | 来源标识 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| readingId | Long | 读数记录 ID | `biz_reading_data.id` | +| meterReadId | Long | 对应抄表任务 ID | `biz_meter_read.id` | +| acceptStatus | String | 接收状态:`SUCCESS`、`WARN`、`REJECT` | 处理状态 | +| abnormalFlag | Boolean | 是否异常 | 过程判断 | +| nextAction | String | 后续动作:`BILLING`、`RECHECK`、`MANUAL_REVIEW` | 流程控制 | +| msg | String | 处理说明 | 返回消息 | + +### IF-INST-001 报装申请提交接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| applyType | String | 是 | 报装类型:`NEW`、`REBUILD`、`ONE_METER_ONE_HOME` | 业务类型 | +| applicantName | String | 是 | 申请人姓名 | 申请资料 | +| mobile | String | 是 | 联系手机号 | 申请资料 | +| address | String | 是 | 申请地址 | 申请资料 | +| waterUseType | String | 是 | 用水性质 | 业务字典 | +| sourceChannel | String | 是 | 来源渠道:`COUNTER`、`MINIAPP`、`GOV` | 来源标识 | +| attachmentList | Array | 否 | 申请附件列表 | `biz_content_attach` | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| processId | Long | 流程实例 ID | `biz_process.id` | +| processCode | String | 报装流程编号 | `biz_process.code` | +| processStatus | String | 当前状态:`INIT`、`ACCEPTED`、`SURVEYING` | `biz_process.process_status` | +| acceptStatus | String | 受理结果 | 业务状态 | +| msg | String | 处理说明 | 返回消息 | + +### IF-INST-002 踏勘结果回填接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| processId | Long | 是 | 报装流程 ID | `biz_process.id` | +| schemeVersion | String | 是 | 方案版本号 | `biz_business_datas` | +| surveyResult | String | 是 | 踏勘结论 | `biz_business_datas` | +| estimateAmount | Decimal | 否 | 预估费用 | `biz_business_datas` | +| attachmentList | Array | 否 | 现场照片与方案附件 | `biz_content_attach` | +| auditResult | String | 否 | 审核结果:`PASS`、`REJECT` | 审核结果 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| transferId | Long | 流转记录 ID | `biz_process_transfer.id` | +| processStatus | String | 当前流程状态 | `biz_process.process_status` | +| nextNode | String | 下一节点 | 流程控制 | +| msg | String | 处理说明 | 返回消息 | + +### IF-INST-004 签章回执接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| contractId | Long | 是 | 合同 ID | `installation_contract.id` | +| requestNo | String | 是 | 签章请求号 | 协同流水 | +| signStatus | String | 是 | 签章状态:`SUCCESS`、`FAIL`、`CANCEL` | `installation_signature.signature_status` | +| signerId | String | 否 | 签署人标识 | `installation_signature.signer_id` | +| signatureTime | Datetime | 否 | 签章时间 | `installation_signature.signature_time` | +| evidenceNo | String | 否 | 存证编号 | `installation_evidence.evidence_no` | +| fileUrl | String | 否 | 已签文件地址 | 结果回写 | +| hashValue | String | 否 | 存证哈希 | `installation_evidence.hash_value` | +| resultMsg | String | 否 | 结果说明 | 返回消息 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| signatureId | Long | 签章记录 ID | `installation_signature.id` | +| evidenceId | Long | 存证记录 ID | `installation_evidence.id` | +| writeBackStatus | String | 回写状态:`SUCCESS`、`IGNORE_REPEAT`、`FAIL` | 业务状态 | +| msg | String | 处理说明 | 返回消息 | + +### IF-INST-005 报装归档接口 + +#### 请求参数 + +| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 | +|------|------|------|------|---------------| +| processId | Long | 是 | 报装流程 ID | `biz_process.id` | +| archiveType | String | 是 | 归档类型:`APPLY`、`ACCEPT`、`CHECK`、`CONTRACT`、`FINISH` | 归档分类 | +| attachmentList | Array | 是 | 归档附件列表 | `biz_content_attach` | +| contractId | Long | 否 | 合同 ID | `installation_contract.id` | +| evidenceId | Long | 否 | 存证记录 ID | `installation_evidence.id` | +| operatorId | Long | 否 | 归档操作人 | 操作上下文 | + +#### 响应参数 + +| 字段 | 类型 | 说明 | 主要来源 | +|------|------|------|----------| +| archiveBatchNo | String | 归档批次号 | 业务流水 | +| archiveStatus | String | 归档状态:`SUCCESS`、`PARTIAL`、`FAIL` | 业务状态 | +| archiveCount | Integer | 已归档文件数量 | 汇总结果 | +| msg | String | 处理说明 | 返回消息 | + +## 关键接口时序图 + +> 说明:以下时序图用于说明 SYS-002 与客户渠道、外部协同子系统之间的交互边界,重点体现业务校验、协同调用、结果回写与状态更新链路。 + +### 1. 在线支付下单与回调时序 + +```mermaid +sequenceDiagram + autonumber + participant Client as 客户渠道 + participant SYS002 as SYS-002营收系统 + participant SYS009 as SYS-009支付结算 + participant Channel as 支付渠道 + + Client->>SYS002: 提交缴费下单请求(IF-CS-003) + SYS002->>SYS002: 校验客户、账单状态与应付金额 + SYS002->>SYS002: 生成业务订单与收费记录草稿 + SYS002->>SYS009: 发起支付下单协同(IF-EXT-004) + SYS009->>Channel: 调用微信/支付宝统一下单 + Channel-->>SYS009: 返回tradeNo、payUrl/prepayInfo + SYS009-->>SYS002: 返回交易流水与支付参数 + SYS002-->>Client: 返回bizOrderNo、payUrl、expireTime + + Channel-->>SYS009: 异步支付结果通知 + SYS009->>SYS009: 校验签名与交易状态 + SYS009->>SYS002: 回写支付结果(IF-EXT-005) + SYS002->>SYS002: 幂等校验并更新biz_collection/biz_charge + SYS002-->>Client: 查询订单时返回最新支付状态 +``` + +### 2. 电子发票申请、查询补偿与回写时序 + +```mermaid +sequenceDiagram + autonumber + participant Counter as 柜台或客户渠道 + participant SYS002 as SYS-002营收系统 + participant SYS008 as SYS-008发票服务 + participant Tax as 税控/开票平台 + participant Job as 查询补偿任务 + + Counter->>SYS002: 提交发票申请(IF-REV-008/IF-CS-004) + SYS002->>SYS002: 校验客户、账单、开票抬头与金额 + SYS002->>SYS002: 生成发票申请记录biz_invoice(SUBMITTED) + SYS002->>SYS008: 发起开票协同(IF-EXT-006) + SYS008->>Tax: 调用税控或电子发票平台 + Tax-->>SYS008: 返回受理结果/票号/文件地址 + SYS008-->>SYS002: 返回受理号或异步结果 + SYS002->>SYS002: 记录sysRequestNo并更新为PENDING + alt 发票服务主动回写 + SYS008-->>SYS002: 回写开票结果(IF-EXT-007) + SYS002->>SYS002: 更新biz_invoice状态、票据地址与账单关联 + else 未收到终态结果 + Job->>SYS002: 触发补偿查询(IF-REV-009) + SYS002->>SYS008: 按申请单号/受理号查询结果 + SYS008-->>SYS002: 返回处理中/成功/失败 + SYS002->>SYS002: 刷新查询上下文并按终态规则落账 + end + SYS002-->>Counter: 返回申请结果或供后续查询 +``` + +### 3. 银行代扣批次与回盘时序 + +```mermaid +sequenceDiagram + autonumber + participant BatchJob as 代扣批处理任务 + participant SYS002 as SYS-002营收系统 + participant SYS009 as SYS-009支付结算 + participant Bank as 银行渠道 + + BatchJob->>SYS002: 发起代扣批次处理(IF-REV-011) + SYS002->>SYS002: 汇总代扣客户、账单与协议关系 + SYS002->>SYS002: 生成bk_withholding_batch/bk_withholding_item + SYS002->>SYS002: 解析 send/back/reconcile 目录并固化协议、目录、文件路径 + SYS002->>SYS009: 下发银行代扣批次(IF-EXT-001) + SYS009->>Bank: 发送代扣文件或报文 + Bank-->>SYS009: 返回受理结果 + SYS009-->>SYS002: 回写批次发送状态 + + Bank-->>SYS009: 回盘文件/结果通知(IF-EXT-002) + SYS009->>SYS009: 解析成功、失败、异常明细 + SYS009->>SYS002: 回写代扣结果、差异与结算状态 + SYS002->>SYS002: 更新biz_withholding、账单核销、对账结算状态 + SYS002-->>BatchJob: 返回批次处理汇总结果 +``` + +### 4. 催缴通知下发与结果回写时序 + +```mermaid +sequenceDiagram + autonumber + participant Job as 催缴任务 + participant SYS002 as SYS-002营收系统 + participant SYS010 as SYS-010消息服务 + participant User as 客户 + + Job->>SYS002: 触发催缴任务(IF-REV-013) + SYS002->>SYS002: 按欠费账单、渠道偏好生成催缴名单 + SYS002->>SYS010: 提交通知下发请求(IF-EXT-008) + SYS010->>User: 发送短信/公众号/APP消息 + User-->>SYS010: 触达回执或阅读反馈 + SYS010-->>SYS002: 回写发送结果与触达状态 + SYS002->>SYS002: 更新催缴记录、四态状态与后续策略 + SYS002-->>Job: 返回催缴任务执行结果 +``` + + +## 数据对象与表口径 + +### SYS-002 接口核心数据对象 + +| 数据域 | 代表表 | 接口说明 | +|--------|--------|----------| +| 客户与账户 | `biz_cust`、`biz_account`、`biz_cust_contact` | 用于客户查询、账户绑定、资料维护 | +| 客户扩展关系 | `biz_cust_meter`、`biz_cust_invoice`、`biz_cust_app_binds`、`biz_cust_collection_rel`、`biz_cust_withholding_rel` | 用于客户关联对象查询与服务协同 | +| 抄表与开账 | `biz_meter_book`、`biz_meter_read`、`biz_reading_data`、`biz_last_reading`、`biz_charge`、`biz_charge_detail` | 用于抄表任务、账单生成、费用明细查询 | +| 价格与参数 | `biz_price_*`、`biz_cost_component`、`biz_parameter_settings`、`biz_page_settings*` | 用于价格模板、业务参数、页面配置 | +| 收费与票据 | `biz_collection`、`biz_withholding`、`biz_invoice`、`biz_invoice_taxrate` | 用于收费、代扣、发票申请与回写 | +| 办理与资料 | `biz_process*`、`biz_business_datas`、`biz_content*` | 用于业务办理与进度跟踪 | +| 银行代收与结算 | `bk_transaction*`、`bk_withholding_*`、`bk_reconcile_*`、`bk_settlement_batch` | 用于支付流水、批次、回调、对账和结算 | + +### 口径约束说明 + +1. 不再使用旧稿中的 `customer_*`、`water_*`、`billing_*`、`thirdpay_*`、`service_*` 作为 SYS-002 正式接口数据口径。 +2. 若历史资料中仍存在旧命名,仅作为来源参考,不作为正式交付口径。 +3. 对 backend 中尚未明确存在独立实体表的对象,例如部分精细账务台账、红冲明细、价差调整明细等,本文仅描述为业务处理场景,不强写为既有独立接口对象。 + +## 跨系统报文映射表 + +> 说明:以下映射表用于说明 SYS-002 与 `SYS-008`、`SYS-009`、`SYS-010` 之间的关键报文字段对应关系,重点体现业务主键、状态字段、金额字段与结果回写字段,不展开各外部平台私有扩展字段。 + +### 1. SYS-002 ↔ SYS-009 支付下单与结果回写映射 + +| 协同场景 | SYS-002 字段 | SYS-009/渠道字段 | 说明 | 主要来源 | +|---------|--------------|------------------|------|----------| +| 支付下单 | `bizOrderNo` | `businessOrderNo` | SYS-002 业务订单号,作为支付协同主键 | `biz_collection.code` | +| 支付下单 | `chargeIds[]` | `orderItems[].sourceId` | 待缴账单明细标识 | `biz_charge.id` | +| 支付下单 | `custId` | `buyer.customerId` | 客户标识 | `biz_charge.cust_id` / `biz_cust.id` | +| 支付下单 | `paymentAmount` | `tradeAmount` | 交易总金额 | `bk_transaction.trade_amount` | +| 支付下单 | `paymentChannel` | `channelCode` | 支付渠道编码 | 渠道参数 / `bk_payment_channel.channel_code` | +| 支付下单 | `notifyUrl` | `notifyUrl` | 支付结果异步通知地址 | 协同参数 | +| 下单返回 | `tradeNo` | `tradeNo` | 渠道交易流水号 | `bk_transaction.trade_no` | +| 下单返回 | `payUrl`/`prepayInfo` | `payUrl`/`payParams` | 二维码链接或预支付参数 | 渠道返回 | +| 结果回写 | `orderStatus` | `tradeStatus` | 交易状态映射:`INIT/PAYING/SUCCESS/FAIL` | `bk_transaction.status` | +| 结果回写 | `paidAmount` | `successAmount` | 实际支付成功金额 | `biz_collection.amount` / 渠道结果 | +| 结果回写 | `callbackTime` | `notifyTime` | 回调时间 | `bk_transaction_callback.create_time` | +| 结果回写 | `writeOffStatus` | `writeBackStatus` | SYS-002 核销处理结果 | 业务状态 | + +### 2. SYS-002 ↔ SYS-008 发票申请与结果回写映射 + +| 协同场景 | SYS-002 字段 | SYS-008 字段 | 说明 | 主要来源 | +|---------|--------------|--------------|------|----------| +| 发票申请 | `invoiceCode` | `requestNo` | 发票申请单号 / 协同请求号 | `biz_invoice.code` | +| 发票申请 | `custId` | `customerId` | 客户标识 | `biz_invoice.cust_id` | +| 发票申请 | `chargeIds[]` | `billList[].sourceBillId` | 开票关联账单标识 | 业务单据关联 | +| 发票申请 | `invoiceTitle` | `buyerName` | 购方名称 / 抬头 | `biz_cust_invoice.invoice_title` | +| 发票申请 | `taxNo` | `buyerTaxNo` | 购方税号 | `biz_cust_invoice.tax_no` | +| 发票申请 | `invoiceType` | `invoiceType` | 电子/纸质发票类型 | `biz_invoice.invoice_type` | +| 发票申请 | `taxRateCode` | `taxRateCode` | 税率编码 | `biz_invoice_taxrate.tax_code` | +| 发票申请 | `email` / `mobile` | `receiver.email` / `receiver.mobile` | 票据接收信息 | `biz_cust_invoice.email` / `biz_cust_invoice.mobile` | +| 结果回写 | `invoiceStatus` | `invoiceStatus` | 开票状态:受理中、成功、失败、作废、红冲等 | `biz_invoice.invoice_status` | +| 结果回写 | `invoiceNo` | `invoiceNo` | 发票号码 | 开票结果 | +| 结果回写 | `fileUrl` | `fileUrl` | 发票文件下载地址 | 回写结果 | +| 结果回写 | `msg` | `resultMsg` | 结果说明 | 返回消息 | + +### 3. SYS-002 ↔ SYS-009 银行代扣、对账、结算映射 + +| 协同场景 | SYS-002 字段 | SYS-009/银行字段 | 说明 | 主要来源 | +|---------|--------------|------------------|------|----------| +| 批次下发 | `batchNo` | `batchNo` | 代扣批次号 | `bk_withholding_batch.batch_no` | +| 批次下发 | `businessType` | `businessType` | 代扣/对账/结算类型 | 协同参数 | +| 批次下发 | `channelCode` | `channelCode` | 渠道编码 | `bk_payment_channel.channel_code` | +| 批次下发 | `protocol` | `protocol` | `SFTP/FTP` 传输协议 | 统一解析结果 | +| 批次下发 | `sendDir` / `sendFilePath` | `sendDir` / `sendFilePath` | 送盘目录与文件路径 | `bk_withholding_batch` | +| 批次下发 | `billPeriod` | `billPeriod` | 账期 | 批处理参数 | +| 批次明细 | `itemList[].custId` | `itemList[].customerId` | 客户标识 | `bk_withholding_item.cust_id` | +| 批次明细 | `itemList[].chargeId` | `itemList[].sourceBillId` | 账单标识 | `bk_withholding_item.charge_id` | +| 批次明细 | `itemList[].amount` | `itemList[].withholdingAmount` | 代扣金额 | 业务金额 | +| 回盘回写 | `batchStatus` | `batchStatus` | 批次状态:已发送、已回盘等 | `bk_withholding_batch.status` | +| 回盘回写 | `backProtocol` / `backDir` / `backFilePath` | `backProtocol` / `backDir` / `backFilePath` | 回盘阶段最终解析结果 | `bk_withholding_batch` | +| 回盘回写 | `successCount` / `failCount` | `successCount` / `failCount` | 成功失败数量汇总 | 汇总结果 | +| 对账回写 | `protocol` / `dir` / `filePath` | `protocol` / `dir` / `filePath` | 对账文件最终解析结果 | `bk_reconcile_batch` | +| 对账回写 | `reconcileStatus` | `reconcileStatus` | 对账状态 | `bk_reconcile_batch.status` | +| 对账回写 | `diffList[]` | `diffList[]` | 差异明细摘要 | `bk_reconcile_diff` | +| 结算回写 | `settlementStatus` | `settlementStatus` | 结算状态 | `bk_settlement_batch.status` | + +### 4. SYS-002 ↔ SYS-010 催缴与业务通知映射 + +| 协同场景 | SYS-002 字段 | SYS-010 字段 | 说明 | 主要来源 | +|---------|--------------|--------------|------|----------| +| 催缴通知 | `messageBizNo` | `eventNo` | 消息事件编号 | 业务事件编号 | +| 催缴通知 | `custId` | `receiver.customerId` | 接收客户标识 | `biz_charge.cust_id` / `biz_process.cust_id` | +| 催缴通知 | `mobile` | `receiver.mobile` | 接收手机号 | 客户联系方式 | +| 催缴通知 | `templateCode` | `templateCode` | 消息模板编码 | 模板参数 | +| 催缴通知 | `arrearsAmount` | `payload.arrearsAmount` | 欠费金额 | `biz_charge.total_amount` / 汇总结果 | +| 催缴通知 | `billPeriod` | `payload.billPeriod` | 账期 | `biz_charge.bill_period` | +| 催缴通知 | `strategyCode` | `payload.strategyCode` | 命中的催缴策略编码 | 任务分组结果 | +| 催缴通知 | `triggerType` | `payload.triggerType` | 自动/人工触发方式 | 任务触发上下文 | +| 办理进度通知 | `processCode` | `payload.processCode` | 业务办理单号 | `biz_process.code` | +| 办理进度通知 | `processStatus` | `payload.processStatus` | 办理状态 | `biz_process.status` | +| 发送结果回写 | `status` | `sendStatus` | 渠道回执由 `SYS-002` 统一映射为 `PENDING/SUCCESS/FAIL/MANUAL_VERIFIED` 四态 | 消息结果 | +| 发送结果回写 | `reachStatus` | `reachStatus` | 触达/阅读状态 | 渠道回执 | +| 发送结果回写 | `sendTime` | `sendTime` | 发送时间 | 消息结果 | +| 发送结果回写 | `msg` | `resultMsg` | 结果说明 | 返回消息 | + + +## 接口安全与异常处理 + +### 认证与鉴权 + +- 管理后台接口:统一采用登录态 + 权限控制 + 数据权限。 +- 客户渠道接口:采用账户绑定态、手机号/验证码、OAuth 或渠道令牌机制。 +- 外部协同接口:按渠道要求使用 API Key、时间戳、数字签名、证书或国密算法。 + +### 安全控制要求 + +- 全部接口统一走 HTTPS。 +- 外部回调接口必须执行签名校验、重复通知幂等处理与来源校验。 +- 关键交易类接口需记录业务流水、渠道流水和操作日志。 +- 敏感字段如证件号、手机号、银行账号按制度要求脱敏展示。 + +### 错误码分层建议 + +| 错误码段 | 说明 | +|---------|------| +| 0 | 成功 | +| 400~499 | 请求参数、权限、资源不存在等通用错误 | +| 1_002_001_xxx | 客户主数据类错误 | +| 1_002_002_xxx | 抄表开账类错误 | +| 1_002_003_xxx | 收费与核销类错误 | +| 1_002_004_xxx | 账务处理类错误 | +| 1_002_005_xxx | 发票协同类错误 | +| 1_002_006_xxx | 银行代收与结算类错误 | +| 1_002_007_xxx | 客户渠道与业务办理类错误 | +| 1_002_008_xxx | 消息通知与触达类错误 | + +### 典型错误码建议 + +| 错误码 | 适用接口/场景 | 说明 | 处理建议 | +|-------|---------------|------|----------| +| `1_002_001_001` | IF-REV-001 / IF-REV-002 | 客户不存在或已停用 | 返回客户状态并阻断后续处理 | +| `1_002_001_002` | IF-CS-001 | 账户绑定关系不存在 | 引导重新绑定客户 | +| `1_002_002_001` | IF-REV-004 | 抄表任务不存在或已关闭 | 禁止提交抄表数据 | +| `1_002_002_002` | IF-REV-004 | 本次读数小于上次读数且未通过异常审批 | 标记异常并进入复核 | +| `1_002_002_003` | IF-REV-005 | 价格模板或费用组成缺失 | 阻断账单生成并提示补齐配置 | +| `1_002_003_001` | IF-REV-006 / IF-CS-003 / IF-CS-007 | 账单已核销或不允许重复支付 | 返回当前账单支付状态 | +| `1_002_003_002` | IF-REV-006 | 支付金额与待核销金额不一致 | 阻断核销并返回差额 | +| `1_002_003_003` | IF-EXT-005 | 支付回调签名校验失败 | 记录异常回调并拒绝入账 | +| `1_002_004_001` | IF-REV-007 | 账务调整目标状态不允许变更 | 返回当前账务状态 | +| `1_002_005_001` | IF-REV-008 / IF-CS-004 | 发票申请单据不满足开票条件 | 返回不可开票原因 | +| `1_002_005_002` | IF-EXT-007 | 发票结果回写状态非法或重复 | 按请求号执行幂等回写 | +| `1_002_006_001` | IF-REV-011 / IF-EXT-001 | 代扣批次不存在或已发送 | 禁止重复下发批次 | +| `1_002_006_002` | IF-EXT-002 | 银行回盘文件格式非法或批次号不匹配 | 记录异常并进入人工核查 | +| `1_002_006_003` | IF-REV-011 | 对账差异未处理,禁止结算确认 | 需先完成差异处置 | +| `1_002_007_001` | IF-CS-006 | 业务办理单不存在 | 返回空结果并提示核对单号 | +| `1_002_007_002` | IF-CS-006 | 当前节点不允许补件或重复提交 | 返回当前流程节点状态 | +| `1_002_008_001` | IF-REV-013 / IF-EXT-008 | 消息模板不存在或目标联系方式缺失 | 记录失败原因并允许后续补发 | +| `1_002_008_002` | IF-EXT-008 | 消息通道调用超时 | 标记待重试,不直接判定业务失败 | +| `1_002_008_003` | IF-REV-013 | 人工核查补记缺少核查说明或关联任务不存在 | 拒绝补记并提示补齐核查上下文 | + +### 幂等与状态冲突控制 + +#### 幂等键建议 + +| 场景 | 接口 | 建议幂等键 | 幂等判定说明 | +|------|------|------------|--------------| +| 支付下单 | IF-CS-003 / IF-CS-007 | `bizOrderNo` 或 `custId + chargeIds + paymentChannel` | 相同业务订单仅允许创建一次有效支付单 | +| 支付回调 | IF-EXT-005 | `tradeNo + tradeStatus + notifyTime` | 同一交易成功回调只允许入账一次 | +| 发票申请 | IF-REV-008 / IF-CS-004 | `invoiceCode` 或 `custId + chargeIds` | 相同账单组合避免重复申请开票 | +| 发票结果回写 | IF-EXT-007 | `requestNo + invoiceStatus` | 相同发票状态重复回写仅更新回执日志 | +| 银行批次下发 | IF-REV-011 / IF-EXT-001 | `batchNo` | 同一代扣批次禁止重复发送 | +| 银行回盘接收 | IF-EXT-002 | `batchNo + fileSerialNo` | 同一回盘文件只处理一次 | +| 催缴通知 | IF-REV-013 / IF-EXT-008 | `messageBizNo + templateCode + receiver` | 同一业务事件与同一接收方避免重复发送 | +| 业务补件 | IF-CS-006 | `processId + action + attachmentDigest` | 相同补件内容重复提交仅保留一次 | + +#### 状态冲突处理原则 + +| 场景 | 冲突条件 | 处理原则 | +|------|----------|----------| +| 支付核销 | 账单已完成核销后再次支付 | 拒绝重复核销,返回现有 `writeOffStatus` | +| 支付回调 | 先收到失败回调,后收到成功回调 | 以最终成功状态为准,但全过程保留回调日志 | +| 发票申请 | 单据已开票成功后再次申请 | 拒绝重复申请,返回既有发票信息 | +| 发票回写 | 已成功开票后收到失败回写 | 不覆盖成功状态,转入异常核查 | +| 银行代扣 | 批次已发送后再次下发 | 拒绝重复发送,保留原批次状态 | +| 对账结算 | 差异未消除即发起结算 | 禁止结算,提示先处理差异明细 | +| 催缴通知 | 同一账期、同一模板短时间内重复催缴 | 按通知频控策略拦截重复下发 | +| 业务办理 | 流程已办结后再次补件 | 拒绝补件,返回当前流程终态 | + +### 异常处理要求 + +- 参数校验失败:直接返回明确字段错误信息。 +- 外部渠道超时:记录重试状态,不直接覆盖业务成功状态。 +- 重复回调:按业务流水执行幂等控制。 +- 账务状态冲突:返回当前账单状态与冲突原因,禁止重复核销。 +- 外部结果晚到:允许按幂等键补写回执,但不得回退已确认成功状态。 +- 人工兜底场景:支付异常、银行回盘异常、发票状态冲突等需保留人工复核入口与操作日志。 + + +## 历史查询与迁移校验接口口径 + +### 设计原则 + +- 历史查询接口一律只读,不承担迁移修正、补写或状态变更职责。 +- 不为迁移场景发明新的独立接口编号体系,统一挂靠既有 `IF-REV-*`、`IF-CS-*`、`IF-METER-*` 接口族扩展查询能力。 +- 对 backend 当前未识别到独立实体表的旧细粒度对象,仅要求接口返回“历史摘要 + 原始标识 + 状态映射”,不强行承诺独立在线业务对象。 +- 迁移验收接口必须同时支持“汇总对账”和“明细追溯”两类能力,避免只能看总数、无法定位差异。 + +### 最小历史查询保留集 + +| 查询主题 | 挂靠接口族 | 主要数据来源 | 最低返回要求 | 说明 | +|---------|------------|--------------|--------------|------| +| 历史账单、特殊开账 | `IF-CS-002`、`IF-REV-005` | `biz_charge*` + 历史账单来源 | 原账单号、新账单号、客户号、账期、金额、状态、来源类型 | 支撑账单迁移核查与客户侧历史查询 | +| 缴费记录、柜台结账、实时收费 | `IF-CS-002`、`IF-REV-006`、`IF-REV-011` | `biz_collection`、`bk_transaction*` + 历史收费记录 | 原流水号、渠道、实收金额、收费时间、柜员/营业所、核销状态 | 支撑渠道对账、柜面核查和历史收据核对 | +| 红冲与账务调整 | `IF-REV-007` | 操作留痕、流程结果 + 历史调整台账 | 调整类型、关联原单号、调整金额、原因、审批状态、处理时间 | 支撑预存退款、已销调整、价差调整、分账调整、呆坏账查询 | +| 发票与开票关系 | `IF-REV-008`、`IF-CS-004` | `biz_invoice*` + 历史开票关系快照 | 发票号、申请单号、关联账单、票据状态、票据类型、文件地址 | 支撑发票结果核查与历史补打定位 | +| 催缴、停复水、预存短信 | `IF-REV-013`、`IF-METER-002` | 通知结果、流程工单 + 历史催缴记录 | 客户号、账期、催缴方式、消息状态、停复水状态、执行人、执行时间、处置引用 | 支撑催缴处置闭环核查 | +| 业务进度与电子档案 | `IF-CS-006` | `biz_process*`、`biz_content*` + 历史附件目录 | 业务单号、节点状态、处理轨迹、附件数量、附件元数据 | 支撑微网厅与柜台办理进度、电子档案查询 | +| 水表生命周期、检定与库存流转 | `IF-METER-001`、`IF-METER-003` | `biz_meter*` + 历史仓储/检定单据 | 表号、当前状态、单据类型、仓库、检定结论、证书编号、时间 | 支撑表务迁移核查与历史作业追溯 | +| 页面参数、业务字段、微信配置 | `IF-REV-012`、`IF-CS-006` | `biz_parameter_settings`、`biz_page_settings*`、`sys_wechat_app_settings` | 参数编码、原值、新值、启用状态、生效时间、适用渠道 | 支撑微网厅后台配置迁移核查 | + +### 迁移验收对账接口要求 + +| 验收场景 | 推荐挂靠接口 | 最低查询维度 | 输出要求 | +|---------|--------------|--------------|----------| +| 开账迁移核对 | `IF-REV-005`、`IF-CS-002` | 账期、营业所、客户类型、账单状态 | 同时提供汇总金额/笔数与可追溯明细清单 | +| 收费迁移核对 | `IF-REV-006`、`IF-REV-011`、`IF-CS-002` | 日期、渠道、营业所、收费状态 | 同时提供实收金额、流水数量和异常流水列表 | +| 发票迁移核对 | `IF-REV-008`、`IF-CS-004` | 开票日期、票据类型、开票状态 | 同时提供开票汇总、失败原因和票据明细定位 | +| 催缴与停复水核对 | `IF-REV-013`、`IF-METER-002` | 账期、催缴方式、执行状态、处理人 | 同时提供任务统计、执行明细与处置引用 | +| 业务办理与档案核对 | `IF-CS-006` | 业务类型、流程状态、附件类型、创建时间 | 同时提供流程轨迹、附件元数据和缺失标记 | +| 表务仓储与检定核对 | `IF-METER-001`、`IF-METER-003` | 仓库、单据类型、水表状态、检定结论 | 同时提供数量汇总和单据级追溯信息 | + +### 接口约束补充 + +- 历史查询结果应优先返回原系统标识与新系统标识的映射关系,例如原单号、原批次号、原附件标识、当前业务单号。 +- 明细查询接口应支持按客户号、证件号、手机号、表号、账期、营业所、渠道、业务单号等组合检索,满足迁移验收定位需求。 +- 若历史附件不直接由当前业务服务托管,接口至少返回附件元数据、来源系统、文件引用地址和可访问状态。 +- 历史查询接口的导出能力属于查询扩展能力,不应与在线交易接口共用“状态变更”动作。 + + +## 实现状态说明 + +### 已落地 + +结合 `backend` 当前已确认模块与真实表,可明确支撑以下接口域: + +- 客户与账户查询、维护接口 +- 抄表任务与抄表数据接口 +- 账单生成与收费核销接口 +- 银行代收、代扣、交易回调、对账、结算接口 +- 发票申请与票据状态回写接口的业务侧支撑 +- 客户渠道的账户绑定、查询、缴费、业务办理进度接口 + +### 部分落地 + +以下接口域已有主线支撑,但部分细粒度对象仍需结合后续实现继续核实: + +- 账务调整、退款、坏账、冲正类精细接口 +- 催缴管理中针对不同通知策略和停复水联动的细分接口 +- 发票补开等扩展票据后处理接口 + +### 文档先行 + +以下内容可保留设计说明,但当前不应直接表述为已完全落地: + +- 历史数据字典中大量细粒度账务台账接口 +- 未在 backend 当前扫描范围内明确识别到的独立业务对象接口 +- 特定银行或地方平台的专有报文细节 +- 历史查询与迁移校验接口在实施时所依赖的只读库、归档库或映射表物理形态 + +--- + +### 版本迭代维护说明 + +当前主文档已覆盖 `UP / REV / CS / METER / INST / EXT` 六类接口域的统一编号、清单、关键接口与字段级定义。后续版本迭代按以下顺序增量维护: + +1. 先更新接口清单与归属模块,再补充字段级请求/响应结构; +2. 涉及跨系统协同时,同步维护 `SYS-008`、`SYS-009`、`SYS-010` 报文映射; +3. 涉及异常策略变化时,同步更新错误码与幂等规则; +4. 完成后同步校验 `02_Detailed_Design/01_Detailed_Design.md` 与本主文档的一致性。 diff --git a/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-04/2026-04-03-RWB-04-03_Summary_Design.md b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-04/2026-04-03-RWB-04-03_Summary_Design.md new file mode 100644 index 0000000..369c6c4 --- /dev/null +++ b/docs/design/04_Appendix/Archive/08_Formal_Doc_Snapshots/RWB-04/2026-04-03-RWB-04-03_Summary_Design.md @@ -0,0 +1,4231 @@ +--- +doc_id: HL-03-SUMMARY +doc_role: master_document +authority: primary +scope: 概要设计 +source_of_truth: true +last_reviewed: 2026-03-12 +retrieval_priority: P0 +--- + +# 福建水务营收系统概要设计说明书 + +## 章节导航(精简) + +- [前言](#sec-preface) +- [系统总体设计](#sec-overall-design) +- [子系统设计(SYS-001~SYS-010)](#sec-subsystems) + - [SYS-001 统一平台](#sec-sys-001) + - [SYS-002 营收业务系统](#sec-sys-002) + - [SYS-003 手机抄表APP](#sec-sys-003) + - [SYS-004 微网厅系统](#sec-sys-004) + - [SYS-005 工单管理系统](#sec-sys-005) + - [SYS-006 表务管理系统](#sec-sys-006) + - [SYS-007 报装业务系统](#sec-sys-007) + - [SYS-008 发票服务子系统](#sec-sys-008) + - [SYS-009 支付与银行结算子系统](#sec-sys-009) + - [SYS-010 消息服务子系统](#sec-sys-010) +- [非功能性需求设计](#sec-nfr) + +| 文件状态: | 文档密级: | 公开 | +| :--- | :--- | :--- | +| 【√】草稿 | | | +| 【】修改稿 | | | +| 【】正式发布 | | | +| | **当前版本:** | **V1.7** | +| | **作者:** | **唐伟杰** | +| | **完成日期:** | **2025-08-18** | + +## 版本历史 + +| 日期 | 版本号 | 作者 | 备注 | +| :--- | :--- | :--- | :--- | +| 2025-07-01 | V1.0 | 唐伟杰 | 初版 | +| 2025-07-17 | V1.1 | 唐伟杰 | 1. 同步详细设计中的模块,补充缺失模块。
2. 调整子系统划分与编号,确保逻辑清晰、编号连续。
3. 重构表务、报装、客户服务子系统,优化模块设计。
4. 统一概要设计与详细设计的结构,提升一致性。 | +| 2025-08-01 | V1.2 | 唐伟杰 | 完善 APP相关的模块设计 | +| 2025-08-01 | V1.3 | 唐伟杰 | 数据库系统变更:将OpenGauss替换为达梦数据库 8.0+,更新所有相关架构图和技术描述。 | +| 2025-08-01 | V1.4 | 唐伟杰 | 单点登录采用OAuth2.0+CAS协议:更新单点登录模块描述,强调基于OAuth2.0+CAS协议实现。 | +| 2025-08-18 | V1.5 | 唐伟杰 | 架构调整:将营收业务系统中的工单、表务、报装剥离为独立子系统(SYS-005/006/007),更新目录、功能范围、子系统列表、关系图与接口定义;保留客户服务模块在营收业务系统中的作用。 | +| 2025-08-18 | V1.6 | 唐伟杰 | 合并第三方支付能力至SYS-009"支付与银行结算子系统",统一消息服务重编号为SYS-010;更新总体目标、功能范围、接口定义、子系统列表与相关架构图。 | +| 2026-03-12 | V1.7 | 唐伟杰 | 对照 `Archive/03_Design_Docs/营业收费管理系统-概要设计说明书20250912.md` 完成来源对齐:补充历史来源说明与引用路径,确认系统拆分、基础服务定位、外部集成与非功能约束已同步;保留当前正式系统名称、模块编号与接口编号标准,不沿用历史别名编码作为正式口径。 | + + + +# 前言 + +## 编写目的 + +  本文档是《福建水务营收系统详细设计说明书》的前导文档,旨在从总体架构和概要设计的角度对系统进行全面的技术规划和设计。 + +**主要目的:** + +1. **总体架构规划**:从系统整体角度进行技术架构规划,为详细设计提供宏观指导 +2. **技术方案论证**:确定系统的技术选型、架构模式和实现策略 +3. **设计标准制定**:建立统一的技术标准、开发规范和质量要求 +4. **风险评估分析**:识别技术风险、制定应对策略 +5. **资源需求评估**:确定系统开发、部署所需的技术资源和基础设施 + +**预期读者:** + +- 系统架构师和技术负责人 +- 项目经理和技术管理人员 +- 详细设计和开发团队 +- 测试团队和运维团队 +- 甲方技术评审团队 + +## 背景 + +  福建水务营收系统是为满足福建省水投数字科技有限公司客户服务管理领域的业务需求而建设的信息化系统。系统以客户为核心和基础,实现客户全生命周期管理。 + +**建设背景:** + +  福建水投集团注册资本46亿元,在全省40多个县市区投资重大水利项目超过450亿元,拥有全级次子公司超过67家,职工人数超3500人。当前,集团正紧紧抓住城乡供水一体化建设的机遇,需要构建以客户为中心的数字化服务体系。 + +## 术语与缩略语 + +| **术语、缩写** | **解释** | +|---|---| +| SaaS | Software as a Service,软件即服务 | +| RBAC | Role-Based Access Control,基于角色的访问控制 | +| JWT | JSON Web Token,基于JSON的Web令牌 | +| OAuth2 | 开放授权标准 | +| RESTful | Representational State Transfer,表现层状态转化 | +| OpenAPI | 开放应用程序接口规范 | +| DDL | Data Definition Language,数据定义语言 | +| DML | Data Manipulation Language,数据操作语言 | +| IoT | Internet of Things,物联网 | +| CAS | Central Authentication Service,中央认证服务 | +| DevOps | Development和Operations的组合词,开发运维一体化 | +| 业务参数 | 业务参数配置 | +| 站点 | 用于划分用户所属管辖区域,站点可以进行多级管理 | +| 册本 | 又称抄表本或抄表簿,根据抄表线路规划,按排相邻的一些水表给某一个抄表员进行抄表 | +| 用户编号 | 为签定了供用水合同的正式用户分配的唯一识别号 | +| 售水量 | 抄收水量+查处水量±调整水量 | +| 当期应收水费 | 当期售水量乘以不同类别的水价(到户价)所得的金额 | +| 水表抄见率 | (当期应抄用户数-当期估表用户数)/当期应抄用户数×100% | + +## 参考资料 + +- GB/T 8556-2007 信息技术软件生存周期过程 +- GB/T 9385-2008 计算机软件需求规格说明规范 +- GB/T 8567-2006 计算机软件文档编制规范 +- 《RuoYi-Vue-Pro技术架构文档》 +- 《Spring Cloud微服务架构设计指南》 +- 《福建水务营收系统需求规格说明书》 +- `../04_Appendix/Archive/03_Design_Docs/营业收费管理系统-概要设计说明书20250912.md` + +## 历史来源对齐说明 + +本主文档已对齐 `../04_Appendix/Archive/03_Design_Docs/营业收费管理系统-概要设计说明书20250912.md` 中对当前正式设计仍有效的内容,主要包括: + +- 子系统拆分口径:`SYS-001 ~ SYS-010` 的职责边界、基础服务分层与跨系统协同关系。 +- 业务范围口径:营收、微网厅、工单、表务、报装、发票、支付结算、消息等范围定义。 +- 架构与集成口径:外部支付、银行、税控、消息、摄像表 AI 等外部协同边界。 +- 非功能口径:达梦数据库 8.0+、物理部署、可靠性、安全与扩展性方向。 + +以下内容仅保留在 Archive 中作为历史来源,不直接作为当前正式主文档口径: + +- 历史系统名称“营业收费管理系统”等旧标题写法。 +- 历史别名编码,如 `UP-SSO`、`REV-CUSTOM`、`WECHAT-*`。 +- 历史接口编号体系,如 `IF-S-*`、`IF-C-*`。 + +当前正式口径继续统一采用: + +- 系统名称:`福建水务营收系统` +- 模块编号:`UP-001`、`REV-001`、`CS-001`、`METER-001`、`INST-001` +- 接口编号:`IF-UP-*`、`IF-REV-*`、`IF-CS-*`、`IF-METER-*`、`IF-INST-*`、`IF-EXT-*` + + + +# 系统总体设计 + +## 任务概述 + +### 系统总体目标 + +  福建水务营收系统采用分层解耦与子系统化建设,形成"业务服务层 + 基础服务层"的整体架构: + +- 业务服务层:SYS-001 统一平台、SYS-002 营收业务系统、SYS-003 手机抄表APP、SYS-004 微网厅系统、SYS-005 工单管理系统、SYS-006 表务管理系统、SYS-007 报装业务系统 + +- 基础服务层:SYS-008 发票服务子系统(统一开票)、SYS-009 支付与银行结算子系统(统一聚合支付/退款/渠道适配/第三方支付平台/银行实时收费、代扣/托收签解约、批次与对账契约、加解密与支付回调,夜间批量代扣/完整对账结算按后续完善项管理)、SYS-010 消息服务子系统(统一短信/邮件/站内信/模板消息/微信通知/数科系统对接)、注册/配置中心、任务调度等基础服务 + +  通过系统的建设,实现福建省水投数字科技有限公司客户服务管理领域的业务流程梳理再造、组织架构的优化、管理制度的建设、绩效考核标准的建设。构建以客户为中心的一体化服务体系,将客户的所有信息进行有机的关联,方便企业对营收信息进行综合分析和管理,为客户提供更多、更便捷、更主动的个性化服务,提高客户服务的质量和客户满意度。 + +**系统整体架构特点:** + +- **统一平台**:提供单点登录、统一认证(SSO/OAuth2+CAS)、审计与监控、权限、组织、参数、多租户、字典等基础能力 +- **营收业务系统**:围绕客户、抄表、收费、账务、催缴、统计等核心营收流程,保留"客户服务模块群"对外服务能力,提供多租户的业务参数配置 +- **手机抄表APP**:移动化现场作业,支持离线;现场问题上报与工单接收由工单系统统一承载 +- **微网厅系统**:面向公众的自助服务门户,支持绑定、查询、缴费、发票查看、业务办理 +- **工单管理系统**:统一工单中心与流程引擎,打通营收/表务/报装/微网厅/APP的全场景工单 +- **表务管理系统**:设备档案、表务全生命周期管理 +- **报装业务系统**:覆盖报装申请、踏勘、施工、验收、通水与档案归档的端到端流程,支持调用泛微进行合同签订,电子签章,支持各租户自定义报装流程和表单定义 +- **发票服务子系统**(基础服务):统一开票网关与供应商适配(现优先对接航天,预留博思),回执与存证 +- **支付与银行对接子系统**(基础服务):统一支付/退款、银行实时收费、代扣/托收签解约、送盘/回盘/对账契约、加解密签名与第三方支付平台(微信、支付宝);夜间批量代扣和完整结算闭环按后续完善项管理 +- **消息服务子系统**(基础服务):统一短信/邮件/站内信/模板消息,下行推送与到达回执,供各业务子系统调用(如营收业务系统催缴),微信信息通知,对接数科已建系统通知(OA、智水擎,水投数科 app) + +### 功能范围 + +  本系统功能涵盖水务企业完整的营收业务流程,包括客户资料管理、抄表开账、营业收费、账务处理、催缴管理、发票管理(经SYS-008)、表务管理、报装业务、客户服务、工单管理,以及支付与银行结算(经SYS-009)等;还包含查询统计与报表打印功能。 + +#### SYS-001 统一平台 + +- 单点登录、统一认证(SSO/OAuth2+CAS)、审计与监控、权限、组织、参数、多租户、字典等基础能力 + +#### SYS-002 营收业务系统 + +- 营收核心:客户资料、抄表开账、营业收费、账务处理、催缴管理、统计分析、代收业务、多租户业务参数配置 +- 客户服务:账户绑定、信息查询、在线缴费(经SYS-009)、柜面扫码支付(经SYS-009)、电子发票(经SYS-008)、营业网点、业务办理 + +#### SYS-003 手机抄表APP + +- 移动作业:登录、首页搜索、采集任务、现场抄表、调用外部AI识别服务 +- 现场上报/工单接收:问题上报、工单接收与回填(经SYS-005) +- 数据同步与个人管理:任务下载/数据上传(离线支持)、个人信息与设置 + +#### SYS-004 微网厅系统 + +- 账户绑定、账单/用水查询、在线缴费(经SYS-009)、电子发票查看(经SYS-008)、营业网点、业务办理 + +#### SYS-005 工单管理系统 + +- 统一工单中心、流程引擎、监控预警、绩效统计,打通营收/表务/报装/微网厅/APP + +#### SYS-006 表务管理系统 + +- 设备档案、表务全生命周期管理 + +#### SYS-007 报装业务系统 + +- 报装流程(申请/踏勘/施工/验收/通水)、支持调用泛微进行合同签订,电子签章、各租户自定义报装流程和表单定义、工程管理(进度/资源/质量/安全)、档案管理(资料归档/留痕) + +#### SYS-008 发票服务子系统(基础服务) + +- 统一开票/作废与红冲/查询、供应商适配(航天优先、预留博思)、回执处理与存证 + +#### SYS-009 支付与银行结算子系统(基础服务) + +- 聚合支付/退款、渠道适配(微信/支付宝/银联聚合等)、第三方支付平台(微信、支付宝)、支付结果通知、银行代扣(送盘/回盘)、支持夜间进行批量代扣、对账文件处理、加解密/签名 +- 当前实现侧已确认聚合支付基础能力、银行欠费查询/缴费、`BankWithholding` 六条银行入口(客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询)、代扣/托收签约解约和后台资源管理具备证据;其中 `BankCollection` 平行链路、夜间批量代扣、完整对账与结算仍按部分实现或后续完善项管理 + +#### SYS-010 消息服务子系统(基础服务) + +- 统一短信/邮件/站内信/模板消息,下行推送与到达回执,供各业务子系统调用(如营收业务系统催缴) +- 微信信息通知,对接数科已建系统通知(OA、智水擎,水投数科 app) +- 邮件服务:邮件通知发送(经SYS-010) + +### 系统涉众与用户特点 + +**系统涉众**: + +  本系统主要涉及用户为各水务公司与系统相关的业务参与者、福建省水投数字科技有限公司研发运维团队。 + +**用户特点**: + +- **公司领导**:对信息化在企业生产经营管理活动中的积极作用有深刻认识,并具有前瞻视角。 + +- **公司管理层**:有丰富的企业管理经验,有良好的业务管理类系统使用经验。 + +- **系统管理人员**:具有本科以上教育背景,计算机操作熟练,具有良好的软件系统维护经验,主要维护系统的后台权限管理、人员管理、部门管理等功能。 + +- **操作人员**:部分用户已经使用过其他厂商提供的水务营收系统,部分用户对软件系统使用经验不足。 + +## 设计概述 + +### 总体约束 + +**技术约束**: + +- 采用现代化微服务架构,支持大规模并发访问 +- 支持多租户模式,满足集团化管理需求 +- 实现移动化办公,提高工作效率 +- 集成物联网技术,支持智能水表远程抄表 +- 适配国产化环境,确保系统安全可控 + +**性能约束**: + +- 系统并发用户数不低于200个 +- 移动设备同时登录系统的并发用户数不少于50个 +- 系统响应时间不超过3秒 +- 支持100万客户的业务量 +- 系统可用性达到99.5%以上 + +**安全约束**: + +- 系统满足国家信息安全等级保护要求 +- 支持数据加密存储和传输 +- 实现细粒度的权限控制 +- 提供完整的审计日志功能 + +### 系统依赖外部接口 + +  本系统需要与以下外部系统进行接口集成: + +| 接口类型 | 接口名称 | 功能描述 | 接口协议 | +|---------|---------|----------|----------| +| 金融支付 | 银行代扣接口 | 银行托收代扣缴费 | HTTPS | +| 金融支付 | 微信支付接口 | 微信在线支付 | HTTPS | +| 金融支付 | 支付宝支付接口 | 支付宝在线支付 | HTTPS | +| 通信服务 | 短信平台接口 | 短信通知发送 | HTTPS | +| 通信服务 | 邮件服务接口 | 邮件通知发送 | HTTPS/SMTP | +| 通信服务 | 微信模板消息接口 | 微信模板消息下发 | HTTPS | +| 物联网 | 集抄系统接口 | 智能水表数据采集 | TCP/HTTPS | +| 税务服务 | 电子发票接口 | 第三方发票开具 | HTTPS | +| 认证服务 | 身份认证接口 | 第三方身份验证 | HTTPS | +| 认证服务 | CAS单点登录 | 第三方身份验证 | HTTPS | +| 认证服务 | OAuth2.0单点登录 | 第三方身份验证 | HTTPS | +| 外部系统 | CA电子签章 | CA签发/验章/存证 | HTTPS | +| 外部系统 | 邮件服务 | 邮件服务 | HTTPS | +| 外部系统 | 摄像表AI接口 | 表AI识别服务 | HTTPS | + +### 设计方案概述 + +**架构设计方案**: + +  系统采用现代化的多层分布式架构,基于微服务设计思想,实现松耦合、高内聚的系统架构。整体架构分为表现层、网关层、业务服务层、基础服务层和数据层五个层次。 + +**技术选型方案**: + +- **后端技术栈**:Java 17+、Spring Boot 3.1+、Spring Cloud Gateway、MyBatis-Plus +- **前端技术栈**:Vue 3、Element Plus、TypeScript +- **数据库**:达梦数据库 8.0+(主从架构) +- **缓存**:Redis 6.0+(集群模式) +- **消息队列**:RabbitMQ 3.9+ +- **文件存储**:MinIO(分布式文件存储) +- **容器化**:基于Docker的容器化部署,使用Docker Compose进行容器编排,使用Kubernetes进行容器编排和调度。 +- **DevOps**:使用Jenkins进行自动化构建、部署和测试,使用Gitea进行代码管 + +**部署方案**: + +  采用容器化部署架构,支持多环境部署(开发、测试、生产),提供自动化部署脚本,支持弹性扩缩容。 + +## 系统架构设计 + +### 系统的逻辑架构设计 + +  系统采用现代化的多层分布式架构,基于微服务设计思想,实现松耦合、高内聚的系统架构。 + +#### 整体架构图 + +```mermaid +graph TB + %% 表现层 + subgraph "表现层" + ADMIN[Web管理端] + H5[微网厅H5] + APP[手机抄表APP] + end + + %% 网关层 + subgraph "网关层" + GATEWAY[API网关] + SSO[统一认证/SSO] + end + + %% 业务服务层 + subgraph "业务服务层" + UP[SYS-001 统一平台] + REV[SYS-002 营收业务系统] + WO[SYS-005 工单管理系统] + METER[SYS-006 表务管理系统] + INST[SYS-007 报装业务系统] + end + + %% 基础服务层 + subgraph "基础服务层" + INV[SYS-008 发票服务] + PAY[SYS-009 支付与银行结算] + MSG[SYS-010 消息服务] + MQ[RabbitMQ 消息队列] + FILE[MinIO 文件存储] + REDIS[Redis 缓存] + MON[监控/日志] + CONFIG[注册/配置中心] + SCHED[任务调度] + end + + %% 数据层 + subgraph "数据层" + DM[(达梦数据库集群)] + CACHE[(Redis集群)] + STORE[(MinIO集群)] + end + + %% 外部系统 + subgraph "外部系统" + EXT_CA[CA电子签章] + EXT_BANK[银行] + EXT_PSP[支付渠道 微信/支付宝/银联聚合] + EXT_INV[发票供应商 航天/博思] + EXT_SMS[短信平台] + EXT_MAIL[邮件服务] + EXT_IOT[集抄系统] + end + + %% 连接关系 + ADMIN --> GATEWAY + H5 --> GATEWAY + APP --> GATEWAY + GATEWAY --> SSO + GATEWAY --> UP + GATEWAY --> REV + GATEWAY --> WO + GATEWAY --> METER + GATEWAY --> INST + + REV --> INV + REV --> PAY + REV --> MQ + REV -.-> MSG + REV --> FILE + REV --> REDIS + + INST -.-> EXT_CA + + INV -.-> EXT_INV + MSG -.-> EXT_SMS + MSG -.-> EXT_MAIL + PAY -.-> EXT_BANK + PAY -.-> EXT_PSP + + %% 数据层连接 + UP --> CACHE + REV --> DM + WO --> DM + METER --> DM + INST --> DM + FILE --> STORE +``` + +#### 层级说明 + +**表现层(Presentation Layer)** + +- 负责用户交互和界面展示 +- 包含多种客户端形态:Web端、微网厅(微信、支付宝) +- 采用前后端分离架构,提高开发效率和用户体验 + +**网关层(Gateway Layer)** + +- 统一入口,负责请求路由和负载均衡 +- 集中处理认证授权、限流熔断、监控日志 +- 提供API版本管理和接口文档生成 + +**业务服务层(Business Service Layer)** + +- 核心业务逻辑处理层,包含七个子系统: + - **SYS-001 统一平台**:提供单点登录、统一认证(SSO/OAuth2+CAS)、审计与监控、权限、组织、参数、多租户、字典等基础能力 + - **SYS-002 营收业务系统**:营收核心与客户服务模块群 + - **SYS-003 手机抄表APP**:移动端现场作业、调用外部摄像表AI识别服务与数据同步 + - **SYS-004 微网厅系统**:面向客户的线上服务门户 + - **SYS-005 工单管理系统**:统一工单中心与流程引擎 + - **SYS-006 表务管理系统**:设备档案、表务全生命周期管理 + - **SYS-007 报装业务系统**:报装全流程与工程管理、合同签订与电子签章 +- 按业务域划分微服务,实现高内聚低耦合 +- 支持独立部署、扩缩容和技术栈选择 + +**基础服务层(Infrastructure Service Layer)** + +- 提供通用的技术服务能力 +- 包含权限、工作流、消息、文件、发票服务(统一开票能力)、银行对接服务(代扣/夜间批量代扣/对账/加解密)、第三方支付服务(聚合支付/退款)、消息服务(统一短信/邮件/站内信/模板消息)、注册/配置中心、任务调度等基础服务 +- 为业务服务提供统一的技术支撑 + +**数据层(Data Layer)** + +- 数据持久化和缓存层 +- 支持读写分离、分库分表、数据备份 +- 提供高性能、高可用的数据服务 + +**外部系统(External Systems)** + +- CA电子签章:用于报装资料签署、验章与存证(当前归属 `INST-002` 工程管理) +- 银行:托收代扣、回盘与对账(经SYS-009) +- 支付渠道:微信/支付宝/银联聚合等(经SYS-009) +- 发票供应商:航天/博思等税控平台(经SYS-008) +- 短信平台:通知与催缴短信发送(经SYS-010) +- 集抄系统:智能水表数据采集(远传/集中器) +- 邮件服务:邮件通知发送(经SYS-010) +- **摄像表AI系统(外部)**:基于计算机视觉的水表读数自动识别服务,通过API接口为手机抄表APP提供图像识别能力 + +### 系统数据流向图 + +```mermaid +flowchart TB + %% 分层横向排布,垂直贯通,允许直连线穿越模块 + subgraph L1["数据采集层"] + direction LR + A1[手机抄表APP/SYS-003] + A2[智能水表] + A3[管理后台/SYS-001] + A4[微网厅/SYS-004] + A5[外部系统] + end + + subgraph L2["接入层"] + direction LR + GW[API网关] + AUTH[统一平台SSO/SYS-001] + CLEAN[数据清洗] + MQ[消息队列] + CACHE_TMP[临时缓存] + end + + subgraph L3["业务层"] + direction LR + REV[营收系统/SYS-002] + WO[工单系统/SYS-005] + METER[表务系统/SYS-006] + INST[报装系统/SYS-007] + INV[发票服务/SYS-008] + PAY[支付与结算/SYS-009] + MSG[消息服务/SYS-010] + end + + subgraph L4["存储层"] + direction LR + DM_MASTER[达梦主库] + DM_SLAVE[达梦从库] + REDIS[Redis缓存] + MINIO[MinIO对象存储] + BACKUP[备份库] + end + + subgraph L5["数据服务层"] + direction LR + QRY[查询服务] + RPT[报表服务] + API[接口服务] + PUSH[推送服务] + end + + subgraph L6["展现层"] + direction LR + F1[管理后台] + F2[统计大屏] + F3[移动端] + F4[微网厅] + F5[第三方系统] + end + + %% 连接(精简且保持层间垂直分层,线可穿越模块) + A1 --> GW + A2 --> GW + A3 --> GW + A4 --> GW + A5 --> GW + + %% 相邻层连线:采集层 → 接入层 已在上方;以下为 接入层 → 业务层 + GW --> REV + GW --> WO + GW --> METER + GW --> INST + + MQ --> REV + MQ --> WO + MQ --> METER + MQ --> INST + + REV --> DM_MASTER + WO --> DM_MASTER + METER --> DM_MASTER + INST --> DM_MASTER + INV --> MINIO + MSG --> REDIS + %% 存储层内部链路省略,保持仅向下一层输出 + + DM_MASTER --> QRY + DM_MASTER --> RPT + DM_MASTER --> API + REDIS --> API + MINIO --> API + MSG --> PUSH + QRY --> F1 + RPT --> F2 + API --> F1 + API --> F3 + API --> F4 + API --> F5 + PUSH --> F3 + PUSH --> F4 +``` + +### 系统的物理架构设计 + +  系统采用分布式部署架构,通过多个服务器集群实现高可用和高性能,支持 DevOps 持续交付。 + +#### 物理部署图 + +```mermaid +graph TB + subgraph "DMZ区域" + subgraph "负载均衡集群" + LB1[Nginx 主
8核16G] + LB2[Nginx 备
8核16G] + WAF[Web应用防火墙] + end + end + + subgraph "应用服务区" + subgraph "Web服务集群" + WEB1[Web服务器1
8核32G] + WEB2[Web服务器2
8核32G] + end + + subgraph "应用服务集群" + APP1[应用服务器1
16核64G] + APP2[应用服务器2
16核64G] + end + + subgraph "中间件集群" + MQ1[消息队列1
8核16G] + MQ2[消息队列2
8核16G] + end + end + + subgraph "数据服务区" + subgraph "数据库集群" + DB1[达梦数据库主库
32核128G] + DB2[达梦数据库从库
32核128G] + DB3[达梦数据库备库
32核128G] + end + + subgraph "缓存集群" + REDIS1[Redis主节点
16核32G] + REDIS2[Redis从节点
16核32G] + REDIS3[Redis哨兵
8核16G] + end + + subgraph "文件存储集群" + FILE1[MinIO节点1
8核32G 10TB] + FILE2[MinIO节点2
8核32G 10TB] + FILE3[MinIO节点3
8核32G 10TB] + end + end + + subgraph "管理服务区" + MONITOR[监控服务器
Prometheus + Grafana
8核16G] + BACKUP[备份服务器
8核32G 20TB] + JUMP[跳板服务器
4核8G] + LOG[日志服务器
ELK Stack
16核32G] + end + + +``` + +#### 网络连接 + +```mermaid +graph TB + + Internet[互联网] -.->|HTTPS| DMZ[DMZ区域] + DMZ -.->|HTTP/RPC| APP[应用服务区] + APP -.->|数据访问| DATA[数据服务区] + MGMT[管理服务区] -.->|监控管理| APP + MGMT -.->|监控管理| DATA +``` + +#### 硬件配置规格 + +**DMZ区域配置** + +| 设备类型 | 配置规格 | 数量 | 主要作用 | +|---------|---------|------|----------| +| 负载均衡器 | 8核16G,双网卡 | 2台 | 负载均衡、高可用 | +| Web应用防火墙 | 硬件WAF设备 | 1台 | 安全防护 | + +**应用服务区配置** + +| 设备类型 | 配置规格 | 数量 | 主要作用 | +|---------|---------|------|----------| +| Web服务器 | 8核32G,1TB SSD | 2台 | 前端应用部署 | +| 应用服务器 | 32核128G,2TB SSD | 3台 | 后端服务部署 | +| 消息队列服务器 | 8核16G,1TB SSD | 2台 | 异步消息处理 | + +**数据服务区配置** + +| 设备类型 | 配置规格 | 数量 | 主要作用 | +|---------|---------|------|----------| +| 数据库服务器 | 32核128G,10TB SSD | 3台 | 主从备数据库 | +| 缓存服务器 | 16核32G,1TB SSD | 3台 | Redis集群 | +| 文件存储服务器 | 8核32G,10TB HDD | 3台 | 分布式文件存储 | + +**管理服务区配置** + +| 设备类型 | 配置规格 | 数量 | 主要作用 | +|---------|---------|------|----------| +| 监控服务器 | 8核16G,1TB SSD | 1台 | 系统监控 | +| 备份服务器 | 8核32G,20TB HDD | 1台 | 数据备份 | +| 跳板服务器 | 4核8G,500GB SSD | 1台 | 运维管理 | +| 日志服务器 | 16核32G,5TB SSD | 1台 | 日志收集分析 | + +#### 达梦数据库分布式架构 + +  系统采用达梦数据库分布式架构,支持高性能、高可用、高扩展性的数据存储服务。 + +```mermaid +graph TB + subgraph "达梦数据库分布式架构" + subgraph "协调节点" + CN1[协调节点1
Coordinator Node] + CN2[协调节点2
Coordinator Node] + end + + subgraph "数据节点组1" + DN1_1[数据节点1-主
Datanode Primary] + DN1_2[数据节点1-备
Datanode Standby] + DN1_1 -.->|主备同步| DN1_2 + end + + subgraph "数据节点组2" + DN2_1[数据节点2-主
Datanode Primary] + DN2_2[数据节点2-备
Datanode Standby] + DN2_1 -.->|主备同步| DN2_2 + end + + subgraph "GTM节点" + GTM[全局事务管理器
GTM Master] + GTM_S[GTM备节点
GTM Standby] + GTM -.->|备份| GTM_S + end + end + + %% 分布式架构调用关系 + CN1 -.->|分片路由
查询协调| DN1_1 + CN1 -.->|分片路由
查询协调| DN2_1 + CN2 -.->|分片路由
查询协调| DN1_1 + CN2 -.->|分片路由
查询协调| DN2_1 + CN1 -.->|事务管理
全局一致性| GTM + CN2 -.->|事务管理
全局一致性| GTM +``` + +#### 容器化部署架构 + +  系统采用基于Docker的容器化部署,使用Docker Compose进行容器编排,使用Kubernetes进行容器编排和调度,支持DevOps持续交付。 + +```mermaid +graph TB + subgraph "容器化部署架构" + subgraph "前端服务层" + WEB_CONTAINER[前端容器
Nginx + Vue3] + end + + subgraph "后端服务层" + APP_CONTAINER[后端容器
Spring Boot] + end + + subgraph "数据存储层" + DB_CONTAINER[数据库容器
达梦数据库] + CACHE_CONTAINER[缓存容器
Redis] + FILE_CONTAINER[文件存储容器
MinIO] + end + + subgraph "监控服务层" + MONITOR_CONTAINER[监控容器
Prometheus + Grafana] + LOG_CONTAINER[日志容器
ELK Stack] + end + end + + %% 容器服务调用关系 + WEB_CONTAINER -.->|API请求
静态资源| APP_CONTAINER + APP_CONTAINER -.->|数据操作| DB_CONTAINER + APP_CONTAINER -.->|缓存访问| CACHE_CONTAINER + APP_CONTAINER -.->|文件存储| FILE_CONTAINER + APP_CONTAINER -.->|监控数据| MONITOR_CONTAINER + APP_CONTAINER -.->|日志数据| LOG_CONTAINER +``` + +## 子系统定义 + +### 子系统列表 + +| 子系统编号 | 子系统名称(标识) | 功能描述 | 开发方式 | +|---|---|---|---| +| SYS-001 | 统一平台 | 单点登录、统一认证(SSO/OAuth2+CAS)、审计与监控、权限、组织、参数、多租户、字典等基础能力 | 自行开发 | +| SYS-002 | 营收业务系统 | 客户管理、抄表开账、营业收费、账务处理、发票管理、催缴管理、统计分析、代收业务、客户服务、业务参数配置 | 自行开发 | +| SYS-003 | 手机抄表APP | 移动端抄表、调用外部AI识别服务、现场作业、数据同步、离线支持 | 自行开发 | +| SYS-004 | 微网厅系统 | 微信公众号平台、账户绑定、在线缴费、信息查询、业务办理、网点服务 | 自行开发 | +| SYS-005 | 工单管理系统 | 统一工单中心、工单流程引擎、监控预警、绩效统计 | 自行开发 | +| SYS-006 | 表务管理系统 | 设备档案、表务全生命周期管理 | 自行开发 | +| SYS-007 | 报装业务系统 | 报装流程管理、合同签订与电子签章、工程管理、档案管理 | 自行开发 | +| SYS-008 | 发票服务子系统 | 统一开票网关、供应商适配器(优先对接航天)、回执处理与存证 | 自行开发 | +| SYS-009 | 支付与银行结算子系统 | 聚合支付/退款、渠道适配(微信/支付宝/银联)、支付通知、银行实时收费、代扣/托收签解约、送盘/回盘/对账契约、加解密签名;夜间批量代扣与完整结算闭环按后续完善项管理 | 自行开发 | +| SYS-010 | 消息服务子系统 | 短信/邮件/站内信模板与发送、回执查询、批量推送 | 自行开发 | + +### 子系统间关系 + +#### 子系统调用关系图 + +```mermaid +--- +title: 子系统调用关系图 +--- +graph TB + %%{ + run: { + "flowchart": { + + "curve": "basis" + } + "sequence": { + "curve": "basis" + } + + } + }%% + + UP[ 【SYS-001 统一平台】
单点登录
统一认证SSO/OAuth2+CAS
审计监控
权限、组织
参数、多租户
字典管理] + REV_CORE[【SYS-002 营收业务子系统-营收核心模块群】
客户管理
抄表开账
营业收费
账务处理
发票催缴
统计代收
业务参数配置] + CS_MOD[【SYS-002 营收业务子系统-客户服务模块群】
账户绑定管理
信息查询服务
在线缴费服务
业务办理服务] + + + + APP[【SYS-003 手机抄表APP】
移动抄表
调用外部AI服务
现场作业
数据同步
离线支持] + + WECHAT[【SYS-004 微网厅子系统】
账户绑定管理
信息查询服务
在线缴费服务
业务办理服务] + + WO_CENTER[【SYS-005 工单管理子系统】
统一工单中心
创建/派发/处理/验收
监控预警] + + + METER_SYS[【SYS-006 表务管理子系统】
设备档案
表务全生命周期管理] + + + INSTALL_SYS[【SYS-007 报装业务子系统】
报装流程
合同签订与电子签章
工程管理
档案管理] + + PAY_SYS[【SYS-009 支付与银行结算子系统】
聚合支付/退款/回调
渠道适配/代扣/对账/加解密] + + INVOICE_SYS[【SYS-008 发票服务子系统】
统一开票网关
供应商适配器
回执/存证] + + + + + MSG_SYS[【SYS-010 消息服务子系统】
统一短信/邮件/推送
模板与回执] + + + %% 统一平台权限管理 + UP -.->|用户认证/权限| REV_CORE + UP -.->|用户认证/权限| CS_MOD + UP -.->|用户认证/权限| APP + UP -.->|用户认证/权限| WECHAT + UP -.->|用户认证/权限| WO_CENTER + UP -.->|用户认证/权限| METER_SYS + UP -.->|用户认证/权限| INSTALL_SYS + + %% 系统间协作 + REV_CORE -.->|库存状态/换表结果| METER_SYS + REV_CORE -.->|支付/退款/代扣/对账| PAY_SYS + REV_CORE -.->|立户/工程结果| INSTALL_SYS + REV_CORE -.->|开票申请/作废/红冲| INVOICE_SYS + REV_CORE -.->|业务异常/流程触发| WO_CENTER + CS_MOD -.->|客户申请/服务工单| WO_CENTER + + WO_CENTER -.->|换表派发| METER_SYS + WO_CENTER -.->|报装派发| INSTALL_SYS + WO_CENTER -.->|处理结果回填| REV_CORE + WO_CENTER -.->|结果通知| CS_MOD + + %% 手机APP与营收业务系统协作关系 + APP -.->|抄表数据/收费数据| REV_CORE + APP -.->|现场工单/问题上报| WO_CENTER + WO_CENTER -.->|工单派发/任务分配| APP + REV_CORE -.->|抄表任务/客户信息| APP + + %% 微网厅与营收业务系统协作关系 + WECHAT -.->|账单查询/在线缴费| REV_CORE + WECHAT -.->|业务申请/服务工单| WO_CENTER + REV_CORE -.->|账单信息/缴费状态| WECHAT + INVOICE_SYS -.->|电子发票链接/推送| WECHAT + MSG_SYS -.->|短信/邮件/推送| WECHAT + REV_CORE -.->|推送| MSG_SYS + WO_CENTER -.->|推送| MSG_SYS + CS_MOD -.->|推送| MSG_SYS + METER_SYS -.->|推送| MSG_SYS + INSTALL_SYS -.->|推送| MSG_SYS + INVOICE_SYS -.->|推送| MSG_SYS + PAY_SYS -.->|推送| MSG_SYS + + WO_CENTER -.->|办理进度/结果通知| WECHAT + + %% 样式定义 + classDef coreSystem fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 + classDef mobileSystem fill:#e8f5e8,stroke:#388e3c,stroke-width:3px,color:#000 + classDef wechatSystem fill:#f3e5f5,stroke:#9c27b0,stroke-width:3px,color:#000 + classDef platform fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class REV_CORE,CS_MOD coreSystem + class APP mobileSystem + class WECHAT wechatSystem + class UP platform + class WO_CENTER,METER_SYS,INSTALL_SYS coreSystem +``` + +#### 主要接口定义 + +**统一平台对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-UP-001 | OAuth2认证接口 | 基于OAuth2.0的统一认证服务 | 所有子系统 | HTTP/REST | 客户端凭证、授权类型、作用域 | 访问令牌、刷新令牌、过期时间 | +| IF-UP-002 | 组织架构接口 | 获取部门和员工组织信息 | 营收/工单/表务系统 | HTTP/REST | 组织ID、查询层级、用户权限 | 组织树结构、员工信息、权限范围 | +| IF-UP-003 | 权限验证接口 | 验证用户操作权限和资源访问 | 所有子系统 | HTTP/REST | 用户Token、操作资源、权限类型 | 验证结果、权限详情、有效期限 | +| IF-UP-004 | 数据字典接口 | 提供系统基础数据字典服务 | 所有子系统 | HTTP/REST | 字典类型、字典编码、租户ID | 字典数据、层级关系、多语言支持 | +| IF-UP-005 | 多租户管理接口 | 多租户数据隔离和权限管理 | 所有子系统 | HTTP/REST | 租户ID、操作类型、数据范围 | 租户配置、数据权限、隔离策略 | + +**营收业务系统对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-REV-001 | 客户信息查询接口 | 查询客户档案、账户状态、联系人与水表绑定关系 | 柜台/客户渠道/工单 | HTTPS REST | 客户ID、客户编号、手机号、查询类型 | 客户档案、账户信息、联系人列表、水表绑定关系 | +| IF-REV-004 | 抄表数据提交接口 | 提交人工或远传抄表数据并触发校验 | 手机抄表APP/集抄系统 | HTTPS REST | 抄表任务ID、水表ID、读数、图片证据、GPS位置 | 上传结果、校验状态、异常标记 | +| IF-REV-005 | 账单生成接口 | 根据抄表结果、水价模板和费用组成生成账单 | 开账任务/批量任务 | HTTPS REST | 抄表批次、账期、客户范围、应收日期 | 账单结果、失败清单、生成汇总 | +| IF-REV-006 | 缴费处理接口 | 创建收费记录并核销账单 | 柜台/线上渠道 | HTTPS REST | 客户ID、账单ID列表、支付方式、实收金额 | 收费结果、核销状态、交易流水 | +| IF-REV-008 | 发票申请接口 | 发起电子发票申请并接收票据状态回写 | 柜台/客户渠道 | HTTPS REST | 客户ID、账单ID列表、开票抬头、税号、邮箱 | 发票申请结果、票据状态、下载地址 | +| IF-REV-011 | 银行代收协同接口 | 发起代扣、回盘、对账、结算协同 | 银行代收模块/SYS-009 | HTTPS REST / 文件交换 | 批次号、渠道编码、账期、账单明细 | 批次状态、回盘结果、对账差异、结算结果 | +| IF-REV-012 | 业务参数配置接口 | 查询和维护价格模板、优惠方案、业务参数配置 | 管理后台/参数管理端 | HTTPS REST | 参数分类、模板编码、站点范围 | 参数明细、模板信息、更新结果 | +| IF-CS-001 | 账户绑定接口 | 绑定、解绑、切换默认客户 | 微信/支付宝/微网厅 | HTTPS REST | 渠道用户标识、客户编号、身份校验信息 | 绑定结果、默认客户信息、绑定关系 | +| IF-CS-002 | 历史账单查询接口 | 查询账单、欠费、用水历史、缴费记录 | 客户端 | HTTPS REST | 客户ID、账期范围、查询类型 | 账单列表、欠费金额、用水趋势、缴费记录 | +| IF-CS-003 | 在线支付下单接口 | 创建微信/支付宝线上支付订单 | 客户端 | HTTPS REST | 客户ID、账单ID列表、支付渠道、支付金额 | 订单号、支付二维码/预支付信息、订单状态 | +| IF-CS-004 | 发票申请接口 | 提交电子发票申请、查询发票状态 | 客户端 | HTTPS REST | 缴费订单号、发票抬头、邮箱/手机号 | 发票状态、发票链接、申请结果 | +| IF-CS-005 | 网点与业务办理接口 | 查询营业网点、预约信息、可办事项 | 客户端 | HTTPS REST | 行政区划、关键字、业务类型 | 网点列表、营业时间、可办业务、预约信息 | +| IF-CS-006 | 业务办理进度接口 | 提交业务申请、查询办理进度与附件 | 客户端 | HTTPS REST | 申请类型、客户资料、附件清单、申请单号 | 受理结果、流程状态、进度轨迹、补件要求 | +| IF-CS-007 | 柜面扫码支付接口 | 创建柜面扫码支付订单并回写结果 | 柜台终端/营业前台 | HTTPS REST | 柜台编号、账单ID列表、订单金额、支付渠道 | 订单号、支付状态、回写结果 | + +**手机抄表APP对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-MOBILE-001 | 任务下载接口 | 下载抄表任务与客户信息 | 手机抄表APP | HTTP/REST | 抄表员ID、任务日期范围 | 任务列表、客户信息、水表信息 | +| IF-MOBILE-002 | 抄表数据上传接口 | 上传抄表数据与现场图片 | 手机抄表APP | HTTP/REST | 抄表记录、现场图片、GPS位置 | 上传状态、数据校验结果 | +| IF-MOBILE-003 | 工单接收接口 | 接收工单任务 | 工单管理系统 | HTTP/REST | 工单ID、工单类型、派发信息 | 接收确认、预计处理时间 | +| IF-MOBILE-004 | 工单回填接口 | 回填处理结果与附件 | 手机抄表APP | HTTP/REST | 工单ID、处理结果、现场图片 | 回填状态、审核结果 | +| IF-MOBILE-005 | 离线同步接口 | 离线数据同步 | 手机抄表APP | HTTP/REST | 离线数据包、时间戳 | 同步状态、冲突处理结果 | + +**微网厅系统对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-WECHAT-001 | 微信授权登录接口 | 通过微信OAuth2.0实现用户授权登录 | 微网厅系统 | HTTP/REST | 微信授权码、AppID、AppSecret | 用户OpenID、访问令牌、用户基本信息 | +| IF-WECHAT-002 | 微信支付接口 | 调用微信支付完成在线缴费 | 微网厅系统 | HTTP/REST | 订单信息、支付金额、用户OpenID | 预支付交易会话标识、支付结果 | +| IF-WECHAT-005 | 客户信息查询接口 | 查询绑定客户的基本信息 | 微网厅系统 | HTTP/REST | 客户编号/手机号/OpenID | 客户详细信息、绑定状态 | +| IF-WECHAT-006 | 账单信息查询接口 | 查询客户账单和欠费信息 | 微网厅系统 | HTTP/REST | 客户编号、查询月份范围 | 账单明细、欠费金额、阶梯用量 | +| IF-WECHAT-007 | 缴费处理接口 | 处理微信端发起的缴费业务 | 微网厅系统 | HTTP/REST | 客户编号、缴费金额、支付方式 | 缴费订单号、支付状态、发票信息 | +| IF-WECHAT-008 | 业务申请提交接口 | 提交报装、过户等业务申请 | 微网厅系统 | HTTP/REST | 申请类型、客户资料、申请材料 | 申请单号、预审结果、处理时限 | +| IF-WECHAT-009 | 电子发票申请接口 | 申请开具电子发票 | 微网厅系统 | HTTP/REST | 缴费订单号、发票抬头信息 | 电子发票PDF、发票代码和号码 | +| IF-WECHAT-011 | 账户绑定验证接口 | 验证客户身份并绑定微信账户 | 微网厅系统 | HTTP/REST | 客户编号、身份证号、手机号码 | 绑定验证结果、绑定关系ID | + +**工单管理系统对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-WO-001 | 工单创建接口 | 创建各类业务工单 | 营收/表务/报装/微网厅/APP | HTTP/REST | 工单类型、客户信息、问题描述、紧急程度 | 工单编号、预计处理时间、派发状态 | +| IF-WO-002 | 工单派发接口 | 向处理人/APP派发任务 | 工单管理系统 | HTTP/REST | 工单ID、处理人员、预期完成时间 | 派发结果、接收确认状态 | +| IF-WO-003 | 工单回填接口 | 回填处理结果与附件 | APP/各业务系统 | HTTP/REST | 工单ID、处理结果、现场图片、完成时间 | 回填状态、审核结果、客户满意度 | +| IF-WO-004 | 工单查询接口 | 查询工单状态和处理轨迹 | 各业务系统/客户端 | HTTP/REST | 工单编号/客户编号、查询条件 | 工单状态、处理进度、历史轨迹 | + +**表务管理系统对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-METER-001 | 库存查询接口 | 查询仓库库存状态和预警信息 | 工单/营收/报装系统 | HTTP/REST | 仓库编号、水表型号、库存状态 | 库存明细、预警状态、可用数量 | +| IF-METER-002 | 领用出库接口 | 支持换表/施工水表领用出库 | 工单管理系统 | HTTP/REST | 领用单号、水表型号、领用数量、领用人 | 出库状态、库存余量、领用凭证 | +| IF-METER-003 | 档案查询接口 | 查询水表设备档案信息 | 营收/工单/报装系统 | HTTP/REST | 水表编号、客户编号、查询类型 | 设备档案、安装历史、维修记录 | + +**报装业务系统对外接口(SYS-007)** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-INST-001 | 报装申请接口 | 提交报装申请信息与材料 | 微网厅/营收系统 | HTTP/REST | 申请人信息、用水地址、申请材料、联系方式 | 申请单号、预审结果、处理时限 | +| IF-INST-002 | 踏勘派工接口 | 现场踏勘任务派发 | 工单管理系统 | HTTP/REST | 报装单号、踏勘要求、预约时间 | 派工结果、踏勘人员、预计完成时间 | +| IF-INST-003 | 签章接口 | 调用CA系统进行电子签章 | CA电子签章系统 | HTTP/REST | 合同文档、签章类型、签章方信息 | 签章状态、签章文档、存证信息 | +| IF-INST-004 | 签章回执接口 | 接收CA系统签章完成回执 | CA电子签章系统 | HTTP/REST | 签章任务ID、签章结果、时间戳 | 接收确认、存档状态 | +| IF-INST-006 | 验收通水接口 | 验收合格并开通供水 | 营收业务系统 | HTTP/REST | 报装单号、验收结果、水表信息 | 开户结果、客户编号、通水状态 | + +**发票服务子系统对外接口** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-INV-001 | 统一开票接口 | 统一受理电子发票开具请求 | 营收业务系统/微网厅 | HTTP/REST | 开票信息、购买方信息、商品明细、税额 | 发票申请ID、开票状态、预计完成时间 | +| IF-INV-002 | 作废红冲接口 | 发票作废和红字发票处理 | 营收业务系统 | HTTP/REST | 原发票号码、作废/红冲原因、操作类型 | 处理结果、新发票信息、作废状态 | +| IF-INV-003 | 发票查询接口 | 查询发票状态和下载链接 | 营收系统/微网厅/客户端 | HTTP/REST | 发票代码、发票号码、查询类型 | 发票状态、PDF下载链接、发票详情 | +| IF-INV-004 | 回执推送接口 | 接收供应商发票处理回执 | 航天信息/博思等供应商 | HTTP/REST | 回执ID、处理结果、发票文件、时间戳 | 接收确认、存储状态、通知结果 | + +**支付与银行结算子系统对外接口(SYS-009)** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-PAY-001 | 统一支付下单接口 | 统一处理各渠道支付下单请求 | 营收系统/微网厅 | HTTP/REST | 订单信息、支付方式、支付金额、用户标识 | 预支付订单号、支付参数、二维码 | +| IF-PAY-002 | 统一关单接口 | 订单关闭和撤销处理 | 营收系统/微网厅 | HTTP/REST | 订单号、关闭原因、操作类型 | 关单状态、退款信息、处理结果 | +| IF-PAY-003 | 统一退款接口 | 原路退款和部分退款处理 | 营收系统/微网厅 | HTTP/REST | 原订单号、退款金额、退款原因 | 退款单号、退款状态、预计到账时间 | +| IF-PAY-004 | 支付回调接口 | 接收渠道支付结果回调 | 微信/支付宝/银联 | HTTP/REST | 回调数据、签名、时间戳 | 处理确认、业务更新状态 | +| IF-PAY-005 | 批量代扣送盘接口 | 银行批量代扣文件发送 | 营收业务系统 | HTTP/REST/SFTP | 代扣清单、客户签约信息、扣款金额 | 送盘状态、批次号、预计处理时间 | +| IF-PAY-006 | 批量代扣回盘接口 | 银行代扣结果回盘处理 | 银行系统 | HTTP/REST/SFTP | 回盘文件、处理结果、失败原因 | 解析结果、状态更新、异常处理 | +| IF-PAY-007 | 批量对账文件接口 | 银行对账文件处理分析 | 银行系统/营收系统 | HTTP/REST/SFTP | 对账文件、对账日期、差异规则 | 对账结果、差异明细、调整建议 | + +**消息服务子系统对外接口(SYS-010)** + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-MSG-001 | 短信发送接口 | 发送短信通知消息 | 营收/微网厅/工单系统 | HTTP/REST | 手机号、消息内容、模板ID、发送时间 | 发送状态、消息ID、预计到达时间 | +| IF-MSG-002 | 邮件发送接口 | 发送邮件通知消息 | 营收/工单/报装系统 | HTTP/REST | 邮箱地址、邮件主题、邮件内容、附件 | 发送状态、邮件ID、送达确认 | +| IF-MSG-003 | 站内信接口 | 发送系统站内消息 | 各业务系统 | HTTP/REST | 用户ID、消息标题、消息内容、消息类型 | 发送结果、消息状态、已读状态 | +| IF-MSG-005 | 外部系统对接接口 | 对接OA/智水擎等外部系统 | OA系统/智水擎/水投数科APP | HTTP/REST | 系统标识、消息类型、接收用户、消息内容 | 对接状态、消息分发结果 | + + + + +# 子系统1设计: 统一平台 + +## 任务概述 + +  统一平台是整个福建水务营收系统的基础支撑平台,负责为所有子系统提供统一的用户认证、权限管理、组织管理等基础服务。 + +**设计目标:** + +- 实现单点登录,用户一次认证即可访问所有授权的子系统 +- 提供统一的用户和权限管理,确保系统安全性 +- 支持多租户模式,满足集团化管理需求 +- 提供系统监控和运维支撑功能 + +**功能范围:** + +- **单点登录**:提供统一的登录入口,支持多种认证方式 +- **用户管理**:管理系统用户的基本信息、状态和权限 +- **角色管理**:定义和管理系统角色,实现基于角色的权限控制 +- **权限管理**:细粒度的功能权限和数据权限控制 +- **组织管理**:管理企业的部门结构和人员归属 +- **租户管理**:支持多租户模式,实现数据隔离和个性化配置 +- **系统监控**:实时监控系统运行状态和用户在线情况 + +## 设计概述 + +### 总体约束 + +**技术约束:** + +- 基于Spring Security + OAuth2.0+CAS协议实现认证授权 +- 采用JWT令牌实现无状态认证 +- 支持Redis分布式会话存储 +- 遵循RBAC权限控制模型 + +**性能约束:** + +- 用户认证响应时间≤1秒 +- 权限验证响应时间≤500ms +- 支持并发用户数≥200个 +- 系统可用性≥99.5% + +**安全约束:** + +- 支持密码复杂度策略 +- 提供登录安全控制(失败锁定、验证码等) +- 敏感数据加密存储 +- 完整的操作审计日志 + +### 子系统外部接口 + +**接口设计说明:** + +  统一平台为整个系统提供基础认证、权限、组织、字典等服务能力,采用OAuth2.0+CAS统一认证机制,支持多租户数据隔离和权限管理,为各业务子系统提供标准化的基础服务接口。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-UP-001 | 用户认证接口 | 用户登录认证和JWT令牌生成 | 所有业务子系统 | HTTP/REST | 用户名、密码、机构编号、验证码 | JWT令牌、用户信息、权限范围 | +| IF-UP-002 | 权限验证接口 | 验证用户访问资源权限 | 所有业务子系统 | HTTP/REST | JWT令牌、资源URL、操作类型 | 权限验证结果、资源访问权限 | +| IF-UP-003 | 用户信息接口 | 获取用户基本信息 | 营收/工单/表务系统 | HTTP/REST | 用户ID、查询范围 | 用户详细信息、角色权限 | +| IF-UP-004 | 组织架构接口 | 获取部门和员工组织信息 | 营收/工单/表务系统 | HTTP/REST | 部门ID、查询层级 | 部门信息、员工列表、权限范围 | +| IF-UP-005 | 实时通知接口 | 推送系统通知消息 | 所有业务子系统 | WebSocket | 消息内容、接收用户、消息类型 | 推送结果、送达状态 | + +### 设计方案概述 + +**架构设计:** + +  统一平台采用基于Spring Boot的微服务架构,使用Spring Security + OAuth2.0+CAS协议实现认证授权,Redis存储会话和缓存数据,支持水平扩展。 + +**技术选型:** + +- **认证授权**:Spring Security + OAuth2.0 + CAS协议 + JWT +- **缓存存储**:Redis 6.0+(分布式缓存) +- **数据库**:达梦数据库 8.0+ +- **消息队列**:RabbitMQ(异步通知) +- **监控日志**:Prometheus + Grafana + ELK + +## 子系统架构设计 + +  统一平台采用分层架构设计,从下至上分为数据层、业务层、服务层和应用层,确保系统的可维护性和可扩展性。 + +```mermaid +graph TB + subgraph "统一平台架构" + subgraph "应用层" + A1[Web管理界面] + A2[移动端界面] + A3[API网关] + end + + subgraph "服务层" + B1[认证服务] + B2[权限服务] + B3[用户服务] + B4[组织服务] + B5[监控服务] + end + + subgraph "业务层" + C1[登录业务] + C2[权限业务] + C3[用户管理业务] + C4[组织管理业务] + C5[系统监控业务] + end + + subgraph "数据层" + D1[(用户数据库)] + D2[(权限数据库)] + D3[(日志数据库)] + D4[Redis缓存] + end + end + + A1 --> B1 + A2 --> B1 + A3 --> B2 + B1 --> C1 + B2 --> C2 + B3 --> C3 + B4 --> C4 + B5 --> C5 + C1 --> D1 + C2 --> D2 + C3 --> D1 + C4 --> D1 + C5 --> D3 + C1 --> D4 + C2 --> D4 +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称(标识) | 功能描述 | 开发方式 | +|---|---|---|---| +| UP-001 | 单点登录模块 | 用户认证、授权管理、多种登录方式支持 | 自行开发 | +| UP-002 | 系统管理模块 | 用户、角色、部门、菜单等基础数据管理 | 自行开发 | +| UP-003 | 权限控制模块 | RBAC权限模型、菜单权限、数据权限 | 自行开发 | +| UP-004 | 租户管理模块 | 多租户数据隔离、租户配置管理 | 自行开发 | +| UP-005 | 系统监控模块 | 在线用户监控、系统性能监控、操作日志 | 自行开发 | + +### 模块间关系 + +**权限管理功能群:** + +  权限管理功能群是统一平台的核心,实现了完整的RBAC权限控制模型。 + +```mermaid +graph TB + subgraph "权限管理功能群" + A[UP-002 系统管理模块-用户管理功能] + B[UP-003 系统管理模块-角色管理功能] + C[UP-003 系统管理模块-菜单管理功能] + D[UP-004 系统管理模块-部门管理功能] + E[UP-005 权限控制模块-权限控制功能] + end + + A -->|用户角色关联| B + B -->|角色权限关联| C + A -->|用户部门关联| D + E -->|权限验证| A + E -->|权限验证| B + E -->|权限验证| C + + A -.->|数据权限| D + B -.->|功能权限| C +``` + +**功能群说明:** + +- 用户管理模块负责用户基本信息维护 +- 角色管理模块定义系统角色和权限 +- 菜单管理模块配置系统功能菜单 +- 部门管理模块维护组织架构 +- 权限控制模块实现统一的权限验证 + +**系统监控功能群:** + +  系统监控功能群提供对整个系统运行状态的监控和管理。 + +```mermaid +graph TB + subgraph "系统监控功能群" + F[在线用户监控] + G[系统性能监控] + H[操作日志管理] + I[系统配置管理] + end + + F -->|用户行为| H + G -->|性能数据| H + I -->|配置变更| H + + F -.->|实时监控| G + H -.->|日志分析| G +``` + +### 模块描述 + +#### UP-001: 单点登录 + +**功能描述:** + +  单点登录模块基于OAuth2.0+CAS协议实现,提供统一的用户认证入口,支持多种登录方式和安全策略。该模块是整个系统安全的第一道防线,确保只有合法用户才能访问系统。 + +**主要功能:** + +1. **用户名密码登录**:传统的用户名密码认证方式 +2. **手机号短信登录**:基于短信验证码的快速登录 +3. **第三方登录**:支持微信、支付宝等第三方平台登录 +4. **OAuth2.0单点登录**:基于OAuth2.0+CAS协议,一次登录,多系统访问 +5. **自动登录**:支持"记住我"功能 +6. **安全控制**:密码策略、登录限制、验证码等 + +**技术实现:** + +- 基于JWT令牌的无状态认证 +- Redis存储用户会话信息 +- Spring Security实现安全控制 +- 支持多种加密算法 + +#### UP-002: 系统管理 + +**功能描述:** + +  系统管理模块提供系统基础数据的维护功能,包括用户、角色、部门、菜单等核心数据的管理。 + +**主要功能:** + +1. **用户管理**:用户信息的增删改查、状态管理、权限分配 +2. **角色管理**:角色定义、权限分配、角色用户关联 +3. **部门管理**:组织架构的维护、层级关系管理 +4. **菜单管理**:系统菜单的配置、权限关联 +5. **字典管理**:系统字典数据的维护 +6. **参数管理**:系统参数的配置和管理 + +**业务规则:** + +- 用户名全局唯一 +- 手机号不能重复 +- 超级管理员不能被删除 +- 部门删除前需要先移除下属用户 + +#### UP-003: 权限控制 + +**功能描述:** + +  权限控制模块基于"主库+租户库"的多数据库架构,实现RBAC(基于角色的访问控制)模型的权限管理。通过统一的权限控制中心与租户独立的权限数据相结合,提供细粒度的功能权限和数据权限控制,同时支持跨租户用户授权的复杂场景。 + +**多库权限架构设计:** + +```mermaid +graph TB + subgraph "主库(Master Database)" + MP[统一平台权限] + MT[租户管理权限] + MU[跨租户用户关系] + MA[全局审计日志] + end + + subgraph "租户库A(Tenant-A Database)" + TA_U[用户表 system_user] + TA_R[角色表 system_role] + TA_UR[用户角色关系 system_user_role] + TA_RM[角色菜单权限 system_role_menu] + TA_D[部门表 system_dept] + end + + subgraph "租户库B(Tenant-B Database)" + TB_U[用户表 system_user] + TB_R[角色表 system_role] + TB_UR[用户角色关系 system_user_role] + TB_RM[角色菜单权限 system_role_menu] + TB_D[部门表 system_dept] + end + + subgraph "权限控制引擎" + PE[权限验证引擎] + PC[权限缓存层] + PR[权限路由器] + end + + MP -.->|统一平台管理| PE + MT -.->|租户权限元数据| PE + MU -.->|跨租户关系| PE + + PE -->|权限路由| PR + PR -->|租户A权限| TA_U + PR -->|租户B权限| TB_U + + PE --> PC + PC -.->|缓存同步| TA_R + PC -.->|缓存同步| TB_R +``` + +**主要功能:** + +1. **多库权限统一管理** + - **主库权限管理**:统一平台功能权限、租户管理权限、系统级别权限 + - **租户库权限管理**:每个租户独立的用户、角色、权限数据 + - **权限数据路由**:根据用户所属租户动态路由到对应的租户数据库 + - **跨库权限验证**:支持跨租户用户的权限验证与切换 + +2. **RBAC权限模型实现** + - **功能权限控制**:基于菜单和按钮的功能权限控制 + - **数据权限控制**:基于组织架构的数据权限隔离 + - **角色继承体系**:支持角色间的权限继承关系 + - **动态权限分配**:支持运行时动态调整用户权限 + +3. **多租户权限隔离** + - **租户级别隔离**:每个租户的权限数据完全物理隔离 + - **用户多租户授权**:用户可在多个租户中拥有不同角色和权限 + - **权限继承与覆盖**:支持从上级租户继承权限并允许覆盖 + - **租户间权限依赖**:处理母子公司间的权限依赖关系 + +4. **接口权限验证** + - **API接口级别权限验证**:每个接口请求都进行权限校验 + - **租户上下文识别**:自动识别当前用户的租户上下文 + - **动态数据源切换**:根据权限验证结果切换到正确的租户数据库 + - **权限异常处理**:统一的权限异常处理和降级策略 + +5. **权限缓存管理** + - **多级缓存策略**:主库+租户库的分层缓存 + - **权限数据实时更新**:权限变更时的缓存实时同步 + - **缓存预热机制**:系统启动时预加载热点权限数据 + - **缓存失效策略**:精确的缓存失效和更新机制 + +**多库数据模型:** + +**主库权限数据结构:** + +**1. 租户与用户关系表(tenant_user_relation)** +- **表功能**:管理跨租户用户授权关系,记录用户在不同租户中的授权状态 +- **核心字段**: + - 主键标识:唯一标识每条授权关系 + - 租户标识:指向被授权的目标租户 + - 用户标识:指向被授权的用户 + - 授权类型:区分所有者(owner)、成员(member)、访客(guest)三种类型 + - 授权人标识:记录执行授权操作的管理员 + - 授权时间:记录授权建立的时间戳 + - 过期时间:设置授权的有效期限,支持临时访问 + - 状态标识:标记授权关系是否有效,支持动态启用/禁用 + +**2. 全局权限配置表(global_permission)** +- **表功能**:维护系统级别的权限定义,为各租户提供统一的权限基准 +- **核心字段**: + - 主键标识:唯一标识每个权限配置 + - 权限代码:系统内唯一的权限标识符,如"USER_MANAGE"、"BILL_QUERY" + - 权限名称:面向用户的权限描述,支持多语言 + - 权限类型:区分菜单权限(menu)、按钮权限(button)、接口权限(api) + - 父权限标识:构建权限树形结构,支持权限继承 + - 排序序号:控制权限在界面上的显示顺序 + - 状态标识:标记权限是否启用,支持权限的动态管理 + +**租户库权限数据结构:** + +**1. 用户基础信息表(system_user)** +- **表功能**:存储租户内部的用户基础信息和账户状态 +- **核心字段**: + - 主键标识:租户内用户的唯一标识 + - 用户账号:登录用户名,在租户内保持唯一性 + - 密码哈希:加密存储的用户密码 + - 用户昵称:显示名称,提升用户体验 + - 部门标识:关联用户所属的组织部门 + - 电子邮箱:用户联系邮箱,支持邮件通知 + - 手机号码:用户联系电话,支持短信验证 + - 用户性别:基础个人信息 + - 账户状态:标记用户是否启用、锁定等状态 + - 租户编号:明确用户所属的租户,支持数据隔离 + +**2. 角色定义表(system_role)** +- **表功能**:定义租户内的角色体系,实现权限的集中管理 +- **核心字段**: + - 主键标识:租户内角色的唯一标识 + - 角色名称:角色的显示名称,如"水务管理员"、"收费员" + - 角色代码:系统内部的角色标识符,用于权限验证 + - 显示顺序:控制角色在选择列表中的排序 + - 数据范围:定义角色的数据访问范围(全部、本部门、仅本人等) + - 角色状态:标记角色是否启用 + - 角色类型:区分系统内置角色和自定义角色 + - 租户编号:明确角色所属的租户 + +**3. 用户角色关联表(system_user_role)** +- **表功能**:建立用户与角色的多对多关联关系 +- **核心字段**: + - 主键标识:唯一标识每个用户-角色关联关系 + - 用户标识:关联到具体的用户记录 + - 角色标识:关联到具体的角色记录 + - 租户编号:确保关联关系在正确的租户范围内 + +**4. 角色菜单权限关联表(system_role_menu)** +- **表功能**:定义角色具体拥有的菜单和功能权限 +- **核心字段**: + - 主键标识:唯一标识每个角色-菜单权限关联 + - 角色标识:关联到具体的角色记录 + - 菜单标识:关联到具体的菜单或功能权限 + - 租户编号:确保权限配置在正确的租户范围内 + +**权限验证流程:** + +```mermaid +flowchart TD + A[用户请求] --> B{用户已登录?} + B -->|否| C[跳转登录页面] + B -->|是| D[解析JWT令牌] + + D --> E[获取当前租户上下文] + E --> F{是否跨租户操作?} + + F -->|否| G[连接当前租户数据库] + F -->|是| H[验证跨租户授权关系] + + H --> I{授权关系有效?} + I -->|否| J[权限拒绝] + I -->|是| K[切换目标租户上下文] + + G --> L[查询用户权限] + K --> L + + L --> M[权限缓存查询] + M --> N{缓存命中?} + + N -->|是| O[返回缓存权限] + N -->|否| P[数据库查询权限] + + P --> Q[更新权限缓存] + Q --> O + O --> R[权限验证] + + R --> S{权限验证通过?} + S -->|是| T[允许访问] + S -->|否| J + + T --> U[记录访问日志] + J --> V[记录拒绝日志] +``` + +**技术实现:** + +1. **权限验证引擎** + - Spring Security + 自定义权限验证器 + - 多数据源动态切换(基于租户上下文) + - 权限注解式控制(@PreAuthorize) + - 权限表达式引擎(SpEL) + +2. **多库数据访问** + - MyBatis-Plus多数据源配置 + - 动态数据源路由器(基于租户ID) + - 数据源连接池优化 + - 读写分离支持 + +3. **权限缓存策略** + - Redis分布式缓存 + - 权限数据分层缓存(全局+租户) + - 缓存键命名规范(tenant:{tenant_id}:user:{user_id}:permissions) + - 权限变更事件驱动缓存更新 + +4. **跨租户权限处理** + - 租户上下文传递(ThreadLocal + RequestFilter) + - 跨租户权限验证链 + - 租户切换权限检查 + - 权限降级和异常处理 + +**核心业务规则:** + +1. **权限验证优先级**:主库权限 > 租户库权限 > 默认权限 +2. **跨租户访问控制**:需要显式授权,禁止越权访问 +3. **权限缓存TTL**:用户权限缓存30分钟,角色权限缓存2小时 +4. **数据权限范围**:支持全部、本部门、本部门及子部门、仅本人 +5. **权限继承规则**:子租户可继承父租户的基础权限,但可以覆盖 + +#### UP-004: 租户管理 + +**功能描述:** + +  租户管理模块基于"主库+租户库"的多数据库架构,提供完整的多租户架构支持,实现租户间物理级别的数据隔离、配置管理,以及跨租户用户授权等高级功能。该模块是实现集团化管理的核心基础设施。 + +**多库租户架构设计:** + +```mermaid +graph TB + subgraph "主库(Master Database)" + MT[租户基础信息 sys_tenant] + MTC[租户配置参数 sys_tenant_config] + MTD[租户数据库映射 sys_tenant_database] + MTU[跨租户用户关系 tenant_user_relation] + MTA[全局审计日志 sys_audit_log] + end + + subgraph "租户库A(福州水务)" + TA_USER[租户用户 tenant_user] + TA_DEPT[组织架构 tenant_department] + TA_CONFIG[业务配置 tenant_business_config] + TA_BIZ[业务数据表群] + end + + subgraph "租户库B(厦门水务)" + TB_USER[租户用户 tenant_user] + TB_DEPT[组织架构 tenant_department] + TB_CONFIG[业务配置 tenant_business_config] + TB_BIZ[业务数据表群] + end + + subgraph "租户管理引擎" + TME[租户管理引擎] + TR[租户路由器] + TCC[跨库事务协调器] + TDM[数据库动态管理器] + end + + MT -.->|租户信息管理| TME + MTC -.->|配置参数管理| TME + MTD -.->|数据库映射| TME + MTU -.->|跨租户授权| TME + + TME --> TR + TR -->|路由A| TA_USER + TR -->|路由B| TB_USER + + TME --> TCC + TCC -.->|分布式事务| TA_BIZ + TCC -.->|分布式事务| TB_BIZ + + TME --> TDM + TDM -.->|动态管理| TA_CONFIG + TDM -.->|动态管理| TB_CONFIG +``` + +**主要功能:** + +1. **租户基础管理** + - 租户创建、编辑、删除 + - 租户状态管理(启用、禁用、过期) + - 租户基本信息维护 + - 租户层级结构管理(支持母公司-子公司模式) + +2. **多库数据隔离管理** + - **主库租户管理**:在主库中统一管理所有租户的基础信息、层级关系、配置参数 + - **租户专属数据库**:为每个租户创建独立的数据库实例,实现物理级别的数据隔离 + - **跨库关系管理**:在主库中维护跨租户用户授权关系和全局配置信息 + - **租户级别缓存隔离**:基于租户标识的分布式缓存命名空间隔离 + - **文件存储隔离**:租户专属的文件存储目录和访问控制 + +3. **跨租户用户授权机制** + - **用户多租户绑定**:支持一个用户绑定多个租户 + - **租户间用户授权**:租户管理员可以将其他租户的用户授权到本租户 + - **权限继承与隔离**:用户在不同租户下可拥有不同的角色和权限 + - **租户切换**:用户可在已授权的多个租户间自由切换 + +4. **租户配置管理** + - 租户级别的业务参数配置 + - 租户专属的菜单和功能配置 + - 租户品牌定制(Logo、主题色等) + - 租户级别的集成配置 + +**跨租户用户授权业务流程:** + +```mermaid +graph TD + A[租户A管理员] --> B{选择授权用户} + B --> C[搜索其他租户用户] + C --> D[选择租户B的用户X] + D --> E[配置在租户A中的角色] + E --> H[设置数据权限范围] + H --> I[建立用户X在租户A的权限关系] + I --> J[用户X可访问租户A系统] + J --> K[用户X可在租户A/B间切换] + + M[用户X登录] --> N{选择租户} + N --> O[租户A - 角色A权限] + N --> P[租户B - 角色B权限] +``` + +**多库租户管理数据模型:** + +**主库租户管理数据结构:** + +**1. 租户基础信息表(sys_tenant)** +- **表功能**:统一管理所有租户的基础信息和层级关系 +- **核心字段**: + - 主键标识:全系统唯一的租户标识符 + - 租户编码:业务层面的租户唯一编码,格式规范化 + - 租户名称:面向用户的租户显示名称 + - 父租户标识:支持母子公司层级结构 + - 租户类型:区分集团总部、分公司、子公司等类型 + - 联系信息:租户联系人、电话、邮箱等 + - 数据库配置:租户专属数据库的连接配置信息 + - 状态标识:租户启用、禁用、过期等状态 + - 创建信息:创建时间、创建人等审计信息 + +**2. 租户配置参数表(sys_tenant_config)** +- **表功能**:管理租户级别的业务参数和系统配置 +- **核心字段**: + - 主键标识:配置项的唯一标识 + - 租户标识:关联的租户信息 + - 配置分类:区分业务参数、系统配置、集成配置等 + - 配置键名:配置项的标识符 + - 配置值:具体的配置内容,支持JSON格式 + - 配置描述:配置项的说明信息 + - 是否加密:敏感配置的加密标识 + - 生效状态:配置是否启用 + +**3. 租户数据库映射表(sys_tenant_database)** +- **表功能**:管理租户与数据库实例的映射关系 +- **核心字段**: + - 主键标识:映射关系的唯一标识 + - 租户标识:关联的租户信息 + - 数据库标识:租户专属数据库的标识符 + - 连接配置:数据库连接字符串和参数 + - 读写配置:支持读写分离的配置信息 + - 容量配置:数据库容量限制和监控阈值 + - 备份配置:备份策略和恢复配置 + - 状态信息:数据库运行状态和健康检查 + +**租户库业务数据结构:** + +**1. 租户用户信息表(tenant_user)** +- **表功能**:存储租户内部的用户信息和组织关系 +- **核心字段**: + - 主键标识:租户内用户的唯一标识 + - 全局用户标识:关联主库中的用户信息 + - 用户编号:租户内部的用户编号 + - 部门标识:用户所属的组织部门 + - 职位信息:用户在租户内的职位和级别 + - 入职信息:用户在租户的入职时间和状态 + - 权限范围:用户在租户内的数据访问范围 + - 业务角色:用户在业务流程中的角色定位 + +**2. 租户组织架构表(tenant_department)** +- **表功能**:管理租户内部的组织架构和部门层级 +- **核心字段**: + - 主键标识:部门的唯一标识 + - 部门编码:租户内部的部门编码 + - 部门名称:部门的显示名称 + - 父部门标识:构建部门层级结构 + - 部门层级:部门在组织架构中的层级深度 + - 负责人信息:部门负责人和联系方式 + - 业务范围:部门负责的业务领域 + - 状态信息:部门的启用状态和变更历史 + +**3. 租户业务配置表(tenant_business_config)** +- **表功能**:管理租户特定的业务参数和流程配置 +- **核心字段**: + - 主键标识:配置项的唯一标识 + - 业务模块:配置所属的业务模块 + - 配置类型:区分费率、流程、规则等配置类型 + - 配置内容:具体的业务配置参数 + - 生效范围:配置的适用范围和条件 + - 生效时间:配置的生效和失效时间 + - 审核信息:配置变更的审核记录 + +**跨租户授权核心规则:** + +1. **授权主体规则** + - 只有租户管理员或超级管理员可以进行跨租户用户授权 + - 被授权用户必须是已存在的系统用户 + - 授权操作需要记录完整的审计日志 + +2. **权限隔离规则** + - 用户在不同租户下的权限完全独立 + - 租户A的管理员无法查看用户在租户B的权限信息 + - 跨租户数据访问严格按照数据权限控制 + +3. **会话管理规则** + - 用户登录后默认进入主租户(第一个绑定的租户) + - 租户切换需要重新进行权限验证 + - 同一用户在不同租户的会话信息独立存储 + +4. **授权生命周期规则** + - 支持设置授权有效期 + - 到期自动失效,需要重新申请 + - 支持授权撤销,立即生效 + +**多库架构技术实现:** + +**1. 主库租户管理引擎** +- **租户信息统一管理**:主库集中管理所有租户的基础信息、配置参数、层级关系 +- **数据库实例管理**:动态创建、配置和管理租户专属数据库实例 +- **跨库事务协调**:分布式事务管理器确保跨租户操作的数据一致性 +- **租户路由器**:根据用户上下文自动路由到正确的租户数据库 + +**2. 租户数据库动态管理** +- **数据库实例创建**:基于模板自动为新租户创建独立数据库实例 +- **Schema同步管理**:统一的数据库结构版本管理和升级机制 +- **连接池管理**:每个租户数据库的独立连接池配置和监控 +- **数据迁移工具**:支持租户数据的导入、导出和迁移功能 + +**3. 多租户会话管理** +- **租户上下文传递**:ThreadLocal + Request Header的租户标识传递机制 +- **会话状态隔离**:Redis分布式缓存的租户命名空间隔离 +- **权限缓存分层**:主库权限 + 租户权限的两级缓存策略 +- **切换状态同步**:租户切换时的权限重载和会话状态更新 + +**4. 跨租户授权协调** +- **授权关系存储**:主库统一存储和管理所有跨租户授权关系 +- **权限验证引擎**:跨库权限验证和数据访问控制 +- **授权流程引擎**:支持复杂的多级审批和自动化授权流程 +- **审计日志统一**:所有跨租户操作的统一审计和监控 + +**多库架构业务规则:** + +**1. 租户管理规则** +- 租户编码全局唯一,格式:水务公司简称+年份+3位流水号 +- 每个租户必须拥有独立的数据库实例,不允许共享 +- 租户创建时自动生成标准的数据库Schema结构 +- 租户删除前必须先完成数据备份和迁移确认 + +**2. 数据隔离规则** +- 租户数据库之间严格物理隔离,禁止直接跨库访问 +- 跨租户数据访问必须通过主库的授权关系验证 +- 租户数据库连接池独立配置,避免资源争用 +- 敏感数据在租户库中加密存储,密钥独立管理 + +**3. 用户授权规则** +- 用户在单个租户下最多可拥有5个角色 +- 跨租户授权操作需要双方租户管理员审批 +- 一个用户最多可以绑定10个租户 +- 用户在不同租户下的身份信息完全独立 +- 跨租户授权关系统一在主库中管理和审计 + +**4. 事务协调规则** +- 涉及多个租户的操作必须使用分布式事务 +- 单租户内的操作在租户库内保证ACID特性 +- 跨库操作失败时自动回滚所有相关变更 +- 重要业务操作需要在主库记录操作日志 + +**5. 性能管理规则** +- 每个租户数据库设置容量上限和性能监控 +- 大租户可配置读写分离和分库分表策略 +- 租户切换操作限制频率,防止系统资源滥用 +- 定期清理过期的授权关系和会话数据 + +#### UP-005: 系统监控 + +**功能描述:** + +  系统监控模块提供全面的系统运行状态监控、性能指标收集和运维管理功能。 + +**主要功能:** + +1. **在线用户监控**:实时监控在线用户数量、用户行为、异常登录 +2. **系统性能监控**:CPU、内存、磁盘、网络等系统资源监控 +3. **操作日志管理**:用户操作日志记录、查询、分析 +4. **告警管理**:系统异常告警、性能阈值告警 + +**技术实现:** + +- Micrometer + Prometheus监控指标收集 +- ELK Stack日志分析 +- Redis存储实时监控数据 +- WebSocket实时推送监控信息 + + + +# 子系统2设计: 营收业务系统 + +## 任务概述 + +  营收业务系统是整个福建水务营收系统的核心业务系统,负责处理从客户管理到账务处理的完整营收业务流程,整合了原营收系统、表务系统、报装系统、客户服务、微网厅等所有核心业务功能。 + +**设计目标:** + +- 实现统一的营收业务管理,涵盖水务企业全业务场景 +- 提供完整的客户服务体验,从线下到线上的全渠道服务 +- 支持表务全生命周期管理,确保设备资产的有效管控 +- 实现报装业务流程标准化,提高服务效率和客户满意度 + +**功能范围:** + +  营收业务系统包含两大核心模块群,实现水务企业营收业务闭环: + +#### 营收核心模块群 + +- **客户资料管理**:客户档案建立、信息维护、分组管理 +- **抄表开账**:抄表数据录入、复核确认、自动开账 +- **营业收费**:柜台收费、移动收费、在线缴费 +- **账务处理**:一期先聚焦水量调整、金额调整、退款、冲正、坏账申请,统一经 `IF-REV-007` 承接,并按共性能力先统一、场景能力再分批推进 +- **发票管理**:发票开具、查询、重开、作废 +- **催缴管理**:欠费统计、催缴通知、停水管理 +- **统计分析**:多维度数据统计和报表分析 +- **代收业务**:银行代扣、聚合支付等代收渠道 +- **业务配置**:业务参数配置 + +#### 客户服务模块群 + +- **账户绑定管理**:微信/支付宝账户绑定和管理 +- **信息查询服务**:账单查询、用水历史、缴费记录等 +- **在线缴费服务**:多渠道在线缴费服务 +- **电子发票服务**:电子发票开具、查询、推送 +- **营业网点服务**:网点查询、地图导航、预约服务 +- **业务办理服务**:各类业务在线申请和办理 + +**核心业务流程:** +  客户建档 → 抄表录入 → 复核开账 → 营业收费 → 账务处理 → 发票管理 → 催缴管理 + +## 设计概述 + +### 总体约束 + +**技术约束:** + +- 基于Spring Boot微服务架构实现 +- 采用事务处理确保数据一致性 +- 支持分布式锁处理并发访问 +- 遵循水务行业财务规范 + +**性能约束:** + +- 支持10万+客户的业务处理 +- 抄表开账处理能力≥5000户/小时 +- 收费交易响应时间≤2秒 +- 报表生成时间≤30秒 + +**安全约束:** + +- 财务数据加密存储 +- 关键操作需要审批流程 +- 完整的操作审计日志 +- 支付接口安全认证 + +### 子系统外部接口 + +**接口设计说明:** + +  营收业务系统作为核心业务平台,整合客户管理、账务处理、抄表计费、工单管理、报装业务等完整业务流程。系统提供标准化的RESTful接口,支持多租户业务配置,确保水务营收业务的高效运营和数据一致性。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-REV-001 | 客户信息查询接口 | 查询客户档案、账户状态、联系人与水表绑定关系 | 柜台/客户渠道/工单 | HTTPS REST | 客户ID、客户编号、手机号、查询类型 | 客户档案、账户信息、联系人列表、水表绑定关系 | +| IF-REV-004 | 抄表数据提交接口 | 提交人工或远传抄表数据并触发校验 | 手机抄表APP/集抄系统 | HTTPS REST | 抄表任务ID、水表ID、读数、图片证据、GPS位置 | 上传结果、校验状态、异常标记 | +| IF-REV-005 | 账单生成接口 | 根据抄表结果、水价模板和费用组成生成账单 | 开账任务/批量任务 | HTTPS REST | 抄表批次、账期、客户范围、应收日期 | 账单结果、失败清单、生成汇总 | +| IF-REV-006 | 缴费处理接口 | 创建收费记录并核销账单 | 柜台/线上渠道 | HTTPS REST | 客户ID、账单ID列表、支付方式、实收金额 | 收费结果、核销状态、交易流水 | +| IF-REV-008 | 发票申请接口 | 发起电子发票申请并接收票据状态回写 | 柜台/客户渠道 | HTTPS REST | 客户ID、账单ID列表、开票抬头、税号、邮箱 | 发票申请结果、票据状态、下载地址 | +| IF-REV-011 | 银行代收协同接口 | 发起代扣、回盘、对账、结算协同 | 银行代收模块/SYS-009 | HTTPS REST / 文件交换 | 批次号、渠道编码、账期、账单明细 | 批次状态、回盘结果、对账差异、结算结果 | +| IF-REV-012 | 业务参数配置接口 | 查询和维护价格模板、优惠方案、业务参数配置 | 管理后台/参数管理端 | HTTPS REST | 参数分类、模板编码、站点范围 | 参数明细、模板信息、更新结果 | +| IF-CS-001 | 账户绑定接口 | 绑定、解绑、切换默认客户 | 微信/支付宝/微网厅 | HTTPS REST | 渠道用户标识、客户编号、身份校验信息 | 绑定结果、默认客户信息、绑定关系 | +| IF-CS-002 | 历史账单查询接口 | 查询账单、欠费、用水历史、缴费记录 | 客户端 | HTTPS REST | 客户ID、账期范围、查询类型 | 账单列表、欠费金额、用水趋势、缴费记录 | +| IF-CS-003 | 在线支付下单接口 | 创建微信/支付宝线上支付订单 | 客户端 | HTTPS REST | 客户ID、账单ID列表、支付渠道、支付金额 | 订单号、支付二维码/预支付信息、订单状态 | +| IF-CS-004 | 发票申请接口 | 提交电子发票申请、查询发票状态 | 客户端 | HTTPS REST | 缴费订单号、发票抬头、邮箱/手机号 | 发票状态、发票链接、申请结果 | +| IF-CS-005 | 网点与业务办理接口 | 查询营业网点、预约信息、可办事项 | 客户端 | HTTPS REST | 行政区划、关键字、业务类型 | 网点列表、营业时间、可办业务、预约信息 | +| IF-CS-006 | 业务办理进度接口 | 提交业务申请、查询办理进度与附件 | 客户端 | HTTPS REST | 申请类型、客户资料、附件清单、申请单号 | 受理结果、流程状态、进度轨迹、补件要求 | +| IF-CS-007 | 柜面扫码支付接口 | 创建柜面扫码支付订单并回写结果 | 柜台终端/营业前台 | HTTPS REST | 柜台编号、账单ID列表、订单金额、支付渠道 | 订单号、支付状态、回写结果 | + +### 设计方案概述 + +**架构设计:** + +  营收系统采用领域驱动设计(DDD),按业务领域划分为客户域、抄表域、收费域、账务域等,每个域独立部署,通过事件驱动实现域间协作。 + +**技术选型:** + +- **业务框架**:Spring Boot + MyBatis-Plus +- **工作流引擎**:Flowable(处理业务审批流程) +- **分布式事务**:Seata(确保数据一致性) +- **消息队列**:RabbitMQ(异步处理和事件通知) +- **缓存策略**:Redis(热点数据缓存) + +## 子系统架构设计 + +  营收系统采用DDD领域驱动设计,按业务领域进行模块划分,实现高内聚低耦合的架构设计。系统核心分为**营收核心模块群**和**客户服务模块群**两大业务板块。 + +```mermaid +graph TB + subgraph "营收系统整体架构" + subgraph "应用层 - Application Layer" + A1[Web管理界面
管理端] + A2[移动收费界面
收费端] + A3[API接口层
接口网关] + end + + subgraph "业务服务层 - Business Service Layer" + subgraph " 营收核心模块群 REV-001~009" + subgraph "核心业务流程" + B1[REV-001
客户管理服务
客户基础] + B2[REV-002
抄表开账服务
业务源头] + B3[REV-003
营业收费服务
收入核心] + B4[REV-004
账务处理服务
财务核心] + end + + subgraph "辅助业务支撑" + B5[REV-005
发票管理服务
票据管理] + B6[REV-006
催缴管理服务
收益保障] + B7[REV-007
统计分析服务
决策支持] + B8[REV-008
代收业务服务
渠道扩展] + B9[REV-009
业务参数配置
基础配置] + end + end + + %% 工单管理模块群已独立为SYS-005 + end + + subgraph "领域层 - Domain Layer" + subgraph "营收核心业务领域" + C1[客户领域
Customer Domain
] + C2[抄表领域
Meter Reading Domain
] + C3[收费领域
Billing Domain
] + C4[账务领域
Accounting Domain
] + C5[发票领域
Invoice Domain
] + end + + subgraph "工单管理业务领域" + C6[工单统一领域
WorkOrder Domain
] + C61[工单流程引擎
Workflow Engine
] + C62[工单状态管理
Status Management
] + C63[工单智能监控
Monitor & Alert
🔔] + end + end + + subgraph "基础设施层 - Infrastructure Layer" + D1[(达梦数据库集群
DM Database Cluster
核心存储)] + D2[Redis分布式缓存
Distributed Cache
高速缓存] + D3[MinIO文件存储
Distributed File Storage
文件管理] + D4[RabbitMQ消息队列
Message Queue
异步通信] + D5[支付与结算服务(SYS-009)
Payment & Settlement
聚合支付/代扣/对账] + D6[Flowable工作流引擎
Workflow Engine
流程引擎] + end + + subgraph "外部系统集成" + E1[手机抄表APP
移动端] + E2[微网厅系统
线上服务] + E3[表务系统
设备管理] + end + end + + %% 应用层到业务服务层连接 + A1 --> B1 + A1 --> B9 + A2 --> B3 + A3 --> B8 + A3 --> B9 + + %% 营收核心模块群内部业务流程 + B1 -->|客户数据| B2 + B2 -->|账单数据| B3 + B3 -->|收费数据| B4 + B4 -->|财务数据| B5 + B1 -.->|客户信息| B6 + B3 -.->|收费统计| B7 + B8 -.->|代收数据| B3 + + %% 工单管理模块群已独立为SYS-005 + + %% 业务服务层到领域层映射 + B1 --> C1 + B2 --> C2 + B3 --> C3 + B4 --> C4 + B5 --> C5 + B6 --> C1 + B7 --> C3 + B8 --> C3 + + %% 工单领域移至SYS-005 + + %% 领域层到基础设施层 + C1 --> D1 + C2 --> D1 + C3 --> D1 + C4 --> D1 + C5 --> D3 + C6 --> D4 + C61 --> D6 + C62 --> D2 + C63 --> D4 + B8 --> D5 + + %% 外部系统集成(工单流转由SYS-005承担) + + %% 样式定义 + classDef coreModuleGroup fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 + classDef workorderModuleGroup fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 + classDef coreModule fill:#e1f5fe,stroke:#0277bd,stroke-width:2px + classDef workorderModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef coreDomain fill:#e8f5e8,stroke:#388e3c,stroke-width:2px + classDef workorderDomain fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef infrastructure fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px + classDef external fill:#e0f2f1,stroke:#00695c,stroke-width:2px + + %% 应用样式 + class B1,B2,B3,B4,B5,B6,B7,B8,B9 coreModule + class B9,B91,B92,B93,B94 workorderModule + class C1,C2,C3,C4,C5 coreDomain + class C6,C61,C62,C63 workorderDomain + class D1,D2,D3,D4,D5,D6 infrastructure + class E1,E2,E3 external +``` + +## 模块定义 + +### 模块列表 + +  营收系统的模块按业务性质分为两大模块群: + +#### 营收核心模块群 + +  营收核心业务模块,实现从客户管理到收费账务的完整业务链条,并通过 SYS-008 发票服务、SYS-009 支付与银行结算、SYS-010 消息服务形成跨子系统协同闭环: + +| 模块编号 | 模块名称(标识) | 功能描述 | 开发方式 | +|---|---|---|---| +| REV-001 | 客户资料管理 | 客户档案管理、客户分组、信息变更 | 自行开发 | +| REV-002 | 抄表开账 | 抄表录入、复核开账、异常处理 | 自行开发 | +| REV-003 | 营业收费 | 柜台收费、移动收费、在线缴费 | 自行开发 | +| REV-004 | 账务处理 | 账务调整、退款处理、坏账管理 | 自行开发 | +| REV-005 | 发票管理 | 发票开具、查询管理、电子发票 | 自行开发 | +| REV-006 | 催缴管理 | 欠费催缴、短信通知、停水管理 | 自行开发 | +| REV-007 | 统计分析 | 多维度数据统计和报表分析功能 | 自行开发 | +| REV-008 | 代收业务 | 集成银行渠道与聚合支付等代收方式 | 自行开发 | +| REV-009 | 业务参数配置 | 业务参数配置、参数管理 | 自行开发 | + +#### 客户服务模块群 + +  为外部渠道(微网厅、第三方平台)和内部渠道(客服前台)提供服务接入能力: + +- 账户绑定管理、信息查询服务、在线缴费服务、电子发票服务、营业网点服务、业务办理服务、柜面扫码支付 + +| 模块编号 | 模块名称(标识) | 功能描述 | 开发方式 | +|---|---|---|---| +| CS-001 | 账户绑定管理 | 微信/支付宝账户绑定与解绑、多账户管理 | 自行开发 | +| CS-002 | 信息查询服务 | 账单查询、用水历史、缴费记录、停水公告 | 自行开发 | +| CS-003 | 在线缴费服务 | 快捷缴费、充值、代缴、结果查询(经SYS-009) | 自行开发 | +| CS-004 | 电子发票服务 | 发票查看、推送、下载(经SYS-008) | 自行开发 | +| CS-005 | 营业网点服务 | 网点查询、地图导航、预约(可选) | 自行开发 | +| CS-006 | 业务办理服务 | 联系方式/开票方式变更、更名过户、低保、换表、自主抄表等 | 自行开发 | +| CS-007 | 柜面扫码支付 | 柜台二维码收款、票据关联、结果回传(经SYS-009) | 自行开发 | + +### 模块间关系 + +  营收系统的两大模块群既相对独立又紧密协作,形成完整的业务生态系统。 + +#### 营收核心模块群关系 + +  营收核心业务群实现了从客户管理到账务处理的完整营收业务流程: + +```mermaid +graph TD + subgraph "营收核心业务流程" + A[REV-001
客户资料管理
] --> B[REV-002
抄表开账
] + B --> C[REV-003
营业收费
] + C --> D[REV-004
账务处理
] + D --> E[REV-005
发票管理
] + + subgraph "辅助业务流程" + F[REV-006
催缴管理
] + G[REV-007
统计分析
] + H[REV-008
代收业务
] + I[REV-009
业务参数配置
] + end + end + + %% 主流程依赖关系 + A -.->|客户信息| C + A -.->|客户信息| E + A -.->|客户信息| F + B -.->|账单信息| D + B -.->|欠费信息| F + C -.->|收费记录| E + C -.->|收费数据| G + D -.->|账务数据| G + H -.->|代收记录| C + I -.->|水价/参数| B + I -.->|打印/税率/参数| E + I -.->|收费参数| C + + %% 样式 + classDef coreFlow fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef supportFlow fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + + class A,B,C,D,E coreFlow + class F,G,H,I supportFlow +``` + +#### 客户服务模块群关系 + +  客户服务模块群为对外提供服务的核心入口,构建以客户为中心的一体化服务体系: + +```mermaid +graph TD + subgraph "客户服务核心流程" + A[CS-001
账户绑定管理
] --> B[CS-002
信息查询服务
] + B --> C[CS-003
在线缴费服务
] + C --> D[CS-004
电子发票服务
] + + subgraph "辅助服务模块" + E[CS-005
营业网点服务
] + F[CS-006
业务办理服务
] + G[CS-007
柜面扫码支付
] + end + end + + %% 服务调用关系 + A -.->|绑定验证| F + B -.->|查询支撑| C + B -.->|查询支撑| D + B -.->|查询支撑| F + C -.->|支付回调| D + G -.->|线下支付| D + E -.->|网点导航| F + F -.->|办理结果| B + + %% 外部系统依赖 + C -.->|支付处理| SYS009[SYS-009
支付系统] + D -.->|发票开具| SYS008[SYS-008
发票系统] + G -.->|扫码支付| SYS009 + F -.->|工单流转| SYS005[SYS-005
工单系统] + + %% 样式 + classDef coreService fill:#e8f5e8,stroke:#4caf50,stroke-width:2px + classDef supportService fill:#fff3e0,stroke:#ff9800,stroke-width:2px + classDef externalSys fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px + + class A,B,C,D coreService + class E,F,G supportService + class SYS008,SYS009,SYS005 externalSys +``` + +**服务流程说明:** + +- **账户绑定**:客户通过微信/支付宝绑定水表账户,建立服务关系 +- **信息查询**:基于绑定关系,提供账单、用水历史、缴费记录等查询服务 +- **在线缴费**:支持快捷缴费、充值、代缴等多种缴费方式 +- **电子发票**:缴费完成后自动开具电子发票,支持查看下载 +- **业务办理**:提供各类业务在线申请,如更名过户、换表申请等 +- **营业网点**:提供网点查询、地图导航、预约服务等 +- **柜面扫码**:线下柜台扫码支付,与线上服务形成闭环 + +#### 模块群间协作关系 + +  两大模块群通过标准化接口进行协作,实现业务闭环: + +```mermaid +graph TB + subgraph "营收核心模块群" + CORE[REV-001~009
客户/抄表/收费/账务/发票/催缴/统计/代收/参数] + end + + subgraph "客户服务模块群" + CS[CS-001~007
账户绑定/查询/在线缴费/电子发票/网点/办理/柜面扫码] + end + + subgraph "工单管理系统" + WO[SYS-005
统一工单中心] + end + + CORE <-->|标准API| CS + CORE -.->|业务异常/流程触发| WO + CS -.->|客户申请/服务工单| WO + + classDef coreGroup fill:#e1f5fe,stroke:#0277bd,stroke-width:3px + classDef csGroup fill:#e8f5e8,stroke:#388e3c,stroke-width:3px + classDef workorderGroup fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px + + class CORE coreGroup + class CS csGroup + class WO workorderGroup +``` + +### 模块描述 + +#### REV-001: 客户资料管理 + +**功能概述:** + +  客户资料管理模块是营收系统的基础,负责维护所有用水客户的基本信息和档案资料。 + +**核心功能:** + +1. **客户档案管理** + - 新客户建档 + - 客户信息修改 + - 客户状态管理(正常、停用、注销) + - 客户变更历史记录 + +2. **客户分组管理** + - 按区域分组 + - 按用水性质分组 + - 按客户类型分组 + - 自定义分组 + +3. **客户查询服务** + - 多条件组合查询 + - 模糊查询支持 + - 高级筛选功能 + +**子功能扩展:** + +- 客户分组:客户分组管理、分组内客户管理 +- 集收管理:集收号管理、集收号内客户管理 +- 立户建档:手工建档、批量立户 +- 定额管理:定额共享(主/子客户)、定额核定 +- 批量修改:手工修改、模板导入修改 +- 客户业务办理:换表、加抄、更名、过户、低保、调价、停用/启用、注销/恢复 +- 电子档案:高拍仪/附件采集与档案管理 + +**业务规则:** + +- 客户编号系统自动生成,格式:部门代码+年份+6位流水号 +- 身份证号码必须通过实名认证 +- 客户状态变更需要审批流程 +- 存在未结清账务的客户不允许注销 + +#### REV-002: 抄表开账 + +**功能概述:** + +  抄表开账模块实现了从抄表数据录入到自动生成账单的完整业务流程。 + +**核心功能:** + +1. **抄表数据录入** + - 手工抄表录入 + - PDA抄表导入 + - 远传抄表自动采集 + - Excel批量导入 + +2. **抄表数据复核** + - 数据有效性验证 + - 异常用水量检测 + - 人工复核确认 + - 批量复核处理 + +3. **自动开账处理** + - 水量计算 + - 费用计算 + - 账单生成 + - 开账确认 + +**子功能扩展:** + +- 册本信息:册本查询、册本详情 +- 册本调整:新卡入册、册内序号调整、册本间调整 +- 抄表录入:按册本/按抄表员、导入抄表数据 +- 复核开账:复核开账查询/汇总、复核与开账 +- 开账记录:历史查询与导出 + +**业务流程图:** + +```mermaid +flowchart TD + A[开始抄表] --> B{选择抄表方式} + B -->|手工抄表| C[手工录入抄表数据] + B -->|PDA抄表| D[PDA现场抄表] + B -->|远传抄表| E[自动采集抄表数据] + B -->|批量导入| F[Excel批量导入] + + C --> G[系统数据验证] + D --> H[PDA数据上传] + E --> I[远传数据同步] + F --> J[批量数据校验] + + H --> G + I --> G + J --> G + + G --> K{数据是否有效?} + K -->|否| L[数据修正] + L --> G + K -->|是| M[抄表数据复核] + + M --> N{复核是否通过?} + N -->|否| O[标记异常数据] + O --> P[人工处理异常] + P --> M + N -->|是| Q[计算用水量] + + Q --> R[计算水费金额] + R --> S[生成账单] + S --> T[开账确认] + T --> U[结束] +``` + +**业务规则:** + +- 抄表状态:正常、故障、估读、拒抄、空房等 +- 用水量计算:本期读数 - 上期读数 +- 异常判断:超过历史平均值2倍为量高,低于0.5倍为量低 +- 复核规则:抄表人员不能复核自己录入的数据 + +#### REV-003: 营业收费 + +**功能概述:** + +  营业收费模块提供完整的收费业务流程管理,支持多种收费方式和支付渠道。 + +**核心功能:** + +1. **柜台收费** + - 实时收费处理 + - 多种支付方式 + - 收费凭证打印 + - 柜台结账管理 + +2. **在线缴费** + - 微信支付接入 + - 支付宝支付接入 + - 银行卡支付 + - 代扣代缴服务 + +3. **批量收费** + - 批量缴费处理 + - 预付款管理 + - 托收业务 + - 自动扣费 + +**子功能扩展:** + +- 特殊开账:特殊情形直接开账及查询导出 +- 柜台结账:结账、红冲、打印凭证 +- 红冲记录:红冲查询与导出 + +**业务流程图:** + +```mermaid +flowchart TD + A[客户缴费] --> B{选择缴费方式} + B -->|柜台缴费| C[到营业厅缴费] + B -->|在线缴费| D[选择在线支付] + B -->|银行代扣| E[银行自动扣费] + + C --> F[查询客户账单] + D --> G[微信/支付宝支付] + E --> H[银行代扣处理] + + F --> I{账单是否正确?} + I -->|否| J[账单调整] + J --> F + I -->|是| K[选择支付方式] + + K --> L{支付方式} + L -->|现金| M[现金收费] + L -->|POS机| N[刷卡收费] + L -->|扫码| O[扫码支付] + + G --> P[渠道支付确认] + H --> Q[银行扣费确认] + M --> R[收费确认] + N --> R + O --> R + P --> R + Q --> R + + R --> S[更新账单状态] + S --> T[生成收费凭证] + T --> U{需要发票?} + U -->|是| V[开具发票] + U -->|否| W[完成收费] + V --> W + W --> X[结束] +``` + +**业务规则:** + +1. 收费员每日下班前必须进行"柜台结账" +2. 结账前,收错的账款可以执行"红冲"操作 +3. 支持现金、POS机、微信、支付宝等多种支付方式 +4. 在线支付需要实时确认支付结果 +5. 银行代扣需要客户事先签约授权 + +#### REV-004: 账务处理 + +**功能概述:** + +  负责处理各类复杂的账务调整、退款、坏账等业务,确保账务的准确性和合规性。 + +**核心功能:** + +- **未销账调整**: 对未支付账单进行调整。 +- **分账调整**: 将一笔总账单拆分为多笔子账单。 +- **预付款退款**: 处理客户预付款的退还流程。 +- **呆坏账处理**: 对长期无法收回的欠款进行核销。 + +#### REV-005: 发票管理 + +**功能概述:** + +  提供全面的发票管理功能,支持电子发票和纸质发票的开具、查询、作废等操作。 + +**核心功能:** + +- **发票开具**: 根据缴费记录为客户开具发票。 +- **发票查询与管理**: 查询发票历史,处理红冲、作废等请求。 +- **电子发票集成**: 对接第三方电子发票平台,实现自动开具和推送。 + +**实现说明:** + +- 本模块通过调用`SYS-008 发票服务子系统`的"统一开票接口/作废红冲接口/发票查询接口"实现具体的开票与回执处理,营收系统不直接对接供应商。 + +#### REV-006: 催缴管理 + +**功能概述:** + +  对逾期未缴费的客户进行有效的催缴管理,提高水费回收率。 + +**核心功能:** + +- **欠费分析**: 统计和分析欠费客户数据。 +- **催缴通知**: 通过短信、电话、通知单等多种方式进行催缴。 +- **停复水管理**: 对恶意欠费用户执行停水,缴清后进行复水操作。 + +#### REV-007: 统计分析 + +**功能概述:** + +  提供多维度的数据统计和报表分析功能,为管理决策提供数据支持。 + +**核心功能:** + +- **售水统计**: 按日、月、年统计售水量、售水收入等。 +- **收费统计**: 统计不同收费渠道、方式的收费情况。 +- **欠费分析**: 多维度分析欠费构成和趋势。 +- **自定义报表**: 提供灵活的报表自定义工具。 +- **报表查询**: 业务分类报表树、统计条件与结果导出。 +- **欠费查询**: 按账期/金额等条件查询客户欠费。 +- **缴费记录**: 缴费记录检索与导出。 + +#### REV-008: 代收业务 + +**功能概述:** + +  集成银行渠道与聚合支付等代收方式,方便客户缴费。 + +**核心功能:** + +- **银行代扣**: 与银行签订协议,实现自动批量扣费。 +- **聚合支付**: 集成微信、支付宝等支付网关。 +- **对账管理**: 定期与各渠道进行账务核对。 +- **实时收费**: 渠道实时缴费处理(对接SYS-009)。 +- **银行托收**: 托收文件处理与状态跟踪(对接SYS-009)。 + +#### REV-009: 业务参数配置 + +**功能概述:** + +  集中管理与营收业务相关的参数与基础资料,提升配置一致性与运营效率。 + +**核心功能:** + +- 水表参数:水表厂家、型号、口径、量程 +- 地址参数:营业站点、所属小区 +- 价格体系:水价归属、费用组成、水价调整、调价历史、优惠方案、用水方案 +- 基本配置:打印维护、自定义列、日志管理、水司账户、发票税率、银行信息、抄表状态、词语信息、参数配置 + +### 客户服务模块群描述 + +#### CS-001: 账户绑定管理 + +**功能概述:** + +  账户绑定管理模块是客户服务体系的入口,负责处理客户与第三方平台账户的绑定关系管理,为后续的信息查询、在线缴费等服务奠定基础。 + +**核心功能:** + +1. **账户绑定流程** + - 微信/支付宝授权登录 + - 客户编号/户名/手机号搜索验证 + - 账户信息确认与绑定 + - 绑定状态维护与管理 + +2. **多账户管理** + - 支持一个用户绑定多个水务账户 + - 主账户设置与切换 + - 账户别名设置 + - 绑定账户列表管理 + +3. **解绑与重绑** + - 账户解绑流程 + - 解绑权限控制 + - 重新绑定验证 + - 解绑日志记录 + +**技术实现:** +- 基于OAuth2.0协议实现第三方授权 +- Redis缓存绑定关系提升查询性能 +- 数据加密存储保护客户隐私 + +#### CS-002: 信息查询服务 + +**功能概述:** + +  信息查询服务模块为客户提供全方位的信息查询功能,包括账单查询、用水历史、缴费记录等,是客户服务的核心模块之一。 + +**核心功能:** + +1. **账单查询服务** + - 当前账单查询 + - 历史账单查询 + - 账单详情展示 + - 欠费账单提醒 + +2. **用水信息查询** + - 用水量历史统计 + - 用水趋势分析 + - 抄表记录查询 + - 异常用水提醒 + +3. **缴费信息查询** + - 缴费记录查询 + - 缴费方式统计 + - 发票信息查询 + - 退费记录查询 + +4. **公告信息服务** + - 停水公告查看 + - 水价调整通知 + - 服务公告推送 + - 用水指南 + +**技术实现:** +- 分页查询优化大数据量处理 +- 数据缓存策略提升响应速度 +- 接口聚合减少客户端调用 + +#### CS-003: 在线缴费服务 + +**功能概述:** + +  在线缴费服务模块提供便捷的线上缴费功能,支持多种支付方式,与SYS-009支付系统深度集成,确保支付的安全性和可靠性。 + +**核心功能:** + +1. **快捷缴费** + - 一键缴费当前账单 + - 批量缴费多个账单 + - 预设金额快速充值 + - 自动扣费设置 + +2. **多样化缴费方式** + - 微信支付 + - 支付宝支付 + - 银联在线支付 + - 银行代扣缴费 + +3. **代缴服务** + - 代他人缴费 + - 批量代缴管理 + - 代缴权限控制 + - 代缴记录跟踪 + +4. **缴费管理** + - 缴费结果查询 + - 缴费凭证生成 + - 退费申请处理 + - 缴费异常处理 + +**技术实现:** +- 与SYS-009支付系统标准化对接 +- 订单状态实时同步机制 +- 支付安全策略与风控 + +#### CS-004: 电子发票服务 + +**功能概述:** + +  电子发票服务模块与SYS-008发票系统集成,为客户提供电子发票的查看、下载、推送等服务,满足客户对发票的个性化需求。 + +**核心功能:** + +1. **发票查看服务** + - 发票列表查询 + - 发票详情展示 + - 发票状态跟踪 + - 发票验真服务 + +2. **发票推送服务** + - 邮箱推送发票 + - 微信推送发票 + - 短信通知发票 + - 实时推送状态 + +3. **发票下载服务** + - PDF格式下载 + - 批量打包下载 + - 二维码扫描下载 + - 下载记录管理 + +4. **发票管理** + - 开票信息维护 + - 发票抬头管理 + - 特殊发票申请 + - 发票重开申请 + +**技术实现:** +- 与SYS-008发票系统API对接 +- 文件流处理与下载优化 +- 发票防伪与验真机制 + +#### CS-005: 营业网点服务 + +**功能概述:** + +  营业网点服务模块为客户提供营业网点相关的信息服务,包括网点查询、地图导航、预约服务等,提升客户线下服务体验。 + +**核心功能:** + +1. **网点信息查询** + - 就近网点查询 + - 网点详细信息 + - 营业时间查询 + - 服务项目介绍 + +2. **地图导航服务** + - 地图位置展示 + - 导航路线规划 + - 距离时间计算 + - 交通方式推荐 + +3. **网点预约服务** + - 业务预约申请 + - 预约时间管理 + - 预约状态跟踪 + - 预约取消重约 + +4. **网点评价反馈** + - 服务评价提交 + - 意见建议反馈 + - 投诉建议处理 + - 满意度调查 + +**技术实现:** +- 地理位置服务集成 +- 地图API调用优化 +- 预约队列管理机制 + +#### CS-006: 业务办理服务 + +**功能概述:** + +  业务办理服务模块为客户提供各类水务业务的在线申请和办理功能,与SYS-005工单系统协作实现业务流程的数字化处理。 + +**核心功能:** + +1. **基础业务办理** + - 联系方式变更 + - 开票信息变更 + - 用水性质变更 + - 账户信息修改 + +2. **高级业务办理** + - 更名过户申请 + - 水表换表申请 + - 低保减免申请 + - 自主抄表申请 + +3. **办理流程管理** + - 申请表单填写 + - 附件资料上传 + - 申请进度跟踪 + - 办理结果通知 + +4. **业务咨询服务** + - 办理条件查询 + - 办理流程指导 + - 所需材料清单 + - 在线客服咨询 + +**技术实现:** +- 与SYS-005工单系统流程集成 +- 动态表单引擎支持 +- 文件上传与存储管理 + +#### CS-007: 柜面扫码支付 + +**功能概述:** + +  柜面扫码支付模块为营业厅提供便捷的扫码收款功能,与SYS-009支付系统集成,实现线下支付的数字化处理。 + +**核心功能:** + +1. **扫码支付流程** + - 收费二维码生成 + - 扫码支付处理 + - 支付结果确认 + - 票据关联打印 + +2. **收款管理** + - 收款金额确认 + - 收款方式选择 + - 收款状态跟踪 + - 收款异常处理 + +3. **票据关联** + - 缴费凭证生成 + - 发票自动开具 + - 收据打印输出 + - 票据存档管理 + +4. **结果回传** + - 支付状态同步 + - 账务数据回传 + - 营业员确认 + - 客户通知发送 + +**技术实现:** +- 与SYS-009支付系统深度集成 +- 二维码动态生成与管理 +- POS机硬件设备对接 + + + +# 子系统3设计: 手机抄表APP + +## 任务概述 + +  手机抄表APP为抄表员、外勤人员提供移动作业工具,支持离线操作,通过调用外部摄像表AI系统实现抄表读数自动识别,提升现场工作效率。 + +**设计目标:** + +- 实现移动化抄表作业,提高工作效率 +- 支持离线作业,确保在无网络环境下正常工作 +- 构建完整的工单闭环处理流程 +- 提供直观友好的移动端用户体验 + +**功能范围:** + +- **登录认证**:机构编号、用户名密码认证、自动登录 +- **首页搜索**:多维度搜索、最近搜索记录、抄表任务 +- **采集任务管理**:任务列表管理、批量下载、单户采集 +- **现场上报**:问题上报(由SYS-005工单系统统一受理与派发) +- **个人设置**:个人信息管理、系统设置维护 + +**核心业务流程:** +  任务下载 → 现场抄表 → 问题上报 → 工单处理 → 数据上传 → 结果同步 + +## 设计概述 + +### 总体约束 + +**技术约束:** + +- 基于Spring Boot微服务架构 +- 采用条码/二维码技术进行水表标识 +- 支持RFID技术的水表管理 +- 遵循水表行业标准和规范 + +**性能约束:** + +- 支持100万+水表档案管理 +- 库存操作响应时间≤1秒 +- 支持并发库存操作≥50个 +- 盘点效率≥1000个/小时 + +**安全约束:** + +- 水表资产数据加密存储 +- 关键操作审批流程 +- 完整的操作审计日志 +- 防止水表资产丢失 + +### 子系统外部接口 + +**接口设计说明:** + +  手机抄表APP系统作为移动端现场作业工具,需要与营收业务系统、工单管理系统保持数据同步。所有接口均采用HTTP/REST协议,支持离线缓存和在线同步模式,确保现场作业的连续性和数据一致性。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-MOBILE-001 | 任务下载接口 | 下载抄表任务与客户信息 | 手机抄表APP | HTTP/REST | 抄表员ID、任务日期范围 | 任务列表、客户信息、水表信息 | +| IF-MOBILE-002 | 抄表数据上传接口 | 上传抄表数据与现场图片 | 手机抄表APP | HTTP/REST | 抄表记录、现场图片、GPS位置 | 上传状态、数据校验结果 | +| IF-MOBILE-003 | 工单接收接口 | 接收工单任务 | 工单管理系统 | HTTP/REST | 工单ID、工单类型、派发信息 | 接收确认、预计处理时间 | +| IF-MOBILE-004 | 工单回填接口 | 回填处理结果与附件 | 手机抄表APP | HTTP/REST | 工单ID、处理结果、现场图片 | 回填状态、审核结果 | +| IF-MOBILE-005 | 离线同步接口 | 离线数据同步 | 手机抄表APP | HTTP/REST | 离线数据包、时间戳 | 同步状态、冲突处理结果 | + +### 设计方案概述 + +**架构设计:** + +  端云协同架构,APP端提供离线能力(本地缓存与任务包),在线时通过增量同步接口与服务端完成任务下载、数据上传与工单回填,确保弱网环境可用。 + +**关键技术:** + +- 本地缓存与数据加密存储、断点续传 +- 条码/二维码识别,拍照取证 +- 任务包增量同步与冲突处理 + +## 子系统架构设计 + +  手机抄表APP采用原生移动应用架构,支持Android平台部署。系统采用端云协同模式,APP端具备强大的离线工作能力,通过本地存储任务数据和抄表记录,支持弱网环境下的连续作业。 + + +```mermaid +graph TB + subgraph "手机抄表APP" + Login[登录认证] + Home[首页/搜索] + Task[采集任务] + Report[现场上报] + Sync[数据同步] + Settings[个人与设置] + end + + subgraph "服务端" + AUTH[统一平台] + REV[营收业务系统] + WO[工单管理系统] + end + + Login --> AUTH + Home --> REV + Task --> REV + Report --> WO + Sync <--> REV + WO -.-> Task +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称(标识) | 功能描述 | 开发方式 | +|---|---|---|---| +| MOBILE-001 | 登录认证 | 机构编号、用户名/密码、自动登录、令牌管理 | 自行开发 | +| MOBILE-002 | 首页搜索 | 多维度搜索、最近记录、任务快捷入口 | 自行开发 | +| MOBILE-003 | 采集任务管理 | 任务列表、批量下载、单户采集、调用外部AI识别、读数校验 | 自行开发 | +| MOBILE-004 | 现场上报 | 问题上报、拍照取证、定位信息、异常标记 | 自行开发 | +| MOBILE-005 | 个人与设置 | 个人资料、偏好设置、缓存管理、安全退出 | 自行开发 | +| MOBILE-006 | 数据同步 | 任务包增量同步、离线数据包上传、冲突处理 | 自行开发 | + + +### 模块间关系 + +```mermaid +graph TD + subgraph "手机抄表APP模块关系" + A[MOBILE-001
登录认证] + B[MOBILE-002
首页搜索] + C[MOBILE-003
采集任务管理] + D[MOBILE-004
现场上报] + E[MOBILE-005
个人与设置] + F[MOBILE-006
数据同步] + end + + subgraph "外部系统" + AI[摄像表AI系统
(外部服务)] + end + + A -->|认证通过| C + B -->|搜索定位| C + C -.->|API调用| AI + AI -.->|识别结果| C + C -->|任务数据| F + D -->|上报数据| F + E -.->|配置同步| F + F -->|数据上传| UP[统一平台] + F -->|任务下载| CS[营收业务系统] + + %% 样式定义 + classDef coreModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef syncModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef externalModule fill:#fff3e0,stroke:#e65100,stroke-width:2px,stroke-dasharray: 5 5 + + class A,B,C,D coreModule + class E,F syncModule + class AI externalModule +``` + +### 模块描述 + +#### MOBILE-001: 登录认证 + +- 机构编号+用户名/密码登录 +- 自动登录选项 +- 登录问题客服支持 + +#### MOBILE-002: 首页搜索 + +- 户号/户名/地址/钢印号/手机号搜索 +- 最近搜索记录展示 +- 抄表任务列表 +- 搜索结果实时展示 + +#### MOBILE-003: 采集任务管理 + +- 任务列表与批量下载 +- 单户采集详情页 +- 定位/NFC/扫码三种采集方式 +- 上一户/下一户导航 + +#### MOBILE-004: 现场上报 + +- 换表工单处理 +- 复水工单确认 +- 稽查任务管理 +- 问题上报功能 +- 图片/视频附件上传 + +#### MOBILE-005: 个人与设置 + +- 个人信息查看与修改 +- 密码修改与退出登录 +- 日志上传与清理缓存 +- 异常水量预警设置 +- 数据库备份 + +#### MOBILE-006: 数据同步 + +- 增量任务同步 +- 离线包上传 +- 断点续传 +- 冲突解决 + + + + + +# 子系统4设计: 微网厅系统 + +## 任务概述 + +  微网厅系统(SYS-004)基于微信公众号平台开发,为客户提供便民的自助服务平台。系统支持账户绑定、账单查询、在线缴费、电子发票、营业网点查询和各类业务办理等功能。通过微信生态为用户提供7×24小时不间断的自助服务,显著提升客户服务体验。 + +## 设计概述 + +### 总体约束 + +**技术约束**: + +- 基于微信公众号开发框架 +- 遵循微信开发规范和接口限制 +- 采用响应式设计,适配不同移动设备 +- 支持微信支付集成 + +**安全约束**: + +- 严格的用户身份验证机制 +- 敏感数据加密传输和存储 +- 符合微信平台安全规范 +- 防范常见Web安全威胁 + +**业务约束**: + +- 必须与营收业务系统实时数据同步 +- 支持多账户绑定管理 +- 提供完整的业务流程闭环 + +### 子系统外部接口 + +**接口设计说明:** + +  微网厅系统基于微信公众号平台,为用户提供便捷的水务服务。系统与微信平台、营收业务系统、发票服务、支付系统等多个外部系统进行集成,支持账户绑定、在线查询、移动缴费、电子发票、业务申请等全流程服务。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-WECHAT-001 | 微信授权登录接口 | 通过微信OAuth2.0实现用户授权登录 | 微网厅系统 | HTTP/REST | 微信授权码、AppID、AppSecret | 用户OpenID、访问令牌、用户基本信息 | +| IF-WECHAT-002 | 微信支付接口 | 调用微信支付完成在线缴费 | 微网厅系统 | HTTP/REST | 订单信息、支付金额、用户OpenID | 预支付交易会话标识、支付结果 | +| IF-WECHAT-003 | 微信模板消息接口 | 推送缴费成功、账单提醒等消息 | 消息服务系统 | HTTP/REST | 模板ID、用户OpenID、消息数据 | 消息推送状态、消息ID | +| IF-WECHAT-004 | 微信JS-SDK接口 | 调用微信JS-SDK实现前端功能 | 微网厅前端 | HTTP/REST | 页面URL、时间戳、随机字符串 | JS-SDK配置信息、签名 | +| IF-WECHAT-005 | 客户信息查询接口 | 查询绑定客户的基本信息 | 微网厅系统 | HTTP/REST | 客户编号/手机号/OpenID | 客户详细信息、绑定状态 | +| IF-WECHAT-006 | 账单信息查询接口 | 查询客户账单和欠费信息 | 微网厅系统 | HTTP/REST | 客户编号、查询月份范围 | 账单明细、欠费金额、阶梯用量 | +| IF-WECHAT-007 | 缴费处理接口 | 处理微信端发起的缴费业务 | 微网厅系统 | HTTP/REST | 客户编号、缴费金额、支付方式 | 缴费订单号、支付状态、发票信息 | +| IF-WECHAT-008 | 业务申请提交接口 | 提交报装、过户等业务申请 | 微网厅系统 | HTTP/REST | 申请类型、客户资料、申请材料 | 申请单号、预审结果、处理时限 | +| IF-WECHAT-009 | 电子发票申请接口 | 申请开具电子发票 | 微网厅系统 | HTTP/REST | 缴费订单号、发票抬头信息 | 电子发票PDF、发票代码和号码 | +| IF-WECHAT-010 | 营业网点查询接口 | 查询就近营业网点信息 | 微网厅系统 | HTTP/REST | 地理位置坐标、搜索半径 | 网点列表、营业时间、联系方式 | +| IF-WECHAT-011 | 账户绑定验证接口 | 验证客户身份并绑定微信账户 | 微网厅系统 | HTTP/REST | 客户编号、身份证号、手机号码 | 绑定验证结果、绑定关系ID | +| IF-WECHAT-012 | 用水历史查询接口 | 查询客户用水历史记录 | 微网厅系统 | HTTP/REST | 客户编号、查询时间段 | 用水量明细、趋势分析数据 | + +### 设计方案概述 + +  采用微信公众号H5页面开发模式,前端使用响应式Web技术,后端基于Spring Boot微服务架构。通过微信OAuth2.0实现用户授权,通过唯一标识实现账户绑定,确保数据安全和用户体验。 + +## 子系统架构设计 + + +  微网厅系统基于微信公众号生态,采用前后端分离架构。前端采用Vue.js框架开发响应式H5页面,适配微信浏览器环境;后端采用Spring Boot微服务架构,通过API Gateway统一接口管理。 + + +```mermaid +graph TB + subgraph "微信平台" + WeChat[微信公众号] + WeMsg[微信消息] + end + + subgraph "微网厅系统" + Frontend[前端H5页面] + Backend[后端服务] + Cache[缓存层] + end + + subgraph "营收业务系统" + Customer[客户管理] + Billing[账务处理] + Payment[收费管理] + Service[客户服务] + end + + WeChat --> Frontend + Frontend --> Backend + Backend --> Cache + Backend --> Customer + Backend --> Billing + Backend --> Payment + Backend --> Service + Backend -.->|支付调用| PAY_SYS[支付与结算(SYS-009)] + Backend --> WeMsg +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---------|----------|----------|------------| +| WECHAT-001 | 账户绑定管理 | 微信授权、账户绑定与解绑、多账户管理 | 自行开发 | +| WECHAT-002 | 信息查询服务 | 账单查询、用水历史、缴费记录、停水公告 | 自行开发 | +| WECHAT-003 | 在线缴费服务 | 快捷缴费、充值服务、多种支付方式 | 自行开发 | +| WECHAT-004 | 电子发票服务 | 发票查看、发票推送、电子发票管理 | 自行开发 | +| WECHAT-005 | 营业网点服务 | 网点查询、地图导航、距离计算 | 自行开发 | +| WECHAT-006 | 业务办理服务 | 联系方式变更、开票方式变更、更名业务、过户业务、一户多人口申请、水价变更、低保申请、换表申请、自主抄表 | 自行开发 | +| WECHAT-007 | 账户流水 | 账户历史缴费流水查询与导出 | 自行开发 | +| WECHAT-008 | 账号与机构管理 | 切换机构、添加/解绑客户、设置默认客户、客户详情 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "微网厅系统模块关系" + A[WECHAT-001
账户绑定管理] + B[WECHAT-002
信息查询服务] + C[WECHAT-003
在线缴费服务] + D[WECHAT-004
电子发票服务] + E[WECHAT-005
营业网点服务] + F[WECHAT-006
业务办理服务] + G[WECHAT-007
账户流水] + H[WECHAT-008
账号与机构管理] + end + + A -->|身份验证| B + A -->|授权支付| C + A -->|授权开票| D + A -->|位置服务| E + A -->|业务授权| F + A -->|流水授权| G + A -->|账号管理| H + + B -.->|查询后开票| D + C -.->|支付后开票| D + F -.->|业务查询| B + F -.->|业务缴费| C + + %% 样式定义 + classDef coreService fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef supportService fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef bindingModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class A bindingModule + class B,C,D,F coreService + class E,G,H supportService +``` + +### 模块描述 + +#### WECHAT-001: 账户绑定管理 + +- 微信授权与快捷登录 +- 手机号自动绑定 +- 客户编号手工绑定 +- 多客户绑定管理 +- 默认客户设置 + +#### WECHAT-002: 信息查询服务 + +- 首页基本信息展示 +- 客户详细信息查看 +- 历史账单查询(近12个月) +- 用水分析曲线图 +- 客户切换功能 + +#### WECHAT-003: 在线缴费服务 + +- 快捷缴费功能 +- 充值缴费服务 +- 微信支付集成 +- 缴费确认页面 +- 缴费结果通知 + +#### WECHAT-004: 电子发票服务 + +- 电子发票查看 +- 发票邮箱推送 +- 发票图片保存 +- 发票开具申请 + +#### WECHAT-005: 营业网点服务 + +- 营业网点列表展示 +- 地图模式展示 +- 距离排序显示 +- 网点详细信息 + +#### WECHAT-006: 业务办理服务 + +- 联系方式变更 +- 开票方式变更 +- 更名业务 +- 过户业务 +- 一户多人口申请 +- 水价变更 +- 低保申请 +- 换表申请 +- 自主抄表 +- 附件上传(最多9张) +- 业务进度查询 + +#### WECHAT-007: 账户流水 + +- 历史缴费流水查询 +- 缴费汇总情况 +- 流水详细信息展示 + +#### WECHAT-008: 账号与机构管理 + +- 用水机构切换 +- 添加绑定客户 +- 解除绑定客户 +- 设置默认客户 +- 查看客户详情 + +**业务办理流程**: + +```mermaid +flowchart TD + Start([用户发起业务申请]) --> Select[选择业务类型] + Select --> Fill[填写申请信息] + Fill --> Upload[上传相关材料] + Upload --> Submit[提交申请] + Submit --> Review[系统审核] + Review --> Approve{审核结果} + Approve -->|通过| Process[业务处理] + Approve -->|退回| Modify[修改申请] + Modify --> Submit + Process --> Complete[办理完成] + Complete --> Notify[结果通知] + Notify --> End([结束]) +``` + + + +# 子系统5设计: 工单管理系统 + +## 任务概述 + +  工单管理系统(SYS-005)负责全业务工单统一受理、创建、派发、处理、验收与归档,覆盖营收、表务、报装、客户服务等场景,提供统一流程引擎与监控预警能力。 + +## 设计概述 + +### 总体约束 + +- 流程统一:所有工单遵循统一的生命周期与态状态机 +- 实时可观测:状态监控、超时预警、绩效统计 +- 可扩展:支持新增工单类型与流程编排 + +### 子系统外部接口 + +  工单管理系统作为统一的工单处理平台,接收来自营收、表务、报装、微网厅、APP等各业务系统的工单需求,实现工单全生命周期管理。系统提供标准化的工单接口,支持多种工单类型的创建、派发、处理、跟踪全流程管理。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-WO-001 | 工单创建接口 | 创建各类业务工单 | 营收/表务/报装/微网厅/APP | HTTP/REST | 工单类型、客户信息、问题描述、紧急程度 | 工单编号、预计处理时间、派发状态 | +| IF-WO-002 | 工单派发接口 | 向处理人/APP派发任务 | 工单管理系统 | HTTP/REST | 工单ID、处理人员、预期完成时间 | 派发结果、接收确认状态 | +| IF-WO-003 | 工单回填接口 | 回填处理结果与附件 | APP/各业务系统 | HTTP/REST | 工单ID、处理结果、现场图片、完成时间 | 回填状态、审核结果、客户满意度 | +| IF-WO-004 | 工单查询接口 | 查询工单状态和处理轨迹 | 各业务系统/客户端 | HTTP/REST | 工单编号/客户编号、查询条件 | 工单状态、处理进度、历史轨迹 | +| IF-WO-005 | 工单统计接口 | 工单处理绩效统计分析 | 管理后台 | HTTP/REST | 统计维度、时间范围、部门筛选 | 统计报表、效率分析、排名数据 | +| IF-WO-006 | 工单预警接口 | 超时工单监控预警 | 监控系统 | HTTP/REST | 预警规则、时间阈值 | 预警工单列表、通知配置 | + +### 设计方案概述 + +  架构采用"工单中心 + 流程编排 + 监控预警 + 绩效统计"的分层设计,提供统一API网关对接各业务系统,并通过可配置流程实现多类型工单的快速上线。 + +## 子系统架构设计 + +  工单管理系统采用微服务分层架构,通过统一工单中心集中管理各类业务工单,配置化流程引擎支持不同工单类型的个性化流转,实时监控预警确保服务质量,绩效统计提供数据分析支撑。 + + +```mermaid +graph TB + subgraph "工单管理系统" + WO_CENTER[统一工单中心] + FLOW[流程引擎] + MON[监控预警] + STAT[绩效统计] + end + + subgraph "协作系统" + REV[营收业务系统] + METER[表务管理系统] + INSTALL[报装业务系统] + APP[手机抄表APP] + WECHAT[微网厅] + end + + REV -.->|业务异常/申请| WO_CENTER + METER -.->|换表申请| WO_CENTER + INSTALL -.->|报装派单| WO_CENTER + WECHAT -.->|客户服务申请| WO_CENTER + APP -.->|问题上报/结果回填| WO_CENTER + + WO_CENTER -.-> FLOW + WO_CENTER -.-> MON + WO_CENTER -.-> STAT + WO_CENTER -.->|派发任务| APP +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| WORK-001 | 工单中心 | 统一受理、路由、分派、跟踪 | 自行开发 | +| WORK-002 | 流程引擎 | 节点编排、条件路由、并行网关 | 自行开发 | +| WORK-003 | 监控预警 | 超时/积压/异常预警、看板 | 自行开发 | +| WORK-004 | 绩效统计 | 人员/环节时长、SLA达成率 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "工单管理系统模块关系" + A[WORK-001
工单中心] + B[WORK-002
流程引擎] + C[WORK-003
监控预警] + D[WORK-004
绩效统计] + end + + A -->|流程调度| B + A -->|状态监控| C + A -->|数据统计| D + B -.->|流程状态| C + C -.->|监控数据| D + + %% 样式定义 + classDef coreModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef processModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef monitorModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class A coreModule + class B processModule + class C,D monitorModule +``` + +### 模块描述 + +#### WORK-001: 工单中心 + +- 统一工单入口与受理管理 +- 工单分类与优先级策略配置 +- 智能路由与自动分派机制 +- 工单全生命周期状态跟踪 + +#### WORK-002: 流程引擎 + +- 可视化流程编排与配置 +- 条件路由与并行互斥网关 +- 子流程支持与流程嵌套 +- 回退重审与流程回滚机制 + +#### WORK-003: 监控预警 + +- 实时工单状态看板展示 +- 超时积压智能预警 +- 异常工单自动拦截识别 +- 多渠道预警通知推送 + +#### WORK-004: 绩效统计 + +- 处理人员时长统计分析 +- 各环节效率达成率统计 +- SLA达成率考核指标 +- 绩效报表自动生成导出 + + + +# 子系统6设计: 表务管理系统 + +## 任务概述 + +  表务管理系统(SYS-006)聚焦设备档案和表务全生命周期管理,面向换表等业务提供资源保障。 + +## 设计概述 + +### 总体约束 + +- 数据规范化:设备参数标准化,避免冗余与不一致 +- 状态可追溯:设备全生命周期状态流转与变更留痕 +- 库存实时性:库存数据实时同步,支持多仓库管理 + +### 子系统外部接口 + +  表务管理系统负责水表资产的全生命周期管理,包括基础参数配置、仓库库存管理、设备档案管理。系统与工单管理、营收业务等系统协作,支持水表领用、更换、维修、报废等全流程作业,确保水表资产的准确管理和有效利用。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-METER-001 | 库存查询接口 | 查询仓库库存状态和预警信息 | 工单/营收/报装系统 | HTTP/REST | 仓库编号、水表型号、库存状态 | 库存明细、预警状态、可用数量 | +| IF-METER-002 | 领用出库接口 | 支持换表/施工水表领用出库 | 工单管理系统 | HTTP/REST | 领用单号、水表型号、领用数量、领用人 | 出库状态、库存余量、领用凭证 | +| IF-METER-003 | 档案查询接口 | 查询水表设备档案信息 | 营收/工单/报装系统 | HTTP/REST | 水表编号、客户编号、查询类型 | 设备档案、安装历史、维修记录 | +| IF-METER-004 | 集抄数据接收接口 | 接收远传抄表、异常告警并同步状态 | 物联网平台 | HTTP/REST | 设备标识、采集时间、读数值、告警信息 | 接收结果、校验状态、异常标记 | +| IF-METER-005 | 资产调拨接口 | 仓库间水表调拨转移 | 表务管理系统 | HTTP/REST | 调出仓库、调入仓库、调拨清单 | 调拨状态、库存变更结果 | +| IF-METER-006 | 盘点核实接口 | 定期盘点和库存核实 | 表务管理系统 | HTTP/REST | 盘点计划、盘点范围、盘点人员 | 盘点结果、差异分析、调整建议 | + +### 设计方案概述 + +  以"基础参数-仓库库存-设备档案"三层模型实现资产全生命周期管理;通过与工单系统联动完成领用/回填闭环,支持库存预警与追溯。 + +## 子系统架构设计 + +  表务管理系统采用分层数据架构,通过基础参数管理建立水表标准规范,通过仓库库存管理实现设备资源调配,通过设备档案管理实现全生命周期跟踪。系统与工单管理系统深度集成,形成"需求-领用-安装-回收"的完整闭环。 +  周转率、维修频次等统计分析 + +```mermaid +graph TB + subgraph "表务管理系统" + BASE[基础参数] + WH[仓库与库存] + DOC[设备档案] + end + + WO[工单系统] -.->|领用/回填| WH + REV[营收系统] -.->|档案/库存状态| DOC +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| METER-001 | 表务基础管理 | 厂家/型号/口径/量程等基础参数 | 自行开发 | +| METER-002 | 仓库与库存管理 | 入库/出库/盘点/调拨/预警 | 自行开发 | +| METER-003 | 设备档案管理 | 档案建档/状态管理/追溯 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "表务管理系统模块关系" + A[METER-001
表务基础管理] + B[METER-002
仓库与库存管理] + C[METER-003
设备档案管理] + end + + A -->|基础参数| B + B -->|库存状态| C + C -.->|规格验证| A + + %% 样式定义 + classDef baseModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef warehouseModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef docModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class A baseModule + class B warehouseModule + class C docModule +``` + +### 模块描述 + +#### METER-001: 表务基础管理 + +- 厂家型号口径量程等基础参数标准化 +- 检定周期与技术规范管理 +- 设备分类与属性字典维护 +- 基础参数验证与规范校验 + +#### METER-002: 仓库与库存管理 + +- 入库出库盘点调拨全流程管理 +- 库存预警与安全库存监控 +- 与工单系统联动领用回填 +- 多仓库统一管理与库存同步 + +#### METER-003: 设备档案管理 + +- 唯一设备电子档案建立 +- 设备全生命周期状态流转 +- 批次管理与质检记录追溯 +- 档案查询与历史轨迹记录 + + + +# 子系统7设计: 报装业务系统 + +## 任务概述 + +  报装业务系统(SYS-007)覆盖从申请、踏勘、设计、施工到验收通水的全流程,支持调用泛微进行合同签订和电子签章,并与工单系统协作完成现场派工与过程留痕。 + +## 设计概述 + +### 设计方案概述 + +- 采用阶段性里程碑管控(申请-踏勘-施工-验收-通水),以工单驱动现场作业,形成资料全流程留痕与竣工归档。 +- 资料签章对接:与外部CA电子签章系统对接,完成报装申请材料、施工/验收文书的签署、验章与存证,签章回执异步回传。 + +### 子系统外部接口 + +  报装业务系统负责新用户报装全流程管理,从申请受理到通水验收的全生命周期业务处理。系统与微网厅、营收系统、工单管理、表务管理、CA电子签章等外部系统协作,实现报装业务的规范化、数字化管理和全流程追溯。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-INST-001 | 报装申请接口 | 提交报装申请信息与材料 | 微网厅/营收系统 | HTTP/REST | 申请人信息、用水地址、申请材料、联系方式 | 申请单号、预审结果、处理时限 | +| IF-INST-002 | 踏勘派工接口 | 现场踏勘任务派发 | 工单管理系统 | HTTP/REST | 报装单号、踏勘要求、预约时间 | 派工结果、踏勘人员、预计完成时间 | +| IF-INST-003 | 签章接口 | 调用CA系统进行电子签章 | CA电子签章系统 | HTTP/REST | 合同文档、签章类型、签章方信息 | 签章状态、签章文档、存证信息 | +| IF-INST-004 | 签章回执接口 | 接收CA系统签章完成回执 | CA电子签章系统 | HTTP/REST | 签章任务ID、签章结果、时间戳 | 接收确认、存档状态 | +| IF-INST-005 | 报装归档接口 | 归档申请、合同、验收与签章回执资料 | 报装系统 | HTTP/REST | 报装单号、资料清单、签章回执、验收文档 | 归档状态、档案编号、存储位置 | +| IF-INST-006 | 验收通水接口 | 验收合格并开通供水 | 营收业务系统 | HTTP/REST | 报装单号、验收结果、水表信息 | 开户结果、客户编号、通水状态 | +| IF-INST-007 | 档案归档接口 | 竣工档案归档管理 | 档案管理系统 | HTTP/REST | 报装单号、竣工资料、验收文档 | 归档状态、档案编号、存储位置 | + +### 子系统架构设计 + +  报装业务系统采用阶段式流程架构,将复杂的报装业务分解为申请受理、现场踏勘、施工管理、验收通水四个核心阶段,每个阶段具有明确的输入输出和验收标准。系统与CA电子签章系统深度集成,实现合同文档的电子化签署和存证。 + + +```mermaid +graph TB + subgraph "报装业务系统" + APPLY[申请受理] + SURVEY[现场踏勘] + BUILD[施工管理] + ACCEPT[验收通水] + ARCH[资料归档] + end + + WECHAT[微网厅] -.->|报装申请| APPLY + APPLY -.-> SURVEY -.-> BUILD -.-> ACCEPT -.-> ARCH + INST_WO[工单系统] -.->|派工/回填| SURVEY + INST_WO -.->|派工/回填| BUILD + CA[CA电子签章] + ARCH -.->|签章/验章/存证| CA +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| INST-001 | 报装流程管理 | 端到端阶段流转,里程碑控制 | 自行开发 | +| INST-002 | 工程管理 | 进度/资源/质量/安全管理 | 自行开发 | +| INST-003 | 档案管理 | 资料归档、过程留痕、竣工档案 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "报装业务系统模块关系" + A[INST-001
报装流程管理] + B[INST-002
工程管理] + C[INST-003
档案管理] + end + + A -->|流程驱动| B + B -->|工程资料| C + C -.->|档案反馈| A + + %% 样式定义 + classDef flowModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef projectModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef archiveModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class A flowModule + class B projectModule + class C archiveModule +``` + +### 模块描述 + +#### INST-001: 报装流程管理 + +**功能概述:** + +  报装流程管理模块负责端到端的报装业务流程控制,涵盖从申请受理到资料归档的完整生命周期管理。 + +**核心功能:** + +1. **申请受理** + - 申请类型识别(单位/个人、新建户表/总表/旧城改造) + - 工程信息录入(工程名称、地址、经办人信息) + - 资料上传管理(身份证、营业执照、房产证等) + - 工程编号自动生成 + - 申请暂存与提交控制 + +2. **踏勘管理** + - 现场勘查任务分派 + - 勘查结果录入(用水性质、水表口径、数量、预算总价) + - 用户信息批量录入 + - 设计图纸管理 + - 勘查意见与审核 + +3. **审批流转** + - 多级审批流程控制 + - 审批意见记录 + - 流程回退机制 + - 审批状态跟踪 + +4. **合同与缴费** + - OA系统合同审批对接 + - 分批缴费支持 + - 收据打印管理 + - 合同签订确认 + +#### INST-002: 工程管理 + +**功能概述:** + +  工程管理模块负责报装工程的施工全过程管理,包括派工、安装、验收等关键环节的控制与监督。 + +**核心功能:** + +1. **工程派工** + - 施工部门选择与派遣 + - 派工任务生成 + - 施工人员分配 + - 与SYS-005工单系统协作 + +2. **工程安装** + - 仓库领表管理(与表务系统对接) + - 现场安装信息录入 + - 水表信息关联(条形码、钢印号、厂家、型号) + - 施工过程记录(施工负责人、时间、描述) + - 安装质量控制 + +3. **工程验收** + - 联合竣工验收管理 + - 验收人员分配(抄表员、工程部门) + - 验收结果录入(合格/不合格) + - 验收情况详细记录 + - 表号等关键信息确认 + +4. **进度监控** + - 工程进度实时跟踪 + - 关键节点里程碑控制 + - 延期预警与通知 + - 施工安全管理 + +#### INST-003: 档案管理 + +**功能概述:** + +  档案管理模块负责报装业务全过程的资料归档、电子签章和竣工档案管理,确保业务合规性和可追溯性。 + +**核心功能:** + +1. **资料归档** + - 报装申请资料电子化存储 + - 踏勘设计图纸归档 + - 施工安装记录归档 + - 验收文档归档 + - 合同资料归档 + +2. **电子签章** + - CA电子签章系统对接 + - 申请材料电子签署 + - 施工验收文书签章 + - 签章验证与存证 + - 签章回执异步处理 + +3. **竣工档案** + - 竣工资料整理 + - 档案完整性检查 + - 移交确认管理 + - 与营收系统立户对接 + - 档案查询与检索 + +4. **材料审核** + - 报装材料核对 + - 资料完整性验证 + - 审核意见记录 + - 补充资料管理 + + + +# 子系统8设计: 发票服务子系统 + +## 任务概述 + +  发票服务子系统(SYS-008)定位为"基础服务层"的统一开票能力中心,通过统一开票网关与供应商适配器屏蔽不同厂商差异,当前优先对接"航天信息",预留"博思"等供应商接入能力。 + +## 设计概述 + +### 总体约束 + +- 统一入口:提供统一的开票、作废/红冲、查询能力 +- 供应商无关:采用适配器模式屏蔽供应商差异 +- 合规可靠:签章/存证、回执落库、审计留痕 + +### 设计方案概述 + +- 架构采用"统一开票网关 + 供应商适配器 + 回执处理/存证"的三层模型;对上通过REST接口供营收业务与微网厅调用,对下通过供应商SDK/HTTP对接航天(现阶段)与其他供应商。 + +### 子系统外部接口 + +  发票服务子系统作为基础服务层的统一开票能力中心,为上游业务系统提供标准化的发票服务。系统采用适配器模式,支持多供应商接入,当前优先对接航天信息,预留博思等其他供应商接入能力,确保发票业务的合规性和可扩展性。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-INV-001 | 统一开票接口 | 统一受理电子发票开具请求 | 营收业务系统/微网厅 | HTTP/REST | 开票信息、购买方信息、商品明细、税额 | 发票申请ID、开票状态、预计完成时间 | +| IF-INV-002 | 作废红冲接口 | 发票作废和红字发票处理 | 营收业务系统 | HTTP/REST | 原发票号码、作废/红冲原因、操作类型 | 处理结果、新发票信息、作废状态 | +| IF-INV-003 | 发票查询接口 | 查询发票状态和下载链接 | 营收系统/微网厅/客户端 | HTTP/REST | 发票代码、发票号码、查询类型 | 发票状态、PDF下载链接、发票详情 | +| IF-INV-004 | 回执推送接口 | 接收供应商发票处理回执 | 航天信息/博思等供应商 | HTTP/REST | 回执ID、处理结果、发票文件、时间戳 | 接收确认、存储状态、通知结果 | +| IF-INV-005 | 供应商切换接口 | 供应商服务切换和负载均衡 | 发票服务网关 | HTTP/REST | 供应商标识、切换原因、备用方案 | 切换状态、新供应商信息、影响评估 | +| IF-INV-006 | 存证签章接口 | 发票电子存证和数字签章 | 存证签章模块 | HTTP/REST | 发票文件、签章类型、存证要求 | 存证凭证、签章状态、法律效力确认 | + +## 子系统架构设计 + +  发票服务子系统采用统一网关和适配器模式架构,通过统一开票网关屏蔽不同供应商的接口差异,供应商适配器实现具体厂商的协议转换,回执处理模块确保业务闭环,存证签章模块保障发票的法律效力。 + +```mermaid +graph TB + subgraph "发票服务子系统" + GW[统一开票网关] + ADP[供应商适配器] + RCPT[回执处理] + EVID[存证与签章] + end + + subgraph "上游系统" + REV[营收业务系统] + WECHAT[微网厅] + end + + subgraph "供应商" + HT[航天信息] + BOS[博思/预留] + end + + REV -.->|INV-001/002/003| GW + WECHAT -.->|发票查询/下载| GW + GW --> ADP --> HT + ADP -.-> BOS + HT -.-> RCPT --> EVID +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| INV-001 | 统一开票网关 | 统一鉴权、参数校验、基础路由 | 自行开发 | +| INV-002 | 供应商适配器 | 航天/博思等供应商协议适配、签名加验签 | 自行开发 | +| INV-003 | 回执处理 | 回执解析、状态机、失败重试、告警通知 | 自行开发 | +| INV-004 | 存证与签章 | 发票PDF/JSON存证、签章与链接生成、合规审计 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "发票服务子系统模块关系" + A[INV-001
统一开票网关] + B[INV-002
供应商适配器] + C[INV-003
回执处理] + D[INV-004
存证与签章] + end + + A -->|请求路由| B + B -->|供应商回调| C + C -->|状态更新| D + C -.->|状态回馈| A + + %% 样式定义 + classDef gatewayModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef adapterModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef processModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + + class A gatewayModule + class B adapterModule + class C,D processModule +``` + +### 模块描述 + +#### INV-001: 统一开票网关 + +- 统一入口鉴权与参数校验 +- 开票请求幂等控制 +- 基础路由与负载分发 +- 供应商简单选择 + +#### INV-002: 供应商适配器 + +- 航天信息SDK/HTTP对接 +- 字段映射与签名验签 +- 错误码标准化转换 +- 博思等供应商扩展预留 + +#### INV-003: 回执处理 + +- 开票状态回填处理 +- 失败重试(指数退避策略) +- 超时监控与告警 +- 微网厅消息联动通知 + +#### INV-004: 存证与签章 + +- 发票PDF存储管理 +- 票根JSON数据保存 +- 数字签章与下载链接 +- 审计日志与合规留痕 + + + +# 子系统9设计: 支付与银行结算子系统 + +## 任务概述 + +  支付与银行结算子系统(SYS-009)统一承载聚合支付/退款、渠道适配(微信/支付宝/银联聚合)、支付回调验签入账,以及银行实时收费、代扣/托收签约解约、送盘/回盘/对账契约与安全加解密/签名,向上对营收/微网厅等系统提供标准化支付与结算能力。夜间批量代扣、完整回盘状态补偿、对账差异处理与结算确认当前仍按后续完善项管理。 + +## 设计概述 + +### 总体约束 + +- 多渠道聚合:统一接入微信/支付宝/银联聚合 +- 统一结算:统一维护批次、回盘、对账和差异语义,完整结算闭环按后续完善项推进 +- 安全合规:签名/验签、加解密、回调防重放、幂等 +- 高可用:基础重试补偿机制 + +### 设计方案概述 + +- 采用"统一支付与结算网关 + 渠道/银行适配器 + 回调处理 + 对账处理 + 加解密/签名"的分层;对上REST接口,对下渠道SDK/HTTP与银行HTTP/SFTP对接。 + +### 子系统外部接口(SYS-009) + +  支付与银行结算子系统作为统一的支付能力中心,为上游业务系统提供聚合支付、银行实时收费、代扣/托收签解约、退款处理、对账管理等支付结算服务。以下接口表表达的是正式设计目标边界,其中聚合支付、实时收费查询/缴费、代扣/托收签解约已具备较明确实现证据;`BankWithholding` 六条银行入口已形成最小实现态闭环,托收平行链路、对账和完整结算闭环仍按部分实现或后续完善项管理。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-PAY-001 | 统一支付下单接口 | 统一处理各渠道支付下单请求 | 营收系统/微网厅 | HTTP/REST | 订单信息、支付方式、支付金额、用户标识 | 预支付订单号、支付参数、二维码 | +| IF-PAY-002 | 统一关单接口 | 订单关闭和撤销处理 | 营收系统/微网厅 | HTTP/REST | 订单号、关闭原因、操作类型 | 关单状态、退款信息、处理结果 | +| IF-PAY-003 | 统一退款接口 | 原路退款和部分退款处理 | 营收系统/微网厅 | HTTP/REST | 原订单号、退款金额、退款原因 | 退款单号、退款状态、预计到账时间 | +| IF-PAY-004 | 支付回调接口 | 接收渠道支付结果回调 | 微信/支付宝/银联 | HTTP/REST | 回调数据、签名、时间戳 | 处理确认、业务更新状态 | +| IF-PAY-005 | 批量代扣送盘接口 | 银行批量代扣文件发送 | 营收业务系统 | HTTP/REST/SFTP | 代扣清单、客户签约信息、扣款金额 | 送盘状态、批次号、预计处理时间(`BankWithholding` 已具备最小实现态闭环;真实文件通道联调仍待补证) | +| IF-PAY-006 | 批量代扣回盘接口 | 银行代扣结果回盘处理 | 银行系统 | HTTP/REST/SFTP | 回盘文件、处理结果、失败原因 | 解析结果、状态更新、异常处理(`BankWithholding` 已具备最小实现态闭环;真实文件解析与异常补偿仍待补证) | +| IF-PAY-007 | 批量对账文件接口 | 银行对账文件处理分析 | 银行系统/营收系统 | HTTP/REST/SFTP | 对账文件、对账日期、差异规则 | 对账结果、差异明细、调整建议(当前仍按部分实现或后续完善项管理) | +| IF-PAY-008 | 加解密签名接口 | 支付数据安全处理 | 内部模块调用 | HTTP/REST | 待处理数据、加密类型、签名算法 | 处理结果、安全凭证、验证状态 | + +## 子系统架构设计 + +  支付与银行结算子系统采用统一网关和多适配器架构,通过统一支付网关提供标准化支付接口,渠道适配器处理不同支付渠道的协议差异,银行适配器实现批量代扣和对账功能,回调处理确保支付结果的及时处理,加解密模块保障交易安全。 + +```mermaid +graph TB + subgraph "支付与银行结算子系统" + GW[统一支付与结算网关] + ADP_CH[渠道适配器] + ADP_BANK[银行适配器] + CB[回调处理] + RECON[对账处理] + CRYPTO[加解密/签名] + end + + subgraph "上游系统" + REV[营收业务系统] + WECHAT[微网厅] + end + + subgraph "外部机构" + WX[微信] + ALI[支付宝] + UPG[银联聚合] + BANK[银行] + end + + REV -.->|PAY-001/002/003/005/006/007| GW + WECHAT -.->|下单/查询| GW + GW --> ADP_CH --> WX + ADP_CH --> ALI + ADP_CH --> UPG + GW --> ADP_BANK --> BANK + WX -.-> CB + ALI -.-> CB + UPG -.-> CB + ADP_BANK -.-> RECON + GW -.-> CRYPTO +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| PAY-001 | 统一支付与结算网关 | 鉴权、参数校验、幂等、基础路由 | 自行开发 | +| PAY-002 | 渠道适配器 | 渠道参数映射、签名/验签、错误码转换 | 自行开发 | +| PAY-003 | 银行适配器 | 协议/文件规范适配、编码转换、SFTP/HTTP | 自行开发 | +| PAY-004 | 回调处理 | 回调验签、订单入账、补偿重试 | 自行开发 | +| PAY-005 | 批量对账处理 | 对账接收/解析、差错处理、账务回填、报告 | 自行开发 | +| PAY-006 | 加解密/签名 | SM2/SM4/3DES等算法、密钥管理 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "支付与银行结算子系统模块关系" + A[PAY-001
统一支付与结算网关] + B[PAY-002
渠道适配器] + C[PAY-003
银行适配器] + D[PAY-004
回调处理] + E[PAY-005
批量对账处理] + F[PAY-006
加解密/签名] + end + + A -->|渠道路由| B + A -->|银行对接| C + B -->|支付回调| D + C -->|对账数据| E + A -->|安全加密| F + + B -.->|状态反馈| A + C -.->|状态反馈| A + D -.->|结果通知| A + E -.->|对账结果| A + F -.->|密钥服务| A + + %% 样式定义 + classDef gatewayModule fill:#e3f2fd,stroke:#1976d2,stroke-width:2px + classDef adapterModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef processModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef securityModule fill:#e8f5e8,stroke:#388e3c,stroke-width:2px + + class A gatewayModule + class B,C adapterModule + class D,E processModule + class F securityModule +``` + +### 模块描述 + +#### PAY-001: 统一支付/代扣网关 + +- 统一入口鉴权与字段校验 +- 基础保护机制 +- 幂等键与重放攻击保护 +- 简单路由与流量分发 + +#### PAY-002: 渠道适配器 + +- 微信/支付宝/银联参数适配 +- 签名规范统一处理 +- 错误码标准化转换 +- 渠道响应格式统一 + +#### PAY-003: 银行适配器 + +- 银行与第三方支付协议对接 +- 签名验签与编码转换(GBK/UTF-8) +- SFTP/HTTP文件交互处理 +- 错误码映射与异常处理 + +#### PAY-004: 回调处理 + +- 支付回调验签确认 +- 订单状态同步对齐 +- 失败重试与异常告警 +- 回调幂等与去重处理 + +#### PAY-005: 对账处理 + +- 银行对账文件定时拉取解析 +- 差异识别与异常记录 +- 冲正/补记建议生成 +- 对账报告与追踪链路告警 +- 当前阶段按目标能力保留正式设计口径,不直接表述为已形成完整闭环 + +#### PAY-006: 加解密/签名 + +- 国密/商密算法支持 +- 密钥管理与定期轮换 +- 数据安全传输保障 + + + +# 子系统10设计: 消息服务子系统 + +## 任务概述 + +  消息服务子系统(SYS-010)负责统一消息推送、接收与处理,为各业务子系统提供消息通知服务。 + +**设计目标:** + +- 实现消息的统一推送与接收 +- 支持多种消息格式和推送方式 +- 确保消息的及时性和可靠性 + +**功能范围:** + +- **消息推送**:根据业务需求,向不同用户发送消息通知 +- **消息接收**:接收来自各业务系统的消息请求 +- **消息处理**:处理消息通知,生成响应结果 + +## 设计概述 + +### 总体约束 + +**技术约束:** + +- 基于消息队列技术实现消息的异步处理 +- 支持多种消息格式(如JSON、XML等) +- 实现消息的可靠传输和幂等处理 + +**性能约束:** + +- 支持高并发消息处理 +- 消息处理响应时间≤1秒 +- 消息队列容量≥100万条 + +**安全约束:** + +- 消息加密存储 +- 消息传输安全 +- 消息处理日志记录 + +### 子系统外部接口 + +  消息服务子系统作为统一的消息通知中心,为各业务系统提供多渠道消息推送能力。系统支持短信、邮件、站内信等多种消息渠道,与外部系统(OA、智水擎、水投数科APP)对接,实现消息的统一管理和分发。 + +| 接口编号 | 接口名称 | 功能描述 | 调用方 | 接口协议 | 输入参数 | 输出结果 | +|---|---|---|---|---|---|---| +| IF-MSG-001 | 短信发送接口 | 发送短信通知消息 | 营收/微网厅/工单系统 | HTTP/REST | 手机号、消息内容、模板ID、发送时间 | 发送状态、消息ID、预计到达时间 | +| IF-MSG-002 | 邮件发送接口 | 发送邮件通知消息 | 营收/工单/报装系统 | HTTP/REST | 邮箱地址、邮件主题、邮件内容、附件 | 发送状态、邮件ID、送达确认 | +| IF-MSG-003 | 站内信接口 | 发送系统站内消息 | 各业务系统 | HTTP/REST | 用户ID、消息标题、消息内容、消息类型 | 发送结果、消息状态、已读状态 | +| IF-MSG-004 | 微信消息推送接口 | 发送微信模板消息 | 微网厅系统 | HTTP/REST | 用户OpenID、模板ID、模板数据 | 推送状态、消息ID、送达状态 | +| IF-MSG-005 | 外部系统对接接口 | 对接OA/智水擎等外部系统 | OA系统/智水擎/水投数科APP | HTTP/REST | 系统标识、消息类型、接收用户、消息内容 | 对接状态、消息分发结果 | +| IF-MSG-006 | 固定模板管理接口 | 管理消息固定模板 | 系统管理员 | HTTP/REST | 模板类型、模板内容、适用场景 | 模板ID、保存状态、生效时间 | + +### 设计方案概述 + +**架构设计:** + +  消息服务子系统采用消息队列技术实现消息的异步处理。通过RabbitMQ实现消息的可靠传输和幂等处理。 + +**技术选型:** + +- **消息队列**:RabbitMQ +- **消息格式**:JSON +- **消息加密**:AES-256 +- **消息传输**:HTTPS + +## 子系统架构设计 + +  消息服务子系统采用消息中心架构模式,通过统一消息网关接收各业务系统的消息发送请求,通过渠道适配器实现不同消息渠道的协议转换,固定模板管理确保消息内容的规范性,外部系统对接实现与OA、智水擎等系统的消息互通。 + +```mermaid +graph TB + subgraph "消息服务子系统" + PUB[消息推送] + SUB[消息接收] + MQ[RabbitMQ] + end + + PUB --> MQ + SUB --> MQ +``` + +## 模块定义 + +### 模块列表 + +| 模块编号 | 模块名称 | 功能描述 | 开发方式 | +|---|---|---|---| +| MSG-001 | 消息网关模块 | 统一接入、鉴权、路由、幂等控制 | 自行开发 | +| MSG-002 | 短信服务模块 | 短信发送、回执处理、失败重试、供应商适配 | 自行开发 | +| MSG-003 | 邮件服务模块 | 邮件发送、附件管理、批量发送、回执处理 | 自行开发 | +| MSG-004 | 站内信模块 | 站内信管理、用户消息推送、已读状态跟踪 | 自行开发 | +| MSG-005 | 微信通知模块 | 微信模板消息、公众号推送通知 | 自行开发 | +| MSG-006 | 模板管理模块 | 消息模板管理、固定模板维护 | 自行开发 | +| MSG-007 | 外部系统适配模块 | 对接OA、智水擎、水投数科app等数科系统 | 自行开发 | + +### 模块间关系 + +```mermaid +graph TD + subgraph "消息服务子系统模块关系" + A[MSG-001
消息网关模块] + B[MSG-002
短信服务模块] + C[MSG-003
邮件服务模块] + D[MSG-004
站内信模块] + E[MSG-005
微信通知模块] + F[MSG-006
模板管理模块] + G[MSG-007
外部系统适配模块] + end + + %% 核心流程 + A -->|短信路由| B + A -->|邮件路由| C + A -->|站内信路由| D + A -->|微信路由| E + A -->|外部系统路由| G + + %% 模板服务 + F -->|短信模板| B + F -->|邮件模板| C + F -->|站内信模板| D + F -->|微信模板| E + F -->|外部模板| G + + %% 回执反馈 + B -.->|短信回执| A + C -.->|邮件回执| A + D -.->|已读状态| A + E -.->|微信回执| A + G -.->|外部回执| A + + %% 样式定义 + classDef gatewayModule fill:#e3f2fd,stroke:#1976d2,stroke-width:3px + classDef channelModule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px + classDef templateModule fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef externalModule fill:#e8f5e8,stroke:#388e3c,stroke-width:2px + + class A gatewayModule + class B,C,D,E channelModule + class F templateModule + class G externalModule +``` + +### 模块描述 + +#### MSG-001: 消息网关模块 + +- 统一消息接入与鉴权 +- 简单路由与负载均衡 +- 基础保护机制 +- 幂等控制与防重复发送 + +#### MSG-002: 短信服务模块 + +- 短信发送与供应商适配 +- 回执状态处理与确认 +- 失败重试与补偿机制 +- 短信固定内容管理 + +#### MSG-003: 邮件服务模块 + +- 邮件发送与附件管理 +- 批量邮件处理能力 +- 回执跟踪与状态确认 +- SMTP服务器配置管理 + +#### MSG-004: 站内信模块 + +- 站内消息推送管理 +- 用户消息中心维护 +- 已读/未读状态跟踪 +- 消息分类与过滤 + +#### MSG-005: 微信通知模块 + +- 微信模板消息发送 +- 公众号推送通知 +- 微信API接口对接 +- 推送结果状态回执 + +#### MSG-006: 模板管理模块 + +- 消息模板统一管理 +- 固定模板内容维护 +- 模板版本控制 +- 多渠道模板适配 + +#### MSG-007: 外部系统适配模块 + +- OA系统消息对接 +- 智水擎系统通知集成 +- 水投数科app消息推送 +- 外部API接口适配 + + + +# 非功能性需求的设计 + +## 性能的考虑 + +**设计目标:** + +- 系统响应时间:≤3秒(95%的请求) +- 并发用户数:≥200个在线用户 +- 数据库查询:≤1秒(单表查询) +- 批量处理:≥1000条/分钟 + +**设计措施:** + +1. **数据库优化** + - 采用达梦数据库主从架构,读写分离 + - 对核心业务表建立合适索引 + - 大表分区存储,历史数据归档 + - 连接池配置优化 + +2. **缓存策略** + - Redis缓存热点数据 + - 应用级缓存配置信息 + - CDN加速静态资源 + - 浏览器缓存优化 + +3. **应用优化** + - 异步处理非核心业务 + - 批量操作优化 + - SQL语句优化 + - 业务逻辑优化 + +## 兼容性的考虑 + +**浏览器兼容性:** + +- Chrome 80+(推荐) +- Firefox 75+ +- Safari 13+ +- Edge 80+ + +**数据库兼容性:** + +- 主要支持:达梦数据库 8.0+ +- 备选方案:PostgreSQL 12+ +- 预留接口:MySQL 8.0+ + +**操作系统兼容性:** + +- 服务器:Linux CentOS 7.6+/Ubuntu 18.04+ +- 客户端:Windows 10+/macOS 10.15+ + +## 安全的考虑 + +**身份认证:** + +- 基于OAuth2.0+CAS协议的单点登录 +- 基于JWT的无状态认证 +- 支持多因子认证(MFA) +- OAuth2+CAS第三方登录集成 +- 密码复杂度策略 + +**权限控制:** + +- RBAC角色权限模型 +- 细粒度功能权限控制 +- 数据权限隔离 +- 多租户数据隔离 + +**数据安全:** + +- 敏感数据加密存储 +- 数据传输HTTPS加密 +- 数据库连接加密 +- 定期数据备份 + +**系统安全:** + +- SQL注入防护 +- XSS攻击防护 +- CSRF攻击防护 +- 接口访问频率限制 + +## 可移植性的考虑 + +**平台无关性:** + +- 基于Java 17+,支持跨平台部署 +- 容器化部署,支持Docker/Kubernetes +- 数据库抽象层,支持多种数据库 +- 配置外部化,环境隔离 + +**云平台适配:** + +- 支持阿里云、腾讯云、华为云部署 +- 适配云原生架构 +- 支持弹性扩缩容 +- 云存储服务集成 + +## 关键技术特性 + +### 响应式设计 + +- **移动端适配**:完美适配各种移动设备 +- **触屏优化**:优化的触屏交互体验 +- **加载优化**:快速的页面加载速度 +- **离线支持**:基础功能离线可用 + +### 安全保障 + +- **数据加密**:敏感数据传输加密 +- **身份验证**:多重身份验证机制 +- **支付安全**:完善的支付安全策略 +- **隐私保护**:严格的用户隐私保护 + +## 集成与测试的考虑 + +**集成策略:** + +- 采用自底向上的集成方式 +- 先完成基础服务开发测试 +- 再进行业务服务集成 +- 最后进行端到端集成测试 + +**测试策略:** + +- 单元测试:代码覆盖率≥80% +- 集成测试:覆盖主要业务流程 +- 性能测试:验证性能指标 +- 安全测试:安全漏洞扫描 + +## 可扩展性的考虑 + +**架构扩展:** + +- 微服务架构支持水平扩展 +- 数据库分库分表支持 +- 缓存集群扩展 +- 负载均衡扩展 + +**功能扩展:** + +- 插件化架构设计 +- 开放API接口 +- 工作流引擎支持 +- 配置化业务规则 + +## 可靠性的考虑 + +**高可用设计:** + +- 应用服务集群部署 +- 数据库主从备份 +- 负载均衡器冗余 +- 自动故障切换 + +**容错机制:** + +- 服务降级策略 +- 熔断器模式 +- 重试机制 +- 异常处理策略 + +**数据备份:** + +- 数据库实时备份 +- 定期全量备份 +- 增量备份策略 +- 异地备份存储 + +## 可维护性的考虑 + +**代码质量:** + +- 统一编码规范 +- 代码审查制度 +- 自动化测试 +- 持续集成/持续部署 + +**运维友好:** + +- 完善的部署文档 +- 运维监控dashboard +- 日志集中管理 +- 性能监控告警 + +**文档管理:** + +- API文档自动生成 +- 系统架构文档 +- 运维操作手册 +- 故障处理手册