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 + -
显示快捷键?