⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_shdz_rpt.ec.willrm

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 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 + -