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

📄 merch_m_rpt.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:
/*=====================================
中行商户本外卡交易统计月报表
相关数据库:	cur_settle_ls, his_settle_ls
函数名:merch_foreign_month_rpt()
程  序:Wubin 2001/09/15
=====================================*/

#include <stdio.h>
#include <math.h>

#include "all.h"
#include "macro_def.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;


/* defined in cglfx.ec */
extern	struct {
	char	bankid[12];
	char	hostid[3];
	int		count;
	double	amount;
}	bankids[400];

#define	MAX_MERCH_NUM	1000
struct {
	char	merchid[18];
	int		count;
	double	amount;
}	merchids_card[MAX_MERCH_NUM];

$char	card_table1[40][4] = {
		"02",
		"01",
		"51",
		"52",
		"53",
		"54",
		"55",
		"",
		NULL,
};

$struct Merch_st {
		char merchant_id[16];
		char merchant_name[41];
		float credit_amt;	
		int   credit_cnt;	
		float debit_amt;
		int   debit_cnt;
		float visa_amt;
		int   visa_cnt;
		float mc_amt;	
		int   mc_cnt;	
		float ae_amt;	
		int   ae_cnt;	
		float dc_amt;	
		int   dc_cnt;	
		float jcb_amt;	
		int   jcb_cnt;	
		float total_amt;
		int   total_cnt;
};

extern double get_qs_tip(), get_bank_name(), type2buf();

int merch_foreign_month_rpt(file, start_date, end_date, acq_bank_id)
char *file;
$parameter char *start_date, *end_date, *acq_bank_id;
{
	FILE	*fp;
	int	i, ret;
	double 	total_tran_amt;
	char	settle_date[9];
	int	cur_flag=0;
	int	tmp_ret=0;
	$S_tran_ls ls;
	$S_sys_param sy;
	$double amt_tmp, tran_amt;
	$char	sqlstr[1024], bankid[18], hostid[3];
	$char	bankname[50], merchid[18];
	$char	merchant_id[16], merchantname[41];
	char	bankid1[12], hostid1[3];
	$int 	count, bank_num, merch_num;
	$int	total_tran_cnt=0;
	$short	indi, indi1, indi2;
	$int	total_card_cnt[1000], card_cnt[1000];
	$double card_amt[1000], total_card_amt[1000];
	$struct Merch_st merch_m;
	

	bank_num = merch_num= ret = 0;
	total_tran_amt = 0.0;

	if ( ret = select_sys_param(&sy) ) {
		daylog(ERROR, "查本地参数表错误[%d]!",ret);
		return -1;
	}

	get_settle_date(settle_date);
	/*判断查询cur_settle_ls OR his_settle_ls OR BOTH */
	if (strcmp(settle_date, end_date) > 0)
		cur_flag = 0; /*use his_settle_ls*/
	else
	if (strcmp(settle_date, start_date) == 0)
		cur_flag = 1; /*use cur_settle_ls*/
	else
		cur_flag = 2; /*both*/

	/* 建立临时表用于对统计结果进行排序 */

	$create temp table merchant_tmp
	(
		merchant_id	char(15) 	not null,
		merchant_name	char(40),
		credit_amt	float,
		credit_cnt	integer,
		debit_amt	float,
		debit_cnt	integer,
		visa_amt	float,
		visa_cnt	integer,
		mc_amt		float,
		mc_cnt		integer,
		ae_amt		float,
		ae_cnt		integer,
		dc_amt		float,
		dc_cnt		integer,
		jcb_amt		float,
		jcb_cnt		integer,
		total_amt	float,
		total_cnt	integer,
	
		primary key (merchant_id)
	);
	
	if ( SQLCODE != 0 ) {
		daylog(ERROR, "create temp table merchant_tmp Error[%d]", SQLCODE);
		return ( -1 );
	}
	
	
	/***************
	* 统计下级行
	***************/
	memset(&bankids, 0, sizeof(bankids));
	if (!strcmp(G_cen_bankid, G_bankid)) {
		sprintf(sqlstr,
			"select distinct bank_id, count(*) \
			from bank_info \
			where   adm_bank_id = \'%s\'  group by bank_id", 
			G_cen_bankid);
		$prepare adm_bank from $sqlstr;
		$declare adm_bank_cur cursor for adm_bank;
		$open adm_bank_cur;
	
		if ( SQLCODE ) {
			daylog(ERROR, "open adm_bank_cur err[%d]", SQLCODE);
			return ( -1 );
		}

		while ( bank_num < 400 ) {
			$fetch adm_bank_cur into $bankid, $count:indi;
			if ( SQLCODE == SQLNOTFOUND )
				break;
			if ( SQLCODE ) {
				$close adm_bank_cur;
				daylog(ERROR, "fetch adm_bank_cur err[%d]", SQLCODE);
				return ( -1 );
			}
			if ( indi != -1 && count ) {
				DelSpace(bankid);
				if ( memcmp(bankid, "0000", 4) ) {
					strcpy ( bankids[bank_num].bankid, bankid );
					strcpy ( bankids[bank_num].hostid, "00" );
					bankids[bank_num].count = count;
					bank_num ++;
				}
			}
		}

		$close adm_bank_cur;
		strcpy(bankids[bank_num].bankid, G_cen_bankid);
		strcpy ( bankids[bank_num].hostid, "00" );
		bankids[bank_num].count = 1;
	} else {
		strcpy(bankids[0].bankid, acq_bank_id);
		strcpy(bankids[0].hostid, "00" );
		bankids[0].count = 1;
	}

	if (!(fp = fopen(file, "w"))) {
		daylog(ERROR, "Open %s error!", file);
		return(-1);	/* File operate error */
	}

	memset(merchids_card, 0, sizeof(merchids_card));

	bank_num = 0;
	while (bankids[bank_num].bankid[0] != 0) {
		strcpy(acq_bank_id, bankids[bank_num].bankid);
		memset(total_card_amt, 0, sizeof(total_card_amt));
		memset(total_card_cnt, 0, sizeof(total_card_cnt));

		/***************
		* 统计商户数
		memset(&merchids_card, 0, sizeof(merchids_card));
		***************/

		if (cur_flag == 1 || cur_flag == 2) {
			sprintf(sqlstr,
			"select distinct merchant_id, count(*), sum(tran_amt) \
			from cur_settle_ls		\
			where acq_bank_id = \'%s\'	\
			and snd_settle_date >= \'%s\'	\
			and snd_settle_date <= \'%s\'	\
			group by merchant_id",
			G_cen_bankid, start_date, end_date);

			$prepare merch_forg from $sqlstr;
			$declare merch_forg_cur cursor for merch_forg;
			$open merch_forg_cur;
		
			if ( SQLCODE ) {
				daylog(ERROR, "open merch_forg_cur err[%d]", SQLCODE);
				return -1;
			}
	
			memset(merchids_card, 0, sizeof(merchids_card));
	
			merch_num = 0;
/*
			while ( merch_num < MAX_MERCH_NUM ) {
*/
			while (1) {
				$fetch merch_forg_cur
				into $merchid,  $count:indi1, $tran_amt:indi2;
	
				if ( SQLCODE == SQLNOTFOUND )
					break;
	
				if ( SQLCODE ) {
					$close merch_forg_cur;
					daylog(ERROR, "fetch merch_forg_cur err[%d]", SQLCODE);
					return ( -1 );
				}
				if ( indi1 != -1 && indi2 != -1 && count ) {
					DelSpace(merchid);
					get_sign_bank(merchid, bankid1, hostid1);
	
					if (strcmp(acq_bank_id, bankid1) == 0) {
						tmp_ret = check_merchids(merchid);
						if (tmp_ret == 0) {
							strcpy(merchids_card[merch_num].merchid, merchid);
							merchids_card[merch_num].count = count;
							merchids_card[merch_num].amount = tran_amt;
							merch_num ++;
						}
						else {
							merchids_card[merch_num].count = count;
							merchids_card[merch_num].amount = tran_amt;
						}
					}
				}
			}
			$close merch_forg_cur;
		}

		if (cur_flag == 0 || cur_flag == 2) {
			sprintf(sqlstr,
			"select distinct merchant_id, count(*), sum(tran_amt) \
			from his_settle_ls		\
			where acq_bank_id = \'%s\'	\
			and snd_settle_date >= \'%s\'	\
			and snd_settle_date <= \'%s\'	\
			group by merchant_id",
			G_cen_bankid, start_date, end_date);

			$prepare merch_forg2 from $sqlstr;
			$declare merch_forg_cur2 cursor for merch_forg2;
			$open merch_forg_cur2;
		
			if ( SQLCODE ) {
				daylog(ERROR, "open merch_forg_cur err[%d]", SQLCODE);
				return -1;
			}

⌨️ 快捷键说明

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