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

📄 mcc_stat.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
字号:
/****************************************************
 *	MCC 分析
 *
 * 最后修改:	周国祥 2001/08/24
 * 最后修改:	Wubin 2001/09/03
 ****************************************************/
#include <curses.h>
#include "mytools.h"
#include "tool.h"
#include "analysis.h"
$include "db_struct.h";
EXEC SQL INCLUDE sqlca;

EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;

extern char G_cen_bankid[12];
extern char G_bankid[12];

int mcc_stat()
{
	WINDOW *my_win;
	$char mcc[5];
	$long count;
	$double amount;
	$char start_date[11], end_date[11], bankid[15/*12*/], hostid[3];
	$char acq_bankid[12];
	$char	in_date1[15], in_date2[15];
	char scr_dump_file[80], bankname[31], mccs[32][5], buf[80];
	long counts[32];
	double amounts[32];
    char    ddcount[20],ddamount[20],dd_total_count[20],dd_total_amount[20];
	int num, i;
	long total_count;
	double total_amount;

	S_sys_param sy;

    strcpy(audit_title, "MCC 分析");

	sprintf(scr_dump_file, "/tmp/.mcc_stat.%d", getpid());
	scr_dump(scr_dump_file);

	disp_below("MCC 分析");
	clear_wline(stdscr, LINES-1);
	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, "MCC 分析", 0, 0);
	my_win = newwin(19, 80, 3, 0);
	mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	wrefresh(my_win);

	set_prompt(PROMPT_OFF);
	getdatef(in_date1, "");
	strcpy(in_date2, in_date1);
	mvwprintw(my_win, 2, 14, "日    期: [        ] 到 [        ]");
	if (in_item(my_win, "", 2, 25, in_date1, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end;
	if (in_item(my_win, "", 2, 39, in_date2, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end;

	date2str(in_date1, start_date, "");
	date2str(in_date2, end_date, "");

	bankid[0] = 0;
	acq_bankid[0] = 0;
	strcpy(hostid, "00");
#ifdef Wubin20020709_mod
	if (!select_sys_param(&sy)) {
		strcpy(bankid, sy.bank_id);
		strcpy(hostid, sy.host_id);
	}
#else
	strcpy(acq_bankid, G_cen_bankid);
	strcpy(bankid, G_bankid);
#endif
	mvwprintw(my_win, 3, 14, "联行行号: [%-11.11s][%-2.2s] [%-30.30s]", bankid, hostid, "");
	if (strcmp(G_bankid, G_cen_bankid) == 0)
	{
		if (in_item(my_win, "", 3, 25, bankid, 11, NULL, NULL, 0, 0) !=
		    ENTER) goto end;
		if (in_item(my_win, "", 3, 38, hostid, 2, NULL, NULL, 0, 0) !=
	    	ENTER) goto end;

		DelSpace(bankid);
		DelSpace(hostid);
		i = get_bank_name(bankid, hostid,bankname);
		if (bankid[0] && i) {
			h_winprompt(my_win, 17, 4, "无此联行行号!", 1, 0);
			goto end;
		}
		mvwprintw(my_win, 3, 43, "%-30.30s", bankname);
		wrefresh(my_win);
	}
	DelSpace(bankid);
	DelSpace(hostid);

	mvwprintw(my_win, 5, 14, "处理中, 请稍候 ...");
	wrefresh(my_win);

	if (strcmp(bankid, G_cen_bankid) == 0)
	{
		strcat(bankid, "%");

		exec sql declare mcc_cur_1 cursor for
		select mcc, count(*), sum(tran_amt)
		from cur_tran_ls
		where acq_bank_id like :bankid
		and local_sys_date >= :start_date
		and local_sys_date <= :end_date
		and resp_code like '00%' 
		and edc_err_flag in ('0')	/* 正常 */
		and tran_flag in ('0','4')	/* 交易标志:正常,已退货 */
		and tran_type not in (4,12)	/* 预授权,撤消 */
		and tran_amt >= 0.01		/* 交易金额为0*/
		group by mcc
		order by mcc asc;
	
		exec sql open mcc_cur_1;
		if (sqlca.sqlcode) {
			errcall ( ERROR, "Open mcc_cur_1[%d]",SQLCODE );
			h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
			goto end;
		}
		num = 0;
		total_count = 0;
		total_amount = 0;
		while (1) {
			exec sql fetch mcc_cur_1 into :mcc, :count, :amount;
			if (sqlca.sqlcode)
				break;
			DelSpace(mcc);
			total_count += count;
			total_amount += amount;
			strcpy(mccs[num], mcc);
			counts[num] = count;
			amounts[num] = amount;
			num++;
		}
		exec sql close mcc_cur_1;

		exec sql declare mcc_cur_2 cursor for
		select mcc, count(*), sum(tran_amt)
		from his_tran_ls
		where acq_bank_id like :bankid
		and local_sys_date >= :start_date
		and local_sys_date <= :end_date
		and resp_code like '00%' 
		and edc_err_flag in ('0')	/* 正常 */
		and tran_flag in ('0','4')	/* 交易标志:正常,已退货 */
		and tran_type not in (4,12)	/* 预授权,撤消 */
		and tran_amt >= 0.01		/* 交易金额为0*/
		group by mcc
		order by mcc asc;
	
		exec sql open mcc_cur_2;
		if (sqlca.sqlcode) {
			errcall(ERROR, "Open mcc_cur_2 error!");
			h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
			goto end;
		}
		while (1) {
			exec sql fetch mcc_cur_2 into :mcc, :count, :amount;
			if (sqlca.sqlcode)
				break;
			DelSpace(mcc);
			total_count += count;
			total_amount += amount;
			for (i = 0; i < num; i++)
				if (!strcmp(mcc, mccs[i])) break;
			if (i == num) {
				strcpy(mccs[i], mcc);
				counts[i] = count;
				amounts[i] = amount;
				num++;
			} else {
				counts[i] += count;
				amounts[i] += amount;
			}
		}
		exec sql close mcc_cur_2;
	
	}
	else
	{
		strcat(bankid, "%");

		exec sql declare mcc_cur_12 cursor for
		select mcc, count(*), sum(tran_amt)
		from cur_tran_ls
		where acq_bank_id = :acq_bankid
		and exists(select merchant_id from merchant_base 
			where sign_bank_id like :bankid and cur_tran_ls.merchant_id = merchant_base.merchant_id) 
		and local_sys_date >= :start_date
		and local_sys_date <= :end_date
		and resp_code like '00%' 
		and edc_err_flag in ('0')	/* 正常 */
		and tran_flag in ('0','4')	/* 交易标志:正常,已退货 */
		and tran_type not in (4,12)	/* 预授权,撤消 */
		and tran_amt >= 0.01		/* 交易金额为0*/
		group by mcc
		order by mcc asc;

		exec sql open mcc_cur_12;
		if (sqlca.sqlcode) {
			errcall ( ERROR, "Open mcc_cur_12[%d]",SQLCODE );
			h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
			goto end;
		}
		num = 0;
		total_count = 0;
		total_amount = 0;
		while (1) {
			exec sql fetch mcc_cur_12 into :mcc, :count, :amount;
			if (sqlca.sqlcode)
				break;
			DelSpace(mcc);
			total_count += count;
			total_amount += amount;
			strcpy(mccs[num], mcc);
			counts[num] = count;
			amounts[num] = amount;
			num++;
		}
		exec sql close mcc_cur_12;

		exec sql declare mcc_cur_21 cursor for
		select mcc, count(*), sum(tran_amt)
		from his_tran_ls
		where acq_bank_id = :acq_bankid
		and exists(select merchant_id from merchant_base 
			where sign_bank_id like :bankid and his_tran_ls.merchant_id = merchant_base.merchant_id) 
		and local_sys_date >= :start_date
		and local_sys_date <= :end_date
		and resp_code like '00%' 
		and edc_err_flag in ('0')	/* 正常 */
		and tran_flag in ('0','4')	/* 交易标志:正常,已退货 */
		and tran_type not in (4,12)	/* 预授权,撤消 */
		and tran_amt >= 0.01		/* 交易金额为0*/
		group by mcc
		order by mcc asc;
	
		exec sql open mcc_cur_21;
		if (sqlca.sqlcode) {
			errcall(ERROR, "Open mcc_cur_21 error!");
			h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
			goto end;
		}
		while (1) {
			exec sql fetch mcc_cur_21 into :mcc, :count, :amount;
			if (sqlca.sqlcode)
				break;
			DelSpace(mcc);
			total_count += count;
			total_amount += amount;
			for (i = 0; i < num; i++)
				if (!strcmp(mcc, mccs[i])) break;
			if (i == num) {
				strcpy(mccs[i], mcc);
				counts[i] = count;
				amounts[i] = amount;
				num++;
			} else {
				counts[i] += count;
				amounts[i] += amount;
			}
		}
		exec sql close mcc_cur_21;
	
	}	

	CreateList(15, 58, 7, 11, "商户类型  交易笔数   百分比       交易金额   百分比");

	for (i = 0; i < num; i++) {

        	mystruct.type=DDINT;
        	mystruct.ddnum.intnum=counts[i];
        	strcpy(ddcount,add_demical(mystruct));
        	mystruct.type=DDDOUB;
        	mystruct.ddnum.doublenum=amounts[i];
        	strcpy(ddamount,add_demical(mystruct));

		sprintf(buf, "%-8.8s  %8s  %6.2f%%   %14s  %6.2f%%",
                 mccs[i],ddcount, (double)counts[i]/total_count*100,ddamount,
                 amounts[i]/total_amount*100);
		AddListItem(buf, 0);
	}
	AddListItem("", 0);
        mystruct.type=DDINT;
        mystruct.ddnum.intnum=total_count;
        strcpy(dd_total_count,add_demical(mystruct));
        mystruct.type=DDDOUB;
        mystruct.ddnum.doublenum=total_amount;
        strcpy(dd_total_amount,add_demical(mystruct));
	sprintf(buf, "%-8.8s  %8s            %14s         ", 
         "总计",dd_total_count, dd_total_amount);
	AddListItem(buf, 0);
	h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓打印:CTRL_P  返回: ESC", 0, 0);
	DispList(0);
	FreeList();
end:
	delwin(my_win);
	clear_wline ( stdscr, LINES-1 );
	scr_restore(scr_dump_file);
	unlink(scr_dump_file);
	return(0);
}

⌨️ 快捷键说明

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