📄 c_shdz_rpt.ec.willrm
字号:
/****************************************************
* 信用卡商户对帐报表(c_shdz_rpt)
*
* 最后修改: 周国祥 2001/08/23
****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "macro_def.h"
#include "credit_rpt.h"
#include "all.h"
$include sqlca;
$include sqlhdr;
$include "db_struct.h";
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
$S_sys_param sy;
$S_tran_ls ls;
TER_RPT_ITEM *search_ter_rpt ( MER_RPT_ITEM *mer_rpt_item , char *t_id )
{
TER_RPT_ITEM *p;
p=mer_rpt_item->ter_ptr;
while ( p != NULL ) {
if ( !strcmp ( t_id, p->t_id) )
return p;
p=p->next;
}
return NULL;
}
void insert_ter_rpt ( MER_RPT_ITEM *mer_rpt_item , TER_RPT_ITEM *ter_rpt_item )
{
TER_RPT_ITEM *p;
if ( mer_rpt_item->ter_ptr == NULL ) {
mer_rpt_item->ter_ptr = ter_rpt_item;
return;
}
p = mer_rpt_item->ter_ptr;
while ( p->next != NULL ) p = p->next;
p->next = ter_rpt_item;
}
$if 0;
void merchant_rpt_proc ()
{
$double rmbc_fee_percent;
$double visa_fee_percent;
$double master_fee_percent;
$double amex_fee_percent;
$double dinner_fee_percent;
$double jcb_fee_percent;
$char mer_name[31];
$char sign_bankid[12];
int i, j;
void *temp;
TER_RPT_ITEM *ter_ptr;
if (strcmp(sy.bank_id, ls.acq_bank_id) ||
!strncmp(ls.terminal_id, "TRM", 3) ||
!strcmp(ls.mcc, "6010") )
return ;
for ( i=0 ; i < mer_rpt_cnt ; i++ )
if ( !strcmp(mer_rpt_item[i].m_id, ls.merchant_id) )
break;
if ( i == mer_rpt_cnt ) {
temp = malloc ( sizeof(MER_RPT_ITEM)*(++mer_rpt_cnt) );
memcpy ( temp , mer_rpt_item ,\
sizeof(MER_RPT_ITEM)*(mer_rpt_cnt-1) );
if ( mer_rpt_item != NULL )
free ( mer_rpt_item );
mer_rpt_item = (MER_RPT_ITEM *)temp;
strcpy ( mer_rpt_item[i].m_id , ls.merchant_id );
$ifdef zgx010823_modi;
$select rmbc_rebate, visa_rebate, master_rebate,
ae_rebate, dinner_rebate, jcb_rebate
into $rmbc_fee_percent, $visa_fee_percent, $master_fee_percent,
$amex_fee_percent, $dinner_fee_percent, $jcb_fee_percent
from shop_card where merchant_id = $ls.merchant_id;
if ( SQLCODE ) {
errcall ( ERROR , "Error select rebate %s %d " , \
ls.merchant_id , SQLCODE );
rmbc_fee_percent = 0.0;
visa_fee_percent = 0.0;
master_fee_percent = 0.0;
amex_fee_percent = 0.0;
dinner_fee_percent = 0.0;
jcb_fee_percent = 0.0;
}
mer_rpt_item[i].fee_percent[0] = rmbc_fee_percent/100.0;
mer_rpt_item[i].fee_percent[1] = visa_fee_percent/100.0;
mer_rpt_item[i].fee_percent[2] = master_fee_percent/100.0;
mer_rpt_item[i].fee_percent[3] = amex_fee_percent/100.0;
mer_rpt_item[i].fee_percent[4] = dinner_fee_percent/100.0;
mer_rpt_item[i].fee_percent[5] = jcb_fee_percent/100.0;
$else;
get_rebate(ls.merchant_id, CREDIT_CARD, &rmbc_fee_percent);
get_rebate(ls.merchant_id, VISA_CARD, &visa_fee_percent);
get_rebate(ls.merchant_id, MC_CARD, &master_fee_percent);
get_rebate(ls.merchant_id, AE_CARD, &amex_fee_percent);
get_rebate(ls.merchant_id, DINER_CARD, &dinner_fee_percent);
get_rebate(ls.merchant_id, JCB_CARD, &jcb_fee_percent);
mer_rpt_item[i].fee_percent[0] = rmbc_fee_percent;
mer_rpt_item[i].fee_percent[1] = visa_fee_percent;
mer_rpt_item[i].fee_percent[2] = master_fee_percent;
mer_rpt_item[i].fee_percent[3] = amex_fee_percent;
mer_rpt_item[i].fee_percent[4] = dinner_fee_percent;
mer_rpt_item[i].fee_percent[5] = jcb_fee_percent;
$endif;
$ifdef wyz020427_mod;
$select merchant_cname into $mer_name from merchant_base
where merchant_id = $ls.merchant_id;
$else;
$select merchant_cname, sign_bank_id
into $mer_name, $sign_bankid from merchant_base
where merchant_id = $ls.merchant_id;
$endif;
if ( SQLCODE ) {
daylog(ERROR, "Error select merchant_name %s %d ",
ls.merchant_id , SQLCODE );
#ifdef wyz020427_mod
strcpy ( mer_name , "UNKOWN" );
#else
if (strcmp(G_cen_bankid, G_bankid)) {
//daylog(DEBUG, "非本行商户");
return;
}
else
strcpy ( mer_name , "UNKOWN" );
#endif
}
DelSpace(mer_name);
#ifdef wyz020427_mod
#else
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
// daylog(DEBUG, "非本行商户");
return;
}
#endif
strcpy ( mer_rpt_item[i].m_name , mer_name );
mer_rpt_item[i].pur_amt = 0.0;
mer_rpt_item[i].pur_num = 0;
mer_rpt_item[i].fee = 0.0;
mer_rpt_item[i].ter_ptr = NULL;
}
ter_ptr=search_ter_rpt ( &(mer_rpt_item[i]) , ls.terminal_id );
if ( ter_ptr == NULL ) {
ter_ptr = malloc ( sizeof(TER_RPT_ITEM) );
if ( ter_ptr == NULL ) {
errcall ( ERROR , "Error malloc ter_rpt !" );
return ;
}
strcpy ( ter_ptr->t_id , ls.terminal_id );
ter_ptr->pur_amt = 0.0;
ter_ptr->pur_num = 0;
ter_ptr->next = NULL;
insert_ter_rpt ( &(mer_rpt_item[i]) , ter_ptr );
}
mer_rpt_item[i].pur_amt+=ls.tran_amt;
mer_rpt_item[i].pur_num++;
ter_ptr->pur_amt+=ls.tran_amt;
ter_ptr->pur_num++;
mer_rpt_total.pur_amt+=ls.tran_amt;
mer_rpt_total.pur_num++;
j = atoi(ls.card_type);
if (j == 1) /* now credit_card_type="01", debit_card_type="02" */
j = 0;
if (j > 50) /* 外卡 */
j -= 50;
mer_rpt_item[i].fee +=
in_out(ls.tran_amt * mer_rpt_item[i].fee_percent[j]);
if ( mer_rpt_item[i].pur_num == 1 )
FileHead_cre_mer_mx ( &(mer_rpt_item[i]) );
FileDetail_cre_mer_mx ();
}
$endif;
$if 0;
void wd_rpt_proc ()
{
$char mer_name[31];
$char sign_bankid[12];
int i;
void *temp;
/*非本行或主机发出的交易不参加*/
if ( strcmp(sy.bank_id , ls.acq_bank_id) ||
( strncmp(ls.terminal_id, "TRM", 3) &&
strcmp (ls.mcc, "6010") ) )
return ;
for ( i=0 ; i < wd_rpt_cnt ; i++ )
if ( !strcmp(wd_rpt_item[i].m_id, ls.merchant_id) )
break;
if ( i == wd_rpt_cnt ) {
temp = malloc ( sizeof(WD_RPT_ITEM)*(++wd_rpt_cnt) );
memcpy ( temp , wd_rpt_item ,\
sizeof(WD_RPT_ITEM)*(wd_rpt_cnt-1) );
if ( wd_rpt_item != NULL )
free ( wd_rpt_item );
wd_rpt_item = (WD_RPT_ITEM *)temp;
strcpy ( wd_rpt_item[i].m_id , ls.merchant_id );
/*取商户名的同时取签约行并进行判断*/
$select merchant_cname, sign_bank_id
into $mer_name, $sign_bankid from merchant_base
where merchant_id = $ls.merchant_id;
if ( SQLCODE ) {
daylog(ERROR, "Error select merchant_name %s %d ",
ls.merchant_id , SQLCODE);
#ifdef wyz020427_mod
strcpy ( mer_name , "UNKOWN" );
#else
if (strcmp(G_cen_bankid, G_bankid)) {
// daylog(DEBUG, "非本行商户");
return;
}
else
strcpy ( mer_name , "UNKOWN" );
#endif
}
DelSpace(mer_name);
#ifdef wyz020427_mod
#else
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
// daylog(DEBUG, "非本行商户");
return;
}
#endif
strcpy ( wd_rpt_item[i].m_name , mer_name );
wd_rpt_item[i].credit_amt = 0.0;
wd_rpt_item[i].credit_num = 0;
wd_rpt_item[i].debit_amt = 0.0;
wd_rpt_item[i].debit_num = 0;
}
if ( ls.tran_type == DEPOSIT ) {
wd_rpt_item[i].credit_amt+=ls.tran_amt;
wd_rpt_item[i].credit_num++;
wd_rpt_total.credit_amt+=ls.tran_amt;
wd_rpt_total.credit_num++;
} else if ( ls.tran_type == WITHDRAWAL ) {
wd_rpt_item[i].debit_amt+=ls.tran_amt;
wd_rpt_item[i].debit_num++;
wd_rpt_total.debit_amt+=ls.tran_amt;
wd_rpt_total.debit_num++;
}
if ( (wd_rpt_item[i].credit_num+\
wd_rpt_item[i].debit_num) == 1 )
FileHead_cre_wd_mx ( &(wd_rpt_item[i]) );
FileDetail_cre_wd_mx ();
}
$endif;
#if 0
void end_merchant_rpt ()
{
int i;
TER_RPT_ITEM *p;
FileHead_cre_mer_hz ();
for ( i = 0 ; i < mer_rpt_cnt ; i++ ) {
if ( mer_rpt_item[i].pur_num == 0 ) continue;
FileTail_cre_mer_mx ( &(mer_rpt_item[i]) );
p = mer_rpt_item[i].ter_ptr;
while ( p != NULL ) {
FileDetail_cre_mer_hz ( p , mer_rpt_item[i].m_id );
p=p->next;
}
}
FileTail_cre_mer_hz ( &mer_rpt_total );
}
#endif
#if 0
void end_wd_rpt ()
{
int i;
FileHead_cre_wd_hz ();
for ( i = 0 ; i < wd_rpt_cnt ; i++ ) {
if ( ( wd_rpt_item[i].credit_num+wd_rpt_item[i].debit_num )\
== 0 )
continue;
FileTail_cre_wd_mx ( &(wd_rpt_item[i]) );
FileDetail_cre_wd_hz ( &(wd_rpt_item[i]) );
}
FileTail_cre_wd_hz ( &wd_rpt_total );
}
#endif
/************************
正在生成人民币卡日对帐单
*************************/
int c_shdz_rpt(char *e_date, char *f1, char *m1, char *f2, char *m2)
{
$char sqlstr[1024];
$char tmp[50];
int ret=0;
init_all();
$select * into $sy from sys_param;
if (SQLCODE) {
daylog(ERROR, "Error select sys_param![%d]", SQLCODE);
return(-1);
}
del_st_space("sys_param", &sy);
$ifdef wyz_mod_020408;
$select distinct snd_settle_date into :tmp from cur_settle_ls;
if (SQLCODE < 0) {
daylog(ERROR, "Fetch cur_settle_ls error!");
free_all();
return(-1);
}
if (SQLCODE == 100)
tmp[0] = 0;
DelSpace(tmp);
if (strcmp(e_date, tmp))
strcpy(tmp, "his_settle_ls");
else
strcpy(tmp, "cur_settle_ls");
$else;
if ((ret = check_which_table(e_date, e_date)) == 0) {
strcpy(tmp, "cur_settle_ls");
}
else if (ret == 1) {
strcpy(tmp, "his_settle_ls");
}
else {
daylog(ERROR, "判断使用当前清算流水表或历史清算流水表失败!");
free_all();
return -1;
}
$endif;
strcpy(file1, f1);
strcpy(mx1, m1);
strcpy(file2, f2);
strcpy(mx2, m2);
getdatef(cre_date, "");
gettimef(cre_time, "");
strcpy(logic_date, e_date);
sprintf(sqlstr, "select * from %s \
where acq_bank_id = '%s' \
and card_type = '%s' \
and snd_settle_date = '%s'",
tmp, sy.bank_id, CREDIT_CARD, e_date);
$prepare s_sql from :sqlstr;
$declare settle_rpt cursor for s_sql;
if (SQLCODE) {
daylog(ERROR, "Unable declare settle_rpt cursor![%d]", SQLCODE);
free_all();
return(-1);
}
$open settle_rpt;
if (SQLCODE) {
daylog(ERROR, "Unable open settle_rpt![%d]", SQLCODE);
free_all();
return(-1);
}
FetBufSize = 32000;
while (1) {
$fetch settle_rpt into $ls;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "Error fetch settle_rpt![%d]", SQLCODE);
$close settle_rpt;
free_all();
close_all_file();
return(-1);
}
del_st_space("tran_ls", &ls);
merchant_rpt_proc ();
wd_rpt_proc ();
}
$close settle_rpt;
end_merchant_rpt ();
end_wd_rpt ();
free_all();
close_all_file();
create_cre_mer_mx ();
create_cre_wd_mx ();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -