更新福建水务营收系统概要设计文档,进行架构调整,将工单、表务、报装模块剥离为独立子系统(SYS-005/006/007),新增发票服务子系统(SYS-008)和支付与银行对接子系统(SYS-009),更新目录、功能范围、子系统列表及接口定义,完善相关章节内容,提升文档的完整性和可读性,符合甲方A级交付标准。

This commit is contained in:
tangweijie 2025-08-18 16:53:21 +08:00
parent 44b56f732a
commit 694866eea0
4 changed files with 1240 additions and 391 deletions

View File

@ -0,0 +1,573 @@
# 营收系统接口规范设计文档
## 1. 文档概述
### 1.1 文档信息
- **文档名称**:营收系统接口规范设计文档
- **版本**1.0
- **编写日期**2024年12月
- **基于原始文档**:营收系统缴费接口 v1.5
### 1.2 设计目标
本文档旨在为营收系统与银行/第三方支付机构之间的接口交互提供标准化、规范化的设计指导,确保系统的高可用性、安全性和可扩展性。
### 1.3 适用范围
- 公用事业单位(水司、电力等)
- 银行机构
- 第三方支付平台
- 系统集成商
## 2. 系统架构设计
### 2.1 整体架构
```
┌─────────────────┐ HTTP/HTTPS ┌─────────────────┐
│ │<──────────────────>│ │
│ 银行/支付平台 │ │ 营收系统 │
│ │ │ │
└─────────────────┘ └─────────────────┘
│ │
│ │
v v
┌─────────────────┐ ┌─────────────────┐
│ 对账文件处理 │ │ 业务数据库 │
└─────────────────┘ └─────────────────┘
```
### 2.2 接口分层设计
```
┌─────────────────────────────────────────────────────────┐
│ 表示层 (Presentation Layer) │
│ HTTP/HTTPS + XML/JSON │
├─────────────────────────────────────────────────────────┤
│ 业务层 (Business Layer) │
│ 查询服务 | 缴费服务 | 代扣服务 | 对账服务 │
├─────────────────────────────────────────────────────────┤
│ 数据层 (Data Layer) │
│ 用户数据 | 账单数据 | 交易数据 │
└─────────────────────────────────────────────────────────┘
```
## 3. 接口设计规范
### 3.1 RESTful设计原则
虽然原系统使用XML格式但建议遵循RESTful设计原则
| 功能模块 | HTTP方法 | 资源路径 | 描述 |
|----------|----------|----------|------|
| 账单查询 | POST | `/api/app/billQuery/query` | 查询用户账单 |
| 账单缴费 | POST | `/api/app/billPay/pay` | 执行缴费操作 |
| 账单红冲 | POST | `/api/app/payInvalid/payInvalid` | 红冲已缴费账单 |
| 代扣签约 | POST | `/api/app/bankWithholding/signing` | 代扣签约 |
| 代扣解约 | POST | `/api/app/bankWithholding/termination` | 代扣解约 |
| 代扣送盘 | POST | `/api/app/bankWithholding/sendDisc` | 代扣送盘 |
| 代扣回盘 | POST | `/api/app/bankWithholding/backDisc` | 代扣回盘 |
### 3.2 数据格式规范
#### 3.2.1 请求格式
- **内容类型**`application/xml``application/json`
- **字符编码**GBKXML或 UTF-8JSON
- **请求方法**POST
#### 3.2.2 响应格式
- **状态码**200 OK业务成功/失败通过返回码区分)
- **内容类型**:与请求格式保持一致
- **响应结构**:统一的响应格式
### 3.3 安全设计规范
#### 3.3.1 加密策略
```
┌─────────────────┐ 加密传输 ┌─────────────────┐
│ 客户端 │ ──────────────> │ 服务端 │
│ │ │ │
│ 1. 数据加密 │ │ 1. 数据解密 │
│ 2. Base64编码 │ │ 2. Base64解码 │
│ 3. HTTP传输 │ │ 3. 业务处理 │
└─────────────────┘ └─────────────────┘
```
#### 3.3.2 支持的加密算法
| 加密类型 | 加密模式 | 填充方式 | 安全等级 |
|----------|----------|----------|----------|
| 3DES | ECB | PKCS7 | 中等 |
| SM2 | C1C3C2/C1C2C3 | - | 高 |
| SM4 | ECB/CBC | PKCS7 | 高 |
#### 3.3.3 请求头设计
```http
Content-Type: application/xml; charset=GBK
EncryptType: 3DES
EncryptMode: ECB
DataType: XML
```
### 3.4 错误处理规范
#### 3.4.1 统一错误码设计
```
AAAAAAA: 成功
DEF0xxx: 业务错误 (0001-0999)
SYS1xxx: 系统错误 (1000-1999)
SEC2xxx: 安全错误 (2000-2999)
NET3xxx: 网络错误 (3000-3999)
```
#### 3.4.2 错误响应格式
```xml
<out>
<Version>1.0.1</Version>
<InstId>00001</InstId>
<TranCode>QueryRes</TranCode>
<TranDate>20240101</TranDate>
<TranSeq>123456789012</TranSeq>
<RespCode>DEF0001</RespCode>
<RespMessage>无相应记录</RespMessage>
<ErrorDetail>
<ErrorCode>DEF0001</ErrorCode>
<ErrorMsg>用户编号123456不存在</ErrorMsg>
<ErrorTime>2024-01-01 12:00:00</ErrorTime>
</ErrorDetail>
</out>
```
## 4. 数据模型设计
### 4.1 核心实体模型
#### 4.1.1 用户实体 (Customer)
```sql
CREATE TABLE customer (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
bill_key VARCHAR(35) NOT NULL UNIQUE COMMENT '客户编号',
customer_name VARCHAR(150) NOT NULL COMMENT '客户姓名',
contract_no VARCHAR(30) COMMENT '合同号',
company_id VARCHAR(30) NOT NULL COMMENT '机构编码',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_bill_key (bill_key),
INDEX idx_company_id (company_id)
);
```
#### 4.1.2 账单实体 (Bill)
```sql
CREATE TABLE bill (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
bill_key VARCHAR(35) NOT NULL COMMENT '客户编号',
company_id VARCHAR(30) NOT NULL COMMENT '机构编码',
pay_amount DECIMAL(16,2) NOT NULL COMMENT '缴费金额',
balance DECIMAL(16,2) DEFAULT 0.00 COMMENT '余额',
begin_date DATE COMMENT '账单开始日期',
end_date DATE COMMENT '账单结束日期',
bill_status TINYINT DEFAULT 0 COMMENT '账单状态 0:未缴费 1:已缴费',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_bill_key (bill_key),
INDEX idx_company_id (company_id),
INDEX idx_status (bill_status)
);
```
#### 4.1.3 交易记录 (Transaction)
```sql
CREATE TABLE transaction (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tran_seq VARCHAR(40) NOT NULL UNIQUE COMMENT '交易流水号',
bill_key VARCHAR(35) NOT NULL COMMENT '客户编号',
company_id VARCHAR(30) NOT NULL COMMENT '机构编码',
tran_code VARCHAR(20) NOT NULL COMMENT '交易码',
pay_amount DECIMAL(16,2) NOT NULL COMMENT '交易金额',
pay_date DATETIME NOT NULL COMMENT '交易时间',
sub_channel TINYINT COMMENT '二级渠道 1:支付宝 2:微信 6:其它',
tran_status TINYINT DEFAULT 0 COMMENT '交易状态 0:处理中 1:成功 2:失败',
resp_code VARCHAR(7) COMMENT '返回码',
resp_message VARCHAR(60) COMMENT '返回消息',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_tran_seq (tran_seq),
INDEX idx_bill_key (bill_key),
INDEX idx_pay_date (pay_date),
INDEX idx_status (tran_status)
);
```
### 4.2 代扣相关实体
#### 4.2.1 代扣协议 (WithholdingAgreement)
```sql
CREATE TABLE withholding_agreement (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
bill_key VARCHAR(35) NOT NULL COMMENT '客户编号',
company_id VARCHAR(30) NOT NULL COMMENT '机构编码',
account_name VARCHAR(150) NOT NULL COMMENT '开户名',
account_no VARCHAR(30) NOT NULL COMMENT '开户账号',
bank_name VARCHAR(150) COMMENT '银行名称',
contract_no VARCHAR(150) COMMENT '合同号',
agreement_no VARCHAR(150) COMMENT '协议号',
bank_type TINYINT COMMENT '银行类型 0:本行 1:他行',
agreement_status TINYINT DEFAULT 0 COMMENT '协议状态 0:未签约 1:已签约 2:已解约',
signing_date DATE COMMENT '签约日期',
termination_date DATE COMMENT '解约日期',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_bill_key (bill_key),
INDEX idx_account_no (account_no),
INDEX idx_status (agreement_status)
);
```
## 5. 接口实现规范
### 5.1 查询接口实现
#### 5.1.1 业务流程
```
Client Request → Parameter Validation → Business Logic → Data Query → Response Format → Client Response
```
#### 5.1.2 核心逻辑
```java
@Service
public class BillQueryService {
public QueryResponse queryBill(QueryRequest request) {
// 1. 参数校验
validateRequest(request);
// 2. 业务逻辑处理
List<Bill> bills = billRepository.findByBillKeyAndCompanyId(
request.getBillKey(),
request.getCompanyId()
);
// 3. 构造响应
return buildQueryResponse(bills);
}
private void validateRequest(QueryRequest request) {
if (StringUtils.isEmpty(request.getBillKey())) {
throw new BusinessException("DEF0001", "客户编号不能为空");
}
// 其他校验逻辑...
}
}
```
### 5.2 缴费接口实现
#### 5.2.1 业务流程
```
Client Request → Parameter Validation → Balance Check → Payment Processing → Transaction Record → Response
```
#### 5.2.2 事务处理
```java
@Service
@Transactional
public class BillPayService {
public PayResponse payBill(PayRequest request) {
// 1. 参数校验
validatePayRequest(request);
// 2. 账单查询
Bill bill = billRepository.findByBillKeyAndCompanyId(
request.getBillKey(),
request.getCompanyId()
);
// 3. 金额校验
if (bill.getPayAmount().compareTo(request.getPayAmount()) != 0) {
throw new BusinessException("DEF0002", "缴费金额不匹配");
}
// 4. 更新账单状态
bill.setBillStatus(1);
billRepository.save(bill);
// 5. 记录交易
Transaction transaction = createTransaction(request);
transactionRepository.save(transaction);
// 6. 构造响应
return buildPayResponse(request);
}
}
```
## 6. 性能设计规范
### 6.1 性能指标
| 指标类型 | 要求 | 说明 |
|----------|------|------|
| 响应时间 | < 3秒 | 95%的请求在3秒内响应 |
| 并发量 | 1000 TPS | 支持1000笔/秒的交易处理 |
| 可用性 | 99.9% | 年度可用性不低于99.9% |
| 错误率 | < 0.1% | 系统错误率控制在0.1%以内 |
### 6.2 缓存策略
```java
@Service
public class BillQueryService {
@Cacheable(value = "billCache", key = "#billKey + '_' + #companyId")
public List<Bill> queryBillWithCache(String billKey, String companyId) {
return billRepository.findByBillKeyAndCompanyId(billKey, companyId);
}
}
```
### 6.3 数据库优化
#### 6.3.1 索引设计
- 主要查询字段建立索引
- 复合索引优化多条件查询
- 定期分析索引使用情况
#### 6.3.2 分表策略
- 按时间分表:每月一张交易表
- 按机构分库:不同机构使用不同数据库
## 7. 监控与日志规范
### 7.1 日志规范
#### 7.1.1 日志级别
- ERROR: 系统错误,需要立即处理
- WARN: 业务警告,需要关注
- INFO: 关键业务流程记录
- DEBUG: 调试信息
#### 7.1.2 日志格式
```
[时间戳] [日志级别] [线程名] [类名] [方法名] - [交易流水号] [业务描述] [详细信息]
```
示例:
```
2024-01-01 12:00:00.123 [INFO] [http-thread-1] [BillQueryService] [queryBill] - [TXN123456789012] 查询账单开始 {"billKey":"123456","companyId":"654321"}
```
### 7.2 监控指标
#### 7.2.1 业务监控
- 交易成功率
- 平均响应时间
- 接口调用量
- 错误码分布
#### 7.2.2 系统监控
- CPU使用率
- 内存使用率
- 数据库连接数
- 网络IO
## 8. 部署架构规范
### 8.1 生产环境架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 负载均衡器 │────>│ Web服务器1 │ │ 数据库主库 │
│ (Nginx/F5) │ │ (Tomcat) │────>│ (MySQL) │
│ │ └─────────────────┘ │ │
│ │ ┌─────────────────┐ └─────────────────┘
│ │────>│ Web服务器2 │ ┌─────────────────┐
└─────────────────┘ │ (Tomcat) │────>│ 数据库从库 │
└─────────────────┘ │ (MySQL) │
└─────────────────┘
```
### 8.2 容器化部署
#### 8.2.1 Docker配置
```dockerfile
FROM openjdk:8-jre-alpine
VOLUME /tmp
ADD app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
```
#### 8.2.2 Kubernetes配置
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: billing-api
spec:
replicas: 3
selector:
matchLabels:
app: billing-api
template:
metadata:
labels:
app: billing-api
spec:
containers:
- name: billing-api
image: billing-api:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
```
## 9. 测试规范
### 9.1 测试策略
#### 9.1.1 单元测试
- 覆盖率 >= 80%
- 核心业务逻辑 100% 覆盖
- Mock 外部依赖
#### 9.1.2 集成测试
- 接口层面的集成测试
- 数据库集成测试
- 第三方服务集成测试
#### 9.1.3 性能测试
- 压力测试:测试系统极限
- 负载测试:测试正常负载下的性能
- 稳定性测试:长时间运行测试
### 9.2 测试用例设计
#### 9.2.1 查询接口测试用例
```java
@Test
public void testQueryBill_Success() {
// Given
QueryRequest request = new QueryRequest();
request.setBillKey("123456");
request.setCompanyId("654321");
// When
QueryResponse response = billQueryService.queryBill(request);
// Then
assertEquals("AAAAAAA", response.getRespCode());
assertNotNull(response.getData());
}
@Test
public void testQueryBill_NotFound() {
// Given
QueryRequest request = new QueryRequest();
request.setBillKey("999999");
request.setCompanyId("654321");
// When & Then
BusinessException exception = assertThrows(
BusinessException.class,
() -> billQueryService.queryBill(request)
);
assertEquals("DEF0001", exception.getCode());
}
```
## 10. 安全审计规范
### 10.1 安全审计要求
#### 10.1.1 审计内容
- 所有接口调用记录
- 敏感操作日志
- 异常访问记录
- 系统配置变更
#### 10.1.2 审计日志格式
```json
{
"timestamp": "2024-01-01T12:00:00.123Z",
"event_type": "API_CALL",
"user_id": "bank_001",
"ip_address": "192.168.1.100",
"endpoint": "/api/app/billQuery/query",
"request_id": "TXN123456789012",
"response_code": "AAAAAAA",
"execution_time": 1500,
"data_accessed": {
"bill_key": "123456",
"company_id": "654321"
}
}
```
### 10.2 安全控制措施
#### 10.2.1 访问控制
- IP白名单机制
- API密钥认证
- 请求频率限制
#### 10.2.2 数据保护
- 敏感数据加密存储
- 传输过程加密
- 数据脱敏处理
## 11. 运维规范
### 11.1 发布流程
```
开发环境 → 测试环境 → 预生产环境 → 生产环境
↓ ↓ ↓ ↓
单元测试 集成测试 性能测试 灰度发布
```
### 11.2 回滚策略
#### 11.2.1 快速回滚
- 保留前一版本的部署包
- 数据库版本管理
- 配置文件版本控制
#### 11.2.2 回滚触发条件
- 系统错误率超过阈值
- 响应时间超过预期
- 业务功能异常
## 12. 总结
本规范设计文档为营收系统接口的设计、开发、测试、部署和运维提供了全面的指导。通过遵循这些规范,可以确保系统的:
1. **可靠性**:通过完善的错误处理和事务管理
2. **安全性**:通过多层次的安全控制措施
3. **性能**:通过合理的架构设计和优化策略
4. **可维护性**:通过标准化的代码和文档规范
5. **可扩展性**:通过模块化和微服务架构设计
建议在实际项目中根据具体需求对本规范进行适当调整和完善。

View File

@ -26,7 +26,8 @@
| `water_biz_security_design.md` | ✅ 已完成 | 100% | A级 | 2024-12-19 | 已剔除等保三级内容,移除标题序号 |
| `新-数据库设计说明书.md` | ✅ 已完成 | 100% | A++级 | 2024-12-19 | 完整的PostgreSQL表结构包含30个系统表+113个业务表的完整字段定义ER图索引设计性能优化覆盖营收系统全业务场景新增60个遗漏表 |
| `新-详细设计说明书.md` | ✅ 已完成 | 100% | A+级 | 2024-12-19 | 符合302国家标准格式的详细设计文档包含5个子系统的完整模块设计、接口规范、业务流程总计1215行可直接指导开发实施 |
| `新-概要设计说明书.md` | ✅ 已完成 | 100% | A+级 | 2024-12-19 | 符合301国家标准格式的概要设计文档已完整整合微网厅子系统设计现包含4个完整子系统统一平台、营收业务系统、手机抄表APP、微网厅系统的概要设计、非功能性需求等章节形成完整的设计文档体系 |
| `新-概要设计说明书.md` | ✅ 已完成 | 100% | A+级 | 2025-08-18 | 架构调整将工单、表务、报装从营收业务系统中剥离为独立子系统SYS-005/006/007更新目录、功能范围、子系统列表、调用关系图、接口定义及相关章节保留客户服务模块在营收业务系统内的作用。 |
| 新增 | — | — | — | 2025-08-18 | 新增发票服务子系统SYS-008作为基础服务层统一开票能力中心优先对接航天信息预留博思等供应商。 |
### 补充文档 (可选交付)

View File

@ -197,11 +197,10 @@
- [ ] 阶梯水价计算流程
- [ ] 欠费催缴流程
- [x] **业务工单管理流程** ✅ (2024-12-19)
- [x] 业务工单统一管理设计 ✅
- [x] 表务工单整合到业务工单模块 ✅
- [x] 工单全生命周期管理流程 ✅
- [x] 四类工单管理:业务清单、上报清单、稽查工单、换表工单 ✅
- [x] **工单管理子系统化** ✅ (2025-08-18)
- [x] 将工单从营收系统中剥离为SYS-005 ✅
- [x] 更新子系统列表与关系图 ✅
- [x] 新增工单系统接口与架构图 ✅
### 📋 安全设计完善
@ -314,11 +313,11 @@
- [x] **架构图设计** - 整体架构图、物理部署图、子系统调用关系图 ✅
### 子系统概要设计
- [x] **统一平台设计** - 功能界面、工程目录、模块列表、模块关系、中间件设计 ✅
- [x] **营收系统设计** - 核心业务流程、模块设计、业务规则、接口定义
- [x] **表务系统设计** - 工单管理、仓库管理、设备档案管理
- [x] **报装系统设计** - 报装流程、现场踏勘、施工验收管理
- [x] **客户服务设计** - 多渠道服务、在线缴费、移动端服务
- [x] **统一平台设计** - 功能界面、模块列表、模块关系、中间件设计 ✅
- [x] **营收系统设计** - 保留客户服务模块,移除工单/表务/报装(独立子系统)
- [x] **表务管理系统设计SYS-006** - 基础、仓库、档案
- [x] **报装业务系统设计SYS-007** - 流程、工程、档案
- [x] **工单管理系统设计SYS-005** - 工单中心、流程引擎、监控、统计
### 技术规范设计
- [x] **硬件配置规格** - DMZ区域、应用服务区、数据服务区、管理服务区配置 ✅

File diff suppressed because it is too large Load Diff