📄 merch_m_rpt.ec
字号:
/*=====================================
中行商户本外卡交易统计月报表
相关数据库: cur_settle_ls, his_settle_ls
函数名:merch_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;
$include sqlhdr;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
/* defined in cglfx.ec */
extern struct {
char bankid[12];
char hostid[3];
int count;
double amount;
} bankids[400];
#define MAX_MERCH_NUM 1000
struct {
char merchid[18];
int count;
double amount;
} merchids_card[MAX_MERCH_NUM];
$char card_table1[40][4] = {
"02",
"01",
"51",
"52",
"53",
"54",
"55",
"",
NULL,
};
$struct Merch_st {
char merchant_id[16];
char merchant_name[41];
float credit_amt;
int credit_cnt;
float debit_amt;
int debit_cnt;
float visa_amt;
int visa_cnt;
float mc_amt;
int mc_cnt;
float ae_amt;
int ae_cnt;
float dc_amt;
int dc_cnt;
float jcb_amt;
int jcb_cnt;
float total_amt;
int total_cnt;
};
extern double get_qs_tip(), get_bank_name(), type2buf();
int merch_foreign_month_rpt(file, start_date, end_date, acq_bank_id)
char *file;
$parameter char *start_date, *end_date, *acq_bank_id;
{
FILE *fp;
int i, ret;
double total_tran_amt;
char settle_date[9];
int cur_flag=0;
int tmp_ret=0;
$S_tran_ls ls;
$S_sys_param sy;
$double amt_tmp, tran_amt;
$char sqlstr[1024], bankid[18], hostid[3];
$char bankname[50], merchid[18];
$char merchant_id[16], merchantname[41];
char bankid1[12], hostid1[3];
$int count, bank_num, merch_num;
$int total_tran_cnt=0;
$short indi, indi1, indi2;
$int total_card_cnt[1000], card_cnt[1000];
$double card_amt[1000], total_card_amt[1000];
$struct Merch_st merch_m;
bank_num = merch_num= ret = 0;
total_tran_amt = 0.0;
if ( ret = select_sys_param(&sy) ) {
daylog(ERROR, "查本地参数表错误[%d]!",ret);
return -1;
}
get_settle_date(settle_date);
/*判断查询cur_settle_ls OR his_settle_ls OR BOTH */
if (strcmp(settle_date, end_date) > 0)
cur_flag = 0; /*use his_settle_ls*/
else
if (strcmp(settle_date, start_date) == 0)
cur_flag = 1; /*use cur_settle_ls*/
else
cur_flag = 2; /*both*/
/* 建立临时表用于对统计结果进行排序 */
$create temp table merchant_tmp
(
merchant_id char(15) not null,
merchant_name char(40),
credit_amt float,
credit_cnt integer,
debit_amt float,
debit_cnt integer,
visa_amt float,
visa_cnt integer,
mc_amt float,
mc_cnt integer,
ae_amt float,
ae_cnt integer,
dc_amt float,
dc_cnt integer,
jcb_amt float,
jcb_cnt integer,
total_amt float,
total_cnt integer,
primary key (merchant_id)
);
if ( SQLCODE != 0 ) {
daylog(ERROR, "create temp table merchant_tmp Error[%d]", SQLCODE);
return ( -1 );
}
/***************
* 统计下级行
***************/
memset(&bankids, 0, sizeof(bankids));
if (!strcmp(G_cen_bankid, G_bankid)) {
sprintf(sqlstr,
"select distinct bank_id, count(*) \
from bank_info \
where adm_bank_id = \'%s\' group by bank_id",
G_cen_bankid);
$prepare adm_bank from $sqlstr;
$declare adm_bank_cur cursor for adm_bank;
$open adm_bank_cur;
if ( SQLCODE ) {
daylog(ERROR, "open adm_bank_cur err[%d]", SQLCODE);
return ( -1 );
}
while ( bank_num < 400 ) {
$fetch adm_bank_cur into $bankid, $count:indi;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
$close adm_bank_cur;
daylog(ERROR, "fetch adm_bank_cur err[%d]", SQLCODE);
return ( -1 );
}
if ( indi != -1 && count ) {
DelSpace(bankid);
if ( memcmp(bankid, "0000", 4) ) {
strcpy ( bankids[bank_num].bankid, bankid );
strcpy ( bankids[bank_num].hostid, "00" );
bankids[bank_num].count = count;
bank_num ++;
}
}
}
$close adm_bank_cur;
strcpy(bankids[bank_num].bankid, G_cen_bankid);
strcpy ( bankids[bank_num].hostid, "00" );
bankids[bank_num].count = 1;
} else {
strcpy(bankids[0].bankid, acq_bank_id);
strcpy(bankids[0].hostid, "00" );
bankids[0].count = 1;
}
if (!(fp = fopen(file, "w"))) {
daylog(ERROR, "Open %s error!", file);
return(-1); /* File operate error */
}
memset(merchids_card, 0, sizeof(merchids_card));
bank_num = 0;
while (bankids[bank_num].bankid[0] != 0) {
strcpy(acq_bank_id, bankids[bank_num].bankid);
memset(total_card_amt, 0, sizeof(total_card_amt));
memset(total_card_cnt, 0, sizeof(total_card_cnt));
/***************
* 统计商户数
memset(&merchids_card, 0, sizeof(merchids_card));
***************/
if (cur_flag == 1 || cur_flag == 2) {
sprintf(sqlstr,
"select distinct merchant_id, count(*), sum(tran_amt) \
from cur_settle_ls \
where acq_bank_id = \'%s\' \
and snd_settle_date >= \'%s\' \
and snd_settle_date <= \'%s\' \
group by merchant_id",
G_cen_bankid, start_date, end_date);
$prepare merch_forg from $sqlstr;
$declare merch_forg_cur cursor for merch_forg;
$open merch_forg_cur;
if ( SQLCODE ) {
daylog(ERROR, "open merch_forg_cur err[%d]", SQLCODE);
return -1;
}
memset(merchids_card, 0, sizeof(merchids_card));
merch_num = 0;
/*
while ( merch_num < MAX_MERCH_NUM ) {
*/
while (1) {
$fetch merch_forg_cur
into $merchid, $count:indi1, $tran_amt:indi2;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
$close merch_forg_cur;
daylog(ERROR, "fetch merch_forg_cur err[%d]", SQLCODE);
return ( -1 );
}
if ( indi1 != -1 && indi2 != -1 && count ) {
DelSpace(merchid);
get_sign_bank(merchid, bankid1, hostid1);
if (strcmp(acq_bank_id, bankid1) == 0) {
tmp_ret = check_merchids(merchid);
if (tmp_ret == 0) {
strcpy(merchids_card[merch_num].merchid, merchid);
merchids_card[merch_num].count = count;
merchids_card[merch_num].amount = tran_amt;
merch_num ++;
}
else {
merchids_card[merch_num].count = count;
merchids_card[merch_num].amount = tran_amt;
}
}
}
}
$close merch_forg_cur;
}
if (cur_flag == 0 || cur_flag == 2) {
sprintf(sqlstr,
"select distinct merchant_id, count(*), sum(tran_amt) \
from his_settle_ls \
where acq_bank_id = \'%s\' \
and snd_settle_date >= \'%s\' \
and snd_settle_date <= \'%s\' \
group by merchant_id",
G_cen_bankid, start_date, end_date);
$prepare merch_forg2 from $sqlstr;
$declare merch_forg_cur2 cursor for merch_forg2;
$open merch_forg_cur2;
if ( SQLCODE ) {
daylog(ERROR, "open merch_forg_cur err[%d]", SQLCODE);
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -