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

📄 db_op.ec

📁 界面库
💻 EC
📖 第 1 页 / 共 5 页
字号:
ENTRY:
RETURN:
****************************************************************/
int bank_cmp ( void *bank1 , void *bank2 )
{
	return (strcmp(((S_bank_base *)bank1)->bank_id, ((S_bank_base *)bank2)->bank_id));
} 

/***************************************************************
功能:
	根据行号获取联行技术资料(数据库表中获取)
ENTRY:	bank_base
RETUN:	-1	FAIL
	 0	SUCC,RESULT --> bk
	-2	NOTFOUND
****************************************************************/
int select_bank( bank_base )
S_bank_base	*bank_base;
{
EXEC SQL BEGIN DECLARE SECTION;
S_bank_base	l_bank_base;
EXEC SQL END DECLARE SECTION;

	memcpy( &l_bank_base, bank_base, sizeof( S_bank_base ) );

	EXEC SQL SELECT * INTO :l_bank_base FROM bank_base
		WHERE	bank_id = :l_bank_base.bank_id
		AND	host_id = :l_bank_base.host_id;

	if (SQLCODE < 0) {
		errcall(ERROR, "查找联行[%s(%s)]信息失败![%d]",
		l_bank_base.bank_id,
		l_bank_base.host_id,
		SQLCODE);
		return -1;
	}

	if (SQLCODE == SQLNOTFOUND) {
		errcall(DEBUG, "没有找到联行[%s(%s)]信息",
		l_bank_base.bank_id,
		l_bank_base.host_id);
		return -2;
	}

	del_st_space("bank_base", &l_bank_base);
	memcpy( bank_base, &l_bank_base, sizeof( S_bank_base ));

	return 0;
}

/***************************************************************
功能:
	根据商户号和银行类型取他行商户号和商户类型
ENTRY:
	中行商户号和他行银行类型
RETURN:
	0	SUCC 	商户编号转换表==>merchant_switch
	-1	FAIL
	-2	NOTFOUND
****************************************************************/
int select_merchant_switch ( S_merchant_switch *merchant_switch )
{
EXEC SQL BEGIN DECLARE SECTION;
S_merchant_switch	l_merchant_switch;
EXEC SQL END DECLARE SECTION;

	memcpy(&l_merchant_switch, merchant_switch, sizeof(S_merchant_switch));
	
	EXEC SQL SELECT * INTO :l_merchant_switch FROM merchant_switch
	WHERE merchant_id = :l_merchant_switch.merchant_id
	AND   bank_type = :l_merchant_switch.bank_type;
	
	if (SQLCODE == SQLNOTFOUND)
		return -2;
		
	if (SQLCODE < 0) 
		return -1;
	
	del_st_space("merchant_switch", &l_merchant_switch);
	memcpy(merchant_switch, &l_merchant_switch, sizeof(S_merchant_switch));
	
	return 0;
}

/*******************************************************************
 *	根据银行类型(外卡即卡号)、商户号获取他行或外卡的商户号
 *	20011/08/19 added by 周国祥
 **********************************************************************/
int get_rebate(char *mer_id, char *card_type, double *rebate)
{
EXEC SQL BEGIN DECLARE SECTION;
char	merchant_id[16];
char	cardtype[4];
char	banktype[4];
double	card_rebate=0.;
EXEC SQL END DECLARE SECTION;

	strcpy(merchant_id, mer_id);
	strcpy(cardtype, card_type);

	if (!strcmp(cardtype, CREDIT_CARD) || !strcmp(cardtype, DEBIT_CARD))
		strcpy(banktype, BOC_BANK);
	else
		strcpy(banktype, cardtype);

	EXEC SQL select card_discount
	into :card_rebate from merchant_card
	where merchant_id = :merchant_id
	and   card_type = :cardtype
	and   bank_type = :banktype;

	if (SQLCODE) {
		*rebate = 0.0;
		return -1;
	} else {
		*rebate = card_rebate * 0.01;
		return 0;
	}
}

/**********************************************************************
 *	根据银行类型(外卡即卡号)、商户号获取他行或外卡的商户号
 *	2001/08/19 added by 周国祥
 **********************************************************************/
int get_oth_merchant_id(char *bank_type, char *mer_id, char *oth_mer_id)
{
EXEC SQL BEGIN DECLARE SECTION;
char merchant_id[16];
char oth_merchant_id[16];
char banktype[5];
EXEC SQL END DECLARE SECTION;

	strcpy(merchant_id, mer_id);
	strcpy(banktype, bank_type);

	strcpy(oth_mer_id, mer_id);

	EXEC SQL SELECT oth_merchant_id
	INTO :oth_merchant_id
	FROM merchant_switch
	WHERE merchant_id = :merchant_id
	AND   bank_type = :banktype;

	if (sqlca.sqlcode == 0) {
		DelSpace(oth_merchant_id);
		if (oth_merchant_id[0] != '\0')
			strcpy(oth_mer_id, oth_merchant_id);
	}

	if (sqlca.sqlcode < 0) {
		errcall(ERROR, "没有找到外卡商户号或数据库错,(%ld)", sqlca.sqlcode); 
		strcpy(oth_mer_id, mer_id);
	}

	if (sqlca.sqlcode == SQLNOTFOUND) {
		strcpy(oth_mer_id, mer_id);
	}

	return 0;

}

/***************************************************************
功能:
	根据行号和主机号取联行基本信息。
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL 
	-2	NOT FOUND
****************************************************************/
int select_bank_info(S_bank_info *t )
{
EXEC SQL BEGIN DECLARE SECTION;
S_bank_info	l_bank_info;
EXEC SQL END DECLARE SECTION;

	memcpy(&l_bank_info, t, sizeof(S_bank_info));
	
	EXEC SQL SELECT * INTO :l_bank_info FROM bank_info
	WHERE bank_id = :l_bank_info.bank_id 
	AND   host_id = :l_bank_info.host_id;
	
	if (SQLCODE == SQLNOTFOUND)
		return -2;
		
	if (SQLCODE < 0) 
		return -1;
	
	del_st_space("bank_info", &l_bank_info);
	memcpy(t, &l_bank_info, sizeof(S_bank_info));
	
	return 0;
}

/***************************************************************
功能:
	根据行号和主机号取联行技术信息。
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL 
	-2	NOT FOUND
****************************************************************/
int select_bank_base ( S_bank_base *t )
{
EXEC SQL BEGIN DECLARE SECTION;
S_bank_base	l_bank_base;
EXEC SQL END DECLARE SECTION;

	memcpy(&l_bank_base, t, sizeof(S_bank_base));
	
	EXEC SQL SELECT * INTO :l_bank_base FROM bank_base
	WHERE bank_id = :l_bank_base.bank_id and
	      host_id = :l_bank_base.host_id;
	
	if (SQLCODE == SQLNOTFOUND)
		return -2;
		
	if (SQLCODE < 0) 
		return -1;
	
	del_st_space("bank_base", &l_bank_base);
	memcpy(t, &l_bank_base, sizeof(S_bank_base));
	
	return 0;
}

/***************************************************************
功能:
	从内存路由表中查找卡段路由
ENTRY:
	tablename	路由表名
	type		交易类型
	c_type		卡类型
RETURN:
	0	SUCC 	路由信息=>lo中
	-1	FAIL
****************************************************************/
int select_card_router(lo, type, tablename, c_type)
S_card_route	*lo;
int		type;
char		*tablename;
char		*c_type;
{
char 	*p=NULL;
char	cardno[20];
int 	i, j;

int index_trans[32] = {
	PURCHASE,	/* 消    费 */
#ifdef wyz_del_010821
	AUTH_PUR,	/* 授权消费 */
#endif
	WITHDRAWAL,	/* 取    现 */
	PRE_AUTH,	/* 预 授 权 */
	CONFIRM,	/* 确    认 */
	ADJUST,		/* 帐务调整 */
	DEPOSIT,	/* 存    款 */
	REFUND,		/* 退    货 */
	POS_VOID,	/* 撤    消 */
	REVERSAL,	/* 冲    正 */

	CHG_PWD,	/* 改 卡 密 */
	ISS_CARD,	/* 领卡交易 */
	DISUSE_CARD,	/* 销卡交易 */ 
	EXPIRE,		/* 挂失交易 */
	OPEN_ACC,	/* 开户 */
	DISUSE_ACC,	/* 销户 */

	ISS_ADVICE,	/* 发卡行通知 */
	ISS_REV_ADVICE,	/* 发卡行冲正交易通知 */

	INQUERY,	/* 查询余额 */
	MUL_QUY,	/* 多笔查询 */

	TRANS_IN,
	TRANS_OUT,
	TRANS_DUP,
	-1	
	};

	if (G_card_router_tab == NULL) {
		errcall(ERROR, "卡路由表为空!");
		return -1;
	}

	memcpy(cardno, lo->first_card_no, 20);
	cardno[19] = '\0';

	for (i = 0; i < G_card_router_num; i++) {
$ifdef wyz021115_modi;
		if((strcmp(cardno, G_card_router_tab[i].first_card_no)>= 0) &&
		   (strcmp(cardno, G_card_router_tab[i].last_card_no) <= 0)){
$else;
		if ( strcmp(cardno, G_card_router_tab[i].first_card_no) >= 0 &&
		     strcmp(cardno, G_card_router_tab[i].last_card_no) <= 0 &&
		     strcmp(c_type, G_card_router_tab[i].card_type) == 0 ) {
$endif;
			for (j = 0; index_trans[j] != -1; j++) {
				if ( index_trans[j] == type ){
				   if(G_card_router_tab[i].tran_bit[j] == '1') {
					memcpy(lo, &(G_card_router_tab[i]),
						sizeof(S_card_route));
					return 0;
				   } 
				   else	break;
				}
			}
		}
	}

	if (i == G_card_router_num) {
		errcall(DEBUG, "没有找到卡路由!卡[%s]交易[%d]", cardno, type);
		return -1;
	}
	return -1;
}

/***************************************************************
功能:
	从内存交易路由表中查找特殊交易路由
ENTRY:
	tablename	路由表名
	type		交易类型
RETURN:
	0	SUCC 	路由信息=>tran_lo中
	-1	FAIL
****************************************************************/
int select_tran_router(tran_lo, tablename,type)
S_tran_route	*tran_lo;
char		*tablename;
int		type;
{
char 		*p=NULL;
int 		i, j;

	//定义交易路由表中交易使能位图所对应的交易类型
	int index_tran_route[32] = {
		OFFLINE, 	/*离线交易*/
		AUTH_PUR,	/* 授权消费 */
$ifdef wyz_del_010711;
		ACQ_ADVICE,	/* 收单行通知 */
		ACQ_REV_ADVICE,	/* 收单行冲正交易通知 */
$endif;

		CHECK_WB,	/* 查 止 付 */

		TEST_TRAN,	/*测试交易*/

		POS_LOGIN,	/* EDC 签到 */
		POS_SETTLE,	/* POS 对帐 */
		POS_SETTLE_2,	/* POS二次结算 */
		POS_BATCH_UP,	/* POS批 上 送 */
		POS_LOGOUT,	/* EDC 签退 */

		NET_LOGIN,	/* 网络签到 */
		NET_LOGOUT,	/* 网络签退 */
		NET_CHGKEY,	/* 网间密钥交换*/

		CUT_START,	/* 日终切换开始 */
		CUT_END,	/* 日终切换结束 */

		HOST_LOGIN,	/* HOST签到 */
		HOST_LOGOUT,	/* HOST签退 */
		HOST_BATCH_UP,	/* HOST批 上 送 */

		NET_SETTLE,	/* 网间对帐 */
		HOST_SETTLE,	/* 主机对帐 */

		-1	
	};

	if (G_tran_router_tab == NULL) {
		errcall(ERROR, "交易路由为空!");
		return -1;
	}

	for (j = 0; index_tran_route[j] != -1; j++) {
		if (index_tran_route[j] == type) {
			for (i = 0; i < G_tran_router_num; i++){
				if(G_tran_router_tab[i].tran_bit[j] == '1'){
					memcpy(tran_lo,&(G_tran_router_tab[i]),
						sizeof(S_tran_route));
					return 0;
				}
			}
			if (i == G_tran_router_num){
				errcall(DEBUG,"没有找到交易[%d]的交易路由!",type);
				return -1;
			}

		}
	}
	if (index_tran_route[j] == -1) 
		errcall(DEBUG,"没有找到交易[%d]的交易路由!",type);

	return -1;
}

#ifdef wyz020813_mod
#else
/***************************************************************
功能:
	从内存银行卡交易路由表中查找该银行卡的交易路由
ENTRY:
	card_type	卡类型
	bank_type	银行类型
RETURN:
	0	SUCC 	路由信息=>bankcard_lo中
	-1	FAIL
****************************************************************/
int select_bankcard_router(bankcard_lo, bank_type, card_type)
S_bankcard_route	*bankcard_lo;
char		*bank_type;
char		*card_type;
{
char 		*p=NULL;
int 		i, j;


	if (G_bankcard_router_tab == NULL) {
		errcall(DEBUG, "银行卡交易路由为空!");
		return -1;
	}

	for (i = 0; i < G_bankcard_router_num; i++){
	  if (strcmp(G_bankcard_router_tab[i].bank_type, bank_type) == 0) {
		memcpy(bankcard_lo,&(G_bankcard_router_tab[i]), sizeof(S_bankcard_route));
		return 0;
	  }
	}
	if (i == G_bankcard_router_num){
		errcall(DEBUG,"没有找到银行卡交易路由!");
		return -1;
	}

	return -1;
}
#endif


/***************************************************************
功能:
	从内存交易路由表中查找收单行通知交易路由
ENTRY:
	type		交易类型
	card_type	卡类型
RETURN:
	0	SUCC 	路由信息=>tran_lo中
	-1	FAIL
****************************************************************/
int select_adv_router(adv_loc, type, card_type)
S_adv_route	*adv_loc;
int		type;
char		*card_type;
{
int 		i;

	if (G_adv_router_tab == NULL) {
		errcall(DEBUG, "通知路由为空!");
		return -1;
	}

	for (i = 0; i < G_adv_router_num; i++){
		if ((G_adv_router_tab[i].tran_type == type) &&
			!(strcmp(G_adv_router_tab[i].card_type, card_type))){
			memcpy(adv_loc, &(G_adv_router_tab[i]),
				sizeof(S_adv_route));
			return 0;
		}
	}

	return -1;
}

/***************************************************************
功能:
	获取程序模板信息
ENTRY:
RETURN:		-1	FAIL
		0	SUCC, RESULT --> pr
****************************************************************/
int select_program_mode( pr )
S_sys_module	*pr;
{
EXEC SQL BEGIN DECLARE SECTION;
S_sys_module	l_sys_module;
EXEC SQL END DECLARE SECTION;

	memcpy(&l_sys_module, pr, sizeof(S_sys_module));

	EXEC SQL SELECT	* INTO :l_sys_module FROM sys_module
	WHERE	module_id = :l_sys_module.module_id;

	if (SQLCODE) {
		errcall(ERROR, "取系统模块表失败[%d][%d]", SQLCODE,
			l_sys_module.module_id );
		return -1;
	}

	del_st_space("sys_module", &l_sys_module);
	memcpy(pr, &l_sys_module, sizeof(S_sys_module));

	return 0;
}

/***************************************************************
计算instr后 num 天的日期

ENTRY:		instr	--- 开始日期,格式: YYYYMMDD
		num	--- 天数( 日期可正,可负 )
RETURN:		outstr  --- 结果日期,格式: YYYYMMDD
		-1	FAIL
		0	SUCC
****************************************************************/
int dateadd( instr, num, outstr )
char	*instr;
int	num;
char	*outstr;
{
char	daystr[40];
long	i_date;
int	i;
	
	memset(daystr, '\0', sizeof(daystr));
	sprintf(daystr, "%2.2s/%2.2s/%4.4s", 
		&instr[4], &instr[6], &instr[0]);
	
	i = rstrdate(daystr, &i_date);
	i_date = i_date + num;
	rdatestr(i_date, daystr);

	sprintf(outstr, "%4.4s%2.2s%2.2s", 
		&daystr[6], &daystr[0], &daystr[3]);

	return 0;
}

/***************************************************************
功能:
	装载相关的联行信息(从所有路由表搜取)
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL
****************************************************************/
int load_bank_tab ()
{
EXEC SQL BEGIN DECLARE SECTION;
S_bank_base	bank_base_item;

⌨️ 快捷键说明

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