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

📄 addsaf.c

📁 界面库
💻 C
字号:
/*=============================================================
功能: 		添加 saf 表	
作者:
王永忠:	2001/3/26: 规范程序设计
王永忠:	2001/4/03: 修改.c为.ec
2001/11/30:wyz:添加对冲正交易未找到原交易的处理
2002/04/15:wyz:添加在冲正记流水不成功时,记自动冲正处理文件。
===============================================================*/

#include	<stdio.h>
#include	<stdlib.h>
#include	<math.h>
#include	<errno.h>
#include	"all.h"	
#include	"macro_def.h"
#include 	"db_struct_c.h"

extern	int	G_reversal_flag;

/*=========================================================
功能:
把 PUBLIC --> S_saf

ENTRY:	PUBLIC *pc
	S_saf_ls  *saf_ls
RETURN:	
	0  SUCC	
==========================================================*/
int pcs2saf(saf_ls, pc)
S_saf_ls 	*saf_ls;
PUBLIC 		*pc;
{
char 	wdate[9];
char	wtime[7];
char	tmp[2];

	memset(saf_ls, '\0', sizeof(S_saf_ls));

	strcpy(saf_ls->card_no,		pc->Card_no);
	strcpy(saf_ls->exp_date,	pc->Exp_date);

	strcpy(saf_ls->acq_bank_id,	pc->Acq_bank_id);
	strcpy(saf_ls->acq_host_id,	pc->Acq_host_id);

	strcpy(saf_ls->iss_bank_id,	pc->Iss_bank_id);

	strcpy(saf_ls->snd_bank_id,	pc->Snd_bank_id);
	strcpy(saf_ls->snd_host_id,	pc->Snd_host_id);

	strcpy(saf_ls->rcv_bank_id,	pc->Rcv_bank_id);
	strcpy(saf_ls->rcv_host_id,	pc->Rcv_host_id);

	strcpy(saf_ls->snd_logic_date, pc->Snd_settle_date);
	strcpy(saf_ls->rcv_logic_date, pc->Rcv_settle_date);
	strcpy(saf_ls->agt_logic_date, pc->Agent_settle_date);
	strcpy(saf_ls->adv_logic_date, pc->Host_settle_date);

	strcpy(saf_ls->local_sys_date,	pc->Local_sys_date);
	strcpy(saf_ls->local_sys_time,	pc->Local_sys_time);

	strcpy(saf_ls->tran_sys_time,	pc->Tran_sys_time);

	strcpy(saf_ls->terminal_id,	pc->Terminal_id);
	strcpy(saf_ls->merchant_id,	pc->Merchant_id);
	strcpy(saf_ls->merchant_name,	pc->Merchant_name);
	strcpy(saf_ls->mcc,		pc->Mcc);

	strcpy(saf_ls->bank_type,	pc->Bank_type);
	strcpy(saf_ls->card_type,	pc->Card_type);

	strcpy(saf_ls->ccy_code, pc->Ccy_code);
	strcpy(saf_ls->tran_rrn, pc->Rrn);

	if (pc->Person_id_type == '\0')
		pc->Person_id_type = '1';
	saf_ls->id_type[0] = pc->Person_id_type;
	strcpy(saf_ls->person_id,	pc->Person_id);

	saf_ls->rcv_module_id = pc->Module_id;

	saf_ls->void_old_tran_type = pc->Void_old_tran_type;
	saf_ls->void_tran_type	   = pc->Void_tran_type;
	saf_ls->tran_type	   = pc->Tran_type;

	saf_ls->trace_no	=	pc->Trace_no;
	saf_ls->void_trace_no	=	pc->Void_trace_no;

	saf_ls->invoice_no	=	pc->Invoice_no;
	saf_ls->void_invoice_no	=	pc->Void_invoice_no;

	saf_ls->host_ls_no	=	pc->Host_tran_ls;
	saf_ls->batch_no	=	pc->Batch_no;

	saf_ls->tran_amt	=	atol( pc->Tran_amount ) / 100.;
	saf_ls->void_amt	=	atol( pc->Void_amount ) / 100.;
	saf_ls->add_amount	=	atol( pc->Fee ) / 100.;
	
	strcpy(saf_ls->resp_code,	pc->Resp_code);
	strcpy(saf_ls->resp_bank_id,	pc->Resp_bank_id);
	strcpy(saf_ls->resp_host_id,	pc->Resp_host_id);

#ifdef wyz020503_mod
	strcpy(saf_ls->void_resp_code,	pc->Old_resp_code);
	strcpy(saf_ls->void_resp_bank_id, pc->Old_resp_bank_id);
	strcpy(saf_ls->void_resp_host_id, pc->Old_resp_host_id);
#else
	strcpy(saf_ls->void_resp_bank_id, pc->Sign_bankid);
#endif

	strcpy(saf_ls->auth_no,	pc->Auth_no);

	strcpy(saf_ls->oper_no,	pc->Oper_no);
	
	//设置和转账交易相关的标志
	strcpy(saf_ls->agent_tran_type,	pc->Agent_type);
	strcpy(saf_ls->trans_acct_type,	pc->Virement_type);
	strcpy(saf_ls->acct_type,	pc->Accnt_type);
	strcpy(saf_ls->acct_no_type,	pc->Accounts_type);

	saf_ls->keep_time = 0;

	saf_ls->snd_settle_flag[0] = 'N';
	saf_ls->rcv_settle_flag[0] = 'N';
	saf_ls->agt_settle_flag[0] = 'N';
	saf_ls->adv_settle_flag[0] = 'N';

	saf_ls->saf_flag[0] = 'R';

	/*
	 * 根据交易类型判断是否通知交易
	 */
	if ((pc->Tran_type == ISS_ADVICE ||
	     pc->Tran_type == ISS_REV_ADVICE ||
	     pc->Tran_type == ACQ_ADVICE ||
	     pc->Tran_type == ACQ_REV_ADVICE )
	     && !strcmp(pc->Msg_id, "0220") ) {
		saf_ls->adv_flag[0] = ADV_NEED;	/* '1' */
	} else {
		saf_ls->adv_flag[0] = ADV_NONE;	/* '0' */
	}

	strcpy(saf_ls->input_mode, pc->Input_mode);

	memcpy(saf_ls->add_data, pc->Add_data, 250);
	memcpy(saf_ls->track2, pc->Card_track2, 37);
	memcpy(saf_ls->track3, pc->Card_track3, 104);

	getdatef(wdate, "");
	sprintf(saf_ls->update_date, "%8.8s", wdate);

	gettimef(wtime, "");
	sprintf(saf_ls->update_time, "%6.6s", wtime);
	
	return 0;
}


/*==========================================================
功能:
添加Store_And_Forward流水

ENTRY:	PUBLIC *pc
RETURN:	
	1  SUCC	已存储到SAF表中
	-1 FAIL	已存储到SAF文件中
===========================================================*/
int addsaf(pc)
PUBLIC *pc;
{
S_saf_ls 	saf_ls;
char		tmp_buf[10];
char		tmpfile[50];

	memset(tmp_buf, '\0', sizeof(tmp_buf));
	readtab("sysparam.tab", "REVERSAL_CONTROL", 
		"REVERSAL_ENABLE", tmp_buf);

	//如果未找到原交易且控制标志为N则不发冲正
	if (G_reversal_flag == 1	&&
	    tmp_buf[0] == 'N')
		return 0;

	pcs2saf(&saf_ls, pc);

	if (insert_saf(&saf_ls) < 0) {
		if (ADD_SAF_FILE(&saf_ls) != 0) {
			sprintf(tmpfile, "%s/prt/saflog", getenv("WORKDIR"));
			errcall(ERROR, "冲正交易记数据库失败!该交易已记入文件:%s,请手工处理该笔冲正!", tmpfile);
			saffile(pc);
			return -1;
		}
	}

	return 0 ;
}


/***********************************************************************
功能:
	将写SAF表不成功的记录记入SAF0/SAF1文件
输入:
	PUBLIC	*pub
输出:
	0	成功
	-1	失败
***********************************************************************/
int	ADD_SAF_FILE(S_saf_ls *saf_ls)
{
int	ret=0;
FILE	*fp;
char	filename[128];


	ret = check_SAFFILE();

	if (ret == 0){
		sprintf(filename, "%s/etc/saf/SAF0", getenv("WORKDIR"));
	}
	else if (ret == 1) {
		sprintf(filename, "%s/etc/saf/SAF1", getenv("WORKDIR"));
	}
	else 
		return -1;

	if ((fp = fopen(filename, "a+")) == NULL) {
		errcall(ERROR, "open file(%s) failed(%d)", filename, errno);
		return -1;
	}

	if (fwrite(saf_ls, sizeof(S_saf_ls), 1, fp) != 1) {
		errcall(ERROR, "write file(%s) failed(%d)", filename, errno);
		fclose(fp);
		return -1;
	}

	fclose(fp);
	return 0;
}

⌨️ 快捷键说明

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