📄 posls.c
字号:
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'3\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND trace_no = %ld \
AND resp_code =\'00\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
pcs.Merchant_id,
pcs.Terminal_id,
po.trace_no );
if ((i = update_table(sqlstr)) < 0) {
errcall(ERROR, "调整交易更新数据库失败");
strcpy(pcs.Resp_code, SYS_FAIL);
strcpy(pcs.Resp_bank_id, G_sys_param.bank_id);
strcpy(pcs.Resp_host_id, G_sys_param.host_id);
return -1;
}
return i;
}
/*==================================================
功能:
refund 交易数据库处理函数, 修改cur_tran_ls或
his_tran_ls中原交易的tran_flag为已退货标志
ENTRY:
RETURN: 0 SUCC
-1 FAIL
====================================================*/
int refund_update()
{
S_tran_ls po;
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'4\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND invoice_no = %ld \
AND resp_code = \'00\'",
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Merchant_id,
pcs.Terminal_id,
pcs.Void_invoice_no);
if (update_table(sqlstr) != 0) {
#ifdef REFUND_PROCESS
sprintf(sqlstr, " \
UPDATE his_tran_ls \
SET tran_flag = \'4\' \
WHERE card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND invoice_no = %ld \
AND resp_code = \'00\'",
pcs.Card_no,
pcs.Merchant_id,
pcs.Terminal_id,
pcs.Void_invoice_no);
if (update_table(sqlstr) < 0) {
errcall(ERROR, "退货交易更新数据库失败");
strcpy(pcs.Resp_code, SYS_FAIL);
strcpy(pcs.Resp_bank_id, G_sys_param.bank_id);
strcpy(pcs.Resp_host_id, G_sys_param.host_id);
return -1;
}
#endif
}
return 0;
}
/*==================================================
功能:
修改交易流水表中确认交易的原预授权交易tran_flag改为
'0', 即由已确认'2'改为正常'0'。
ENTRY:
RETURN: -1 FAIL
0 SUCC
==================================================*/
int update_pre_flag1( )
{
int i=0;
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'0\' \
WHERE merchant_id = \'%s\' \
AND acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND auth_no = \'%s\' \
AND tran_flag = \'2\' \
AND resp_code = \'00\' \
AND tran_type = %d",
pcs.Merchant_id,
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Auth_no,
PRE_AUTH );
if ((i = update_table(sqlstr)) < 0) {
return -1;
}
else if (i == 1){
errcall(DEBUG, "update_table() NOT FOUND");
}
return 0;
}
/*==================================================
功能:
修改预授权交易标志tran_flag = '2',即已确认
ENTRY:
RETURN: -1 FAIL
0 SUCC
==================================================*/
int update_pre_flag2( )
{
int i=0;
#ifdef wyz_mod_020329_for_adjust_index
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'2\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND auth_no = \'%s\' \
AND tran_flag = \'0\' \
AND resp_code = \'00\' \
AND tran_type = %d",
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Merchant_id,
pcs.Auth_no,
PRE_AUTH);
#else
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'2\' \
WHERE card_no = \'%s\' \
AND acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND auth_no = \'%s\' \
AND tran_flag = \'0\' \
AND resp_code = \'00\' \
AND tran_type = %d \
AND merchant_id = \'%s\'",
pcs.Card_no,
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Auth_no,
PRE_AUTH,
pcs.Merchant_id);
#endif
if ((i = update_table(sqlstr)) < 0) {
errcall(ERROR, "确认交易更新数据库失败");
return -1;
}
else if (i == 1){
errcall(DEBUG, "update_table() NOT FOUND");
}
return 0;
}
/*==================================================
功能:
修改预授权交易标志,tran_flag='2',即已确认;
offline_flag='1',即离线交易
ENTRY:
RETURN: -1 FAIL
0 SUCC
==================================================*/
int offline_update_pre_flag( )
{
int i=0;
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'2\', \
offline_flag = \'1\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND auth_no = \'%s\' \
AND tran_flag = \'0\' \
AND resp_code = \'00\' \
AND tran_type = %d",
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Merchant_id,
pcs.Auth_no,
PRE_AUTH);
if ((i = update_table(sqlstr)) < 0) {
errcall(ERROR, "离线交易更新数据库失败");
return -1;
}
else if (i == 1){
errcall(DEBUG, "update_table() NOT FOUND");
}
return 0;
}
/*==================================================
功能:
冲正交易数据库处理函数
ENTRY:
RETURN: -1 FAIL
0 SUCC
1 NOT FOUND
==================================================*/
int recovery_update()
{
int i=0;
switch(pcs.Void_tran_type) {
case CONFIRM:
//将预授权交易已确认标志改为正常。
i = update_pre_flag1();
if( i != 0 ) return -1;
break;
case REFUND:
case ADJUST:
i = update_refund_void( pcs.Invoice_no );
if( i != 0 ) return -1;
break;
case POS_VOID:
i = update_void_reversal();
if (i != 0) return -1;
break;
default:
break;
}
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET saf_flag = \'1\' \
WHERE merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND trace_no = %ld \
AND saf_flag = \'0\' \
AND resp_code = \'00\'",
pcs.Merchant_id,
pcs.Terminal_id,
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Trace_no);
if ((i = update_table(sqlstr)) < 0) {
errcall(DEBUG, "冲正交易更新数据库失败");
return -1;
}
else if (i == 1) {
errcall(DEBUG, "update_table() NOT FOUND");
return 1;
}
return 0;
}
/*=======================================================
功能:
根据交易流水号invoice_no在cur_tran_ls流水表中查找交易标志
tran_flag为'1','2','3','4', 即已撤销, 已确认,已调整,已退货
的交易;修改该交易的原交易的交易标志tran_flag为'0',即正常交易
并且,对ADJUST交易的原交易的调整金额作相应的处理;
CONFIRM交易的PRE_AUTH原交易状态处理;
RETURN: -1 FAIL
0 SUCC
========================================================*/
int update_refund_void( invoice )
long invoice;
{
S_tran_ls po;
int i=0;
int his_flag = 0;
//查找REFUND, ADJUST, CONFIRM等交易的原交易
sprintf(sqlstr, " \
SELECT * FROM cur_tran_ls \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND invoice_no = %ld \
AND tran_type = %d \
AND resp_code = \'00\' \
AND tran_flag in (\'1\', \'2\', \'3\', \'4\')",
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Card_no,
pcs.Merchant_id,
pcs.Terminal_id,
invoice,
pcs.Void_old_tran_type);
/* 查 REFUND, CONFIRM, ADJUST 交易的原交易 */
if (select_ls_record(sqlstr, &po) != 0) {
errcall(DEBUG, "NOT Found void tran of ADJUST,CONFIRM,REFUND,POS_VOID in cur_tran_ls");
#ifndef wyz_add_010710
if (pcs.Void_tran_type == REFUND){
his_flag = 1;
sprintf(sqlstr, " \
SELECT * FROM his_tran_ls \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND card_no = \'%s\' \
AND ( tran_flag = \'1\' OR tran_flag = \'2\' \
OR tran_flag = \'3\' OR tran_flag = \'4\' ) \
AND resp_code = \'00\' \
AND invoice_no = %ld ",
pcs.Acq_bank_id,
pcs.Acq_host_id,
pcs.Merchant_id,
pcs.Terminal_id,
pcs.Card_no,
invoice);
if (select_ls_record(sqlstr, &po) != 0) {
return 0;
}
}
#endif
return 0;
}
/* 找到REFUND, CONFIRM, ADJUST 交易的原交易 */
po.trace_no = po.void_trace_no;
po.tran_flag[0] = '0';
//根据交易的原交易进行分别处理
switch(pcs.Void_tran_type) {
case REFUND:
//将退货交易的原交易改为正常交易
if (his_flag == 0){
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'0\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND trace_no = %ld \
AND resp_code = \'00\' \
AND tran_flag = \'4\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
po.merchant_id,
po.terminal_id,
po.trace_no );
i = update_table( sqlstr );
if( i == 0 )
return 0;
}
else {
sprintf(sqlstr, " \
UPDATE his_tran_ls \
SET tran_flag = \'0\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND trace_no = %ld \
AND resp_code = \'00\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
po.merchant_id,
po.terminal_id,
po.trace_no);
i = update_table(sqlstr);
if( i < 0 ) {
return -1;
}
return 0;
}
case ADJUST:
//将调整交易的原交易由已调整改为正常,
//交易金额改为调整交易
//的原交易额,原交易金额改为'0'。
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'0\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND trace_no = %ld \
AND resp_code = \'00\' \
AND tran_flag = \'3\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
po.merchant_id,
po.terminal_id,
po.trace_no);
i = update_table(sqlstr);
if (i < 0) {
return -1;
}
return 0;
case CONFIRM:
//将预授权确认交易的原交易改为未确认
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'0\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND trace_no = %ld \
AND resp_code = \'00\' \
AND tran_flag = \'2\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
po.merchant_id,
po.trace_no);
i = update_table(sqlstr);
if (i < 0) {
return -1;
}
return 0;
case POS_VOID:
sprintf(sqlstr, " \
UPDATE cur_tran_ls \
SET tran_flag = \'0\' \
WHERE acq_bank_id = \'%s\' \
AND acq_host_id = \'%s\' \
AND card_no = \'%s\' \
AND merchant_id = \'%s\' \
AND terminal_id = \'%s\' \
AND trace_no = %ld \
AND resp_code = \'00\' \
AND tran_flag = \'1\'",
po.acq_bank_id,
po.acq_host_id,
po.card_no,
po.merchant_id,
po.terminal_id,
po.trace_no);
i = update_table(sqlstr);
if (i < 0) {
return -1;
}
return 0;
default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -