end_day_rpt.ec

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

EC
2,216
字号

	delwin(my_win);
	scr_restore(filename);
	return(0);
}

/*
 * EDC 批次流水表
 */
int edc_batch_wat_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/.edc_batch_wat_rpt.%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);
	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, "正在生成edc_bat_wat_rpt报表, 日期: %s--%s, 请稍候 ...", s_date1, e_date1 );

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

		intflag ++ ; 
		break;
	case 2:

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

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

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

	delwin(my_win);
	scr_restore(filename);
	return(0);
}

int ah_gen_shop_r_rpt(filename, mer_list, mer_cnt, card_enable)
char   *filename;
void   * mer_list;
int    mer_cnt;
long   card_enable;
{
	Edc_shop_dz cards[SETTLE_CARDS_NUM+1] = {
			{"威士卡",  }, {"万事达卡",},
			{"运通卡",  }, {"大莱卡",  },
			{"JCB 卡",  },
			{"长城信用卡",}, {"长城借计卡",},
			{"银联信用卡",}, {"他行信用卡",}, {"他行借计卡",},
			{"总  计",} };
	$char	sql[1024];
	$char	tmp[128];
	$int	cnt;
	long enable; 
	$S_merchant_card s_c;
	$char s_s_date[11],e_s_date[11];
	$char card_type[50];
	char foreign[40],credit[5],debit[5];	
	char mer_id[16], ter_id[9];	
	int i;
	long batch_no;
	FILE *fp;

	if ( ! ( fp = fopen( filename, "w") ) ) {
		daylog ( ERROR, "Open %s file error !", filename );
		return( -1 );
	}
	
	enable = card_enable;
	memset( card_type, 0, sizeof( card_type ) );
	memset( foreign, 0, sizeof( foreign ) );
	memset( credit, 0, sizeof( credit ) );
	memset( debit, 0, sizeof( debit ) );

	if ( enable & FOREIGN ){
		sprintf( foreign, "%s", "\'51\',\'52\',\'53\',\'54\',\'55\'" );
		strcat( card_type, foreign );
	}

	if ( enable & CREDIT ){
		if( card_type[0] == 0 )
			strcpy( credit, "\'01\'" );
		else
			strcpy( credit, ",\'01\'");
		strcat( card_type, credit );
	}

	if ( enable & DEBIT ){
		if( card_type[0] == 0 )
			strcpy( debit, "\'02\'");
		else
			strcpy( debit, ",\'02\'");
		strcat( card_type, debit );
	}

	$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 );

/*================== WuBin 2001-9-18 14:58 ======Start==============*/
	$drop table _TEMPTABLE_;

	/* select debit ls */
	$select * from cur_tran_ls 
	where logic_date >= :s_s_date 
	and logic_date <= :e_s_date
	and acq_bank_id = :sy.bank_id 
	and edc_err_flag = '0' 
	and saf_flag = '0' 
	and tran_flag = '0' 
	and trans_type not in ( 4, 12 )
	and resp_code = '00' 
	and card_type = '01'
	into temp _TEMPTABLE_;

	if ( SQLCODE < 0 ) {
		daylog( ERROR, "create temp table error![%d]", SQLCODE );
		fclose( fp );
		return( -1 );
	}

	$insert into _TEMPTABLE_ select * from his_tran_ls 
	where logic_date >= :s_s_date 
	and logic_date <= :e_s_date
	and acq_bank_id = :sy.bank_id 
	and edc_err_flag = '0' 
	and saf_flag = '0' 
	and tran_flag = '0' 
	and trans_type not in ( 4, 12 )
	and resp_code = '00' 
	and card_type = '02';

	if ( SQLCODE < 0 ) {
		daylog( ERROR, "insert temp table err![%d]", SQLCODE );
		fclose( fp );
		return( -1 );
	}

	$insert into _TEMPTABLE_ select * from his_settle_ls
	where snd_settle_date >= :s_s_date 
	and snd_settle_date <= :e_s_date
	and acq_bank_id = :sy.bank_id  
	and edc_err_flag ='0' 
	and saf_flag = '0' 
	and tran_flag = '0' 
	and trans_type not in ( 4, 12 )
	and card_type <> '02' 
	and resp_code = '00' ;

	if ( SQLCODE < 0 ) {
		daylog( ERROR, "insert from his_settle_ls err![%d]",SQLCODE);
		fclose( fp );
		return( -1 );
	} 

	$insert into _TEMPTABLE_ select * from cur_settle_ls 
	where snd_settle_date >= :s_s_date 
	and snd_settle_date <= :e_s_date
	and acq_bank_id = :sy.bank_id 
	and edc_err_flag ='0' 
	and saf_flag = '0' 
	and tran_flag = '0' 
	and trans_type not in ( 4, 12 )
	and card_type <> '02' 
	and resp_code = '00';

	if ( SQLCODE < 0 ) {
		daylog( ERROR, "insert from cur_settle_ls err![%d]", SQLCODE );
		fclose( fp );
		return( -1 );
	}

	sprintf ( sql , "select count(*) from _TEMPTABLE_	\
		where acq_bank_id = '%s'			\
		and saf_flag = '0'				\
		and tran_type not in ( %d,%d )			\
		and resp_code = '00'				\
		and card_type in ( %s ) ",
		sy.bank_id ,PRE_AUTH, POS_VOID, card_type ); 

	if( select_num(sql, &cnt) < 0 ) {
		daylog( ERROR, "select _TEMPTABLE_ cnt err![%s]", sql );
		fclose( fp );
		return( -1 );
	}

	memset(sql, 0, sizeof(sql));
	sprintf ( sql , "select * from _TEMPTABLE_	\
		where acq_bank_id = '%s'		\
		and saf_flag = '0'			\
		and tran_type not in ( %d,%d )		\
		and resp_code = '00'			\
		and card_type in ( %s ) ",
		sy.bank_id ,PRE_AUTH, POS_VOID, card_type ); 

	FileHead_shop_r_rpt( fp, sy );	

	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, card_type,  card_no, tran_amt ");

	$prepare ah_s_sql from :sql;
	if (SQLCODE) {
		daylog(ERROR, "Prepare ah_s_sql error![%d][%s]", SQLCODE, sql);
		fclose(fp);	
		return(-1);
	}

	$declare ah_shop_r_rpt cursor for ah_s_sql;
	if (SQLCODE) {
		daylog(ERROR, "Unable declare ah_shop_r_rpt cursor![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}
	
	$open ah_shop_r_rpt;
	if (SQLCODE) {	
		daylog(ERROR, "Unable open ah_shop_r_rpt![%d]", SQLCODE);
		fclose(fp);	
		return(-1);
	}

	mer_id[0] = ter_id[0] = 0;
	batch_no = -1;

/*===========================2001-9-18 14:58=======End==============*/
	while (1) {
		$fetch ah_shop_r_rpt into $ls;
		
		if (SQLCODE == 100) break;
		
		if (SQLCODE < 0) {
			daylog(ERROR, "Error fetch ah_shop_r_rpt![%d]", SQLCODE);
			$close ah_shop_r_rpt;
			fclose(fp);
			return(-1);
		}
		del_st_space("tran_ls", &ls);
		
		if (strcmp(ls.merchant_id, mer_id) ) {
			/* 不同商户分组打印 */
			if (batch_no != -1) {
				FileTail_shop_r_rpt(fp, cards);
			}
			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);
				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 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

				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);

				/* 他行回扣率暂依长城卡的回扣率为准 */
				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;
			}
			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);
	

	$close ah_shop_r_rpt;

	fclose( fp );
	
	return(0);
}

/*---------------- tran_ls 表 ----------------------------------
从tran_ls表中获得交易统计
ENTRY:	sqlstring	此串中必须使用 select count(*) from 
RETURN:	-1,	FAIL
		0,	SUCC, RESULT-->num 
-------------------------------------------------------------*/
int select_num( sqlstring, num )
char	*sqlstring;
int		*num;
{
EXEC SQL BEGIN DECLARE SECTION;
char		sqlstr[1024];
int		num0;
EXEC SQL END DECLARE SECTION;

	strcpy( sqlstr, sqlstring );

	num0 = 0;
	EXEC SQL PREPARE sel_num FROM :sqlstr;
	if( SQLCODE < 0 ) {
		daylog(ERROR, "PREPARE sel_num err[%ld][%s]",SQLCODE, sqlstr);
		return(-1);
	}
	EXEC SQL DECLARE sel_num_ls CURSOR FOR sel_num;
	if( SQLCODE < 0 ) {
		daylog(ERROR,"DECLARE sel_num_ls err[%ld][%s]",SQLCODE,sqlstr);
		return(-1);
	}
	EXEC SQL OPEN sel_num_ls;
	if( SQLCODE < 0 ) {
		daylog(ERROR, "OPEN sel_num_ls err[%ld][%s]",SQLCODE, sqlstr);
		return(-1);
	}
	EXEC SQL FETCH sel_num_ls INTO :num0;
	if( SQLCODE < 0 ) {
		daylog(ERROR, "FETCH sel_num_ls err[%ld][%s]",SQLCODE, sqlstr);
		EXEC SQL CLOSE sel_num_ls;
		return(-1);
	}
	EXEC SQL CLOSE sel_num_ls;
	
	*num = num0;

	return( 0 );
}

int mer_batch_wat_prt()		/**201.商户批次明细表		**/
{}	
int edc_err_bat_wat_rpt()	/**202.EDC异常批次明细	**/
{}
int mer_err_bat_wat_prt()	/**203.商户异常批次明细	**/
{}
int edc_batch_rpt()			/**204.EDC 批次统计表		**/
{}
int mer_batch_rpt()			/**205.商户批次统计表		**/
{}
int mer_total_rpt()			/**206.商户批次汇总表		**/
{}

int prt3831_rpt()
{
	return ( prt_main("prt3831") );
}
int prt3833_rpt()
{
	return ( prt_main("prt3833") );
}
int prt3834_rpt()
{
	return ( prt_main("prt3834") );
}
int prt3835_rpt()
{
	return ( prt_main("prt3835") );
}
int prt3836_rpt()
{
	return ( prt_main("prt3836") );
}
int prt3837_rpt()
{
	return ( prt_main("prt3837") );
}
int prt3838_rpt()
{
	return ( prt_main("prt3838") );
}
int prt3840_rpt()
{
	return ( prt_main("prt3840") );
}
int prt3841_rpt()
{
	return ( prt_main("prt3841") );
}
int prt3842_rpt()
{
	return ( prt_main("prt3842") );
}
int prt3843_rpt()
{
	return ( prt_main("prt3843") );
}
int prt_3c_rpt()
{
	return ( prt_main("prt3c") );
}
int prt_3d_rpt()
{
	return ( prt_main("prt3d") );
}
int lp_err_settle()
{
	return ( prt_main("lp_err_settle") );
}

int prt_main( char * prgname )
{
	char command[300], filename[100];
	int  inttmp;

	sprintf( command,"%s/bin/prt/%s",getenv("WORKDIR"), prgname );
	sprintf( filename, "/tmp/.prt_main.%d", getpid() );

	if( ( inttmp = open(command,O_RDONLY) ) < 0 ) 
		return(0);
	else
		close (  inttmp );

	strcat ( command , " " );
	strcat ( command , G_oper_no );
	strcat ( command , " " );
	strcat ( command , filename);

	scr_dump( filename);

	db_close();

	system(command);

	if (db_open() == -1) {
		daylog(ERROR, "Error Open Database!");
		exit(-1);
	}

	scr_restore(filename);
	unlink(filename);
	touchwin(curscr);
	wrefresh(curscr);
	return(0);
}

int get_bank_acct_id(char *bankid)
{
	$char bankacct_id[12];
	char que_str[200];

	memset(bankid, 0, sizeof(bankid));
	memset(bankacct_id, 0, sizeof(bankacct_id));
        readtab("sysparam.tab", "BANK_ACCT", "DEFAULT_BANK", bankacct_id);
	DelSpace(bankacct_id);
	
        sprintf(que_str,
                "select count(*) from bank_acct  \
                where bank_id = \'%s\' ", bankacct_id);
        if (query_count(que_str)) 
                strcpy(bankid, bankacct_id);
	else
		strcpy(bankid, "0004");
	        
        return(0);
}


⌨️ 快捷键说明

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