📄 addsaf.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 + -