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

📄 posls.c

📁 界面库
💻 C
📖 第 1 页 / 共 4 页
字号:

	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 + -