📄 shdz_rpt.ec
字号:
/****************************************************
* 信用卡商户对帐报表(shdz_rpt)
* merchant_rpt_proc(), wd_rpt_proc()
* called by gen_rpt()--in gen_rpt.ec
*
* 最后修改: 周国祥 2001/08/26
****************************************************/
#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";
long prt_enable;
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;
extern int shdz_rpt_flag;
extern char rpt_head[] , rpt_file_head[];
TER_RPT_ITEM *search_ter_rpt(MER_RPT_ITEM *mer_rpt_item, char *t_id, long batch_no)
{
TER_RPT_ITEM *p;
p = mer_rpt_item->ter_ptr;
while (p != NULL) {
if ( !strcmp(t_id, p->t_id) && batch_no == p->batch_no)
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;
return;
}
CARD_ITEM *search_card_ptr ( TER_RPT_ITEM *ter_ptr , char card_type )
{
CARD_ITEM *c_item;
c_item=ter_ptr->card_item;
while ( c_item != NULL ) {
if ( c_item->card_type == card_type )
return c_item;
c_item = (CARD_ITEM *)(c_item->next);
}
return NULL;
}
void insert_card_ptr ( TER_RPT_ITEM *ter_ptr , CARD_ITEM *c_item )
{
CARD_ITEM *p;
p = ter_ptr->card_item;
if ( p == NULL ) {
ter_ptr->card_item = c_item;
return ;
}
while ( p->next != NULL ) p = p->next;
p->next = c_item;
}
void merchant_rpt_proc ()
{
$double rmbc_fee_percent;
$double debit_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[41];
double fee;
int i, j;
void *temp;
TER_RPT_ITEM *ter_ptr;
CARD_ITEM *m_card_ptr , *t_card_ptr;
/*在mer_rpt_item找该商户号是否已存在*/
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 );
get_rebate(ls.merchant_id, CREDIT_CARD, &rmbc_fee_percent);
get_rebate(ls.merchant_id, DEBIT_CARD, &debit_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] = debit_fee_percent;
mer_rpt_item[i].fee_percent[2] = visa_fee_percent;
mer_rpt_item[i].fee_percent[3] = master_fee_percent;
mer_rpt_item[i].fee_percent[4] = amex_fee_percent;
mer_rpt_item[i].fee_percent[5] = dinner_fee_percent;
mer_rpt_item[i].fee_percent[6] = jcb_fee_percent;
/*取商户名*/
$select merchant_cname
into $mer_name from merchant_base
where merchant_id = $ls.merchant_id;
if ( SQLCODE ) {
daylog(ERROR, "Error select merchant_name %s %d ", ls.merchant_id, SQLCODE);
strcpy ( mer_name , "UNKNOWN" );
}
DelSpace(mer_name);
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].card_item=NULL;
mer_rpt_item[i].refund_amt = 0.0;
mer_rpt_item[i].refund_num = 0;
mer_rpt_item[i].ter_ptr = NULL;
}
/*查找该终端批次再mer_rpt_item中?*/
ter_ptr = search_ter_rpt(&(mer_rpt_item[i]), ls.terminal_id, ls.batch_no);
if ( ter_ptr == NULL ) {
ter_ptr = malloc(sizeof(TER_RPT_ITEM));
if ( ter_ptr == NULL ) {
daylog(ERROR, "Error malloc ter_rpt !");
return;
}
strcpy(ter_ptr->t_id, ls.terminal_id);
ter_ptr->batch_no = ls.batch_no;
ter_ptr->pur_amt = 0.0;
ter_ptr->pur_num = 0;
ter_ptr->adjust_amt = 0.0;
ter_ptr->adjust_num = 0;
ter_ptr->refund_amt = 0.0;
ter_ptr->refund_num = 0;
ter_ptr->fee = 0.0;
ter_ptr->next = NULL;
ter_ptr->card_item = NULL;
insert_ter_rpt(&(mer_rpt_item[i]), ter_ptr);
if (mer_rpt_cnt == 1 && mer_rpt_item[i].pur_num == 0)
FileHead_edc_bc_mx();
if (mer_rpt_item[i].pur_num == 0)
FileHead_mer_bc_mx(&(mer_rpt_item[i]), ter_ptr);
FileHead_mer_edc_bc_mx(&(mer_rpt_item[i]), ter_ptr);
FileHead1_edc_bc_mx(&(mer_rpt_item[i]), ter_ptr);
}
#if 0
if ((ls.tran_type != POS_VOID) && (ls.tran_type != PRE_AUTH) &&
(ls.saf_flag[0] == '0') && (ls.tran_flag[0] == '0')) {
#endif
mer_rpt_item[i].pur_amt+=ls.tran_amt;
ter_ptr->pur_amt+=ls.tran_amt;
mer_rpt_total.pur_amt+=ls.tran_amt;
#if 0
}
#endif
mer_rpt_item[i].pur_num++;
ter_ptr->pur_num++;
mer_rpt_total.pur_num++;
j = atoi(ls.card_type);
if (j == 1) j = 0;
if (j == 2) j = 1;
if (j > 50) j -= 49;
fee = in_out(ls.tran_amt * mer_rpt_item[i].fee_percent[j]);
mer_rpt_item[i].fee += fee;
mer_rpt_total.fee += fee;
ter_ptr->fee += fee;
m_card_ptr = search_card_ptr((TER_RPT_ITEM *)(&mer_rpt_item[i]), (char)j);
if (m_card_ptr == NULL) {
m_card_ptr = malloc(sizeof(CARD_ITEM));
if (m_card_ptr == NULL) {
daylog(ERROR, "Unable malloc !");
return;
}
m_card_ptr->card_type = j;
m_card_ptr->pur_amt = 0.0;
m_card_ptr->pur_num = 0;
m_card_ptr->fee = 0.0;
m_card_ptr->next = NULL;
insert_card_ptr((TER_RPT_ITEM *)(&mer_rpt_item[i]), m_card_ptr);
}
m_card_ptr->pur_amt += ls.tran_amt;
m_card_ptr->fee += fee;
m_card_ptr->pur_num++;
t_card_ptr = search_card_ptr(ter_ptr, (char)j);
if (t_card_ptr == NULL) {
t_card_ptr = malloc(sizeof(CARD_ITEM));
if (t_card_ptr == NULL) {
daylog(ERROR, "Unable malloc !");
return;
}
t_card_ptr->card_type = j;
t_card_ptr->pur_amt = 0.0;
t_card_ptr->pur_num = 0;
t_card_ptr->fee = 0.0;
t_card_ptr->next = NULL;
insert_card_ptr(ter_ptr, t_card_ptr);
}
t_card_ptr->pur_amt += ls.tran_amt;
t_card_ptr->fee += fee;
t_card_ptr->pur_num++;
FileDetail_mer_bc_mx();
FileDetail_edc_bc_mx();
return;
}
void wd_rpt_proc ()
{
$char mer_name[41];
int i;
void *temp;
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
into $mer_name from merchant_base
where merchant_id = $ls.merchant_id;
if ( SQLCODE ) {
daylog ( ERROR , "Error select merchant_name %s %d ",\
ls.merchant_id , SQLCODE );
strcpy ( mer_name , "UNKNOWN" );
}
DelSpace(mer_name);
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -