qsds_rpt.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 189 行
EC
189 行
/****************************************************
* 借记卡 地市行清算明细报表 qsds_rpt()
* called by gen_qsds() -- in gen_rpt.ec
*
* 最后修改: 周国祥 2001/08/25
****************************************************/
#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 {
double credit_amt;
double debit_amt;
int credit_cnt;
int debit_cnt;
double amt;
int cnt;
} S_qsds;
extern double get_qs_tip();
int qsds_rpt(file, logic_date)
char *file;
$parameter char *logic_date;
{
FILE *fp;
S_qsds total;
char bankid[12];
char hostid[3];
$S_tran_ls ls;
if (!(fp = fopen(file, "w"))) {
daylog(ERROR, "Open %s error!", file);
return(-1); /* File operate error */
}
if (FileHead_qsds(fp, logic_date, bankid, hostid)) {
fclose(fp);
return(-2); /* Database operate error */
}
memset(&total, 0, sizeof(S_qsds));
$ifdef zgx010824_modi;
$declare qs_cur cursor for
select * from posls
where sd_bankid != fk_bankid
and trans_type in (2,3,4,5,8,11)
and res_flag = 'O'
and manual_flag = 'N'
and ret_code like '00%'
and local_date = :logic_date
and card_type = '01'
order by card_no;
$else;
$declare qs_cur cursor for
select * from cur_tran_ls
where acq_bank_id != iss_bank_id
and tran_type in (1,2,3,5,6,7,8,9,10,14)
and saf_flag = '0'
and tran_flag = '0'
and manual_flag = 'N'
and resp_code like '00%'
and snd_settle_date = :logic_date
and card_type = '02'
order by card_no;
$endif;
$open qs_cur;
if (SQLCODE) {
daylog(ERROR, "Open qs_cur error![%d]", SQLCODE);
fclose(fp);
return(-2);
}
while (1) {
$fetch qs_cur into :ls;
if (SQLCODE == 100) break;
if (SQLCODE) {
daylog(ERROR, "Fetch qs_cur error![%d]", SQLCODE);
$close qs_cur;
fclose(fp);
return(-2);
}
del_st_space("tran_ls", &ls);
FileDetail_qsds(fp, ls, &total, bankid/**, hostid*/);
}
$close qs_cur;
FileTail_qsds(fp, &total);
fclose(fp);
return(0);
}
int FileHead_qsds(FILE *fp, char *logic_date, char *bankid, char *hostid)
{
char date[11], time[9];
$S_sys_param sys;
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, "%53s中国银行BTS系统借记卡\n", " ");
fprintf(fp, "%53s地市行清算明细报表\n", " ");
str2date(logic_date1, logic_date, "/");
fprintf(fp, "BTS-901%99s清算逻辑日: %s\n", " ", logic_date1);
get_bank_name(sys.bank_id, sys.host_id, bank_name);
fprintf(fp, "%-5.5s%-104s%s %s\n", sys.bank_id, bank_name, date, time);
fprintf(fp, "--------------------------------------------------------------------------------------------------------------------------------\n");
fprintf(fp, "%-21s %-8s %14s %6s %14s %6s %-15s %-8s %-6s %-6s %-10s %-8s\n", "卡 号", "交易类型", "交易金额", "手续费", "清算金额", "授权码", "商户号", "EDC 号", "收单行", "发卡行", "交易日期", "交易时间");
fprintf(fp, "--------------------------------------------------------------------------------------------------------------------------------\n");
strcpy(bankid, sys.bank_id);
strcpy(hostid, sys.host_id);
return(0);
}
int FileDetail_qsds(FILE *fp, S_tran_ls ls, S_qsds *ptotal, char *center)
{
double tip;
char buf[16];
int flag;
char tmp_date[11]; /* YYYY/MM/DD */
char tmp_time[9]; /* hh:mm:ss */
tip = get_qs_tip(ls);
str2date(tmp_date, ls.local_sys_date, "/");
str2time(tmp_time, ls.local_sys_time, ":");
type2buf(ls.tran_type, buf);
fprintf(fp, "%-6.6s-%-4.4s-%-9.9s %-8s %14.2lf %6.2lf %14.2lf %6s %-15.15s %-8.8s %-6.6s %-6.6s %-10s %-8s\n", ls.card_no, ls.card_no + 6, ls.card_no + 10, buf, ls.tran_amt, fabs(tip), ls.tran_amt + tip, ls.auth_no, ls.merchant_id, ls.terminal_id, ls.acq_bank_id, ls.iss_bank_id, tmp_date, tmp_time);
flag = strcmp(ls.acq_bank_id, center);
switch (ls.tran_type) {
case PURCHASE:
case WITHDRAWAL:
case CONFIRM:
case TRANS_OUT:
if (flag) {
ptotal->debit_cnt++;
ptotal->debit_amt += ls.tran_amt + tip;
ptotal->cnt++;
ptotal->amt -= ls.tran_amt + tip;
} else {
ptotal->credit_cnt++;
ptotal->credit_amt += ls.tran_amt + tip;
ptotal->cnt++;
ptotal->amt += ls.tran_amt + tip;
}
break;
case REFUND:
case DEPOSIT:
if (flag) {
ptotal->credit_cnt++;
ptotal->credit_amt += ls.tran_amt + tip;
ptotal->cnt++;
ptotal->amt += ls.tran_amt + tip;
} else {
ptotal->debit_cnt++;
ptotal->debit_amt += ls.tran_amt + tip;
ptotal->cnt++;
ptotal->amt -= ls.tran_amt + tip;
}
break;
}
return(0);
}
int FileTail_qsds(FILE *fp, S_qsds *ptotal)
{
fprintf(fp, "--------------------------------------------------------------------------------------------------------------------------------\n");
if (ptotal->cnt)
fprintf(fp, "%s %s %14.2lf %s %6d %s %14.2lf %s %6d %s %14.2lf %s %6d\n\n", "总 计", "贷记金额", ptotal->credit_amt, "贷记笔数", ptotal->credit_cnt, "借记金额", ptotal->debit_amt, "借记笔数", ptotal->debit_cnt, "轧差金额", ptotal->amt, "笔数", ptotal->cnt);
return(0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?