end_day_rpt.ec

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

EC
2,216
字号
			total_dzje += count_dzje;	
			count_bs = 0;
			count_je = 0;
			count_dzje = 0;
		}

#ifdef wyz_mod_011230
		count_bs ++;
		count_je += ls.tran_amt;
#else
		count_bs ++;
		switch (ls.tran_type) {
		case REFUND:
			count_je -= ls.tran_amt;
			break;
		default:
			count_je += ls.tran_amt;
			break;
		}
#endif

		DelSpace(ls.card_type);
		cardtype = atoi(ls.card_type);

		switch (cardtype) {
			case 51:
				count_dzje += (ls.tran_amt * visa);
				break;
			case 52:
				count_dzje += (ls.tran_amt * master);
				break;
			case 53:
				count_dzje += (ls.tran_amt * ae);
				break;
			case 54:
				count_dzje += (ls.tran_amt * din);
				break;
			case 55:
				count_dzje += (ls.tran_amt * jcb);
				break;
		}
		if (fp) FileDetail_bank_d_rpt(fp, ls);
	}
	
	total_bs += count_bs;
	total_je += count_je;	
	total_dzje += count_dzje;	
	total_dzje = (total_je - total_dzje);	
	
	FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);
	FileTail_bank_d_rpt(fp);
	FileTail_bank_d_rpt_fg_total(fp, total_bs, total_je, total_dzje );

	$close bank_d_rpt_fg;

	fclose( fp );
	
	return(0);
}

int gen_bank_d_rpt_cre ( char *filename, void * mer_list, int mer_cnt )
{
	$char	sql[2048];
	$char	tmp[30];
	$int	cnt;
	$S_merchant_card s_c;
	$char	s_s_date[11],e_s_date[11];	
	$char	sign_bankid[12];
	char	mer_id[16], ter_id[9];
	double	count_je, total_je;	
	int	i, count_bs, total_bs;
	long	batch_no;
	FILE	*fp;
	int	ret=0;
	
	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);
	
	strcpy( s_s_date, s_date );
	strcpy( e_s_date, e_date );

$ifndef wyz_mod_020408;
	$select count(*) into $cnt from cur_settle_ls
	where snd_settle_date >= $s_s_date
	and snd_settle_date <= $e_s_date;
	
	if ( SQLCODE < 0 ) {
		daylog( ERROR, "Fetch cur_settle_ls error!" );
		fclose( fp );
		return( -1 );
	}
	
	if ( SQLCODE == 100 )
		strcpy( tmp, "his_settle_ls" );
	else {
		if ( cnt == 0 )
			strcpy( tmp, "his_settle_ls" );
		else
			strcpy( tmp, "cur_settle_ls" );
	}
$else;
	if ((ret = check_which_table(s_s_date, e_s_date)) == 0) {
		strcpy(tmp, "cur_settle_ls");
	}
	else if (ret == 1) {
		strcpy(tmp, "his_settle_ls");
	}
	else {
		daylog( ERROR, "判断使用当前清算流水表或历史清算流水表失败!" );
		fclose( fp );
		return( -1 );
	}
$endif;
	
	FileHead_bank_d_rpt( fp, sy, "信用卡" );	
	
#ifdef wyz_mod_020403
	sprintf ( sql , "select * from %s	\
		where snd_settle_date <= '%s'	\
		and snd_settle_date >= '%s'	\
		and acq_bank_id = '%s'		\
		and edc_err_flag = '0'		\
		and tran_flag = '0'		\
		and saf_flag = '0'		\
		and tran_type not in ( %d, %d )	\
		and card_type in ( '%s' ) ",
		tmp, e_date, s_date,
		sy.bank_id, PRE_AUTH, POS_VOID, CREDIT_CARD ); 

	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 , ") " );
	}
	
	strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, card_no, tran_amt ");

#else
	sprintf ( sql , "select * from %s	\
		where snd_settle_date <= '%s'	\
		and snd_settle_date >= '%s'	\
		and card_type = ('%s')",
		tmp, e_date, s_date, CREDIT_CARD);

	if ( mer_cnt > 0 ) {
		strcpy(sql+strlen(sql), "and merchant_id = ");
		strcpy(sql+strlen(sql), mer_list);
	}
	
	strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, invoice_no");
#endif

	$prepare cre_sql from :sql;
	$declare bank_d_rpt_cre cursor for cre_sql;
	
	if (SQLCODE) {
		daylog(ERROR, "Unable declare bank_d_rpt_cre cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open bank_d_rpt_cre;
	
	if (SQLCODE) {	
		daylog(ERROR, "Unable open bank_d_rpt_cre![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	count_bs = total_bs = 0;
	count_je = total_je = 0;	
	mer_id[0] = ter_id[0] = 0;
	batch_no = -1;
	FetBufSize = 32000;

	while (1) {
		$fetch bank_d_rpt_cre into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch bank_d_rpt_cre![%d]", SQLCODE);
			$close bank_d_rpt_cre;
			fclose(fp);
			return(-1);
		}
		del_st_space("tran_ls", &ls);
		
		if (strcmp(ls.merchant_id, mer_id) ) {
			$select merchant_cname, sign_bank_id
			into :tmp, :sign_bankid from merchant_base
			where merchant_id = :ls.merchant_id;
			if (SQLCODE) {
				daylog(WARN, "Fetch name of %s error!",
				       ls.merchant_id);
#ifdef wyz020427_mod
#else
				if (strcmp(G_cen_bankid, G_bankid))
					continue;
				else
#endif
				strcpy(tmp, "Unknown");
			}

			DelSpace(tmp);
#ifdef wyz020427_mod
#else
			DelSpace(sign_bankid);
			if (strcmp(G_cen_bankid, G_bankid)) {
				if (strcmp(G_bankid, sign_bankid))
					continue;
			}
#endif

			if ( mer_id[0] )	
				FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);
			strcpy(mer_id, ls.merchant_id);
			strcpy(ter_id, ls.terminal_id);
			total_bs += count_bs;
			total_je += count_je;	
			count_bs = 0;
			count_je = 0;
		}
#ifdef wyz_mod_011230
		count_bs ++;
		count_je += ls.tran_amt;
#else
		count_bs ++;
		switch (ls.tran_type) {
		case REFUND:
			count_je -= ls.tran_amt;
			break;
		default:
			count_je += ls.tran_amt;
			break;
		}
#endif
		if (fp) FileDetail_bank_d_rpt(fp, ls);
	}
	
	total_bs += count_bs;
	total_je += count_je;	
	
	FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);
	FileTail_bank_d_rpt(fp);
	FileTail_bank_d_rpt_total(fp, total_bs, total_je );

	$close bank_d_rpt_cre;

	fclose( fp );
	
	return(0);
}

int gen_bank_d_rpt_deb ( char *filename, void * mer_list, int mer_cnt )
{
	$char	sql[2048];
	$char	tmp[30];
	$int	cnt;
	$S_merchant_card s_c;
	$char	s_s_date[11],e_s_date[11];	
	$char	sign_bankid[12];
	char	mer_id[16], ter_id[9];
	double	count_je, total_je;	
	int	i, count_bs, total_bs;
	long	batch_no;
	FILE	*fp;
	int	ret=0;
	
	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);
	strcpy( s_s_date, s_date );
	strcpy( e_s_date, e_date );

$ifdef wyz_mod_020408;
	$select count(*) into $cnt from cur_settle_ls where
	snd_settle_date >= $s_s_date and snd_settle_date <= $e_s_date;
	
	if ( SQLCODE < 0 ) {
		daylog( ERROR, "Fetch cur_settle_ls error!" );
		fclose( fp );
		return( -1 );
	}
	
	if ( SQLCODE == 100 )
		strcpy( tmp, "his_settle_ls" );
	else {
		if ( cnt == 0 )
			strcpy( tmp, "his_settle_ls" );
		else
			strcpy( tmp, "cur_settle_ls" );
	}
$else;
	if ((ret = check_which_table(s_s_date, e_s_date)) == 0) {
		strcpy(tmp, "cur_settle_ls");
	}
	else if (ret == 1) {
		strcpy(tmp, "his_settle_ls");
	}
	else {
		daylog( ERROR, "判断使用当前清算流水表或历史清算流水表失败!" );
		fclose( fp );
		return( -1 );
	}
$endif;
	
	FileHead_bank_d_rpt( fp, sy, "借记卡" );	
	
#ifdef wyz_mod_020403
	sprintf ( sql , "select * from %s	\
		where snd_settle_date <= '%s'	\
		and snd_settle_date >= '%s'	\
		and acq_bank_id = '%s'		\
		and edc_err_flag = '0'		\
		and tran_flag = '0'		\
		and saf_flag = '0'		\
		and tran_type not in ( %d, %d )	\
		and card_type in ( '%s' ) ",
		tmp, e_date, s_date,
		sy.bank_id, PRE_AUTH, POS_VOID, DEBIT_CARD ); 

	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 , ") " );
	}
	
	strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, card_no, tran_amt ");

#else
	sprintf ( sql , "select * from %s	\
		where snd_settle_date <= '%s'	\
		and snd_settle_date >= '%s'	\
		and card_type = ('%s')",
		tmp, e_date, s_date, DEBIT_CARD); 

	if ( mer_cnt > 0 ) {
		strcpy(sql+strlen(sql), "and merchant_id = ");
		strcpy(sql+strlen(sql), mer_list);
	}
	
	strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, invoice_no");
#endif

	$prepare deb_sql from :sql;
	$declare bank_d_rpt_deb cursor for deb_sql;
	
	if (SQLCODE) {
		daylog(ERROR, "Unable declare bank_d_rpt_deb cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open bank_d_rpt_deb;
	
	if (SQLCODE) {	
		daylog(ERROR, "Unable open bank_d_rpt_deb![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	count_bs = total_bs = 0;
	count_je = total_je = 0;	
	mer_id[0] = ter_id[0] = 0;
	batch_no = -1;
	FetBufSize = 32000;

	while (1) {
		$fetch bank_d_rpt_deb into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch bank_d_rpt_deb![%d]", SQLCODE);
			$close bank_d_rpt_deb;
			fclose(fp);
			return(-1);
		}
		del_st_space("tran_ls", &ls);
		
		if (strcmp(ls.merchant_id, mer_id) ) {
			$select merchant_cname, sign_bank_id
			into :tmp, :sign_bankid from merchant_base
			where merchant_id = :ls.merchant_id;
			if (SQLCODE) {
				daylog(WARN, "Fetch name of %s error!",
				       ls.merchant_id);
#ifdef wyz020427_mod
#else
				if (strcmp(G_cen_bankid, G_bankid))
					continue;
				else
#endif
				strcpy(tmp, "Unknown");
			}
			DelSpace(tmp);
#ifdef wyz020427_mod
#else
			DelSpace(sign_bankid);
			if (strcmp(G_cen_bankid, G_bankid)) {
				if (strcmp(G_bankid, sign_bankid))
					continue;
			}
#endif

			if ( mer_id[0] )	
				FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);

			strcpy(mer_id, ls.merchant_id);
			strcpy(ter_id, ls.terminal_id);
			total_bs += count_bs;
			total_je += count_je;	
			count_bs = 0;
			count_je = 0;
		}

		count_bs ++;
		switch (ls.tran_type) {
		case REFUND:
			count_je -= ls.tran_amt;
			break;
		default:
			count_je += ls.tran_amt;
			break;
		}

		if (fp)
			FileDetail_bank_d_rpt(fp, ls);
	}
	
	total_bs += count_bs;
	total_je += count_je;	
	
	FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);
	FileTail_bank_d_rpt(fp);
	FileTail_bank_d_rpt_total(fp, total_bs, total_je );

	$close bank_d_rpt_deb;

	fclose( fp );
	
	return(0);
}

/*
 * 交易流水表
 */
all_water_rpt()
{
	$S_sys_param sys;
	WINDOW *my_win;
	char filename[128], path[80];
	char ter_id[9];
	char rpt[120], str_system[210];	
	int ret, i , intflag ;

	sprintf(filename, "/tmp/.water_rpt.%d", getpid());
	scr_dump(filename);
	
	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, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	wrefresh(my_win);

	set_prompt(PROMPT_OFF);
	for(intflag = 0; intflag >= 0 && intflag < 3;)
	{
	switch (intflag)
	{
	case 0:
		getdatef(s_date, "");
		mvwprintw(my_win, 2, 4, "请输入起始日期: [%s]", s_date);
		if (in_item(my_win, "", 2, 21, s_date, 8, NULL, NULL, 0, 0) !=
	    	ENTER)
		{
			delwin(my_win);
			scr_restore(filename);
			return(0);
		}
		str2date(s_date1, s_date, "/");
		intflag ++;
		break;

	case 1:
		getdatef(e_date, "");
		mvwprintw(my_win, 3, 4, "请输入结束日期: [%s]", e_date);
		if (in_item(my_win, "", 3, 21, e_date, 8, NULL, NULL, 0, 0) !=
	    	ENTER) 
		{
			intflag --;
			break;
		}
		str2date(e_date1, e_date, "/");

		daylog(DEBUG, "正在生成water_rpt报表, 日期: %s--%s, 请稍候 ...", s_date, e_date );

		mvwprintw(my_win, 6, 4, "正在生成报表, 请稍候 ...");
	
		wrefresh(my_win);

		intflag ++ ; 
		break;
	case 2:

		strcpy(path, getenv("WORKDIR"));
		sprintf(rpt, "%s/prt/water_rpt.%s", path,e_date+8);

		sprintf(str_system,"%s/bin/prt/water_rpt %s %s %s",
			path, rpt, s_date, e_date);
	
		ret = system( str_system );
		if (ret < 0) 
		{
			daylog(DEBUG, "生成交易流水表出错!, 日期: %s--%s", s_date1, e_date1 );
			h_winprompt(my_win, 17, 4, "生成交易流水表出错!", 1, 0);
		}
		else
			print_file( my_win, 9, 17, 1, rpt );

		wrefresh(my_win);
		intflag ++;
		break;
	}
	}

⌨️ 快捷键说明

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