sdhfx.ec

来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 341 行

EC
341
字号
/****************************************************
 *	收单行分析 sdhfx()
 *
 * 最后修改:	周国祥 2001/08/26
 * 最后修改:	Wubin 2001/09/03
 ****************************************************/
#include <curses.h>
#include <tool.h>
#include "mytools.h"
#include "analysis.h"

$include "db_struct.h";
$include sqlca;

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

double calc_double(char *);
int	sdhfx ()
{
WINDOW	*my_win;
$char	sqlstr[1024];
$int	i, count, total_count, bank_num;
$double	amount, total_amount;
$short	indi1, indi2;
$char	bankid[16], hostid[3], bankname[50];
char	table[30], in_date1[15], in_date2[15], str[100];
char	date1[10], date2[10];
char    ddcount[20],ddamount[20],dd_total_count[20],dd_total_amount[20];
char	scr_dump_file[80];
S_sys_param sy;
char	iss_bank[12];
int	ret = 0;


	ddcount[0] = 0;
	ddamount[0] = 0;
	dd_total_count[0] = 0;
	dd_total_amount[0] = 0;

        strcpy(audit_title,"收单行分析" );
	count = total_count = 0;
	amount = total_amount = 0;

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

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

	if ( i = select_sys_param(&sy) ) {
		errcall(ERROR, "查本地参数表错误[%d]!",i);
		h_winprompt(my_win, 17, 4, "查本地参数表错误!",1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}

	if ( get2date( my_win, 2, 20, in_date1, in_date2, table ) < 0 ) {
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}

	date2str(in_date1, date1, "");
	date2str(in_date2, date2, "");

	strcpy(iss_bank,G_bankid);
	if ((strcmp(G_cen_bankid, G_bankid)) == 0) {
		mvwprintw(my_win, 3,22, "请输入银行行号: [%11s]", " ");
		ret =in_item(my_win, "", 3, 39, iss_bank, 11, NULL, NULL, 0, 0);
		if (ret != ENTER) {
			delwin(my_win);
			scr_restore(scr_dump_file);
			unlink(scr_dump_file);
			return(-1);
		}
	} else {
		mvwprintw(my_win, 3,22, "请输入银行行号: [%s]", iss_bank);
	}

	DelSpace(iss_bank);
	errcall(ERROR,"银行行号: [%s]",iss_bank);
	mvwprintw(my_win, 4, 22, "处理中, 请稍候 ...");
	wrefresh(my_win);

#ifdef Wubin20020607_mod
	sprintf(sqlstr,
		"select count(*), sum(tran_amt) from cur_tran_ls\
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' ",
		date1, date2, sy.bank_id);
#else
	sprintf(sqlstr,
		"select count(*), sum(tran_amt) from cur_tran_ls\
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' ",
		date1, date2, iss_bank);
#endif
	$prepare s_comm0 from $sqlstr;
	$declare sdhfx_cur0 cursor for s_comm0;
	$open sdhfx_cur0;
	if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
		h_winprompt(my_win, 17, 4, "1数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}
	$fetch sdhfx_cur0 into $count:indi1, $amount:indi2;
	if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
		$close sdhfx_cur0;
		h_winprompt(my_win, 17, 4, "2数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}
	if ( SQLCODE == SQLNOTFOUND || indi1 == -1 || indi2 == -1 ) {
		count = 0;
		amount = 0;
	}
	$close sdhfx_cur0;

#ifdef Wubin20020607_mod
	sprintf(sqlstr,
		"select count(*), sum(tran_amt) from his_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' ",
		date1, date2, sy.bank_id);
#else
	sprintf(sqlstr,
		"select count(*), sum(tran_amt) from his_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' ",
		date1, date2, iss_bank);
#endif
	$prepare s_comm1 from $sqlstr;
	$declare sdhfx_cur1 cursor for s_comm1;
	$open sdhfx_cur1;
	if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
		h_winprompt(my_win, 17, 4, "4数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}
	$fetch sdhfx_cur1 into $total_count:indi1, $total_amount:indi2;
	if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
		$close sdhfx_cur1;
		h_winprompt(my_win, 17, 4, "5数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}
	if ( SQLCODE == SQLNOTFOUND || indi1 == -1 || indi2 == -1 ) {
		total_count = 0;
		total_amount = 0;
	}
	$close sdhfx_cur1;

	total_count += count;
	total_amount += amount;

/* select count, amount of every bank from cur_tran_ls and his_tran_ls */
	bank_num = 0;
#ifdef Wubin20020607_mod
	sprintf(sqlstr,
		"select distinct acq_bank_id, count(*), sum(tran_amt) \
		from his_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' \
		group by acq_bank_id",
		date1, date2, sy.bank_id);
#else
	sprintf(sqlstr,
		"select distinct acq_bank_id, count(*), sum(tran_amt) \
		from his_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' \
		group by acq_bank_id",
		date1, date2, iss_bank);
#endif
	$prepare s_comm2 from $sqlstr;
	$declare sdhfx_cur2 cursor for s_comm2;
	$open sdhfx_cur2;
	if ( SQLCODE ) {
		errcall ( ERROR, "open sdhfx_cur err[%d]",SQLCODE );
		h_winprompt(my_win, 17, 4, "6数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}

	while ( bank_num < 400 ) {
		$fetch sdhfx_cur2 into $bankid, $count:indi1, $amount:indi2;
		if ( SQLCODE == SQLNOTFOUND )
			break;
		if ( SQLCODE ) {
			$close sdhfx_cur2;
			errcall ( ERROR, "fetch sdhfx_cur2 err[%d]",SQLCODE );
			h_winprompt(my_win, 17, 4, "7数据库操作错误!", 1,0);
			delwin ( my_win );
			scr_restore ( scr_dump_file );
			unlink ( scr_dump_file );
			return ( -1 );
		}
		if ( indi1 != -1 && indi2 != -1 && count ) {
			DelSpace(bankid);
			strcpy ( bankids[bank_num].bankid, bankid );
			strcpy ( bankids[bank_num].hostid, "00" );
			bankids[bank_num].count = count;
			bankids[bank_num].amount = amount;
			bank_num ++;
		}
	}
	$close sdhfx_cur2;

#ifdef Wubin20020607_mod
	sprintf(sqlstr,
		"select distinct acq_bank_id, count(*), sum(tran_amt) \
		from cur_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' \
		group by acq_bank_id",
		date1, date2, sy.bank_id);
#else
	sprintf(sqlstr,
		"select distinct acq_bank_id, count(*), sum(tran_amt) \
		from cur_tran_ls \
		where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
		and resp_code =\'00\' and iss_bank_id =\'%s\' \
		group by acq_bank_id",
		date1, date2, iss_bank);
#endif
	$prepare s_comm3 from $sqlstr;
	$declare sdhfx_cur3 cursor for s_comm3;
	$open sdhfx_cur3;
	if ( SQLCODE ) {
		errcall ( ERROR, "open sdhfx_cur err[%d]",SQLCODE );
		h_winprompt(my_win, 17, 4, "8数据库操作错误!", 1,0);
		delwin ( my_win );
		scr_restore ( scr_dump_file );
		unlink ( scr_dump_file );
		return ( -1 );
	}
	while ( bank_num < 400 ) {
		$fetch sdhfx_cur3 into $bankid, $count:indi1, $amount:indi2;
		if ( SQLCODE == SQLNOTFOUND )
			break;
		if ( SQLCODE ) {
			$close sdhfx_cur3;
			errcall ( ERROR, "fetch cglfx_cur err[%d]",SQLCODE );
			h_winprompt(my_win, 17, 4, "9数据库操作错误!", 1,0);
			delwin ( my_win );
			scr_restore ( scr_dump_file );
			unlink ( scr_dump_file );
			return ( -1 );
		}
		DelSpace(bankid);
		if ( indi1 != -1 && indi2 != -1 && count ) {
			for ( i=0; i<bank_num; i++ )
				if ( !strcmp ( bankids[i].bankid, bankid ) )
					break;
			if ( i >= bank_num ) {
				DelSpace(bankid);
				strcpy ( bankids[bank_num].bankid, bankid );
				strcpy ( bankids[bank_num].hostid, "00" );
				bankids[bank_num].count = count;
				bankids[bank_num].amount = amount;
				bank_num ++;
			} else {
				bankids[i].count += count;
				bankids[i].amount += amount;
			}
		}
	}
	$close sdhfx_cur3;

	sprintf(str,"%-7.7s%-18.18s%9s%8s%12s%8s",
	"收单行","收单行名称","交易笔数","百分比","交易总额","百分比");
	CreateList(16, 80, 6, 0, str);

	ddcount[0] = '\0';
	ddamount[0] = '\0';
	dd_total_count[0] = '\0';
	dd_total_amount[0] = '\0';
	for ( i=0; i<bank_num; i++ ) {
		strcpy ( bankid, bankids[i].bankid );
		strcpy ( hostid, bankids[i].hostid );
		get_bank_name(bankid, hostid, bankname);

	        mystruct.type=DDINT;
        	mystruct.ddnum.intnum=bankids[i].count;
        	strcpy(ddcount,add_demical(mystruct));
        	mystruct.type=DDDOUB;
        	mystruct.ddnum.doublenum=bankids[i].amount;
        	strcpy(ddamount,add_demical(mystruct));
        	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(str,"%-7.7s%-18.18s%9s %6.2f%%%12s %6.2f%%",
			bankid, bankname, ddcount,
			(double)bankids[i].count/total_count*100, ddamount,
			bankids[i].amount/total_amount*100);
		AddListItem(str,0);
    	}
	AddListItem(" ",0);
	sprintf(str,"%-25s%9s        %14s        ",
		"总计", dd_total_count,dd_total_amount);
	AddListItem(str,0);
	h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓打印:CTRL_P  返回: ESC", 0, 0);
	DispList(0);
	FreeList();
	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 + =
减小字号Ctrl + -
显示快捷键?