📄 ah_settle.ec
字号:
/*=============================================================
功能: 用于安徽信用卡\借记卡清算函数
作者:
最后修改人: 胖士军
最后修改日期: 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 + -