📄 jydz_rpt.ec
字号:
/****************************************************
* 全辖交易明细报表
* 全辖交易汇总报表
* jydz_rpt() called by gen_rpt()--in gen_rpt.ec
*
* 最后修改: 周国祥 2001/08/24
****************************************************/
#include <stdio.h>
#include <math.h>
#include "all.h"
#include "macro_def.h"
$include "db_struct.h"
$include sqlca;
$include sqlhdr;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
typedef struct {
char bankid[12];
char hostid[3];
char bankname[31];
double credit_amt;
double debit_amt;
int credit_cnt;
int debit_cnt;
char filename[64];
FILE *fp;
} S_rpt;
extern int get_son(); /* in net_stat.ec */
extern int check_son(); /* in net_stat.ec */
extern char G_cen_bankid[12];
extern char G_bankid[12];
int jydz_rpt(file1, file2, logic_date, bankid, hostid)
char *file1;
char *file2;
$parameter char *logic_date;
char *bankid, *hostid;
{
$S_tran_ls ls;
S_rpt rpt[48], total;
char date[11], time[9];
char son_bankid[48][12], son_hostid[48][3], cmd[128];
int i, j, num = 0;
FILE *fp;
memset(&son_bankid, 0, sizeof(son_bankid));
memset(&son_hostid, 0, sizeof(son_hostid));
if (strcmp(G_cen_bankid, G_bankid) == 0) {
if (get_son(bankid, hostid, son_bankid, son_hostid) < 0) {
daylog(ERROR, "get_son() failed");
return(-2);
}
}
else {
strcpy(son_bankid[0], G_bankid);
strcpy(son_hostid[0], "00");
}
memset(rpt, 0, sizeof(rpt));
/* only used for display */
getdatef(date, "/");
gettimef(time, ":");
if (!(fp = fopen(file1, "w"))) {
daylog(ERROR, "Open %s error!", file1);
return(-1); /* File operate error */
}
if (FileHead_jydz(fp, logic_date, date, time)) {
fclose(fp);
return(-2); /* Database operate error */
}
$ifdef wyz020429_mod;
$declare jy_cur cursor for
select * from cur_tran_ls
where acq_bank_id != iss_bank_id
and tran_type in (1,2,3,5,6,7,8,9,10,14)
and saf_flag = '0'
and tran_flag = '0'
and manual_flag = 'N'
and resp_code like '00%'
and snd_settle_date = :logic_date
and card_type = '02'
order by card_no;
$else;
$declare jy_cur cursor for
select * from cur_settle_ls
where acq_bank_id != iss_bank_id
and snd_settle_date = :logic_date
and card_type = '02'
order by card_no;
$endif;
$open jy_cur;
if (SQLCODE) {
daylog(ERROR, "Open jy_cur error![%d]", SQLCODE);
fclose(fp);
return(-2);
}
FetBufSize = 32000;
while (1) {
$fetch jy_cur into :ls;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch jy_cur error![%d]", SQLCODE);
$close jy_cur;
fclose(fp);
return(-2);
}
del_st_space("tran_ls", &ls);
if (add_rpt(0, ls, son_bankid, son_hostid,
rpt, &num, logic_date,
date, time, file2[0])) {
$close jy_cur;
fclose(fp);
return(-1);
}
if (add_rpt(1, ls, son_bankid, son_hostid,
rpt, &num, logic_date,
date, time, file2[0])) {
$close jy_cur;
fclose(fp);
return(-1);
}
}
$close jy_cur;
if (file2[0]) {
for (i = 0; i < num; i++) {
fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
fprintf(rpt[i].fp, "%s %s %14.2lf %s %6d %s %14.2lf %s %6d\n\n", "总 计", "贷记金额", rpt[i].credit_amt, "贷记笔数", rpt[i].credit_cnt, "借记金额", rpt[i].debit_amt, "借记笔数", rpt[i].debit_cnt);
fclose(rpt[i].fp);
}
sprintf(cmd, "> %s", file2);
system(cmd);
}
memset(&total, 0, sizeof(total));
for (i = 0; i < num; i++)
if (!strcmp(rpt[i].bankid, "0004"))
break;
if (i < num) {
if (file2[0]) {
sprintf(cmd, "cat %s >> %s", rpt[i].filename, file2);
system(cmd);
unlink(rpt[i].filename);
}
FileDetail_jydz(fp, rpt[i]);
total.credit_amt += rpt[i].credit_amt;
total.credit_cnt += rpt[i].credit_cnt;
total.debit_amt += rpt[i].debit_amt;
total.debit_cnt += rpt[i].debit_cnt;
rpt[i].bankid[0] = 0;
}
for (i = 0; son_bankid[i][0]; i++) {
for (j = 0; j < num; j++)
if (!strcmp(rpt[j].bankid, son_bankid[i]))
break;
if (j < num) {
if (file2[0]) {
sprintf(cmd, "cat %s >> %s", rpt[j].filename,
file2);
system(cmd);
unlink(rpt[j].filename);
}
FileDetail_jydz(fp, rpt[j]);
total.credit_amt += rpt[j].credit_amt;
total.credit_cnt += rpt[j].credit_cnt;
total.debit_amt += rpt[j].debit_amt;
total.debit_cnt += rpt[j].debit_cnt;
rpt[j].bankid[0] = 0;
}
}
FileTail_jydz(fp, total);
fclose(fp);
return(0);
}
int add_rpt(flag, ls, son_bankid,son_hostid, rpt, pnum,logic_date,date,time,mx)
int flag;
S_tran_ls ls;
char son_bankid[48][12];
char son_hostid[48][3];
S_rpt rpt[48];
int *pnum;
char logic_date[11];
char date[11];
char time[9];
int mx;
{
$char bankid[12], hostid[3], bankname[31];
int i;
char logic_date1[11]; /* YYYY/MM/DD */
char tmp_date[11]; /* YYYY/MM/DD */
char tmp_time[9]; /* hh:mm:ss */
$char sign_bankid[12];
$char sign_hostid[3];
$char merch_id[16];
$ifdef wyz020427_mod;
$else;
strcpy(merch_id, ls.merchant_id);
if (strcmp(G_cen_bankid, G_bankid)) {
get_sign_bank(merch_id, sign_bankid, sign_hostid);
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
if (strcmp(G_bankid, sign_bankid))
return 0;
}
}
$endif;
if (flag) {
if (!check_son(ls.iss_bank_id, "00", son_bankid, son_hostid)) {
strcpy(bankid, BOC_CENTER /*"0004"*/);
strcpy(hostid, "00");
} else {
strcpy(bankid, ls.iss_bank_id);
strcpy(hostid, "00");
}
} else {
if (!check_son(ls.acq_bank_id, ls.acq_host_id, son_bankid, son_hostid)) {
strcpy(bankid, BOC_CENTER /*"0004"*/);
strcpy(hostid, "00");
} else {
strcpy(bankid, ls.acq_bank_id);
strcpy(hostid, ls.acq_host_id);
}
}
for (i = 0; i < *pnum; i++)
if (!strcmp(bankid, rpt[i].bankid))
break;
if (i == *pnum) {
strcpy(rpt[i].bankid, bankid);
strcpy(rpt[i].hostid, hostid);
get_bank_name(bankid, hostid, bankname);
strcpy(rpt[i].bankname, bankname);
if (mx) {
sprintf(rpt[i].filename, "/tmp/.%-4.4s", bankid);
rpt[i].fp = fopen(rpt[i].filename, "w");
if (!rpt[i].fp) {
daylog(ERROR, "Open %s error!",rpt[i].filename);
for (i = 0; i < *pnum; i++) {
fclose(rpt[i].fp);
unlink(rpt[i].filename);
}
return(-1);
}
fprintf(rpt[i].fp, "%42s中国银行BTS系统借记卡\n", " ");
fprintf(rpt[i].fp, "%42s全辖交易明细报表\n", " ");
str2date(logic_date1, logic_date, "/");
fprintf(rpt[i].fp, "BTS-801%77s清算逻辑日: %s\n", " ", logic_date1);
fprintf(rpt[i].fp, "%-5.5s%-82s%s %s\n", bankid, bankname, date, time);
fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
fprintf(rpt[i].fp, "%-21s %-8s %14s %6s %-10s %-8s %-6s %-6s %-10s %-8s\n", "卡 号", "交易类型", "交易金额", "授权码", "商户号", "EDC 号", "收单行", "发卡行", "交易日期", "交易时间");
fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
}
(*pnum)++;
}
if (mx) {
str2date(tmp_date, ls.local_sys_date, "/");
str2time(tmp_time, ls.local_sys_time, ":");
type2buf(ls.tran_type, bankname);
fprintf(rpt[i].fp, "%-6.6s-%-4.4s-%-9.9s %-8s %14.2lf %6s %-10.10s %-8.8s %-6.6s %-6.6s %-10s %-8s\n", ls.card_no, ls.card_no + 6, ls.card_no + 10, bankname, ls.tran_amt, ls.auth_no, ls.merchant_id, ls.terminal_id, ls.acq_bank_id, ls.iss_bank_id, tmp_date, tmp_time);
}
switch (ls.tran_type) {
case PURCHASE:
case WITHDRAWAL:
case CONFIRM:
case TRANS_OUT:
if (flag) {
rpt[i].debit_cnt++;
rpt[i].debit_amt += ls.tran_amt;
} else {
rpt[i].credit_cnt++;
rpt[i].credit_amt += ls.tran_amt;
}
break;
case REFUND:
case DEPOSIT:
if (flag) {
rpt[i].credit_cnt++;
rpt[i].credit_amt += ls.tran_amt;
} else {
rpt[i].debit_cnt++;
rpt[i].debit_amt += ls.tran_amt;
}
break;
}
return(0);
}
int FileHead_jydz(FILE *fp, char *logic_date, char *date, char *time)
{
$S_sys_param sys;
char bank_name[128];
char logic_date1[11]; /* YYYY/MM/DD */
$select * into :sys from sys_param;
if (SQLCODE) {
daylog(ERROR, "Select sys_param error!");
return(-1);
}
del_st_space("sys_param", &sys);
fprintf(fp, "%27s中国银行BTS系统借记卡\n", " ");
fprintf(fp, "%27s全辖交易汇总报表\n", " ");
str2date(logic_date1, logic_date, "/");
fprintf(fp, "BTS-800%48s清算逻辑日: %s\n", " ", logic_date1);
#ifdef wyz020427_mod
get_bank_name(sys.bank_id, sys.host_id, bank_name);
fprintf(fp, "%-5.5s%-53s%s %s\n", sys.bank_id, bank_name, date, time);
#else
get_bank_name(G_bankid, "00", bank_name);
fprintf(fp, "%-5.5s%-53s%s %s\n", G_bankid, bank_name, date, time);
#endif
fprintf(fp, "-----------------------------------------------------------------------------\n");
fprintf(fp, "%-8s %-20s %14s %8s %14s %8s\n",
"联行行号", "联行名称", "贷记金额", "贷记笔数", "借记金额", "借记笔数");
fprintf(fp, "-----------------------------------------------------------------------------\n");
return(0);
}
int FileDetail_jydz(FILE *fp, S_rpt rpt)
{
fprintf(fp, "%-8.8s %-20.20s %14.2lf %8d %14.2lf %8d\n", rpt.bankid, rpt.bankname, rpt.credit_amt, rpt.credit_cnt, rpt.debit_amt, rpt.debit_cnt);
return(0);
}
int FileTail_jydz(FILE *fp, S_rpt rpt)
{
fprintf(fp, "-----------------------------------------------------------------------------\n");
if (rpt.credit_cnt + rpt.debit_cnt)
fprintf(fp, "%-8.8s %-20s %14.2lf %8d %14.2lf %8d\n", "总 计", " ", rpt.credit_amt, rpt.credit_cnt, rpt.debit_amt, rpt.debit_cnt);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -