📄 net_settle.ec
字号:
t_amt += amt;
flag = 1;
}
t_amt *= 100;
sprintf(str + 22, "%06d%016.0f", t_num, t_amt);
if (get_total(ARG, REFUND, 0, &num, &amt)) return(-1);
t_num = num;
t_amt = amt;
if (get_total(ARG, DEPOSIT, 0, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
if (flag) {
flag = 2;
if (get_total(ARG, PURCHASE, 0, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
if (get_total(ARG, WITHDRAWAL, 0, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
if (get_total(ARG, CONFIRM, 0, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
flag = 1;
}
t_amt *= 100;
sprintf(str + 44, "%06d%016.0f", t_num, t_amt);
if (get_total(ARG, POS_VOID, REFUND, &num, &amt)) return(-1);
t_num = num;
t_amt = amt;
if (get_total(ARG, POS_VOID, DEPOSIT, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
if (flag) {
flag = 2;
if (get_total(ARG, POS_VOID, PURCHASE, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
if (get_total(ARG, POS_VOID, WITHDRAWAL, &num, &amt))return(-1);
t_num += num;
t_amt += amt;
if (get_total(ARG, POS_VOID, CONFIRM, &num, &amt)) return(-1);
t_num += num;
t_amt += amt;
flag = 1;
}
t_amt *= 100;
sprintf(str + 66, "%06d%016.0f", t_num, t_amt);
if (get_total(ARG, TRANS_OUT, 0, &num, &amt)) return(-1);
t_num = num;
/*================== WuBin 2001-8-17 18:49 ======Start==============
if (get_total(ARG, AGENT, 0, &num, &amt)) return(-1);
t_num += num;
===========================2001-8-17 18:49=======End==============*/
if (flag) {
flag = 2;
if (get_total(ARG, TRANS_OUT, 0, &num, &amt)) return(-1);
t_num += num;
/*================== WuBin 2001-8-17 18:49 ======Start==============
if (get_total(ARG, AGENT, 0, &num, &amt)) return(-1);
t_num += num;
flag = 1;
===========================2001-8-17 18:49=======End==============*/
}
sprintf(str + 88, "%06d", t_num);
if (get_total(ARG, POS_VOID, TRANS_OUT, &num, &amt)) return(-1);
t_num = num;
/*================== WuBin 2001-8-17 18:49 ======Start==============
if (get_total(ARG, POS_VOID, AGENT, &num, &amt)) return(-1);
t_num += num;
===========================2001-8-17 18:49=======End==============*/
if (flag) {
flag = 2;
if (get_total(ARG, POS_VOID, TRANS_OUT, &num, &amt)) return(-1);
t_num += num;
/* if (get_total(ARG, POS_VOID, AGENT, &num, &amt)) return(-1);
t_num += num; */
flag = 1;
}
sprintf(str + 94, "%06d", t_num);
if (get_total(ARG, AUTH_PUR, 0, &num, &amt)) return(-1);
t_num = num;
if (get_total(ARG, PRE_AUTH, 0, &num, &amt)) return(-1);
t_num += num;
if (flag) {
flag = 2;
if (get_total(ARG, AUTH_PUR, 0, &num, &amt)) return(-1);
t_num += num;
if (get_total(ARG, PRE_AUTH, 0, &num, &amt)) return(-1);
t_num += num;
flag = 1;
}
sprintf(str + 100, "%06d", t_num);
strcpy(settlement, str);
return(0);
}
/*
* 统计交易总笔数总金额
*/
int get_total(flag, bankid, hostid, logic_date, tran_type, old_type, pnum, pamt)
int flag;
$parameter char *bankid;
$parameter char *hostid;
$parameter char *logic_date;
$parameter int tran_type;
$parameter int old_type;
int *pnum;
double *pamt;
{
$int num;
$short indi;
$double amt;
/*
* WHERE ((source_bankid = :bankid)
* OR (target_bankid = :bankid))
* 该行发送或接收的交易
*/
switch (flag) {
case 0: /* 主机对帐 */
EXEC SQL SELECT count(*), sum(tran_amt)
INTO :num:indi, :amt
FROM cur_tran_ls
WHERE tran_type = :tran_type
AND void_tran_type = :old_type
AND resp_code like '00%'
AND saf_flag = '0'
AND manual_flag = 'N'
AND ( acq_bank_id = :bankid or
acq_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid) or
iss_bank_id = :bankid or
iss_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid) )
AND local_logic_date = :logic_date
AND card_type = '02'; /* 借记卡 */
break;
case 1: /* 分行对帐 */
EXEC SQL SELECT count(*), sum(tran_amt)
INTO :num:indi, :amt
FROM cur_tran_ls
WHERE (acq_bank_id = :bankid or
acq_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid))
AND tran_type = :tran_type
AND void_tran_type = :old_type
AND resp_code like '00%'
AND saf_flag = '0'
AND manual_flag = 'N'
AND local_logic_date = :logic_date
AND card_type = '02'; /* 借记卡 */
break;
case 2:
EXEC SQL SELECT count(*), sum(tran_amt)
INTO :num:indi, :amt
FROM cur_tran_ls
WHERE (iss_bank_id = :bankid or
iss_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid))
AND tran_type = :tran_type
AND void_tran_type = :old_type
AND resp_code like '00%'
AND saf_flag = '0'
AND manual_flag = 'N'
AND local_logic_date = :logic_date
AND card_type = '02'; /* 借记卡 */
break;
}
if (SQLCODE < 0) {
daylog(ERROR, "Get total error[%d]!", SQLCODE);
return(-1);
}
if ((indi == -1) || (num == 0)) {
num = 0;
amt = 0;
}
*pnum = num;
*pamt = amt;
return(0);
}
/*
* 更新对帐标志
*/
int update_flag(flag, bankid, hostid, logic_date, value)
int flag;
$parameter char *bankid;
$parameter char *hostid;
$parameter char *logic_date;
$parameter char value;
{
$S_sys_param sys;
$char cur_date[11];
getdatef(cur_date, "");
$select * into :sys from sys_param;
if (SQLCODE) {
daylog(ERROR, "Update flag error![%s][%s]", bankid, logic_date);
return(-1);
}
del_st_space("sys_param", &sys);;
if (flag) { /* 网间对帐 */
begin_tran();
/*
* WHERE ((source_bankid = :bankid)
* 该行或该行下属行发送出的交易
*/
$UPDATE cur_tran_ls
SET snd_settle_flag = :value,
snd_settle_date = :cur_date
WHERE (acq_bank_id = :bankid or
acq_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid))
AND local_logic_date = :logic_date
AND card_type = '02'; /* 借记卡 */
if (SQLCODE < 0) {
daylog(ERROR, "Update snd_settle_flag error![%s-%s][%s][%d]",
bankid, hostid, logic_date, SQLCODE);
rollback_tran();
return(-1);
}
/*
* WHERE target_bankid = :bankid
* 该行或下属行接收到的交易
*/
$UPDATE cur_tran_ls
SET rcv_settle_flag = :value,
rcv_settle_date = :cur_date
WHERE (iss_bank_id = :bankid or
iss_bank_id in (select bank_id from bank_info
where adm_bank_id = :bankid
and adm_host_id = :hostid))
AND local_logic_date = :logic_date
AND card_type = '02';
if (SQLCODE < 0) {
daylog(ERROR, "Update snd_settle_flag error![%s-%s][%s][%d]",
bankid, hostid, logic_date, SQLCODE);
rollback_tran();
return(-1);
}
commit_tran();
} else { /* 主机对帐 */
$UPDATE cur_tran_ls
SET rcv_settle_flag = :value,
rcv_settle_date = :cur_date
WHERE iss_bank_id = :bankid
AND rcv_logic_date = :logic_date
AND card_type = '02';
if (SQLCODE < 0) {
daylog(ERROR, "Update up_flag error![%s][%s][%d]",
bankid, logic_date, SQLCODE);
return(-1);
}
}
return(0);
}
/*
* 将对帐数据插入网间对帐表(net_settle)
*/
int insert_settle(ppub, pstl, bankid, hostid, logic_date)
PUBLIC *ppub;
char *pstl;
char *bankid;
char *hostid;
char *logic_date;
{
$S_net_settle se;
char buf[128];
memset((void *)&se, 0, sizeof(S_net_settle));
strcpy(se.snd_bank_id, bankid);
strcpy(se.snd_host_id, hostid);
strcpy(se.logic_date, logic_date);
getdatef(se.check_date, "");
gettimef(se.check_time, "");
strcpy(se.resp_code, ppub->Resp_code);
if (!memcmp(se.resp_code, "00", 2) || !memcmp(se.resp_code, "95", 2)) {
sprintf(buf, "%6.6s", ppub->Add_data);
se.n_cre_cnt = atoi(buf);
sprintf(buf, "%16.16s", ppub->Add_data+6);
se.n_cre_amt = atof(buf)/100;
sprintf(buf, "%6.6s", ppub->Add_data+22);
se.n_void_cre_cnt = atoi(buf);
sprintf(buf, "%16.16s", ppub->Add_data+28);
se.n_void_cre_amt = atof(buf)/100;
sprintf(buf, "%6.6s", ppub->Add_data+44);
se.n_deb_cnt = atoi(buf);
sprintf(buf, "%16.16s", ppub->Add_data+50);
se.n_deb_amt = atof(buf)/100;
sprintf(buf, "%6.6s", ppub->Add_data+66);
se.n_void_deb_cnt = atoi(buf);
sprintf(buf, "%16.16s", ppub->Add_data+72);
se.n_void_deb_amt = atof(buf)/100;
sprintf(buf, "%6.6s", ppub->Add_data+88);
se.n_trans_cnt = atoi(buf);
sprintf(buf, "%6.6s", ppub->Add_data+94);
se.n_void_trans_cnt = atoi(buf);
sprintf(buf, "%6.6s", ppub->Add_data+100);
se.n_auth_cnt = atoi(buf);
#ifdef zgx010820_added
#else
sprintf(buf, "%16.16s", ppub->Add_data+106);
se.n_trans_amt = atof(buf)/100;
sprintf(buf, "%16.16s", ppub->Add_data+122);
se.n_void_trans_amt = atof(buf)/100;
sprintf(buf, "%6.6s", ppub->Add_data+128);
se.n_void_trans_cnt = atoi(buf);
#endif
sprintf(buf, "%6.6s", pstl);
se.l_cre_cnt = atoi(buf);
sprintf(buf, "%16.16s", pstl+6);
se.l_cre_amt = atof(buf)/100;
sprintf(buf, "%6.6s", pstl+22);
se.l_void_cre_cnt = atoi(buf);
sprintf(buf, "%16.16s", pstl+28);
se.l_void_cre_amt = atof(buf)/100;
sprintf(buf, "%6.6s", pstl+44);
se.l_deb_cnt = atoi(buf);
sprintf(buf, "%16.16s", pstl+50);
se.l_deb_amt = atof(buf)/100;
sprintf(buf, "%6.6s", pstl+66);
se.l_void_deb_cnt = atoi(buf);
sprintf(buf, "%16.16s", pstl+72);
se.l_void_deb_amt = atof(buf)/100;
sprintf(buf, "%6.6s", pstl+88);
se.l_trans_cnt = atoi(buf);
sprintf(buf, "%6.6s", pstl+94);
se.l_void_trans_cnt = atoi(buf);
sprintf(buf, "%6.6s", pstl+100);
se.l_auth_cnt = atoi(buf);
#ifdef zgx010820_added
#else
sprintf(buf, "%16.16s", pstl+106);
se.l_trans_amt = atof(buf)/100;
sprintf(buf, "%16.16s", pstl+122);
se.l_void_trans_amt = atof(buf)/100;
sprintf(buf, "%6.6s", pstl+128);
se.l_void_trans_cnt = atoi(buf);
#endif
}
$insert into net_settle values(:se);
if (SQLCODE) {
daylog(ERROR, "Insert to net_settle error![%d]", SQLCODE);
return(-1);
}
return(0);
}
/*
* 获取借记卡直联模块的模块号
*/
int getid(cen_bankid, cen_hostid)
$parameter char *cen_bankid, *cen_hostid;
{
int ret = DEBIT_MODULE_ID; /* 缺省模块号为79 */
$int module_id;
$declare deb_cur cursor for
select module_id from card_route
where rcv_bank_id = :cen_bankid
and rcv_host_id = :cen_hostid
and card_type = '02'
order by module_id;
$open deb_cur;
if (SQLCODE)
daylog(ERROR, "Open deb_cur error![%d]", SQLCODE);
else {
$fetch deb_cur into :module_id;
if (SQLCODE)
daylog(ERROR, "Fetch deb_cur error![%d]", SQLCODE);
else
ret = module_id;
}
return(ret);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -