Files
cobol-java-v3/benchmark-programs/README.md
NB-076 94400d50d4 feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 09:53:21 +08:00

162 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 电信请求书系统 — COBOL 测试基准程序集
**Telecom Billing System — COBOL Test Benchmark Suite**
基于 [cobol-test-benchmark.md](../cobol-test-benchmark.md) 的 35 种 COBOL 程序类型 + 8 项横跨功能测试,映射为模拟的电信请求书(计费)处理系统。
## 系统架构
```
┌───────────────────┐
│ 外部系统 CDR │
│ (CSV 格式) │
└─────────┬─────────┘
┌─────────▼─────────┐
│ 15/21 CDR 取込 │ CSV→FB转换
└─────────┬─────────┘
┌─────────▼─────────┐
│ 13/27/31 CDR校验 │ 字段/半角/重複
└─────────┬─────────┘
┌──────────────┼──────────────┐
│ │ │
┌──────▼──────┐ ┌────▼────┐ ┌──────▼──────┐
│ 34 CDR 排序 │ │35 CDR合并│ │ 29 编码转换 │
└──────┬──────┘ └────┬────┘ └──────┬──────┘
│ │ │
└──────────────┼──────────────┘
┌─────────────────────▼─────────────────────┐
│ 02 合同↔CDR 匹配 (1:N) │
│ 03 线路↔请求书 (N:1) │
│ 01 请求书↔支付对账 (1:1) │
│ 16-22 二级/组合匹配 │
└─────────────────────┬─────────────────────┘
┌─────────────────────▼─────────────────────┐
│ 24 资费表检索 (SEARCH ALL) │
│ 25 计费子程序 (CALL) │
│ 05/06 条件判定 (IF/EVALUATE) │
└─────────────────────┬─────────────────────┘
┌─────────────────────▼─────────────────────┐
│ 07/08/30 用量/费用汇总 (key切) │
│ 32/33 混合处理 │
└─────────────────────┬─────────────────────┘
┌─────────────────────▼─────────────────────┐
│ 04 请求书编辑输出 (GETPUT/报表) │
│ 09/23/26 DB更新/检索 │
│ 14 在线照会 (CICS模拟) │
└─────────────────────┬─────────────────────┘
┌─────────────────────▼─────────────────────┐
│ 10/11/12 请求书分割输出 │
│ 28 SYSIN批量参数 │
└───────────────────────────────────────────┘
```
## 35 类型 → 电信业务映射
| 目录 | 电信功能 | COBOL 类型 | 处理阶段 |
|------|---------|-----------|---------|
| `01-matching-1-1` | 请求书↔支付对账 | 1:1匹配 | 对账 |
| `02-matching-1-N` | 合同↔通话明细匹配 | 1:N匹配 | 计费前 |
| `03-matching-N-1` | 多线路→请求书汇集 | N:1匹配 | 计费后 |
| `04-edit-getput` | 请求书编辑输出 | 编辑 | 输出 |
| `05-branch-if` | 料金阶梯判定(IF) | IF分支 | 计费 |
| `06-branch-evaluate` | 套餐类型判定 | EVALUATE分支 | 计费 |
| `07-keybreak-summary` | 加入者月汇总 | key切汇总 | 集计 |
| `08-keybreak-aggregate` | 套餐统计 | key切聚合 | 集计 |
| `09-db-update` | 客户DB更新 | DB更新 | DB |
| `10-divide-50` | 请求书50分割输出 | 50分割 | 输出 |
| `11-divide-25` | 明细25分割 | 25分割 | 输出 |
| `12-divide-100` | 数据100分割 | 100分割 | 输出 |
| `13-validation-nodup` | CDR字段校验 | 校验(无重复) | 前处理 |
| `14-online-cics` | 在线客户照会 | online/CICS | 在线 |
| `15-csv-fb-nolf` | 外部CDR CSV取込(无LF) | CSV→FB | 取込 |
| `16-matching-2stage-1-1` | 二级请求书核对 | 二级1:1 | 对账 |
| `17-matching-2stage-N-1` | 线路汇总→请求书 | 二级N:1 | 集计 |
| `18-matching-MN-to-M` | 合同↔套餐匹配 | M:N→M条 | 计费 |
| `19-matching-MN-to-N` | 套餐适用明细 | M:N→N条 | 计费 |
| `20-matching-MN-to-MxN` | CDR详细清单 | M:N→M×N | 计费 |
| `21-csv-fb-lf` | CDR CSV取込(有LF) | CSV→FB(LF) | 取込 |
| `22-matching-2stage-MN` | 二级套餐匹配 | 二级M:N | 计费 |
| `23-select-condition` | 客户合同检索 | SELECT条件 | DB |
| `24-table-search` | 资费表检索 | 内部表 | 计费 |
| `25-subprogram` | 计费子程序 | 子程序 | 计费 |
| `26-db-search` | 客户信息检索 | DB检索 | DB |
| `27-validation-halfwidth` | 电话号码格式校验 | 半角校验 | 前处理 |
| `28-sysin` | 批量参数设定 | SYSIN读取 | 共通 |
| `29-ascii-ebcdic` | 主机编码转换 | 编码转换 | 接口 |
| `30-keybreak-other` | 通话状态变化检测 | key切非汇总 | 检测 |
| `31-validation-withdup` | 重复CDR检测 | 校验(含重复) | 前处理 |
| `32-mix-1N-samekeybreak` | 合同+月别集计 | 1:N+同key切 | 混合 |
| `33-mix-1N-diffkeybreak` | 线路+类型切替 | 1:N+异key切 | 混合 |
| `34-sort` | CDR排序 | SORT | 前处理 |
| `35-merge` | 多源CDR合并 | MERGE | 取込 |
## 横跨功能
| 目录 | 电信业务场景 |
|------|------------|
| `cross-cutting/variable-length` | 可变长CDR记录、ODO套餐明细表 |
| `cross-cutting/loop` | 批量处理循环(PERFORM变种) |
| `cross-cutting/numeric-precision` | 资费计算精度(ROUNDED/SIZE ERROR) |
| `cross-cutting/japanese` | 客户名日文处理(PIC N/全角假名) |
| `cross-cutting/date` | 账期计算(闰年/和历/月末) |
| `cross-cutting/rerun` | 请求书再发行(幂等性) |
| `cross-cutting/exclusion` | 排他控制(文件竞争) |
| `cross-cutting/performance` | 大容量CDR处理性能 |
| `cross-cutting/file-organization` | RRDS/索引文件编成 |
## 流水线处理 (pipeline/)
端到端批处理流程:
```
1. CDR取込 → 15-csv-fb-nolf (外部CDR CSV→固定长)
2. CDR校验 → 13-validation-nodup (字段校验)
3. CDR排序 → 34-sort (按客户/时间排序)
4. 合同匹配 → 02-matching-1-N (合同↔CDR关联)
5. 资费检索 → 24-table-search (套餐单价查找)
6. 计费计算 → 25-subprogram (时长×单价)
7. 月汇总 → 07-keybreak-summary (加入者别集计)
8. 请求书 → 04-edit-getput (请求书输出)
9. 分割 → 10-divide-50 (请求书50分割)
```
```bash
cd pipeline && bash run-pipeline.sh
```
## 快速开始
```bash
# 编译全部
bash common/scripts/build.sh
# 运行全部测试
bash common/scripts/run_tests.sh
# 运行流水线
cd pipeline && bash run-pipeline.sh
# 单个测试
cd 34-sort && bash run.sh
```
## 数据约定
- **客户ID**: `CUST000001` 格式 (10字节)
- **合同ID**: `CTR000001` 格式 (10字节)
- **CDR编号**: `CDR000001` 格式 (10字节)
- **请求书ID**: `INV2025001` 格式 (10字节)
- **电话号码**: `8613800138001` 格式 (中国手机, 11字节)
- **套餐代码**: `P01/P02/P03` (3字节)
- **金额**: 分为单位 (9字节整数)
- **日期**: YYYYMMDD 格式 (8字节)
- **账期**: YYYYMM 格式 (6字节)