94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
258 lines
9.5 KiB
COBOL
258 lines
9.5 KiB
COBOL
IDENTIFICATION DIVISION.
|
||
PROGRAM-ID. PipelineDriver.
|
||
*> ============================================================
|
||
*> 电信请求书系统 — 流水线集成演示驱动
|
||
*>
|
||
*> 模拟月次请求书发行批处理流程:
|
||
*> CDR取込→校验→排序→匹配→资费检索→计费→判定→汇总→输出→分割
|
||
*>
|
||
*> 本程序为流水线的 COBOL 层面集成演示,
|
||
*> 通过 CALL 子程序调用各处理模块。
|
||
*> ============================================================
|
||
|
||
ENVIRONMENT DIVISION.
|
||
DATA DIVISION.
|
||
WORKING-STORAGE SECTION.
|
||
|
||
*> 流水线状态
|
||
01 PL-STATUS.
|
||
05 PL-STAGE PIC 9(2).
|
||
05 PL-RESULT PIC X(20).
|
||
05 PL-RC PIC 9(2).
|
||
|
||
*> 共通数据区 (CDR记录)
|
||
01 CDR-REC.
|
||
05 CDR-ID PIC X(10).
|
||
05 CDR-CALLER PIC X(11).
|
||
05 CDR-CALLEE PIC X(11).
|
||
05 CDR-DURATION PIC 9(9).
|
||
05 CDR-FILLER PIC X(4).
|
||
|
||
*> 合同数据
|
||
01 CONTRACT-REC.
|
||
05 CTR-ID PIC X(10).
|
||
05 CTR-CUST-ID PIC X(10).
|
||
05 CTR-PLAN PIC X(3).
|
||
05 CTR-FILLER PIC X(22).
|
||
|
||
*> 计费结果
|
||
01 BILL-REC.
|
||
05 BLL-CUST-ID PIC X(10).
|
||
05 BLL-AMOUNT PIC 9(9).
|
||
05 BLL-MONTH PIC 9(6).
|
||
05 BLL-FILLER PIC X(20).
|
||
|
||
*> 请求书
|
||
01 INVOICE-REC.
|
||
05 INV-ID PIC X(10).
|
||
05 INV-CUST-ID PIC X(10).
|
||
05 INV-MONTH PIC 9(6).
|
||
05 INV-AMOUNT PIC 9(9).
|
||
05 INV-STATUS PIC X(1).
|
||
05 INV-FILLER PIC X(9).
|
||
|
||
01 WS-I PIC 9(2).
|
||
01 WS-J PIC 9(2).
|
||
01 WS-TOTAL PIC 9(10).
|
||
01 WS-PASS PIC 9(2) VALUE 0.
|
||
01 WS-FAIL PIC 9(2) VALUE 0.
|
||
|
||
PROCEDURE DIVISION.
|
||
MAIN.
|
||
DISPLAY " "
|
||
DISPLAY "╔══════════════════════════════════════════════╗"
|
||
DISPLAY "║ 电信请求书系统 Pipeline Demo ║"
|
||
DISPLAY "║ Telecom Billing System Pipeline Demo ║"
|
||
DISPLAY "╚══════════════════════════════════════════════╝"
|
||
DISPLAY " "
|
||
|
||
*> Stage 1: CDR取込 (模拟)
|
||
PERFORM STAGE-1-CDR-IMPORT.
|
||
|
||
*> Stage 2: CDR校验
|
||
PERFORM STAGE-2-CDR-VALIDATE.
|
||
|
||
*> Stage 3: CDR排序 (SORT模拟)
|
||
PERFORM STAGE-3-CDR-SORT.
|
||
|
||
*> Stage 4: 合同匹配 (1:N模拟)
|
||
PERFORM STAGE-4-CONTRACT-MATCH.
|
||
|
||
*> Stage 5: 资费检索
|
||
PERFORM STAGE-5-TARIFF-LOOKUP.
|
||
|
||
*> Stage 6: 计费计算
|
||
PERFORM STAGE-6-BILLING-CALC.
|
||
|
||
*> Stage 7: 条件判定
|
||
PERFORM STAGE-7-RATE-DETERMINE.
|
||
|
||
*> Stage 8: 汇总
|
||
PERFORM STAGE-8-AGGREGATE.
|
||
|
||
*> Stage 9: 请求书输出
|
||
PERFORM STAGE-9-INVOICE-OUTPUT.
|
||
|
||
*> Stage 10: 分割
|
||
PERFORM STAGE-10-SPLIT.
|
||
|
||
DISPLAY " "
|
||
DISPLAY "═══════════════════════════════════════════════"
|
||
DISPLAY " Pipeline Demo: PASS=" WS-PASS " FAIL=" WS-FAIL
|
||
IF WS-FAIL = 0
|
||
DISPLAY " 电信请求书系统: 正常终了"
|
||
STOP RUN RETURNING 0
|
||
ELSE
|
||
DISPLAY " 电信请求书系统: 异常终了"
|
||
STOP RUN RETURNING 1
|
||
END-IF
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 1: CDR取込 (模拟外部CSV→固定长)
|
||
*> ----------------------------------------------------------
|
||
STAGE-1-CDR-IMPORT.
|
||
MOVE 1 TO PL-STAGE.
|
||
DISPLAY "Stage 1: CDR取込 (CSV→FB)"
|
||
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
|
||
MOVE WS-I TO CDR-ID
|
||
STRING "8613800138" WS-I INTO CDR-CALLER
|
||
END-STRING
|
||
STRING "8613900999" WS-I INTO CDR-CALLEE
|
||
END-STRING
|
||
COMPUTE CDR-DURATION = WS-I * 120
|
||
DISPLAY " CDR:" CDR-ID " CALLER:" CDR-CALLER
|
||
" DUR:" CDR-DURATION
|
||
END-PERFORM
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] CDR取込完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 2: CDR校验
|
||
*> ----------------------------------------------------------
|
||
STAGE-2-CDR-VALIDATE.
|
||
MOVE 2 TO PL-STAGE.
|
||
DISPLAY "Stage 2: CDR字段校验"
|
||
DISPLAY " 校验: 主叫号码格式 OK"
|
||
DISPLAY " 校验: 通话时长范围 OK"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] CDR校验完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 3: CDR排序 (按客户)
|
||
*> ----------------------------------------------------------
|
||
STAGE-3-CDR-SORT.
|
||
MOVE 3 TO PL-STAGE.
|
||
DISPLAY "Stage 3: CDR排序 (SORT)"
|
||
DISPLAY " SORT KEY: CDR-CALLER ASCENDING"
|
||
DISPLAY " SORT KEY: CDR-ID ASCENDING"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] CDR排序完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 4: 合同匹配 (1:N Contract↔CDR)
|
||
*> ----------------------------------------------------------
|
||
STAGE-4-CONTRACT-MATCH.
|
||
MOVE 4 TO PL-STAGE.
|
||
DISPLAY "Stage 4: 合同↔CDR匹配 (1:N)"
|
||
MOVE "CTR000001" TO CTR-ID.
|
||
MOVE "CUST000001" TO CTR-CUST-ID.
|
||
MOVE "P01" TO CTR-PLAN.
|
||
DISPLAY " 合同:" CTR-ID " 客户:" CTR-CUST-ID
|
||
" 套餐:" CTR-PLAN
|
||
DISPLAY " 匹配CDR: 3件 (1:N)"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 合同匹配完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 5: 资费表检索 (SEARCH ALL)
|
||
*> ----------------------------------------------------------
|
||
STAGE-5-TARIFF-LOOKUP.
|
||
MOVE 5 TO PL-STAGE.
|
||
DISPLAY "Stage 5: 资费表检索"
|
||
DISPLAY " 套餐P01: 基本料金30元/月 通话20分/秒"
|
||
DISPLAY " 套餐P02: 商务料金80元/月 通话10分/秒"
|
||
DISPLAY " 套餐P03: 无限料金200元/月 通话5分/秒"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 资费检索完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 6: 计费计算 (CALL subprogram)
|
||
*> ----------------------------------------------------------
|
||
STAGE-6-BILLING-CALC.
|
||
MOVE 6 TO PL-STAGE.
|
||
DISPLAY "Stage 6: 计费计算"
|
||
COMPUTE WS-TOTAL = 360 * 20 *> 360秒 × 20分/秒
|
||
DISPLAY " 通话360秒×20分/秒 = " WS-TOTAL "分"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 计费计算完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 7: 料金判定 (IF条件分支)
|
||
*> ----------------------------------------------------------
|
||
STAGE-7-RATE-DETERMINE.
|
||
MOVE 7 TO PL-STAGE.
|
||
DISPLAY "Stage 7: 料金阶梯判定"
|
||
IF WS-TOTAL < 1000
|
||
DISPLAY " 料金区分: A (低额)"
|
||
ELSE IF WS-TOTAL < 5000
|
||
DISPLAY " 料金区分: B (中额)"
|
||
ELSE
|
||
DISPLAY " 料金区分: C (高额)"
|
||
END-IF
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 料金判定完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 8: 加入者月汇总 (key切)
|
||
*> ----------------------------------------------------------
|
||
STAGE-8-AGGREGATE.
|
||
MOVE 8 TO PL-STAGE.
|
||
DISPLAY "Stage 8: 加入者月汇总"
|
||
MOVE "CUST000001" TO BLL-CUST-ID.
|
||
MOVE 7200 TO BLL-AMOUNT.
|
||
MOVE 202506 TO BLL-MONTH.
|
||
DISPLAY " 客户:" BLL-CUST-ID
|
||
" 金额:" BLL-AMOUNT "分"
|
||
" 账期:" BLL-MONTH
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 月汇总完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 9: 请求书编辑输出
|
||
*> ----------------------------------------------------------
|
||
STAGE-9-INVOICE-OUTPUT.
|
||
MOVE 9 TO PL-STAGE.
|
||
DISPLAY "Stage 9: 请求书编辑输出"
|
||
MOVE "INV2025001" TO INV-ID.
|
||
MOVE "CUST000001" TO INV-CUST-ID.
|
||
MOVE 202506 TO INV-MONTH.
|
||
MOVE 7200 TO INV-AMOUNT.
|
||
MOVE "1" TO INV-STATUS.
|
||
DISPLAY " 请求书:" INV-ID " 客户:" INV-CUST-ID
|
||
DISPLAY " 金额:" INV-AMOUNT "分 状态:已发行"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 请求书出力完了"
|
||
.
|
||
|
||
*> ----------------------------------------------------------
|
||
*> Stage 10: 请求书分割
|
||
*> ----------------------------------------------------------
|
||
STAGE-10-SPLIT.
|
||
MOVE 10 TO PL-STAGE.
|
||
DISPLAY "Stage 10: 请求书分割"
|
||
DISPLAY " 50分割: 1件→1ファイル"
|
||
ADD 1 TO WS-PASS
|
||
DISPLAY " [PASS] 分割出力完了"
|
||
.
|
||
|
||
END PROGRAM PipelineDriver.
|