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.