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

📄 ah_settle.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:

/*=============================================================
功能: 		用于安徽信用卡\借记卡清算函数	
作者:
最后修改人:	胖士军
最后修改日期:	2000/03/08
===============================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <varargs.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/timeb.h>
#include <netdb.h>
#include <time.h>
#include <netinet/in.h>
#include <errno.h>

#include "macro_def.h"
#include "public.h"
#include "mytools.h"
#include "new_monitor.h"
#include "msgapi.h"
#include "msgsys.h"
#include "tool.h"
#include "settlement.h"


$include "db_struct.h"
$include sqlca;

EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;

$short indi;

SETT_HEAD header;
SETT_TRAN tran;
SETT_TAIL tailer;

double ah_get_qs_tip();

int gen_file( flag, local_date, filename )
	int flag;
	$parameter char local_date[10]; /* modi 11 to 10 */
	char *filename;
{
	double fee;
	$char sql_str[2000];
	FILE *fp;
	int i, ret, num;
	$S_posls ls;

	fp = fopen(filename, "w+");
	if (fp == NULL) {
		daylog(ERROR, "Open %s for write error!", filename);
		return(-1);
	}

	if( PreProcPhare(sql_str, flag, local_date, &num) < 0 ) {
		daylog(ERROR, "PreProcPhare process error!");
		return(-1);
	}
	if ( num  <= 0 ) return (1);    
		
	$prepare file_pre from :sql_str;
	if( SQLCODE ) {
		daylog( ERROR, "gen file prepare error [%d]!",SQLCODE);
		return(-1);
	}

	$declare file_cur cursor for file_pre;
	if( SQLCODE ) {
		daylog( ERROR, "gen file declare error [%d]!",SQLCODE);
		return(-1);
	}

	$open file_cur;
	if (SQLCODE) {
		daylog(ERROR, "Open file_cur error![%d]", SQLCODE);
		fclose(fp);
		return(-1);
	}

	while (1) {
		$fetch file_cur into :ls;
		if (SQLCODE == 100) break;
		if (SQLCODE) {
			daylog(ERROR, "Fetch file_cur error![%d]", SQLCODE);
			$close file_cur;
			fclose(fp);
			return(-1);
		}

		fprintf(fp, "%-4.4s|", ls.fk_bankid);
		fprintf(fp, "%-4.4s|", ls.sd_bankid);
		fprintf(fp, "%-19.19s|", ls.card_no);
		fprintf(fp, "%-4.4s|", ls.expire);
		
		for (i = 0; i < 2; i++) {
			switch (i ? ls.old_type:ls.trans_type) {
			    case AUTH:
				fprintf(fp, "%c|", '0');
				break;
			    case PURCHASE:
				fprintf(fp, "%c|", '1');
				break;
			    case REFUND:
				fprintf(fp, "%c|", '2');
				break;
			    case WITHDRAWAL:
				fprintf(fp, "%c|", '3');
				break;
			    case DEPOSIT:
				fprintf(fp, "%c|", '4');
				break;
			    case TRANS:
				fprintf(fp, "%c|", '5');
				break;
			    case CONFIRM:
				fprintf(fp, "%c|", '6');
				break;
			    case ADJUST:
				fprintf(fp, "%c|", '7');
				break;
			    case AGENT:
				fprintf(fp, "%c|", '8');
				break;
			    case PRE_AUTH:
				fprintf(fp, "%c|", '9');
				break;
			    case POS_VOID:
				fprintf(fp, "%c|", 'A');
				break;
			    default:
				fprintf(fp, "%c|", 'E');
				break;
			}
		}

		fprintf(fp, "%012.0lf|", ls.amount * 100);
		fprintf(fp, "%-4.4s%-2.2s%-2.2s|", ls.equip_date,
			ls.equip_date + 5, ls.equip_date + 8);
		fprintf(fp, "%-2.2s%-2.2s%-2.2s|", ls.equip_time,
			ls.equip_time + 3, ls.equip_time + 6);
		fprintf(fp, "%-15.15s|", ls.merchant_id);
		fprintf(fp, "%-8.8s|", ls.terminal_id);
		fprintf(fp, "%-4.4s|", ls.mcc);
		fprintf(fp, "%07ld|", ls.batch_no);
		fprintf(fp, "%06ld|", ls.trace);
		fprintf(fp, "%06ld|", ls.hostls);
		fprintf(fp, "%07ld|", ls.invoice);
		fprintf(fp, "%07ld|", ls.void_invoice);
		fprintf(fp, "%6.6s|", ls.authno);
		fprintf(fp, "%-19.19s|", ls.card_no2);

		if (ls.down_flag[0] == 'Y')
			fprintf(fp, "%c|", '1');
		else
			fprintf(fp, "%c|", '0');
		
		fprintf(fp, "%-15.15s|", ls.person_id);

		fprintf(fp, "%-3.3s|", "156");

		fprintf(fp, "%-4.4s%-2.2s%-2.2s|", ls.local_date,
			&ls.local_date[5], &ls.local_date[8]);

		if( ls.remote_date[0] != '\0' )
			fprintf(fp, "%-4.4s%-2.2s%-2.2s|", ls.remote_date,
				&ls.remote_date[5], &ls.remote_date[8]);
		else
			fprintf(fp, "%8.8s|"," ");

		fee = 0.00;
		if(ah_get_qs_tip(ls, &fee) < 0) {
			daylog(ERROR,"get fee error!!");
			return(-1);
		}

		fprintf(fp, "%012.0lf|", fee * 100.);

		fprintf(fp, "\n");
	}
	$close file_cur;

	fclose(fp);

	return( 0 );
}


int send_mx( int flag, char *loc_date )
{
	char buf[1024], c_count[7];
	$char sql_str[2000];
	char hostname[30], service[30];
	$char ipaddr[21];
	$S_posls ls;
	double fee;
	ushort len, n;
	int sock, tcount, i;

	memset(hostname, 0, sizeof(hostname));
	memset(service, 0, sizeof(service));
	if(readtab(C_FILE, HOST_PAR, HOSTNAME, hostname) < 0) {
		errcall(ERROR,"Read %s err!",C_FILE);
		return(-1);
	}
	if(readtab(C_FILE, HOST_PAR, SERVICE, service) < 0) {
		errcall(ERROR,"Read %s err!",C_FILE);
		return(-1);
	}

	if ((sock = tcp_connect(hostname, service)) < 0) {
		daylog(ERROR, "Error connect %s:%s!", hostname, service);
		return(-1);
	}

	if( PreProcPhare(sql_str, flag, loc_date, &tcount) < 0 ) {
		daylog(ERROR, "PreProcPhare process error!");
		return(-1);
	}
	if ( tcount  <= 0 ) return (1);    

	$prepare mx_pre from :sql_str;
	if( SQLCODE ) {
		daylog( ERROR, "prepare mx_pre error [%d]!",SQLCODE);
		return(-1);
	}

	$declare mx_cur cursor for mx_pre;
	if( SQLCODE ) {
		daylog( ERROR, "declare mx_pre error [%d]!",SQLCODE);
		return(-1);
	}

	$open mx_cur;
	if (SQLCODE) {
		daylog(ERROR, "Open deb_host_cur error![%d]", SQLCODE);
		return(-1);
	}

	if ( (tcount = atoi(header.count)) <= 0 ) return (1);

	if ( write(sock, (char *)&header, HEAD_SIZE) != HEAD_SIZE ) { 
		daylog(ERROR, "Error write header to host!");
		$close mx_cur;
		close(sock);
		return(-1);
	}  			 /* end send head */
	
	for( i=1; i <= tcount; i++ ) {
		$fetch mx_cur into :ls;
		if (SQLCODE == 100) {
			daylog(ERROR, "Fetch mx_cur is null[%d]", SQLCODE);
			$close mx_cur;
			break;
		}
		if (SQLCODE) {
			daylog(ERROR, "Fetch mx_cur error![%d]", SQLCODE);
			$close mx_cur;
			return(-1);
		}

		strcpy(tran.fk_bankid, ls.fk_bankid);
		strcpy(tran.sd_bankid, ls.sd_bankid);
		strcpy(tran.card_no, ls.card_no);
		strcpy(tran.expire, ls.expire);
		
		switch (ls.trans_type) {
		    case AUTH:
			sprintf(tran.trans_type, "%c", '0');
			break;
		    case PURCHASE:
			sprintf(tran.trans_type, "%c", '1');
			break;
		    case REFUND:
			sprintf(tran.trans_type, "%c", '2');
			break;
		    case WITHDRAWAL:
			sprintf(tran.trans_type, "%c", '3');
			break;
		    case DEPOSIT:
			sprintf(tran.trans_type, "%c", '4');
			break;
		    case TRANS:
			sprintf(tran.trans_type, "%c", '5');
			break;
		    case CONFIRM:
			sprintf(tran.trans_type, "%c", '6');
			break;
		    case ADJUST:
			sprintf(tran.trans_type, "%c", '7');
			break;
		    case AGENT:
			sprintf(tran.trans_type, "%c", '8');
			break;
		    case PRE_AUTH:
			sprintf(tran.trans_type, "%c", '9');
			break;
		    case POS_VOID:
			sprintf(tran.trans_type, "%c", 'A');
			break;
		    default:
			sprintf(tran.trans_type, "%c", 'E');
			break;
		}
		switch (ls.old_type) {
		    case AUTH:
			sprintf(tran.old_type, "%c", '0');
			break;
		    case PURCHASE:
			sprintf(tran.old_type, "%c", '1');
			break;
		    case REFUND:
			sprintf(tran.old_type, "%c", '2');
			break;
		    case WITHDRAWAL:
			sprintf(tran.old_type, "%c", '3');
			break;
		    case DEPOSIT:
			sprintf(tran.old_type, "%c", '4');
			break;
		    case TRANS:
			sprintf(tran.old_type, "%c", '5');
			break;
		    case CONFIRM:
			sprintf(tran.old_type, "%c", '6');
			break;
		    case ADJUST:
			sprintf(tran.old_type, "%c", '7');
			break;
		    case AGENT:
			sprintf(tran.old_type, "%c", '8');
			break;
		    case PRE_AUTH:
			sprintf(tran.old_type, "%c", '9');
			break;
		    case POS_VOID:
			sprintf(tran.old_type, "%c", 'A');
			break;
		    default:
			sprintf(tran.old_type, "%c", 'E');
			break;
		}

		sprintf(tran.amount, "%012.0lf", ls.amount * 100);
		sprintf(tran.equip_date, "%-4.4s%-2.2s%-2.2s", ls.equip_date,
			ls.equip_date + 5, ls.equip_date + 8);
		sprintf(tran.equip_time, "%-2.2s%-2.2s%-2.2s", ls.equip_time,
			ls.equip_time + 3, ls.equip_time + 6);
		strcpy(tran.merchant_id, ls.merchant_id);
		strcpy(tran.terminal_id, ls.terminal_id);
		strcpy(tran.mcc, ls.mcc);
		sprintf(tran.batch_no, "%07ld", ls.batch_no);
		sprintf(tran.trace, "%06ld", ls.trace);
		sprintf(tran.hostls, "%06ld", ls.hostls);
		sprintf(tran.invoice, "%07ld", ls.invoice);
		sprintf(tran.void_invoice, "%07ld", ls.void_invoice);
		strcpy(tran.authno, ls.authno);
		strcpy(tran.card_no2, ls.card_no2);

		if (ls.down_flag[0] == 'Y')
			sprintf(tran.settle_flag, "%c", '1');
		else
			sprintf(tran.settle_flag, "%c", '0');
		
		strcpy(tran.person_id, ls.person_id);

		sprintf(tran.currency_code, "%-3.3s", "156");

		sprintf(tran.local_date, "%-4.4s%-2.2s%-2.2s", ls.local_date,
			&ls.local_date[5], &ls.local_date[8]);

		if( ls.remote_date[0] != '\0' )
			sprintf(tran.remote_date, "%-4.4s%-2.2s%-2.2s",
				ls.remote_date, &ls.remote_date[5], 
				&ls.remote_date[8]);
		else
			sprintf(tran.remote_date, "%8.8s"," ");

		fee = 0.00;
		if(ah_get_qs_tip(ls, &fee) < 0) {
			daylog(ERROR,"get fee error!!");
			$close mx_cur; 
			return(-1);
		}

		sprintf(tran.fee, "%012.0lf", fee * 100.);

		if ( write(sock, (char *)&tran, TRAN_SIZE) != TRAN_SIZE ) {
			daylog(ERROR, "Error write trans to host!");
			$close mx_cur; 
			close(sock);
			return(-1);
		}
	}

	$close mx_cur;   /* end send body */

	sprintf( c_count, "%06.6ld",--i);
	if (write(sock, c_count, TAIL_SIZE) != TAIL_SIZE) {
		daylog(ERROR, "Error send commit string!");
		close(sock);
		return(-1);
	}

	if (read(sock, c_count, TAIL_SIZE) != TAIL_SIZE) {
		daylog(ERROR, "Error recv commit string!");
		close(sock);
		return(-1);
	}

	close(sock);  /* end send tail */

/* add by psj 2000.05.28 */
	memset( buf, 0, sizeof(buf) );
	switch( header.card_type[0] ) {
		case 'D':
			sprintf(buf, \
				"向主机发送借记卡清算明细成功! 共[%d]笔", \
				atoi(header.count));
			break;
		case 'C':
			sprintf(buf, \
				"向主机发送信用卡清算明细成功! 共[%d]笔", \
				atoi(header.count));
			break;
		default:

⌨️ 快捷键说明

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