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

📄 edc_no_settle.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
字号:
/******************************************
 *	EDC异常批次处理
 *
 * 最后修改:	周国祥 2001/08/16
 ******************************************/
#include <stdio.h>
#include <curses.h>
#include "all.h"
#include "tool.h"
#include "macro_def.h"

$include "db_struct.h"
$include sqlca;

typedef struct {
	double	normal_amt;
	int	normal_cnt;
	double	refund_amt;
	int	refund_cnt;
	double	adjust_amt;
	int	adjust_cnt;
	double	amt;
	int	cnt;
} Edc_no_Batch;

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;

char s_s_date[11], e_s_date[11];

void FileHead_edc_no_settle(FILE *fp, S_sys_param sy)
{
char date[11], time[9];
char bank_name[128];

	getdatef( date, "/" );
	gettimef( time, ":" );
	fprintf(fp, "%27s中国银行BTS系统信用卡\n", " ");
	fprintf(fp, "%27s  EDC未结帐统计报表\n\n", " ");
	get_bank_name(sy.bank_id, sy.host_id, bank_name);
	fprintf(fp, "%5.5s%-52s%s %s\n", sy.bank_id, bank_name, date, time);
	fprintf(fp, "----------------------------------------------------------------------------\n");
	fprintf(fp, "%-15s %-20s    %8s    %10s    %10s\n","    商户号", "      商户名称", " EDC 号 ", "未结帐笔数", "未结帐金额");
	fprintf(fp, "----------------------------------------------------------------------------\n");

}

void FileSubHead_edc_no_settle(FILE *fp, char *merch_id, char *term_id, char *tmp, Edc_no_Batch batch)
{
	fprintf(fp, "%-15s %20s    %8s    %7d   %14.2lf\n", merch_id, tmp, term_id, batch.normal_cnt, batch.normal_amt);

}

void FileTail_edc_no_settle( FILE *fp )
{

	fprintf(fp, "----------------------------------------------------------------------------\n");

}
void add_edc_no_batch(Edc_no_Batch *pbatch, S_tran_ls ls)
{
	switch (ls.tran_type) {
		case REFUND:
			pbatch->refund_amt += ls.tran_amt;
			pbatch->refund_cnt ++;
			pbatch->amt -= ls.tran_amt;
			pbatch->cnt ++;
			break;
		case ADJUST:
			pbatch->adjust_amt += ls.tran_amt - ls.void_amt;
			pbatch->adjust_cnt ++;
			pbatch->amt += ls.tran_amt - ls.void_amt;
			pbatch->cnt ++;
			break;
		default:
			pbatch->normal_amt += ls.tran_amt;
			pbatch->normal_cnt ++;
			pbatch->amt += ls.tran_amt;
			pbatch->cnt ++;
			break;
	}
}

int edc_no_settle()
{
	$S_sys_param sys;
	char cmd[300];
	WINDOW *my_win;
	char filename[128], path[80];
	char mer_id[16], ter_id[11];
	char rpt[120], fileout[200];	
	int mer_cnt, ret, i, ter_cnt;
	static char pflag[3], first=1;

	sprintf(filename, "/tmp/.edc_no_settle.%d", getpid());
	scr_dump(filename);
	
	disp_below("EDC 未结帐统计");
	clear_wline(stdscr, LINES-1);
	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, "EDC 未结帐统计", 0, 0);
	my_win = newwin(19, 80, 3, 0);
	mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	wrefresh(my_win);

	set_prompt(PROMPT_OFF);

/*	getdatef(s_s_date, "/");
	mvwprintw(my_win, 2, 4, "请输入起始日期: [%s]", s_s_date);
	if (in_item(my_win, "", 2, 21, s_s_date, 10, NULL, NULL, 0, 0) !=
	    ENTER) goto end_shdz;
*/

	getdatef(e_s_date, "");

	mvwprintw(my_win, 3, 4, "请输入结束日期: [%s]", e_s_date);
	if (in_item(my_win, "", 3, 21, e_s_date, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end_shdz;
	
	strcpy ( mer_id , "" );	
	mvwprintw(my_win, 4, 4, "请输入商户编号: [%15s]", " ");
	if (in_item(my_win, "", 4, 21, mer_id, 15, NULL, NULL, 0, 0) !=
	    ENTER) goto end_shdz;

	if ( mer_id[0] > '9' || mer_id[0] < '0' )
		mer_cnt = 0;
	else
		mer_cnt = 1;
	
	strcpy ( ter_id , "" );	
	mvwprintw(my_win, 5, 4, "请输入EDC编号: [%8s]", " ");
	if (in_item(my_win, "", 5, 20, ter_id, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end_shdz;
	
	if ( ter_id[0] > '9' || ter_id[0] < '0' )
		ter_cnt = 0;
	else
		ter_cnt = 1;
		
	
	daylog(DEBUG, "正在统计未结帐EDC情况, 交易日期: %s, 请稍候 ...", e_s_date );

	mvwprintw(my_win, 6, 4, "正在统计未结帐EDC情况, 请稍候 ...");
	
	wrefresh(my_win);
	
	strcpy(path, getenv("WORKDIR"));
	sprintf(rpt, "%s/prt/%s/edc_no_settle",
		path, G_bankid);
	
	ret = gen_no_edc_view( rpt, mer_id , mer_cnt, ter_id , ter_cnt );
	if (ret < 0) {
		h_winprompt(my_win, 17, 4, "统计未结帐EDC情况出错!", 1, 0);
		goto end_shdz;
	}

	print_file( my_win, 9, 17, 1, rpt );
	wrefresh( my_win );
			
end_shdz:
	delwin(my_win);
	scr_restore(filename);
	unlink(filename);
	return(0);
}


int gen_no_edc_view ( char *filename, void *mer_list , int mer_cnt, void *ter_list, int ter_cnt )
{
	Edc_no_Batch batch;	
	$char	sql[2048];
	$char	tmp[128];
	$int	cnt;
	$S_merchant_card s_c;	
	char mer_id[16], ter_id[9];	
	int i, flag;
	long batch_no;
	FILE *fp;
	
	if ( ! ( fp = fopen( filename, "w") ) ) {
		daylog ( ERROR, "Open %s file error !", filename );
		return( -1 );
	}

	$select * into $sy from sys_param;
	if (SQLCODE) {
		daylog(ERROR, "Error select sys_param![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	del_st_space("sys_param", &sy);
	
	FileHead_edc_no_settle( fp, sy );	
	
	strcpy(tmp, "cur_tran_ls");

	sprintf ( sql , "select * from %s where acq_bank_id = '%s' and acq_host_id = '%s' and local_sys_date <= '%s' " , tmp , sy.bank_id, sy.host_id, e_s_date );
	
	if ( mer_cnt > 0 ) {
		strcpy ( sql+strlen(sql) , "and merchant_id in ( " );
		for ( i=0 ; i < mer_cnt ; i++ ) {
			sprintf ( tmp , "%s," , (char *)((long )mer_list+11*i) );
			strcpy ( sql+strlen(sql) , tmp );
		}
		
		strcpy ( sql+strlen(sql)-1 , ") " );
	}
	
	if ( ter_cnt > 0 ) {
		strcpy ( sql+strlen(sql) , "and terminal_id in ( '" );
		for ( i=0 ; i < ter_cnt ; i++ ) {
			sprintf ( tmp , "%s," , (char *)((long )ter_list+9*i) );
			strcpy ( sql+strlen(sql) , tmp );
		}
		
		strcpy ( sql+strlen(sql)-1 , "') " );
	}


	daylog( ERROR, "%s", sql );
	strcpy ( sql+strlen(sql) , "and snd_settle_flag = 'N' and terminal_id not like 'TEL%' and terminal_id not like 'TRM%' and terminal_id not like 'TLX%' and resp_code like '00%' order by merchant_id, terminal_id, card_no " );

	$prepare s_sql from :sql;
	$declare no_edc_rpt cursor for s_sql;
	
	if (SQLCODE) {
		daylog(ERROR, "Unable declare no_edc_rpt cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open no_edc_rpt;
	
	if (SQLCODE) {	
		daylog(ERROR, "Unable open no_edc_rpt![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	mer_id[0] = ter_id[0] = 0;
	flag = 0;
	memset(&batch, 0, sizeof(Edc_no_Batch));
	while (1) {
		$fetch no_edc_rpt into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch no_edc_rpt![%d]", SQLCODE);
			$close no_edc_rpt;
			fclose(fp);
			return(-1);
		}
		del_st_space("tran_ls", &ls);
		
		if (strcmp(ls.merchant_id, mer_id) ||
		    strcmp(ls.terminal_id, ter_id) ) {
			if ( flag == 1 )
				FileSubHead_edc_no_settle(fp, mer_id, ter_id, tmp, batch);
			if (strcmp(ls.merchant_id, mer_id)) {
				$select merchant_cname
				into :tmp from merchant_base
				where merchant_id = :ls.merchant_id;
				if (SQLCODE) {
					daylog(WARN, "Fetch name of %s error!",
					       ls.merchant_id);
					strcpy(tmp, "Unknown");
				}
				DelSpace(tmp);
#ifdef Wubin_del_20011207
				$select * into :s_c from merchant_card
				where merchant_id = :ls.merchant_id;
				if (SQLCODE) {
					daylog(WARN, "Fetch fee of %s error!",
					       ls.merchant_id);
				}
				del_st_space("merchant_card", &s_c);
#endif
				flag = 1;
			}
			memset(&batch, 0, sizeof(Edc_no_Batch));
			strcpy(mer_id, ls.merchant_id);
			strcpy(ter_id, ls.terminal_id);
		}
		add_edc_no_batch(&batch, ls);
	}
	if ( mer_id[0] )
		 FileSubHead_edc_no_settle(fp, mer_id, ter_id, tmp, batch);
	FileTail_edc_no_settle(fp);
	

	$close no_edc_rpt;

	fclose( fp );
	
	return(0);
}

⌨️ 快捷键说明

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