📄 hz_rpt.ec
字号:
/****************************************************
* 回扣利益分配报表 hz_rpt()
* called by gen_hr() -- in gen_rpt.ec
*
* 最后修改: 周国祥 2001/08/24
****************************************************/
#include <stdio.h>
#include <math.h>
#include "all.h"
#include "macro_def.h"
$include "db_struct.h"
$include sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
typedef struct {
char bankid[12];
char hostid[3];
int cnt;
double amt;
double tip;
} S_reb;
extern int get_son();
extern int check_son();
extern double in_out(double);
void get_tip(pls, p_sd, p_fk)
$parameter S_tran_ls *pls;
double *p_sd;
double *p_fk;
{
switch (pls->tran_type) {
case PURCHASE:
case TRANS_OUT:
/****
case AGENT:
****/
case CONFIRM:
*p_sd = in_out(0.005 * pls->tran_amt);
*p_fk = 0.3 - *p_sd;
if (*p_fk > 0) *p_fk = 0;
break;
case WITHDRAWAL:
if (pls->terminal_id[0] == '9') {
*p_sd = 1.5;
*p_fk = 0;
} else {
if (pls->tran_amt < 101) {
*p_sd = 0.5;
*p_fk = - 0.2;
} else {
*p_sd = in_out(0.005 * (pls->tran_amt / 1.01));
*p_fk = 0.3 - *p_sd;
if (*p_fk > 0) *p_fk = 0;
}
}
break;
}
}
void add_tip(S_reb *preb, S_tran_ls ls, double tip)
{
preb->cnt++;
preb->amt += ls.tran_amt;
preb->tip += tip;
}
/*
* 回扣利益分配表
* called by gen_hr()(in gen_rpt.ec)
*/
int hz_rpt(filename, logic_date, bankid, hostid)
char *filename;
$parameter char *logic_date;
char *bankid, *hostid;
{
FILE *fp;
double sd, fk;
int flag1, flag2, i, j, num = 0;
S_reb *reb = NULL, mid;
char son_bankid[48][12];
char son_hostid[48][3];
$S_tran_ls ls;
void *tmp;
/* get_son() defined in net_stat.ec */
if (get_son(bankid, hostid, son_bankid, son_hostid) < 0)
return(-2);
if (!(fp = fopen(filename, "w"))) {
daylog(ERROR, "Open %s for write error!", filename);
return(-1); /* File operate error */
}
if (FileHead_HR(fp, logic_date)) {
fclose(fp);
return(-2); /* Database operate error */
}
$ifdef zgx010824_modi;
$declare hz_cur cursor for
select * from cur_tran_ls
where acq_bank_id != iss_bank_id
and tran_type in (2,4,8,9,11)
and res_flag = 'O'
and refunded = 'N'
and card_type = '01'
and manual_flag = 'N'
and ret_code like '00%'
and local_date = :logic_date;
$else;
$declare hz_cur cursor for
select * from cur_tran_ls
where acq_bank_id != iss_bank_id
and tran_type in (1,3,6,5) /* 消费 取现 转出 (代收费) 确认 */
and saf_flag = '0' /* 冲正标志为'正常' */
and tran_flag not in ('2','3','4') /* not 已撤消已冲正已退货 */
and card_type = '02' /* 借记卡 */
and manual_flag = 'N'
and resp_code like '00%'
and snd_settle_date = :logic_date;
$endif;
$open hz_cur;
if (SQLCODE) {
daylog(ERROR, "Open hz_cur error![%d]", SQLCODE);
fclose(fp);
return(-2); /* Database operate error */
}
while (1) {
$fetch hz_cur into :ls;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch hz_cur error![%d]", SQLCODE);
free((void *)reb);
$close hz_cur;
fclose(fp);
return(-2); /* Database operate error */
}
del_st_space("tran_ls", &ls);
/* check_son() defined in net_stat.ec */
if (!check_son(ls.acq_bank_id, ls.acq_host_id, son_bankid, son_hostid)) {
strcpy(ls.acq_bank_id, BOC_CENTER /*"0004"*/);
strcpy(ls.acq_host_id, "00");
}
if (!check_son(ls.iss_bank_id, "00", son_bankid, son_hostid)) {
strcpy(ls.iss_bank_id, BOC_CENTER /*"0004"*/);
}
get_tip(&ls, &sd, &fk);
flag1 = flag2 = 1;
for (i = 0; (flag1 || flag2) && (i < num); i++) {
if (flag1 && !strcmp(reb[i].bankid, ls.acq_bank_id)) {
add_tip(reb + i, ls, sd);
flag1 = 0;
}
if (flag2 && !strcmp(reb[i].bankid, ls.iss_bank_id)) {
add_tip(reb + i, ls, fk);
flag2 = 0;
}
}
if (flag1 || flag2) {
tmp = realloc((void *)reb,
(num + flag1 + flag2) * sizeof(S_reb));
if (!tmp) {
daylog(ERROR, "Memory allocate error!");
free((void *)reb);
$close hz_cur;
fclose(fp);
return(-1); /* Memory operate error */
}
reb = (S_reb *)tmp;
memset((void *)(reb + num), 0,
(flag1 + flag2) * sizeof(S_reb));
}
if (flag1) {
strcpy(reb[num].bankid, ls.acq_bank_id);
strcpy(reb[num].hostid, ls.acq_host_id);
add_tip(reb + num, ls, sd);
}
if (flag2) {
strcpy(reb[num + flag1].bankid, ls.iss_bank_id);
strcpy(reb[num + flag1].hostid, ls.acq_host_id);
add_tip(reb + num + flag1, ls, fk);
}
num += flag1 + flag2;
}
$close hz_cur;
for (i = 0; i < num - 1; i++) {
flag1 = flag2 = 0;
for (j = 1; j < num - i; j++) {
if (strcmp(reb[flag1].bankid, reb[j].bankid) > 0)
flag2 = 1;
else flag1 = j;
}
if (!flag2) break;
flag2 = num - i - 1;
if (flag1 != flag2) {
memcpy(&mid, reb + flag1, sizeof(S_reb));
memcpy(reb + flag1, reb + flag2, sizeof(S_reb));
memcpy(reb + flag2, &mid, sizeof(S_reb));
}
}
memset((void *)&mid, 0, sizeof(S_reb));
for (i = 0; i < num; i++) {
mid.cnt += reb[i].cnt;
mid.amt += reb[i].amt;
mid.tip += reb[i].tip;
FileDetail_HR(fp, reb + i);
}
free((void *)reb);
FileTail_HR(fp, &mid);
fclose(fp);
return(0);
}
int FileHead_HR(FILE *fp, char *logic_date)
{
$S_sys_param sys;
char date[11], time[9];
char bank_name[128];
char logic_date1[11]; /* YYYY/MM/DD */
$select * into :sys from sys_param;
if (SQLCODE) {
daylog(ERROR, "Select sys_param error!");
return(-1);
}
del_st_space("sys_param", &sys);
getdatef(date, "/");
gettimef(time, ":");
fprintf(fp, "%25s中国银行BTS系统\n", " ");
fprintf(fp, "%25s回扣利益分配报表\n", " ");
str2date(logic_date1, logic_date, "/");
fprintf(fp, "BTS-503%36s清算逻辑日: %s\n", " ", logic_date1);
get_bank_name(sys.bank_id, sys.host_id, bank_name);
fprintf(fp, "%-5.5s%-41s%s %s\n", sys.bank_id, bank_name, date, time);
fprintf(fp, "-----------------------------------------------------------------\n");
fprintf(fp, "%s %18s %18s %18s\n", "联行行号", "交易总笔数", "交易总金额", "应付手续费");
fprintf(fp, "-----------------------------------------------------------------\n");
return(0);
}
int FileDetail_HR(FILE *fp, S_reb *preb)
{
fprintf(fp, "%-8.8s %18ld %18.2lf %18.2lf\n",
preb->bankid, preb->cnt, preb->amt, preb->tip);
return(0);
}
int FileTail_HR(FILE *fp, S_reb *preb)
{
fprintf(fp, "-----------------------------------------------------------------\n");
if (preb->cnt) fprintf(fp, "%-8.8s %18ld %18.2lf %18.2lf\n", "合 计", preb->cnt / 2, preb->amt / 2, - preb->tip);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -