end_day_rpt.ec

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

EC
2,216
字号
	}
$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_shop_r_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, card_type); 
$else;
	/*进清算流水表已过滤,不需要其它条件*/
	sprintf(sql, "select * from %s		\
		where snd_settle_date <= '%s'	\
		and snd_settle_date >= '%s'	\
		and card_type in ( %s ) ",
		tmp, e_date, s_date,
		card_type); 
$endif;
	
$ifdef wyz_mod_020403;
	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 , ") " );
	}
$else;
	/*现在的系统状况,只允许一个商户, 而且不适应15位商户号*/
	if (mer_cnt == 1) {
		strcpy(sql+strlen(sql), "and merchant_id =");
		strcpy(sql+strlen(sql), mer_list);
	}
$endif;
	
$ifdef wyz_mod_020403;
	strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, card_no, tran_amt ");
$else;
	/*修改以适应cur_settle_ls或his_settle_ls表中的索引*/
	strcpy(sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, invoice_no");
$endif;

	$prepare s_sql from :sql;
	$declare shop_r_rpt cursor for s_sql;
	
	if (SQLCODE) {
		daylog(ERROR, "Unable declare shop_r_rpt cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open shop_r_rpt;
	
	if (SQLCODE) {	
		daylog(ERROR, "Unable open shop_r_rpt![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	daylog(ERROR, "generate shop r rpt begin[%s(%s)]...",
		G_cen_bankid, G_bankid);
	FetBufSize=32000;
	mer_id[0] = ter_id[0] = 0;
	batch_no = -1;
	while (1) {
		$fetch shop_r_rpt into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch shop_r_rpt![%d]", SQLCODE);
			$close shop_r_rpt;
			fclose(fp);
			return(-1);
		}
		del_st_space("tran_ls", &ls);
		
		if (strcmp(ls.merchant_id, mer_id) ) {
#ifdef wyz020427_mod
			/* 不同商户分组打印 */
			if (batch_no != -1) {
				FileTail_shop_r_rpt(fp, cards);
				for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
					cards[i].cnt = 0;
					cards[i].amt = 0.00;
					cards[i].fee = 0.00;
					cards[i].rebate = 0.00;
				}
			}
#else
#endif

			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
					strcpy(tmp, "Unknown");
#else
					if (strcmp(G_cen_bankid, G_bankid)) {
						continue;
					}
					else 
						strcpy(tmp, "Unknown");
#endif
				}
				DelSpace(tmp);
#ifdef wyz020427_mod
#else
				DelSpace(sign_bankid);
				if (strcmp(G_cen_bankid, G_bankid)) {
					if (strcmp(sign_bankid, G_bankid)) {
//		daylog(DEBUG, "[%s]非本行商户", ls.merchant_id);
						continue;
					}
				}
#endif

#ifdef wyz020427_mod
#else
				/* 不同商户分组打印 */
				if (batch_no != -1) {
					FileTail_shop_r_rpt(fp, cards);
					for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
						cards[i].cnt = 0;
						cards[i].amt = 0.00;
						cards[i].fee = 0.00;
						cards[i].rebate = 0.00;
					}
				}
#endif
				for ( i = 0; i < SETTLE_CARDS_NUM; i ++ ) {
					cards[i].cnt = 0;
					cards[i].amt = 0.00;
					cards[i].fee = 0.00;
					cards[i].rebate = 0.00;
				}
#ifdef zgx010817_modi
				$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);
				cards[0].rebate = s_c.visa_rebate / 100;
				cards[1].rebate = s_c.master_rebate / 100;
				cards[2].rebate = s_c.ae_rebate / 100;
				cards[3].rebate = s_c.dinner_rebate / 100;
				cards[4].rebate = s_c.jcb_rebate / 100;
				cards[5].rebate = s_c.rmbc_rebate / 100;
				cards[6].rebate = s_c.debit_rebate / 100;
#else

				get_rebate(ls.merchant_id, VISA_CARD, &cards[CARD_VISA].rebate);
				get_rebate(ls.merchant_id, MC_CARD, &cards[CARD_MC].rebate);
				get_rebate(ls.merchant_id, AE_CARD, &cards[CARD_AE].rebate);
				get_rebate(ls.merchant_id, DINER_CARD, &cards[CARD_DINER].rebate);
				get_rebate(ls.merchant_id, JCB_CARD, &cards[CARD_JCB].rebate);
				get_rebate(ls.merchant_id, CREDIT_CARD, &cards[CARD_BOC_CRE].rebate);
				get_rebate(ls.merchant_id, DEBIT_CARD, &cards[CARD_BOC_DE].rebate);
				get_rebate(ls.merchant_id, DEBIT_CARD, &cards[CARD_BOC_DE].rebate);

				/* 他行回扣率暂依长城卡的回扣率为准 */
				cards[CARD_BOC_UN_CRE].rebate = cards[CARD_BOC_CRE].rebate;	/* 银联卡, 回扣率同长城卡 wubin 20010900 */
				cards[CARD_OTH_CRE].rebate = cards[CARD_BOC_CRE].rebate;	
				cards[CARD_OTH_DE].rebate = cards[CARD_BOC_DE].rebate;
#endif
			}
			strcpy(mer_id, ls.merchant_id);
			strcpy(ter_id, ls.terminal_id);
			batch_no = ls.batch_no;
			FileSubHead_shop_r_rpt(fp, ls, tmp);
		}
		if (ls.tran_amt != 0 ) {
			add_rpt_total(ls, cards);
			if (fp) FileDetail_shop_r_rpt(fp, ls);
		}
	}

	if (batch_no != -1) {
		FileTail_shop_r_rpt(fp, cards);
		for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
			cards[i].cnt = 0;
			cards[i].amt = 0.00;
			cards[i].fee = 0.00;
			cards[i].rebate = 0.00;
			}
	}

	$close shop_r_rpt;

	daylog(ERROR, "generate shop r rpt end.");

	fclose( fp );
	
	return(0);
}

/*
 * 银行对帐报表
 */
int bank_d_rpt()
{
	$S_sys_param sys;
	WINDOW *my_win;
	SETTLE_RESULT	s_r;
	FILE	*fp;
	char	tmp_file[128];
	char filename[128], path[80];
	char mer_id[16], ter_id[9];
	char rpt[120], rpt1[120], rpt2[120];	
	int mer_cnt, ret, i, ter_cnt;

	sprintf(filename, "/tmp/.bank_d_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);
	
#ifndef wyz_mod_020408
	getdatef(s_date, "");
#else
	sprintf(tmp_file, "%s/etc/settle_result", getenv("WORKDIR"));
	if ((fp = fopen(tmp_file, "r")) == NULL) {
		daylog(ERROR, "Open etc/settle_result failed");
		goto end_bkdz;
	}
	
	if ((fread(&s_r, sizeof(SETTLE_RESULT), 1, fp)) != 1) {
		daylog(ERROR, "Read etc/settle_result failed");
		goto end_bkdz;
	}

	if (s_r.result == 0) {
		strcpy(s_date, s_r.settle_date);
	}
	else 
		getdatef(s_date, "");

	fclose(fp);
#endif

	mvwprintw(my_win, 2, 4, "请输入清算日期: [%s]", s_date);
	if (in_item(my_win, "", 2, 21, s_date, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end_bkdz;
	str2date(s_date1, s_date, "/");

	strcpy(e_date, s_date);
	mvwprintw(my_win, 3, 4, "请确认清算日期: [%s]", e_date);
	if (in_item(my_win, "", 3, 21, e_date, 8, NULL, NULL, 0, 0) !=
	    ENTER) goto end_bkdz;
	str2date(e_date1, e_date, "/");

#ifdef Wubin20020827_del
	if (strcmp(s_date, e_date) != 0)
		goto end_bkdz;
#endif

	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_bkdz;
		
	if ( mer_id[0] > '9' || mer_id[0] < '0' )
		mer_cnt = 0;
	else
		mer_cnt = 1;

	daylog(DEBUG, "正在生成银行对帐报表, 清算日期: %s--%s, 请稍候 ...", s_date1, e_date1 );

	mvwprintw(my_win, 6, 4, "正在生成银行对帐报表, 请稍候 ...");
	
	wrefresh(my_win);
	
	strcpy(path, getenv("WORKDIR"));
#ifdef wyz020427_mod
	sprintf(rpt, "%s/prt/bank_d_rpt_fg", path);
	sprintf(rpt1, "%s/prt/bank_d_rpt_cre", path);
	sprintf(rpt2, "%s/prt/bank_d_rpt_deb", path);
#else
	sprintf(rpt, "%s/prt/%s/bank_d_rpt_fg", path, G_bankid);
	sprintf(rpt1, "%s/prt/%s/bank_d_rpt_cre", path, G_bankid);
	sprintf(rpt2, "%s/prt/%s/bank_d_rpt_deb", path, G_bankid);
#endif
	
	daylog(DEBUG, "gen_bank_d_rpt_fg");
	ret = gen_bank_d_rpt_fg( rpt, mer_id, mer_cnt );
	if (ret < 0) {
		h_winprompt(my_win, 17, 4, "生成银行对帐(外卡)报表出错!", 1, 0);
		goto end_bkdz;
	}

	daylog(DEBUG, "gen_bank_d_rpt_cre");
	ret = gen_bank_d_rpt_cre( rpt1, mer_id, mer_cnt );
	if (ret < 0) {
		h_winprompt(my_win, 17, 4, "生成银行对帐(信用卡)报表出错!", 1, 0);
		goto end_bkdz;
	}

	daylog(DEBUG, "gen_bank_d_rpt_deb");
	ret = gen_bank_d_rpt_deb( rpt2, mer_id, mer_cnt );
	if (ret < 0) {
		h_winprompt(my_win, 17, 4, "生成银行对帐(借计卡)报表出错!", 1, 0);
		goto end_bkdz;
	}
	daylog(DEBUG, "gen_bank_d_rpt end");

	print_file( my_win, 9, 17, 3, rpt, rpt1, rpt2 );
	wrefresh( my_win );
			
end_bkdz:
	delwin(my_win);
	scr_restore(filename);
	unlink(filename);
	return(0);
}

int gen_bank_d_rpt_fg ( char *filename, void * mer_list, int mer_cnt )
{
	$char	sql[2048];
	$char	tmp[128];
	$int	cnt;
	$S_merchant_card s_c;
	$S_bank_acct bank_acct;
	$char	s_s_date[11],e_s_date[11];	
	$char	sign_bankid[12];
	$char	bank_acct_id[12];
	char	mer_id[16], ter_id[9];
	double	count_je, count_dzje, total_je, total_dzje;	
	double	visa, master, din, ae, jcb;
	int	i, count_bs, total_bs, cardtype;
	long	batch_no;
	FILE	*fp;
	int	ret=0;
	
	if ( ! ( fp = fopen( filename, "w") ) ) {
		daylog ( ERROR, "Open %s file error !", filename );
		return( -1 );
	}
	
	memset(bank_acct_id, 0, sizeof(bank_acct_id));
	get_bank_acct_id(bank_acct_id); /* 获取缺省汇率行号 */

	$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);
	
#ifdef	Wubin20020529_mod
	$select * into $bank_acct from bank_acct where bank_id="0004";
#else
	$select * into $bank_acct from bank_acct where bank_id = :bank_acct_id;
#endif
	if (SQLCODE) {
		$select * into $bank_acct from bank_acct where bank_id= :sy.bank_id;
		if (SQLCODE) {
			daylog(ERROR, "Error select bank_acct ![%d]", SQLCODE);
			fclose(fp);	
			return(-1);
		}
	}

	/* 获得银行的受理卡回扣率 */
	visa =bank_acct.visa_discount * 0.01;
	master =bank_acct.mast_discount * 0.01;
	ae =bank_acct.ae_discount * 0.01;
	din =bank_acct.din_discount * 0.01;
	jcb =bank_acct.jcb_discount * 0.01;

	daylog(DEBUG,"visa=[%lf],master=[%lf],jcb=[%lf],ae=[%lf],din=[%lf]",visa,master,jcb,ae,din);

	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 ( '51', '52', '53', '54', '55' ) ",
		tmp, e_date, s_date, 
		sy.bank_id, POS_VOID, PRE_AUTH); 

	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 > '50'",
		tmp, e_date, s_date);

	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 fg_sql from :sql;
	$declare bank_d_rpt_fg cursor for fg_sql;
	
	if (SQLCODE) {
		daylog(ERROR, "Unable declare bank_d_rpt_fg cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open bank_d_rpt_fg;
	
	if (SQLCODE) {	
		daylog(ERROR, "Unable open bank_d_rpt_fg![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	count_bs = total_bs = 0;
	count_je = count_dzje = total_je = total_dzje = 0;	
	mer_id[0] = ter_id[0] = 0;
	batch_no = -1;
	FetBufSize = 32000;

	while (1) {
		$fetch bank_d_rpt_fg into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch bank_d_rpt_fg![%d]", SQLCODE);
			$close bank_d_rpt_fg;
			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;	

⌨️ 快捷键说明

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