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

📄 c_qsdz_rpt.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
字号:
/****************************************************
 *	信用卡全省对帐报表(c_qsdz_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 "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;

$S_sys_param	sy;
$S_tran_ls	ls;

int init_bank_rpt_item ()
{
int 	i;
$int 	cnt;
$char	b_id[12], h_id[3], b_id2[12], h_id2[3], b_name[31];

	$select * into $sy from sys_param;
	
	if ( SQLCODE ) {
		daylog ( ERROR , "Error select sys_param %d" , SQLCODE );
		return -1;
	}
	del_st_space("sys_param", &sy);

	$select count(*) into $cnt from bank_info 
	where adm_bank_id=$sy.bank_id and adm_host_id=$sy.host_id
	and (not (bank_id=$sy.bank_id and host_id=$sy.host_id));
	
	if ( SQLCODE == 0 && sqlca.sqlerrd[2] == 0 )
		cnt = 0;
	else if ( SQLCODE < 0 ) {
		daylog ( ERROR , "Error select count(*) from bank_info %d" ,\
		SQLCODE );

		return -1;
	}

	cnt+=2;	
	
	bank_rpt_cnt = cnt;

	bank_rpt_item = (BANK_RPT_ITEM *)malloc	(sizeof(BANK_RPT_ITEM)*cnt);
	
	if ( bank_rpt_item == NULL ) {
		daylog ( ERROR , "Error malloc null !" );
		return -1;
	}
	memset ( (void *)bank_rpt_item , '\0' , sizeof(BANK_RPT_ITEM)*cnt );
	strcpy ( bank_rpt_item[0].bank_id , sy.bank_id );
	strcpy ( bank_rpt_item[0].host_id , sy.host_id );
	get_bank_name(sy.bank_id, sy.host_id, b_name);
	strcpyn ( bank_rpt_item[0].bank_name , b_name , 30 );
	bank_rpt_item[0].up_credit_amt = 0.;
	bank_rpt_item[0].up_debit_amt = 0.;
	bank_rpt_item[0].down_credit_amt = 0.;
	bank_rpt_item[0].down_debit_amt = 0.;
	bank_rpt_item[0].in_fee_amt = 0.;
	bank_rpt_item[0].out_fee_amt = 0.;
	
	strcpy ( bank_rpt_item[cnt-1].bank_id , sy.adm_bank_id );
	strcpy ( bank_rpt_item[cnt-1].host_id , sy.adm_host_id );

	get_bank_name(sy.adm_bank_id, sy.adm_host_id, b_name);
	strcpy ( bank_rpt_item[cnt-1].bank_name , b_name );
	bank_rpt_item[cnt-1].up_credit_amt = 0.;
	bank_rpt_item[cnt-1].up_debit_amt = 0.;
	bank_rpt_item[cnt-1].down_credit_amt = 0.;
	bank_rpt_item[cnt-1].down_debit_amt = 0.;
	bank_rpt_item[cnt-1].in_fee_amt = 0.;
	bank_rpt_item[cnt-1].out_fee_amt = 0.;
	cnt--;

	if ( cnt > 0 ) {
		$declare bank_rpt cursor for 
		select bank_id, host_id, bank_name from bank_info 
		where adm_bank_id=$sy.bank_id and adm_host_id=$sy.host_id
		and (not (bank_id=$sy.bank_id and host_id=$sy.host_id));
		
		if ( SQLCODE ) {
			daylog ( ERROR , "Error declare bank_rpt cursor %d ",\
			SQLCODE );
			return -1; 
		}
		
		$open bank_rpt;
		
		if ( SQLCODE ) {	
			daylog ( ERROR , "Error open bank_rpt %d " , SQLCODE );
			return -1;
		}

		for ( i = 1 ; i < cnt ; i++ ) {	
			$fetch bank_rpt into $b_id, $h_id, $b_name;
			
			if ( SQLCODE == 100 )
				break;
	
			if ( SQLCODE ) {
				daylog ( ERROR , "Error fetch %d " , SQLCODE );
				$close bank_rpt;
				return -1;
			}
			DelSpace(b_id);
			DelSpace(h_id);
			DelSpace(b_name);
			
			strcpy ( bank_rpt_item[i].bank_id , b_id );
			strcpy ( bank_rpt_item[i].host_id , h_id );
			strcpy ( bank_rpt_item[i].bank_name , b_name );
			bank_rpt_item[i].up_credit_amt = 0.;
			bank_rpt_item[i].up_debit_amt = 0.;
			bank_rpt_item[i].down_credit_amt = 0.;
			bank_rpt_item[i].down_debit_amt = 0.;
			bank_rpt_item[i].in_fee_amt = 0.;
			bank_rpt_item[i].out_fee_amt = 0.;
		}

		$close bank_rpt;
	}
	
	memset ( head_bank_id , 0 , sizeof(head_bank_id) );
	memset ( head_host_id , 0 , sizeof(head_host_id) );
	
	strcpy ( b_id , bank_rpt_item[0].bank_id );
	strcpy ( h_id , bank_rpt_item[0].host_id );

	for ( i=0 , head_bank_cnt=0 ; i < 12 ; i++ ) {
		strcpy ( head_bank_id[i] , b_id );
		strcpy ( head_host_id[i] , h_id );
		head_bank_cnt++;

		$select adm_bank_id, adm_host_id
		into $b_id2, $h_id2 from bank_info
		where bank_id = $b_id and host_id = $h_id;
		
		if ( SQLCODE && SQLCODE != 100) {
			daylog(ERROR, "Unable select head %s-%s %d ", b_id, h_id, SQLCODE);
			break;
		}
		else if (SQLCODE == 100) {
			break;
		}
		DelSpace(b_id2);
		DelSpace(h_id2);

		strcpy ( b_id , b_id2 );
		strcpy ( h_id , h_id2 );
	
		if ( !strcmp(b_id, head_bank_id[i]) &&
		     !strcmp(h_id, head_host_id[i]) )
			break;
	}

	return 0;
}

int search_bankid ( char *dst_bankid, char *dst_hostid, int *dst )
{
$char	b_id[12], h_id[3], b_id2[12], h_id2[3];
char	head_bank_id2[12][12];
char	head_host_id2[12][3];
int	head_bank_cnt2=0;
int	i, j, b_i;
int	adjust_dst=0;

	memset ( head_bank_id2 , 0 , sizeof(head_bank_id) );
	memset ( head_host_id2 , 0 , sizeof(head_host_id) );

	strcpy ( b_id , dst_bankid );
	strcpy ( h_id , dst_hostid );

	for ( i=0 ; i < 12 ; i++ ) {
		strcpy ( head_bank_id2[i] , b_id );
		strcpy ( head_host_id2[i] , h_id );
		head_bank_cnt2++;

		for ( j=0 ; j < head_bank_cnt ; j++ )
			if ( !strcmp(head_bank_id[j], b_id) &&
			     !strcmp(head_host_id[j], h_id) )
				break;

		if ( j < head_bank_cnt ) break;

		$select adm_bank_id, adm_host_id
		into $b_id2, $h_id2
		from bank_info
		where bank_id = $b_id
		and   host_id = $h_id;

		if ( SQLCODE ) {
			j--;
			adjust_dst=1;
			daylog(ERROR, "Unable select head %s-%s %d", b_id, h_id, SQLCODE);
			break;
		}
		DelSpace(b_id2);
		DelSpace(h_id2);

		strcpy ( b_id , b_id2 );
		strcpy ( h_id , h_id2 );

		if ( !strcmp(b_id, head_bank_id2[i]) &&
		     !strcmp(h_id, head_host_id2[i]) ) {
			j = head_bank_cnt-1;
			break;
		}
	}

	if ( j == 0 && i == 0 )
		b_i=0;
	else if ( j == 0 ) {
		for ( j=1 ; j < bank_rpt_cnt ; j++ )
			if ( !strcmp(head_bank_id2[i-1], bank_rpt_item[j].bank_id) &&
			     !strcmp(head_host_id2[i-1], bank_rpt_item[j].host_id) )
				break;

		b_i=j;
		j=0;
	}
	else
		b_i=bank_rpt_cnt-1;
			
	*dst = j+i+adjust_dst;

	return b_i;
}

void bank_rpt_proc ()
{
int sd_i , fk_i;
int sd_d , fk_d;

	sd_i = search_bankid ( ls.acq_bank_id, ls.acq_host_id, &sd_d );
	fk_i = search_bankid ( ls.iss_bank_id, ls.acq_host_id, &fk_d );

	if ( sd_d+fk_d > 1 ) {
		if ( sd_d > 0 && fk_d != 0 ) {
		bank_rpt_item[fk_i].in_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d);
		bank_rpt_item[fk_i].in_fee_num+=(sd_d>0);
		bank_rpt_total.in_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d);
		bank_rpt_total.in_fee_num+=(fk_d>0);
		}

		if ( sd_d-1 > 0 ) {
		bank_rpt_item[sd_i].out_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d-1);
		bank_rpt_item[sd_i].out_fee_num+=(sd_d-1)>0;
		bank_rpt_total.out_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d-1);
		bank_rpt_total.out_fee_num+=(sd_d-1)>0;
		}
	}

	if ( sd_i != fk_i ) 	
	switch ( ls.tran_type ) {
	case DEPOSIT:
	case REFUND:
	case TRANS_IN:
		cre_tip = get_qs_tip ( ls );

		bank_rpt_item[sd_i].up_debit_amt += ls.tran_amt+cre_tip;
		bank_rpt_item[sd_i].up_debit_num++;
	
		bank_rpt_total.up_debit_amt += ls.tran_amt+cre_tip;
		bank_rpt_total.up_debit_num++;

		bank_rpt_item[fk_i].down_credit_amt += ls.tran_amt+cre_tip;
		bank_rpt_item[fk_i].down_credit_num++;
		
		bank_rpt_total.down_credit_amt += ls.tran_amt+cre_tip;
		bank_rpt_total.down_credit_num++;
		
		break;

	case PURCHASE:
	case WITHDRAWAL:
	case TRANS_OUT:
		cre_tip = get_qs_tip ( ls );

		bank_rpt_item[sd_i].up_credit_amt += ls.tran_amt+cre_tip;
		bank_rpt_item[sd_i].up_credit_num++;

		bank_rpt_total.up_credit_amt += ls.tran_amt+cre_tip;
		bank_rpt_total.up_credit_num++;

		bank_rpt_item[fk_i].down_debit_amt += ls.tran_amt+cre_tip;
		bank_rpt_item[fk_i].down_debit_num++;

		bank_rpt_total.down_debit_amt += ls.tran_amt+cre_tip;
		bank_rpt_total.down_debit_num++;
		
		break;
	}

	if ( sd_i != fk_i ) {
		if ( ( bank_rpt_item[sd_i].up_debit_num+\
		bank_rpt_item[sd_i].up_credit_num ) == 1 )
			FileHead_bank_up_mx ( &(bank_rpt_item[sd_i]) );
		
		FileDetail_bank_up_mx ( &(bank_rpt_item[sd_i]) );
		
		if ( ( bank_rpt_item[fk_i].down_credit_num+\
		bank_rpt_item[fk_i].down_debit_num ) == 1 )
			FileHead_bank_down_mx ( &(bank_rpt_item[fk_i]) );
		
		FileDetail_bank_down_mx ( &(bank_rpt_item[fk_i]) );
	}
}

void end_bank_rpt ()
{
int	i;

	FileHead_bank_up_hz ();
	FileHead_bank_down_hz ();
	FileHead_bank_in_fee ();
	FileHead_bank_out_fee ();
	
	for ( i=0 ; i < bank_rpt_cnt ; i++ ) {
		if ( i == bank_rpt_cnt-1 && \
		!strcmp(bank_rpt_item[0].bank_id, bank_rpt_item[i].bank_id) &&
		!strcmp(bank_rpt_item[0].host_id, bank_rpt_item[i].host_id) )
			break;

		if ( (bank_rpt_item[i].up_credit_num+\
		bank_rpt_item[i].up_debit_num) != 0 ) {
			FileTail_bank_up_mx ( &(bank_rpt_item[i]) );
			FileDetail_bank_up_hz ( &(bank_rpt_item[i]) );
		}
		
		if ( (bank_rpt_item[i].down_credit_num+\
		bank_rpt_item[i].down_debit_num) != 0 ) {
			FileTail_bank_down_mx ( &(bank_rpt_item[i]) );
			FileDetail_bank_down_hz ( &(bank_rpt_item[i]) );
		}
		
		if ( bank_rpt_item[i].in_fee_num != 0 )
			FileDetail_bank_in_fee ( &(bank_rpt_item[i]) );
		
		if ( bank_rpt_item[i].out_fee_num != 0 ) 
			FileDetail_bank_out_fee ( &(bank_rpt_item[i]) );
	}
	
	FileTail_bank_up_hz ( &bank_rpt_total );
	FileTail_bank_down_hz ( &bank_rpt_total );
	FileTail_bank_in_fee ( &bank_rpt_total );
	FileTail_bank_out_fee ( &bank_rpt_total );
}

int c_qsdz_rpt(char *e_date, char *f1, char *m1, char *f2, char *m2,
       char *f3, char *f4)
{
	$char	sql[256];
	$char	tmp[50];
	$char	merch_id[16];
	char	settle_date[9];
	char	sign_bankid[12], sign_hostid[3];
	int	cur_flag = 1;

	init_all();

	if (init_bank_rpt_item() < 0) {
		daylog(ERROR, "Unable init bank_rpt item!");
		free_all();
		return(-1);
	}

$ifndef wyz020429_mod;
	$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");
		cur_flag = 0;
	}
	else
	{
		strcpy(tmp, "cur_settle_ls");
		cur_flag = 1;
	}
$else;
	get_settle_date(settle_date);
	if (strcmp(e_date, settle_date) >= 0)
		cur_flag = 1;
	else
		cur_flag = 0;
$endif;

	strcpy(file1, f1);
	strcpy(mx1, m1);
	strcpy(file2, f2);
	strcpy(mx2, m2);
	strcpy(file3, f3);
	strcpy(file4, f4);

	strcpy(logic_date, e_date);

$ifdef wyz020429_mod;
	sprintf(sql, "select * from %s where card_type = '%s' and snd_settle_date = '%s' and saf_flag = '0' and tran_flag = '0' and tran_type not in (%d,%d)", tmp, CREDIT_CARD, e_date, POS_VOID, PRE_AUTH);
$else;
	if (cur_flag == 1)
		sprintf(sql, "select distinct merchant_id from cur_settle_ls");
	else
		sprintf(sql, "select distinct merchant_id from his_settle_ls");

	EXEC SQL PREPARE select_merch from :sql;
	EXEC SQL DECLARE select_merch_cur CURSOR FOR select_merch;
	if (SQLCODE) {
		daylog(ERROR, "DECLARE cursor failed![%d]", SQLCODE);
		free_all();
		return(-1);
	}
	EXEC SQL OPEN select_merch_cur;
	
	if (SQLCODE) {	
		daylog(ERROR, "OPEN cursor failed![%d]", SQLCODE);
		free_all();
		return(-1);
	}
	while(1) {
		EXEC SQL FETCH select_merch_cur INTO :merch_id;
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "FETCH cursor failed![%d]", SQLCODE);
			$close select_merch_cur;
			free_all();
			close_all_file();
			return(-1);
		}
		DelSpace(merch_id);
		get_sign_bank(merch_id, sign_bankid, sign_hostid);
		if (strcmp(G_cen_bankid, G_bankid)) {
			if (strcmp(G_bankid, sign_bankid))
				continue;
		}
$endif;
	
		if (cur_flag == 1) 
			sprintf(sql, "select * from cur_settle_ls	\
			where merchant_id = \'%s\'	\
			and card_type = \'%s\'		\
			and snd_settle_date = \'%s\'",
			merch_id, CREDIT_CARD, e_date);
		else
			sprintf(sql, "select * from his_settle_ls	\
			where merchant_id = \'%s\'	\
			and card_type = \'%s\'		\
			and snd_settle_date = \'%s\'",
			merch_id, CREDIT_CARD, e_date);

		$prepare s_sql from :sql;
		$declare settle_rpt cursor for s_sql;
	
		if (SQLCODE) {
			daylog(ERROR, "Unable decalre 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);
		}
	
		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);

			bank_rpt_proc();
		}

		$close settle_rpt;
		$free settle_rpt;
#ifdef wyz020429_mod
#else
	}
#endif
	
	end_bank_rpt();
	
	free_all();
	close_all_file();
	
	create_cre_bank_up_mx();
	create_cre_bank_down_mx();

	return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -