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

📄 shdz_rpt.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:
/****************************************************
 *	信用卡商户对帐报表(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 + -