bank_rpt.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 685 行 · 第 1/2 页
EC
685 行
/****************************************************
* 商户交易入帐汇总(bank_shdz)
*
* 最后修改: 周国祥 2001/08/16
****************************************************/
#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 merch[16];
char name[31];
double credit;
double debit;
} M_DATA;
typedef struct {
long num;
double amt;
double tip;
long total_num;
double total_amt;
double total_tip;
} DATA;
extern double in_out();
extern char G_cen_bankid[12];
extern char G_bankid[12];
int bank_shdz(sy, s_date, e_date)
S_sys_param sy;
$parameter char *s_date;
$parameter char *e_date;
{
M_DATA m_data;
DATA c_data, d_data;
FILE *c_hz = NULL, *c_mx = NULL;
FILE *c_bd = NULL, *c_yd = NULL;
FILE *d_hz = NULL, *d_mx = NULL;
FILE *d_bd = NULL, *d_yd = NULL;
$char name[32], sql[512];
$char sign_bankid[12];
$double credit, debit;
$S_tran_ls ls;
double tip;
char cre_hz[80], cre_mx[80], cre_bd[80], cre_yd[80];
char deb_hz[80], deb_mx[80], deb_bd[80], deb_yd[80];
char date[11], time[9], path[64];
int ret=0;
daylog(ERROR, "G_bankid[%s]", G_bankid);
$ifdef wyz_mod_020408;
if (!strcmp(s_date, e_date)) {
$select max(snd_settle_date) into :name from cur_settle_ls;
if (SQLCODE < 0) {
daylog(ERROR, "Fetch cur_settle_ls error!");
return(-1);
}
if (SQLCODE == 100) name[0] = 0;
DelSpace(name);
if (strcmp(s_date, name))
strcpy(name, "his_settle_ls");
else
strcpy(name, "cur_settle_ls");
} else
strcpy(name, "his_settle_ls");
$else;
if ((ret = check_which_table(s_date, e_date)) == 0) {
strcpy(name, "cur_settle_ls");
}
else if (ret == 1) {
strcpy(name, "his_settle_ls");
}
else {
daylog(ERROR, "判断使用当前清算流水表或历史清算流水表失败!");
return -1;
}
$endif;
getdatef(date, "");
gettimef(time, "");
strcpy(path, getenv("WORKDIR"));
sprintf(cre_hz, "%s/prt/%s/credit.mer_dz_hz", path, G_bankid);
sprintf(cre_mx, "%s/prt/%s/credit.mer_dz_mx", path, G_bankid);
sprintf(deb_hz, "%s/prt/%s/debit.mer_dz_hz", path, G_bankid);
sprintf(deb_mx, "%s/prt/%s/debit.mer_dz_mx", path, G_bankid);
sprintf(cre_bd, "%s/prt/%s/credit.mer_bd_mx", path, G_bankid);
sprintf(deb_bd, "%s/prt/%s/debit.mer_bd_mx", path, G_bankid);
sprintf(cre_yd, "%s/prt/%s/credit.mer_yd_mx", path, G_bankid);
sprintf(deb_yd, "%s/prt/%s/debit.mer_yd_mx", path, G_bankid);
c_hz = fopen(cre_hz, "w");
d_hz = fopen(deb_hz, "w");
c_mx = fopen(cre_mx, "w");
d_mx = fopen(deb_mx, "w");
c_bd = fopen(cre_bd, "w");
d_bd = fopen(deb_bd, "w");
c_yd = fopen(cre_yd, "w");
d_yd = fopen(deb_yd, "w");
if (!c_hz || !d_hz || !c_mx || !d_mx ||
!c_bd || !d_bd || !c_yd || !d_yd) {
daylog(ERROR, "Open file for write error!");
if (c_hz) fclose(c_hz);
if (d_hz) fclose(d_hz);
if (c_mx) fclose(c_mx);
if (d_mx) fclose(d_mx);
if (c_bd) fclose(c_bd);
if (d_bd) fclose(d_bd);
if (c_yd) fclose(c_yd);
if (d_yd) fclose(d_yd);
return(-1);
}
FileHead_bank_shhz(c_hz, "信用卡", sy, s_date, e_date, date, time);
FileHead_bank_shhz(d_hz, "借记卡", sy, s_date, e_date, date, time);
FileHead_bank_mx(c_bd, "信用卡", "本地卡", sy, s_date, e_date,
date, time);
FileHead_bank_mx(d_bd, "借记卡", "本地卡", sy, s_date, e_date,
date, time);
FileHead_bank_mx(c_yd, "信用卡", "异地卡", sy, s_date, e_date,
date, time);
FileHead_bank_mx(d_yd, "借记卡", "异地卡", sy, s_date, e_date,
date, time);
#ifdef zgx010816_note
/* tran_type原10(预授),6(撤消)现为4,12 */
/* 原res_flag为冲正标志(O正常C已撤消R已冲正) = '0' */
/* 现tran_flag为 交易标志(0正常1已撤消2已确认3已冲正....
saf_flag为冲正标志。参加入账汇总的交易应为:
不是撤消或预授权、未被冲正的、正常交易或“已退货”交易 */
#endif
#ifdef wyz_mod_020131
sprintf(sql, "select * from %s where acq_bank_id = '%s' and terminal_id not like 'TRM%%' and mcc != '6010' and tran_flag in ('0','4') and saf_flag = '0' and tran_type not in (4, 12) and card_type like '0%%' and snd_settle_date <= '%s' and snd_settle_date >= '%s' order by merchant_id, card_no", name, sy.bank_id, s_date, e_date);
#else
sprintf(sql, "select * from %s \
where acq_bank_id = '%s' \
and mcc != '6010' \
and card_type like '0%%' \
and snd_settle_date <= '%s' \
and snd_settle_date >= '%s' \
order by merchant_id, terminal_id, batch_no, invoice_no",
name, sy.bank_id, s_date, e_date);
#endif
$prepare s_sql from :sql;
$declare s_cur cursor for s_sql;
$open s_cur;
if (SQLCODE) {
daylog(ERROR, "Open s_cur error![%d]", SQLCODE);
fclose(c_hz);
fclose(d_hz);
fclose(c_mx);
fclose(d_mx);
fclose(c_bd);
fclose(d_bd);
fclose(c_yd);
fclose(d_yd);
return(-1);
}
memset(&m_data, 0, sizeof(M_DATA));
memset(&c_data, 0, sizeof(DATA));
memset(&d_data, 0, sizeof(DATA));
FetBufSize = 32000;
while (1) {
$fetch s_cur into :ls;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch s_cur error![%d]", SQLCODE);
fclose(c_hz);
fclose(d_hz);
fclose(c_mx);
fclose(d_mx);
fclose(c_bd);
fclose(d_bd);
fclose(c_yd);
fclose(d_yd);
$close s_cur;
return(-1);
}
del_st_space("tran_ls", &ls);
if (strcmp(ls.merchant_id, m_data.merch)) {
if (m_data.merch[0]) {
FileDetail_bank_shhz(c_hz, m_data, c_data);
FileDetail_bank_shhz(d_hz, m_data, d_data);
FileSubTail_bank_shmx(c_mx, c_data);
FileSubTail_bank_shmx(d_mx, d_data);
}
c_data.num = 0;
c_data.amt = 0.0;
c_data.tip = 0.0;
d_data.num = 0;
d_data.amt = 0.0;
d_data.tip = 0.0;
memset(&m_data, 0, sizeof(M_DATA));
$select merchant_cname, sign_bank_id
into :name, :sign_bankid from merchant_base
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(ERROR, "Get %s error!", ls.merchant_id);
#ifdef wyz020427_mod
#else
if (strcmp(G_cen_bankid, G_bankid))
continue;
else
#endif
strcpy(m_data.name, "UNKNOWN");
} else {
DelSpace(name);
#ifdef wyz020427_mod
#else
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
if (strcmp(G_bankid, sign_bankid))
continue;
}
#endif
strcpy(m_data.name, name);
}
$ifdef zgx010816_modi;
$select rmbc_rebate, debit_rebate
into :credit, :debit from shop_card
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(ERROR, "Get %s error!", ls.merchant_id);
m_data.credit = 0.0;
m_data.debit = 0.0;
} else {
m_data.credit = credit / 100;
m_data.debit = debit / 100;
}
$else;
$select card_discount
into :credit from merchant_card
where merchant_id = :ls.merchant_id
and card_type = '01'
and bank_type = '04';
if (SQLCODE) {
daylog(ERROR, "Get credit discount of %s error!", ls.merchant_id);
m_data.credit = 0.0;
} else {
m_data.credit = credit * 0.01;
}
$select card_discount
into :debit from merchant_card
where merchant_id = :ls.merchant_id
and card_type = '02'
and bank_type = '04';
if (SQLCODE) {
daylog(ERROR, "Get debit discount of %s error!", ls.merchant_id);
m_data.debit = 0.0;
} else {
m_data.debit = debit * 0.01;
}
$endif;
strcpy(m_data.merch, ls.merchant_id);
}
if (memcmp(ls.card_type, CREDIT_CARD, 2)) {
tip = in_out(ls.tran_amt * m_data.debit);
d_data.num++;
d_data.amt += ls.tran_amt;
d_data.tip += tip;
d_data.total_num++;
d_data.total_amt += ls.tran_amt;
d_data.total_tip += tip;
if (d_data.total_num == 1)
FileHead_bank_shmx(d_mx, "借记卡", sy,
s_date, e_date, date, time);
if (d_data.num == 1)
FileSubHead_bank_shmx(d_mx, m_data);
FileDetail_bank_shmx(d_mx, &ls, tip);
if (strcmp(ls.iss_bank_id, sy.bank_id))
FileDetail_bank_mx(d_yd, &ls);
else
FileDetail_bank_mx(d_bd, &ls);
} else {
tip = in_out(ls.tran_amt * m_data.credit);
c_data.num++;
c_data.amt += ls.tran_amt;
c_data.tip += tip;
c_data.total_num++;
c_data.total_amt += ls.tran_amt;
c_data.total_tip += tip;
if (c_data.total_num == 1)
FileHead_bank_shmx(c_mx, "信用卡", sy,
s_date, e_date, date, time);
if (c_data.num == 1)
FileSubHead_bank_shmx(c_mx, m_data);
FileDetail_bank_shmx(c_mx, &ls, tip);
if (strcmp(ls.iss_bank_id, sy.bank_id))
FileDetail_bank_mx(c_yd, &ls);
else
FileDetail_bank_mx(c_bd, &ls);
}
}
$close s_cur;
FileDetail_bank_shhz(c_hz, m_data, c_data);
FileDetail_bank_shhz(d_hz, m_data, d_data);
FileSubTail_bank_shmx(c_mx, c_data);
FileSubTail_bank_shmx(d_mx, d_data);
FileTail_bank_shhz(c_hz, c_data);
FileTail_bank_shhz(d_hz, d_data);
FileTail_bank_shmx(c_mx, c_data);
FileTail_bank_shmx(d_mx, d_data);
FileTail_bank_mx(c_bd);
FileTail_bank_mx(d_bd);
FileTail_bank_mx(c_yd);
FileTail_bank_mx(d_yd);
fclose(c_hz);
fclose(d_hz);
fclose(c_mx);
fclose(d_mx);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?