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

📄 settle.ec.old

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 OLD
📖 第 1 页 / 共 3 页
字号:
			return (-1) ;
		} else if ( SQLCODE == 100 ){
			$close downcur;
			return (0);
		}
		DelSpace(bank_base.bank_id);
		DelSpace(bank_base.host_id);
		
		sprintf ( file_name , "%s/box/mx/S/%11.11s.%02d%02d%02d" , \
		getenv("WORKDIR"), bank_base.bank_id, tm->tm_year , tm->tm_mon+1 , \
		tm->tm_mday );

		sprintf ( file_name2 , "%s/box/mx/R/%4.4s.%02d%02d%02d" , \
		getenv("WORKDIR"), sys.bank_id , tm->tm_year , tm->tm_mon+1 , \
		tm->tm_mday );

		sprintf(buf, "dbaccess - - 2>/dev/null >/dev/null <<!\ndatabase %s;\nunload to '%s' select * from cur_settle_ls where card_type='%s' and (iss_bank_id='%s' or iss_bank_id in (select bank_id from bank_info where adm_bank_id='%s')) and (iss_bank_id in (select bank_id from bank_base where settle_flag='1')) and tran_type not in (%d, %d) and saf_flag='0' and tran_flag='0';\n!", getenv("DBNAME"), file_name, CREDIT_CARD, bank_base.bank_id, bank_base.bank_id, POS_VOID, PRE_AUTH);

		system ( buf);

		$select settle_ip_addr into $ipaddr from bank_base 
		where bank_id=$bank_base.bank_id
		and   host_id=$bank_base.host_id;
		DelSpace(ipaddr);

		if ( mail(sys.bank_id, bank_base.bank_id, ipaddr, 
			    MX_RECV_PORT , file_name , "c",file_name2 )) {
			disp_log_day ( DISP_ONLY, ERROR , "下传%s联行失败!" , bank_base.bank_id );
			$close downcur;
			daylog ( ERROR , "Unable mail %s to %s!",sys.bank_id,bank_base.bank_id);
			return ( -1 );
		}
		
		disp_log_day ( DISP_ONLY, DEBUG, "下传%s联行成功!" , bank_base.bank_id );
	}
}

/*
 * 转入历史流水
 */
int day_end()
{
	char filename[128], screen[128];
	$char s_date[15], e_date[15];
	int ret;

	sprintf(screen, "/tmp/.day_end.%d", getpid());
	scr_dump(screen);
	disp_below("转入历史流水");
	clear_wline(stdscr, LINES-1);
	my_win = newwin(18, 80, 3, 0);
	mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	wrefresh(my_win);
	line = COL_LEE;

	getdatef(s_date, "");
	dateadd(s_date, -1, s_date);
	mvwprintw(my_win, 2, 4, "请输入起始清算日期: [%s]", s_date);
	ret = in_item(my_win, "", 2, 25, s_date, 8, NULL, NULL, 0, 0);
	if (ret != ENTER) {
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(-1);
	}
	
	strcpy(e_date, s_date);

	//mvwprintw(my_win, 2, 41, "请输入结束清算日期: [%s]", e_date);
	//ret = in_item(my_win, "", 2, 62, e_date, 8, NULL, NULL, 0, 0);
	mvwprintw(my_win, 3, 4, "请输入结束清算日期: [%s]", e_date);
	ret = in_item(my_win, "", 3, 25, e_date, 8, NULL, NULL, 0, 0);
	if (ret != ENTER) {
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(-1);
	}

#ifdef wyz_mod_011229
#else
	if (strcmp(s_date, e_date) >0 ){
		line = PGS_LEE;
		disp_log_day(DISP_LOG, ERROR,
		"起始日期大于结束日期, 操作失败, 按任意键继续");
		getch();
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(-1);
	}
#endif

	line = line+3;
	disp_log_day(DISP_LOG, DEBUG, "警告: 转入历史流水后将无法处理当日报表!  请确认已进行过日终报表处理!");
	line++;
	if (yorn(my_win, line, "    是否继续?", "1.是", "0.否", 1, 0)) {
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(0);
	}

	disp_log_day(DISP_LOG, DEBUG, "警告: 转入历史流水后将无法传送当日清算文件! 请确认已进行过清算文件传送!");
	line++;
	if (yorn(my_win, line, "    是否继续?", "1.是", "0.否", 1, 0)) {
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(0);
	}

	disp_log_day(DISP_LOG, DEBUG, "转入历史流水, 请稍候 ...");

	EXEC SQL INSERT INTO his_settle_ls
		SELECT * FROM cur_settle_ls
		WHERE snd_settle_date >= $s_date
		AND snd_settle_date <= $e_date
		AND edc_err_flag = '0';

	if (SQLCODE) {
		line = PGS_LEE;
		disp_log_day(DISP_LOG, ERROR, "备份表 settle_ls 出错, 请立即联系系统管理员! 按任意键继续");
		getch();
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(0);
	}

	EXEC SQL DELETE FROM cur_settle_ls
		WHERE snd_settle_date >= $s_date
		AND snd_settle_date <= $e_date
		AND edc_err_flag = '0';

	if (SQLCODE) {
		line = PGS_LEE;
		disp_log_day(DISP_LOG, ERROR, "清理表 settle_ls 出错, 请立即联系系统管理员! 按任意键继续");
		getch();
		delwin(my_win);
		scr_restore(screen);
		unlink(screen);
		return(0);
	}

	line = PGS_LEE;
	disp_log_day(DISP_LOG, DEBUG, "转入历史流水成功, 按任意键继续");
	getch();
	delwin(my_win);
	scr_restore(screen);
	unlink(screen);
	return(0);
}







void	copy_file(FILE *source_fp, long loc_s, long loc_e, FILE *target_fp)
{	
	char	buff[256];
	long	loc, len;

	fseek(source_fp, loc_s, SEEK_SET);
	loc = loc_s;
	while((len = loc_e - loc) > 0) {
		if(len > 256) {
			fread(buff, sizeof(buff), 1, source_fp);
			fwrite(buff, sizeof(buff), 1, target_fp);
			loc += 256;
		}
		else {
			fread(buff, len, 1, source_fp); 
			fwrite(buff, len, 1, target_fp);
			loc = loc_e;
		}
	}
}


int	delete_ln(char *buf)
{
    	int i;
    	for(i=strlen(buf); i>=0; i--) {
        	if( buf[i] == '\r') {
	            	buf[i] = 0;
	    		return(delete_ln(buf));
        	}
        	else if( buf[i] == '\n') {
            		buf[i] = 0;
	    		return(delete_ln(buf));
        	}
        	else if( buf[i] == ']') {
            		buf[i] = 0;
	    		return(delete_ln(buf));
        	}
    	}
    	return (0);
}


int 	writetab(Tabname,grp,key,val)
	char 	*Tabname;
	char 	*grp;
	char 	*key;
	char 	*val;
{
	FILE 	*fp, *fp1;
	char 	tmp[81], tmp1[81], tmp2[81], cmd[150], fname1[80], fname2[80];
	long	location1, location2;


    	if( Tabname[0] != '/' )
		sprintf(fname1, "%s/etc/%s", getenv("WORKDIR"), Tabname);
    	else
		sprintf(fname1, "%s", Tabname);
    	fp = fopen(fname1, "r");
    	if(fp == (FILE *)NULL) {
        	daylog(ERROR, "Fopen [%s] Error", fname1);
        	return(-1);
    	}
	sprintf(fname2, "%s.tmp", fname1);
    	fp1 = fopen(fname2, "w");
    	if(fp1 == (FILE *)NULL) {
        	daylog(ERROR, "Fopen [%s] Error", fname2);
		fclose(fp);
        	return(-1);
    	}

    	while(!feof(fp)) {
        	fgets(tmp, 81, fp);
		delete_ln(tmp);
        	if(tmp[0] == '[' && strcmp(tmp+1, grp)==0)
            		break;
    	}
    	if(!feof(fp))
        	while(!feof(fp)) {
			location1 = ftell(fp);
            		fgets(tmp, 81, fp);
            		if(tmp[0] == '#' || tmp[0] == '$' || tmp[0] == '*' 
                    		|| tmp[0] == '\n' || tmp[0] == '\r')
                		continue;
	    		delete_ln(tmp);
            		if(tmp[0] == '[') {
                		fclose(fp);
				fclose(fp1);
                		return(-1);
            		}
            		sscanf(tmp, "%s %s", tmp1, tmp2);
            		if(strcmp(key, tmp1)==0) {
				location2 = ftell(fp);
				copy_file(fp, 0L, location1, fp1); 
				sprintf(tmp, "%s\t%s", key, val);
				fprintf(fp1, "%s\n", tmp);
				location1 = location2;
				fseek(fp, 0L, SEEK_END);
				location2 = ftell(fp);
				copy_file(fp, location1, location2, fp1);
                		fclose(fp);
				fclose(fp1);

				sprintf(cmd, "cp %s %s", fname2, fname1);
				if(system(cmd)) {
					daylog(ERROR, "%s faild!", cmd); 
					unlink(fname2);
					return(-1);
				}
				unlink(fname2);
                		return(0);
            		}
        	}
    	fclose(fp);
    	fclose(fp1);
    	return(-1);
}



int	get_date(char *fname, char *settle_date)
{
	FILE	*fp;
	char	date[20];

	fp = fopen(fname, "r");

	if(fp == NULL) {
		daylog(ERROR, "%s文件不存在", fname);
		return (-1);
	}
	fscanf(fp, "%s", date);
	strncpy(settle_date, date, 8);

	return (0);
}


int 	get_nas_sysparam(S_sys_param *sy)
{
	EXEC SQL BEGIN DECLARE SECTION;

	S_sys_param	sys;

	EXEC SQL END DECLARE SECTION;



    	EXEC SQL SELECT * INTO :sys FROM sys_param;
    	if (SQLCODE) return (-1);
    	del_st_space("sys_param", &sys);
	memcpy(sy, &sys, sizeof(sys));

	return (0);
}



int	get_settle_info(char *card_type, char *field_name, char *s_date, char *e_date)
{
	char	date_fname[80],logic_date[9];
	S_sys_param	sys;


	if(readtab("SETTLE_CONFIG",card_type,"SETTLE_DATE",field_name) < 0){
		daylog(ERROR,"SETTLE_CONFIG文件中没有[%s]下的SETTLE_DATE配置.",
			card_type);
		return (-1);
	}
	if(readtab("SETTLE_CONFIG",card_type,"DATE_FILE",date_fname) < 0) {
		daylog(ERROR,"SETTLE_CONFIG文件中没有[%s]下的DATE_FILE配置.",
			card_type);
		return (-1);
	}
	if(readtab("SETTLE_CONFIG",card_type,"CUR_SETTLE_DATE",s_date) < 0){
		daylog(ERROR,"SETTLE_CONFIG文件中没有[%s]下的LST_SETTLE_DATE配置.", card_type);
		return (-1);
	}


	if(!strcmp(field_name, "local_sys_date") && date_fname[0] == 'N') 
		getdatef(e_date, "");
	else if(!strcmp(field_name,"snd_settle_date") && date_fname[0]=='N') { 
		if(get_nas_sysparam(&sys) < 0) {
			daylog(ERROR, "取NAS本地参数表失败.");
			return (-1);
		}
		strcpy(e_date, sys.logic_date);
	}
	else {
		if(date_fname[0] == 'N') {
			daylog(ERROR, "SETTLE_CONFIG文件中[%s]下清算日期字段为%s,清算日期文件必须指定.", card_type, field_name);
			return (-1);
		}
		if(get_date(date_fname, e_date) < 0) return (-1);
	}
	
	return (0);
}



int	update_settle_date(char *card_type, char *s_date, char *e_date)
{
	if(writetab("SETTLE_CONFIG",card_type,"LST_SETTLE_DATE",s_date) < 0){
		daylog(ERROR,"更新SETTLE_CONFIG文件中[%s]下的LST_SETTLE_DATE配置.", card_type);
		return (-1);
	}
	if(writetab("SETTLE_CONFIG",card_type,"CUR_SETTLE_DATE",e_date) < 0){
		daylog(ERROR,"更新SETTLE_CONFIG文件中[%s]下的CUR_SETTLE_DATE配置.", card_type);
		return (-1);
	}
	
	return (0);
}



int	get_tran_type(char *card_type, char *tran_type)
{
	char	tmp[10], buff[10];
	int	type[6]={PURCHASE,CONFIRM,OFFLINE,WITHDRAWAL,DEPOSIT,TRANS_OUT};
	int	i;


	memset(tmp, 0, sizeof(tmp));
	if(readtab("SETTLE_CONFIG", card_type, "TRAN_TYPE", tmp) < 0) {
		daylog(ERROR, "SETTLE_CONFIG文件中没有[%s]下的TRAN_TYPE配置.",
			card_type);
		return (-1);
	}
	for(i = 0; tmp[i] != '\0' && i < 10; i++) {
		if(tmp[i] == '1') {
			sprintf(buff, "%d", type[i]);
			if(tran_type[0] == '\0')
				sprintf(tran_type, "%d", type[i]);
			else {
				sprintf(buff, ",%d", type[i]);
				strcat(tran_type, buff);
			}
		}
	}
	
	return (0);
}




int	insert_into_settle(card_type, card_name, bank_flag, s_date, e_date, sys)
	char	*card_type;
	char	*card_name;
	char	*bank_flag;
	char	*s_date;
	char	*e_date;
	S_sys_param 	*sys;
{	
	EXEC SQL BEGIN DECLARE SECTION;

	char		date[9], l_date[9], sql_str[1024];
	char		settle_mode[2];
	S_tran_ls	tran_ls;

	EXEC SQL END DECLARE SECTION;
	char	tran_type[50], field_name[40], bank_type[10]; 
	char	cardtype[30], logic_date[11];



	memset(field_name, 0, sizeof(field_name));
	memset(tran_type, 0, sizeof(tran_type));

	if(get_settle_info(card_type, field_name, s_date, e_date) < 0) {
		daylog(ERROR, "取%s清算日期错!", card_name);
		return -1;
	}
	if(get_tran_type(card_type, tran_type) < 0)  {
		daylog(ERROR, "取%s交易类型错!", card_name);
		return (-1);
	}
	if(!memcmp(card_type, "50", 2))
		strcpy(cardtype, "'51', '52', '53', '54', '55'");
	else
		sprintf(cardtype, "'%s'", card_type);
	dateadd(sys->logic_date, -1, l_date);
	getdatef(date, "");
	
	if(bank_flag[0] == 'Y')
		sprintf(sql_str, "select * from cur_tran_ls \
		where acq_bank_id = '%s' and acq_host_id = '%s' \
		and card_type in (%s) and card_no[1]!='7' \
		and (%s >= '%s' and %s < '%s') \
		and saf_flag = '0' and tran_flag in ('0', '4') \
		and resp_code  = '00' and tran_type in (%s) \
		and terminal_id[1,3] not in ('TRM', 'TEL', 'TLX', 'VOC') \
		for update of snd_settle_flag, snd_settle_date ", sys->bank_id,
		sys->host_id, cardtype, field_name, s_date, field_name, e_date, 		tran_type);
	else
		sprintf(sql_str, "select * from cur_tran_ls \
		where acq_bank_id = '%s' and acq_host_id = '%s' \
		and card_type in (%s) and card_no[1]!='7' \
		and bank_type in('04', '51', '52', '53', '54', '55') \
		and (%s >= '%s' and %s < '%s') \
		and saf_flag = '0' and tran_flag in ('0', '4') \
		and resp_code  = '00' and tran_type in (%s) \
		and terminal_id[1,3] not in ('TRM', 'TEL', 'TLX', 'VOC') \
		for update of snd_settle_flag, snd_settle_date ", sys->bank_id,
		sys->host_id, cardtype, field_name, s_date, field_name, e_date, 		tran_type);

	EXEC SQL prepare s_sql from :sql_str;
	if (SQLCODE) {
		daylog(ERROR, "Unable prepare sql_str[%s]![%d]", 
			sql_str, SQLCODE);
		return -1;
	}

	EXEC SQL declare settle_cur cursor for s_sql;
	if (SQLCODE) {
		daylog(ERROR, "Unable declare settle_cur![%d]", SQLCODE);
		return -1;
	}

	EXEC SQL open settle_cur;
	if ( SQLCODE ) {
		daylog ( ERROR , "Unable open cursor settle_cur![%d]", SQLCODE);
		return -1;
	}
	while(1) {
		EXEC SQL fetch settle_cur into :tran_ls;
		if (SQLCODE == 100)	break;
		if (SQLCODE) {
			daylog(ERROR, "Unable fetch cur_tran_ls![%d]", SQLCODE);
			EXEC SQL close settle_cur;
			return -1;
		}
		del_st_space("cur_tran_ls", &tran_ls);
		EXEC SQL select settle_mode into :settle_mode from merchant_base
			where merchant_id = :tran_ls.merchant_id;
		if(SQLCODE) {
			daylog(ERROR, "Unable select settle_mode from merchant_base. merchant_id=[%s]![%d]", tran_ls.merchant_id, SQLCODE);
			EXEC SQL close settle_cur; 
			return (-1);
		}

		if(memcmp(settle_mode, "Y", 1)) continue;

		memcpy( tran_ls.snd_settle_date , date ,9 );
		strcpy( tran_ls.snd_settle_flag, "Y" );

		EXEC SQL insert into cur_settle_ls values ( :tran_ls) ;
		if (SQLCODE) {
			daylog(ERROR, "Unable insert cur_settle_ls![%d]", SQLCODE);
			EXEC SQL close settle_cur;
			return -1;
		}
		EXEC SQL update cur_tran_ls set snd_settle_flag='Y',
			snd_settle_date=$l_date where current of settle_cur;
		if(SQLCODE) {
			daylog(ERROR, "Unable update settle_cur of cur_tran_ls![%d]", SQLCODE);
			EXEC SQL close settle_cur;
			return -1;
		}
	}
	if(update_settle_date(card_type, s_date, e_date) <  0) {
		EXEC SQL close settle_cur;
		return -1;
	}

	EXEC SQL close settle_cur;

	return 0;

}


int	errtran_to_errsettle(S_sys_param *sys)
{
	$char	date[9], l_date[9];
	

	getdatef(date, "");
	dateadd(sys->logic_date, -1, l_date);

	EXEC SQL update err_tran_ls set snd_settle_date = $date 
		where snd_settle_date = $l_date;
	if (SQLCODE) {
		daylog(ERROR, "Unable update snd_settle_date of err_tran_ls![%d]", SQLCODE);
		return -1;
	}

	EXEC SQL insert into err_settle_ls select * from err_tran_ls
		where snd_settle_date = $date and tran_type not in (4,12) ;

	if (SQLCODE) {
		daylog(ERROR, "Unable insert err_tran_ls to err_settle_ls![%d]", SQLCODE);
		return -1;
	}

	EXEC SQL insert into his_err_tran_ls select * from err_tran_ls
		where snd_settle_date = $date and tran_type not in(4,12);
	if (SQLCODE) {
		daylog(ERROR, "Unable insert err_tran_ls to his_err_tran_ls![%d]", SQLCODE);
		return -1;
	}

	EXEC SQL delete from err_tran_ls where snd_settle_date = $date;

	if (SQLCODE) {
		daylog(ERROR, "Unable delete err_tran_ls![%d]", SQLCODE);
		return -1;
	}

	return (0);

}





/*
 * 传流水记录到当日清算流水表中
 */
int 	tran_to_settle(char *bank_flag)
{

	EXEC SQL BEGIN DECLARE SECTION;

⌨️ 快捷键说明

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