📄 db_op.ec
字号:
}
#endif
/***************************************************************
功能:
装载收单行交易路由信息
ENTRY:
RETURN:
0 SUCC
-1 FAIL
****************************************************************/
int load_adv_router_tab ()
{
EXEC SQL BEGIN DECLARE SECTION;
S_adv_route adv_router_item;
EXEC SQL END DECLARE SECTION;
int i;
EXEC SQL SELECT COUNT(*) INTO :G_adv_router_num
FROM adv_route;
if (SQLCODE) {
errcall(ERROR, "取通知交易路由条目数失败[%ld]", SQLCODE);
return -1;
}
if (G_adv_router_num == 0) {
errcall(DEBUG, "通知路由没有配置");
return -1;
}
if (G_adv_router_tab != NULL)
free(G_adv_router_tab);
G_adv_router_tab = (S_adv_route *)malloc(G_adv_router_num*sizeof(S_adv_route));
if (G_adv_router_tab == NULL) {
errcall(ERROR, "申请内存失败!");
return -1;
}
memset(G_adv_router_tab, '\0', sizeof(S_adv_route) * G_adv_router_num);
EXEC SQL DECLARE sel_adv_router CURSOR FOR
SELECT * FROM adv_route;
EXEC SQL OPEN sel_adv_router;
if (SQLCODE) {
errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
free(G_adv_router_tab);
G_adv_router_tab = NULL;
return -1;
}
for(i=0; i<G_adv_router_num; i++) {
EXEC SQL FETCH sel_adv_router INTO :adv_router_item;
if (SQLCODE) {
EXEC SQL CLOSE sel_adv_router;
G_adv_router_num = i;
return 0;
}
del_st_space("adv_route", &adv_router_item);
memcpy(&(G_adv_router_tab[i]), &adv_router_item, sizeof(S_adv_route));
}
EXEC SQL CLOSE sel_adv_router;
return 0;
}
/***************************************************************
功能:
获取某卡的止付信息
ENTRY:
RETURN:
0 SUCC FOUND
-1 FAIL
-2 NOT FOUND
****************************************************************/
int select_hmd ( S_wb_list *hm )
{
EXEC SQL BEGIN DECLARE SECTION;
char card_no[20];
S_wb_list l_wb_list;
EXEC SQL END DECLARE SECTION;
memset(card_no, '\0', sizeof(card_no));
strcpy (card_no, hm->card_no);
EXEC SQL SELECT * INTO :l_wb_list FROM wb_list
WHERE card_no = :card_no;
if (SQLCODE == SQLNOTFOUND){
return -2;
}
if (SQLCODE < 0) {
errcall(ERROR, "查止付名单失败[%ld]", SQLCODE);
return -1;
}
del_st_space("wb_list", &l_wb_list);
memcpy(hm, &l_wb_list, sizeof(S_wb_list));
return 0;
}
/***************************************************************
功能:
根据商户号到商户表中查找该商户的基本信息
ENTRY:
S_merchant_base 包含该商户的商户号
RETURN:
0 SUCC
-1 FAIL
1 NOT FOUND
****************************************************************/
int select_merchant_base ( S_merchant_base *merchant_c )
{
EXEC SQL BEGIN DECLARE SECTION;
char m_id[16];
S_merchant_base l_merchant_base;
EXEC SQL END DECLARE SECTION;
memset(m_id, '\0', sizeof(m_id));
strcpy(m_id, merchant_c->merchant_id);
EXEC SQL SELECT * INTO :l_merchant_base FROM merchant_base
WHERE merchant_id = :m_id;
if (SQLCODE == SQLNOTFOUND) {
return -2;
}
if (SQLCODE < 0) {
errcall(ERROR, "取商户基本信息失败[%ld]", SQLCODE);
return -1;
}
del_st_space("merchant_base", &G_merchant_base);
memcpy(merchant_c, &l_merchant_base, sizeof(S_merchant_base));
return 0;
}
/***************************************************************
功能:
根据商户号, 银行类型, 卡类型到商户受理卡类表中查找该商户
的他行商户编号以及商户类型
ENTRY:
S_merchant_card 包含该商户的商户号和商户受理卡类型
信息的受理卡类表
RETURN:
0 SUCC 受理卡类表信息==>S_merchant_card
-1 FAIL
-2 NOT FOUND
****************************************************************/
int select_merchant_card( S_merchant_card *merchant_card )
{
EXEC SQL BEGIN DECLARE SECTION;
S_merchant_card merch_card;
EXEC SQL END DECLARE SECTION;
memcpy(&merch_card, merchant_card, sizeof(S_merchant_card));
EXEC SQL SELECT * INTO :merch_card FROM merchant_card WHERE
merchant_id = :merch_card.merchant_id and
card_type = :merch_card.card_type;
if (SQLCODE < 0) {
errcall(ERROR, "取商户受理卡类表信息失败[%ld]", SQLCODE);
return -1;
}
if (SQLCODE == SQLNOTFOUND)
return -2;
del_st_space("merchant_card", &merch_card);
memcpy(merchant_card, &merch_card, sizeof(S_merchant_card));
return 0;
}
/***************************************************************
功能:
根据商户号到商户受理卡类资料表中查找该商户的受理卡类信息
ENTRY:
S_merchant 包含该商户的商户号
char *status 保存该商户所受理的卡的使能信息
RETURN:
0 SUCC
-1 FAIL
****************************************************************/
int select_merchant_card_enable( S_merchant_card *merchant_c, char *status )
{
EXEC SQL BEGIN DECLARE SECTION;
S_merchant_card merch_card;
char m_id[20];
char card_type[3];
char bank_type[5];
char sqlstr[256];
EXEC SQL END DECLARE SECTION;
memset(m_id, '\0', sizeof(m_id));
memset(card_type, '\0', sizeof(card_type));
memset(bank_type, '\0', sizeof(bank_type));
memset(sqlstr, '\0', sizeof(sqlstr));
strcpy(m_id, merchant_c->merchant_id);
strcpy( card_type, VISA_CARD);
strcpy( bank_type, VISA_CARD);
EXEC SQL SELECT * into :merch_card FROM merchant_card
WHERE merchant_id = :m_id
AND card_type = :card_type
AND bank_type = :bank_type;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[0] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[0] = '1';
else
status[0] = '0';
}
strcpy( card_type, MC_CARD);
strcpy( bank_type, MC_CARD);
EXEC SQL SELECT * into :merch_card FROM merchant_card
WHERE merchant_id = :m_id
AND card_type = :card_type
AND bank_type = :bank_type;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[1] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[1] = '1';
else
status[1] = '0';
}
strcpy( card_type, AE_CARD);
strcpy( bank_type, AE_CARD);
EXEC SQL SELECT * into :merch_card FROM merchant_card
WHERE merchant_id = :m_id
AND card_type = :card_type
AND bank_type = :bank_type;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[2] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[2] = '1';
else
status[2] = '0';
}
strcpy( card_type, DINER_CARD);
strcpy( bank_type, DINER_CARD);
EXEC SQL SELECT * into :merch_card FROM merchant_card
WHERE merchant_id = :m_id
AND card_type = :card_type
AND bank_type = :bank_type;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[3] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[3] = '1';
else
status[3] = '0';
}
strcpy( card_type, JCB_CARD);
strcpy( bank_type, JCB_CARD);
EXEC SQL SELECT * into :merch_card FROM merchant_card
WHERE merchant_id = :m_id
AND card_type = :card_type
AND bank_type = :bank_type;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[4] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[4] = '1';
else
status[4] = '0';
}
strcpy( card_type, CREDIT_CARD);
sprintf(sqlstr, "select * from merchant_card \
where merchant_id = \'%s\' \
and card_type = \'%s\'",
m_id,
card_type);
EXEC SQL PREPARE sel_merchant_card FROM :sqlstr;
EXEC SQL DECLARE sel_merch_card CURSOR FOR sel_merchant_card;
EXEC SQL OPEN sel_merch_card;
if (SQLCODE < 0) {
errcall(ERROR, "OPEN Select_merch_card err[%ld] [%s]", SQLCODE, sqlstr);
return -1;
}
EXEC SQL FETCH sel_merch_card into :merch_card;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[5] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[5] = '1';
else
status[5] = '0';
}
EXEC SQL CLOSE sel_merch_card;
if (SQLCODE < 0) {
return -1;
}
strcpy( card_type, DEBIT_CARD);
sprintf(sqlstr, "select * from merchant_card \
where merchant_id = \'%s\' \
and card_type = \'%s\'",
m_id,
card_type);
EXEC SQL PREPARE sel_m_card FROM :sqlstr;
EXEC SQL DECLARE sel_mer_card CURSOR FOR sel_m_card;
EXEC SQL OPEN sel_mer_card;
if (SQLCODE < 0) {
errcall(ERROR, "OPEN Select_merch_card err[%ld][%s]", SQLCODE, sqlstr);
return -1;
}
EXEC SQL FETCH sel_mer_card into :merch_card;
if (SQLCODE < 0) {
return -1;
}
else if (SQLCODE == SQLNOTFOUND)
status[6] = '0';
else {
if (merch_card.card_stat[0] == 'Y')
status[6] = '1';
else
status[6] = '0';
}
EXEC SQL CLOSE sel_mer_card;
if (SQLCODE < 0) {
return -1;
}
return 0;
}
/***************************************************************
功能:
将交易记录插入存储转发表
ENTRY:
RETURN:
0 SUCC
-1 FAIL
****************************************************************/
int insert_saf ( S_saf_ls *s )
{
EXEC SQL BEGIN DECLARE SECTION;
S_saf_ls l_saf_ls;
EXEC SQL END DECLARE SECTION;
memcpy(&l_saf_ls, s, sizeof(S_saf_ls));
EXEC SQL INSERT INTO saf_ls VALUES(:l_saf_ls);
if (SQLCODE) {
errcall(ERROR,"插入SAF流水表错(%d)",SQLCODE);
return -1;
}
return 0;
}
/***************************************************************
功能:
根据终端号和商户号取edc终端信息
ENTRY:
RETURN:
0 SUCC
-1 FAIL
-2 NOTFOUND
****************************************************************/
int select_terminal ( S_edc_terminal *t )
{
EXEC SQL BEGIN DECLARE SECTION;
S_edc_terminal l_edc_term;
EXEC SQL END DECLARE SECTION;
memcpy(&l_edc_term, t, sizeof(S_edc_terminal));
EXEC SQL SELECT * INTO :l_edc_term FROM edc_terminal
WHERE terminal_id = :l_edc_term.terminal_id
AND merchant_id = :l_edc_term.merchant_id;
if (SQLCODE == SQLNOTFOUND)
return -2;
if (SQLCODE < 0) {
errcall(ERROR, "取EDC终端信息失败[%ld]", SQLCODE);
return -1;
}
del_st_space("edc_terminal", &l_edc_term);
memcpy(t, &l_edc_term, sizeof(S_edc_terminal));
return 0;
}
/***************************************************************
功能:
根据终端号取edc终端信息
ENTRY:
RETURN:
0 SUCC
-1 FAIL
-2 NOTFOUND
****************************************************************/
int select_terminal_base ( S_edc_terminal *t )
{
EXEC SQL BEGIN DECLARE SECTION;
S_edc_terminal l_edc_term;
EXEC SQL END DECLARE SECTION;
memcpy(&l_edc_term, t, sizeof(S_edc_terminal));
EXEC SQL SELECT * INTO :l_edc_term FROM edc_terminal
WHERE terminal_id = :l_edc_term.terminal_id;
if (SQLCODE == SQLNOTFOUND)
return -2;
if (SQLCODE < 0) {
errcall(ERROR, "取EDC终端信息失败[%ld]", SQLCODE);
return -1;
}
del_st_space("edc_terminal", &l_edc_term);
memcpy(t, &l_edc_term, sizeof(S_edc_terminal));
return 0;
}
/***************************************************************
功能:
更新联行签到状态标志
ENTRY:
RETURN:
0 成功
-1 失败
****************************************************************/
int set_login_stat ( bankid, hostid, log_stat )
$parameter char *bankid;
$parameter char *hostid;
char log_stat;
{
EXEC SQL BEGIN DECLARE SECTION;
char l_stat;
EXEC SQL END DECLARE SECTION;
l_stat = log_stat;
begin_tran();
EXEC SQL UPDATE bank_base set login_stat = :l_stat
WHERE bank_id = :bankid
AND host_id = :hostid;
if (SQLCODE) {
errcall(ERROR, "更新联行[%s(%s)]签到状态标志失败[%ld]!",
bankid,
hostid,
SQLCODE);
rollback_tran();
return -1;
}
commit_tran();
return 0;
}
$ifdef zgx020510_added;
$else;
/***************************************************************
功能:
更新联行网控器联接标志
ENTRY:
RETURN:
0 成功
-1 失败
****************************************************************/
int set_connect_stat( nacip, conn_stat )
char *nacip;
char conn_stat;
{
EXEC SQL BEGIN DECLARE SECTION;
char l_stat;
char bankid[12];
char hostid[3];
char nac_ip[128];
EXEC SQL END DECLARE SECTION;
#ifdef wyz020923_modi
#else
int retry_cnt=0;
#endif
l_stat = conn_stat;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -