# COBOL+JCL 信用卡月结系统 完整运行脚本 Write-Host "========================================" -ForegroundColor Cyan Write-Host " 信用卡月结批处理系统 - 运行脚本" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $ROOT = $PSScriptRoot $COBOL_DIR = Join-Path $ROOT "cobol" $COPYBOOK_DIR = Join-Path $ROOT "copybooks" $DATA_INPUT = Join-Path $ROOT "data\input" $DATA_WORK = Join-Path $ROOT "data\work" $DATA_OUTPUT = Join-Path $ROOT "data\output" $BIN_DIR = Join-Path $ROOT "bin" $JCL_DIR = Join-Path $ROOT "jcl" # Clean work/output directories Remove-Item "$DATA_WORK\*" -Force -ErrorAction SilentlyContinue Remove-Item "$DATA_OUTPUT\*" -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Path $BIN_DIR -Force | Out-Null $env:COBCPY = $COPYBOOK_DIR Write-Host "`n[STEP 0] Compiling COBOL programs..." -ForegroundColor Yellow # Compile data generator Write-Host " GENDATA.cbl ..." -NoNewline $r = & cobc -x "$COBOL_DIR\GENDATA.cbl" -o "$BIN_DIR\GENDATA.exe" 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host " FAILED" -ForegroundColor Red; $r; exit 1 } Write-Host " OK" -ForegroundColor Green # Compile CRDVAL Write-Host " CRDVAL.cbl ..." -NoNewline $r = & cobc -x "$COBOL_DIR\CRDVAL.cbl" -o "$BIN_DIR\CRDVAL.exe" 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host " FAILED" -ForegroundColor Red; $r; exit 1 } Write-Host " OK" -ForegroundColor Green # Compile CRDCALC Write-Host " CRDCALC.cbl ..." -NoNewline $r = & cobc -x "$COBOL_DIR\CRDCALC.cbl" -o "$BIN_DIR\CRDCALC.exe" 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host " FAILED" -ForegroundColor Red; $r; exit 1 } Write-Host " OK" -ForegroundColor Green # Compile CRDRPT Write-Host " CRDRPT.cbl ..." -NoNewline $r = & cobc -x "$COBOL_DIR\CRDRPT.cbl" -o "$BIN_DIR\CRDRPT.exe" 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host " FAILED" -ForegroundColor Red; $r; exit 1 } Write-Host " OK" -ForegroundColor Green # Generate test data Write-Host "`n[STEP 0.5] Generating test data..." -ForegroundColor Yellow & "$BIN_DIR\GENDATA.exe" if ($LASTEXITCODE -ne 0) { Write-Host "GENDATA FAILED" -ForegroundColor Red; exit 1 } # Move generated files to data/input Move-Item "$ROOT\MEMOUT" "$DATA_INPUT\member.dat" -Force -ErrorAction SilentlyContinue Move-Item "$ROOT\TXOUT" "$DATA_INPUT\transactions.dat" -Force -ErrorAction SilentlyContinue Move-Item "$ROOT\RATEOUT" "$DATA_INPUT\rate.dat" -Force -ErrorAction SilentlyContinue Write-Host " Test data -> data/input/" -ForegroundColor Green Write-Host "`n[STEP 1] SORT transactions by card + date..." -ForegroundColor Yellow Get-Content "$DATA_INPUT\transactions.dat" | Sort-Object { $_.Substring(0, 16) }, { $_.Substring(16, 8) } | Set-Content "$DATA_WORK\sorted_tx.dat" -Encoding Ascii Write-Host " SORTED -> data/work/sorted_tx.dat" -ForegroundColor Green Write-Host "`n[STEP 2] CRDVAL - Validate transactions..." -ForegroundColor Yellow $env:TRANSIN = "$DATA_WORK\sorted_tx.dat" $env:MEMBER = "$DATA_INPUT\member.dat" $env:VALIDOUT = "$DATA_WORK\validated_tx.dat" $env:REJECT = "$DATA_OUTPUT\rejected_tx.dat" $env:REPORTERR = "$DATA_OUTPUT\error_report.dat" & "$BIN_DIR\CRDVAL.exe" if ($LASTEXITCODE -ne 0) { Write-Host "CRDVAL FAILED (RC=$LASTEXITCODE)" -ForegroundColor Red } Write-Host "`n[STEP 3] CRDCALC - Calculate interest and fees..." -ForegroundColor Yellow $env:VALIDIN = "$DATA_WORK\validated_tx.dat" $env:RATE = "$DATA_INPUT\rate.dat" $env:CALCOUT = "$DATA_WORK\billing_result.dat" & "$BIN_DIR\CRDCALC.exe" if ($LASTEXITCODE -ne 0) { Write-Host "CRDCALC FAILED (RC=$LASTEXITCODE)" -ForegroundColor Red } Write-Host "`n[STEP 4] CRDRPT - Generate statements and summary..." -ForegroundColor Yellow $env:BILLING = "$DATA_WORK\billing_result.dat" $env:STMT = "$DATA_OUTPUT\monthly_statement.dat" $env:SUMMARY = "$DATA_OUTPUT\summary_report.dat" & "$BIN_DIR\CRDRPT.exe" if ($LASTEXITCODE -ne 0) { Write-Host "CRDRPT FAILED (RC=$LASTEXITCODE)" -ForegroundColor Red } Write-Host "`n========================================" -ForegroundColor Cyan Write-Host " ALL STEPS COMPLETED" -ForegroundColor Green Write-Host "========================================" -ForegroundColor Cyan Write-Host "Output files:" Write-Host " Statement: $DATA_OUTPUT\monthly_statement.dat" Write-Host " Summary: $DATA_OUTPUT\summary_report.dat" Write-Host " Rejected: $DATA_OUTPUT\rejected_tx.dat" Write-Host " Error Rpt: $DATA_OUTPUT\error_report.dat" Write-Host "" Write-Host "To run via JCL runner instead:" Write-Host " python jcl-runner/main.py jcl\CREDIT25.jcl --root $ROOT" Write-Host ""