📄 edc_forg_month_rpt.ec
字号:
/*=====================================
中行外卡EDC交易统计月报表
相关数据库: cur_settle_ls, his_settle_ls
函数名:edc_foreign_month_rpt()
程 序:Wubin 2001/09/15
=====================================*/
#include <stdio.h>
#include <math.h>
#include "all.h"
#include "macro_def.h"
$include "db_struct.h"
$include sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
#define MAX_MERCH_NUM 5000
struct {
char bankid[12];
char hostid[3];
int count;
double amount;
} bankids_card[MAX_MERCH_NUM];
$char foreign_table[40][4] = {
"51",
"52",
"53",
"54",
"55",
"",
NULL,
};
extern double get_qs_tip(), get_bank_name(), type2buf();
int edc_foreign_month_rpt(file, s_date, e_date)
char *file;
char *s_date, *e_date;
{
FILE *fp;
int i, ret;
double total_tran_amt;
$char start_date[9];
$char end_date[9];
$S_tran_ls ls;
$double amt_tmp, tran_amt;
$char sqlstr[1024];
$char bankid[18], hostid[3];
$char bankname[50], acq_bank_id[12];
$int count, bank_num;
$int foreign_cnt[40];
$int total_foreign_cnt[40], total_tran_cnt;
$short indi1, indi2 ;
$double foreign_amt[40],total_foreign_amt[40];
$S_sys_param sy;
strcpy(start_date, s_date);
strcpy(end_date, e_date);
bank_num = ret = total_tran_cnt = 0;
total_tran_amt = 0.0;
if ( ret = select_sys_param(&sy) ) {
daylog(ERROR, "查本地参数表错误[%d]!",ret);
return ( -1 );
}
memset(total_foreign_amt, 0, sizeof(total_foreign_amt));
memset(total_foreign_cnt, 0, sizeof(total_foreign_cnt));
/***************
* 统计发卡行数
***************/
memset(&bankids_card, 0, sizeof(bankids_card));
#ifdef wyz020429_mod
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from cur_tran_ls \
where tran_type in (1,2,3,5,6,7,8,9,10,14) \
and saf_flag = \'0\' \
and tran_flag = \'0\' \
and tran_amt != 0 \
and manual_flag = \'N\' \
and resp_code like \'00\' \
and local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and card_type in (51,52,53,54,55) \
group by acq_bank_id", \
start_date, end_date);
#else
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from cur_settle_ls \
where snd_settle_date >= \'%s\' \
and snd_settle_date <= \'%s\' \
and card_type > '50' \
group by acq_bank_id",
start_date, end_date);
#endif
$prepare edc_forg from $sqlstr;
if (SQLCODE) {
daylog(ERROR, "PREPARE Failed[%d]", SQLCODE);
return -1;
}
$declare edc_forg_cur cursor for edc_forg;
if (SQLCODE) {
daylog(ERROR, "DECLARE Failed[%d]", SQLCODE);
return -1;
}
$open edc_forg_cur;
if (SQLCODE) {
daylog(ERROR, "open edc_forg_cur err[%d]", SQLCODE);
return -1;
}
while ( bank_num < MAX_MERCH_NUM ) {
$fetch edc_forg_cur into $bankid, $count:indi1, $tran_amt:indi2;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
daylog(ERROR, "fetch edc_forg_cur err[%d]", SQLCODE);
$close edc_forg_cur;
return ( -1 );
}
if ( indi1 != -1 && indi2 != -1 && count ) {
DelSpace(bankid);
strcpy ( bankids_card[bank_num].bankid, bankid );
strcpy ( bankids_card[bank_num].hostid, "00" );
bankids_card[bank_num].count = count;
bankids_card[bank_num].amount = tran_amt;
bank_num ++;
}
}
$close edc_forg_cur;
#ifdef wyz020429_mod
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from his_tran_ls \
where tran_type in (1,2,3,5,6,7,8,9,10,14) \
and saf_flag = \'0\' \
and tran_flag = \'0\' \
and tran_amt != 0 \
and manual_flag = \'N\' \
and resp_code like \'00\' \
and local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and card_type in (51,52,53,54,55) \
group by acq_bank_id", \
start_date, end_date);
#else
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from his_settle_ls \
where snd_settle_date >= \'%s\' \
and snd_settle_date <= \'%s\' \
and card_type > '50' \
group by acq_bank_id",
start_date, end_date);
#endif
$prepare edc_forg2 from $sqlstr;
$declare edc_forg_cur2 cursor for edc_forg2;
$open edc_forg_cur2;
if (SQLCODE) {
daylog(ERROR, "open edc_forg_cur2 err[%d]", SQLCODE);
return -1;
}
while ( bank_num < MAX_MERCH_NUM ) {
$fetch edc_forg_cur2 into $bankid, $count:indi1, $tran_amt:indi2;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
$close edc_forg_cur2;
daylog(ERROR, "fetch edc_forg_cur2 err[%d]", SQLCODE);
return -1;
}
DelSpace(bankid);
if ( indi1 != -1 && indi2 != -1 && count ) {
for ( i=0; i<bank_num; i++ )
if ( !strcmp ( bankids_card[i].bankid, bankid) )
break;
if ( i >= bank_num ) {
strcpy ( bankids_card[bank_num].bankid, bankid );
strcpy ( bankids_card[bank_num].hostid, "00" );
bankids_card[bank_num].count = count;
bankids_card[bank_num].amount = tran_amt;
bank_num ++;
} else {
bankids_card[i].count += count;
bankids_card[i].amount += tran_amt;
}
}
}
$close edc_forg_cur2;
/****************/
if (!(fp = fopen(file, "w"))) {
daylog(ERROR, "Open %s error!", file);
return(-1); /* File operate error */
}
bank_num = 0;
if (FileHead_edc_foreign_month(fp, start_date, end_date)) {
fclose(fp);
return(-2); /* Database operate error */
}
while (bankids_card[bank_num].bankid[0] != 0) {
strcpy(acq_bank_id, bankids_card[bank_num].bankid);
get_bank_name(acq_bank_id,"00",bankname);
i = 0;
memset(foreign_amt, 0, sizeof(foreign_amt));
memset(foreign_cnt, 0, sizeof(foreign_cnt));
while (foreign_table[i] != NULL && foreign_table[i][0] != '\0') {
$ifdef wyz020429_mod;
$declare edc_forg_cur3 cursor for
select count(*), sum(tran_amt) from cur_tran_ls
where acq_bank_id = :acq_bank_id
and card_type = :foreign_table[i]
and tran_type in (1,2,3,5,6,7,8,9,10,14)
and saf_flag = '0'
and tran_amt != 0
and tran_flag = '0'
and manual_flag = 'N'
and resp_code like '00%'
and local_sys_date >= :start_date
and local_sys_date <= :end_date;
$else;
$declare edc_forg_cur3 cursor for
select count(*), sum(tran_amt) from cur_settle_ls
where acq_bank_id = :acq_bank_id
and card_type = :foreign_table[i]
and snd_settle_date >= :start_date
and snd_settle_date <= :end_date;
if (SQLCODE) {
daylog(ERROR, "DECLARE Failed![%d]", SQLCODE);
fclose(fp);
return(-2);
}
$endif;
$open edc_forg_cur3;
if (SQLCODE) {
daylog(ERROR, "Open edc_forg_cur3![%d]", SQLCODE);
fclose(fp);
return(-2);
}
while (1) {
$fetch edc_forg_cur3 into $count:indi1, $tran_amt:indi2;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch edc_forg_cur3 error![%d]", SQLCODE);
$close edc_forg_cur3;
fclose(fp);
return(-2);
}
if ( indi1 != -1 && indi2 != -1 && count ) {
foreign_amt[i] += tran_amt;
foreign_cnt[i] += count;
}
}
$close edc_forg_cur3;
$ifdef wyz020429_mod;
$declare edc_forg_cur4 cursor for
select count(*), sum(tran_amt) from his_tran_ls
where acq_bank_id = :acq_bank_id
and card_type = :foreign_table[i]
and tran_type in (1,2,3,5,6,7,8,9,10,14)
and saf_flag = '0'
and tran_flag = '0'
and tran_amt != 0
and manual_flag = 'N'
and resp_code like '00%'
and local_sys_date >= :start_date
and local_sys_date <= :end_date;
$else;
$declare edc_forg_cur4 cursor for
select count(*), sum(tran_amt) from his_settle_ls
where acq_bank_id = :acq_bank_id
and card_type = :foreign_table[i]
and snd_settle_date >= :start_date
and snd_settle_date <= :end_date;
if (SQLCODE) {
daylog(ERROR, "DECLARE Failed![%d]", SQLCODE);
fclose(fp);
return(-2);
}
$endif;
$open edc_forg_cur4;
if (SQLCODE) {
daylog(ERROR, "Open edc_forg_cur4![%d]", SQLCODE);
fclose(fp);
return(-2);
}
while (1) {
$fetch edc_forg_cur4 into $count:indi1, $tran_amt:indi2;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch edc_forg_cur4 error![%d]", SQLCODE);
$close edc_forg_cur4;
fclose(fp);
return(-2);
}
if ( indi1 != -1 && indi2 != -1 && count ) {
foreign_amt[i] += tran_amt;
foreign_cnt[i] += count;
}
}
$close edc_forg_cur4;
total_foreign_amt[i] += foreign_amt[i];
total_foreign_cnt[i] += foreign_cnt[i];
i++;
}
fprintf(fp, "%-20s %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%6d)\n", bankname, foreign_amt[0],foreign_cnt[0],foreign_amt[1], foreign_cnt[1], foreign_amt[2],foreign_cnt[2], foreign_amt[3],foreign_cnt[3], foreign_amt[4],foreign_cnt[4], bankids_card[bank_num].amount,bankids_card[bank_num].count);
total_tran_amt += bankids_card[bank_num].amount;
total_tran_cnt += bankids_card[bank_num].count;
bank_num++;
}
/* 报表结尾 */
fprintf(fp, "---------------------------------------------------------------------------------------------------------------------------------------------------------\n");
if (total_tran_cnt)
fprintf(fp, "%-20s %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%5d) %14.2lf(%6d)\n\n", "合计: ",total_foreign_amt[0],total_foreign_cnt[0], total_foreign_amt[1],total_foreign_cnt[1], total_foreign_amt[2],total_foreign_cnt[2], total_foreign_amt[3],total_foreign_cnt[3], total_foreign_amt[4],total_foreign_cnt[4], total_tran_amt,total_tran_cnt);
fclose(fp);
return(0);
}
int FileHead_edc_foreign_month(FILE *fp, char *start_date, char *end_date)
{
char date1[11],date2[11],bank_name[21];
$ifdef wyz020429_mod;
$S_sys_param sys;
$select * into :sys from sys_param;
if (SQLCODE) {
daylog(ERROR, "Select sys_param error!");
return(-1);
}
del_st_space("sys_param", &sys);
$else;
$endif;
str2date(date1, start_date, "/");
str2date(date2, end_date, "/");
#ifdef wyz020429_mod
get_bank_name(sys.bank_id,"00", bank_name);
#else
get_bank_name(G_bankid,"00", bank_name);
#endif
/* fprintf(fp, "%32s %s\n", " ",GV_filehead); */
fprintf(fp, "%32s中国银行 BTS 系统\n", " ");
fprintf(fp, "%32s外卡 EDC 交易统计月报表\n\n", " ");
fprintf(fp, "日期:%s 到 %s%105s单位:人民币元\n",date1,date2," ");
fprintf(fp, "=========================================================================================================================================================\n");
fprintf(fp, "%-20s %14s(笔数) %14s(笔数) %14s(笔数) %14s(笔数) %14s(笔数) %14s(总笔数)\n", "发卡行名","VISA", "MC", "AE", "DC", "JCB", "合计");
fprintf(fp, "---------------------------------------------------------------------------------------------------------------------------------------------------------\n");
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -