⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jydz_rpt.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
字号:
/****************************************************
 *	全辖交易明细报表
 *	全辖交易汇总报表
 *	jydz_rpt() called by gen_rpt()--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;
$include sqlhdr;

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];
	char bankname[31];
	double credit_amt;
	double debit_amt;
	int credit_cnt;
	int debit_cnt;
	char filename[64];
	FILE *fp;
} S_rpt;

extern int get_son();	/* in net_stat.ec */
extern int check_son();	/* in net_stat.ec */

extern char G_cen_bankid[12];
extern char G_bankid[12];

int jydz_rpt(file1, file2, logic_date, bankid, hostid)
char *file1;
char *file2;
$parameter char *logic_date;
char *bankid, *hostid;
{
	$S_tran_ls ls;
	S_rpt rpt[48], total;
	char date[11], time[9];
	char son_bankid[48][12], son_hostid[48][3], cmd[128];
	int i, j, num = 0;
	FILE *fp;

	memset(&son_bankid, 0, sizeof(son_bankid));
	memset(&son_hostid, 0, sizeof(son_hostid));

	if (strcmp(G_cen_bankid, G_bankid) == 0) {
		if (get_son(bankid, hostid, son_bankid, son_hostid) < 0) {
			daylog(ERROR, "get_son() failed");
			return(-2);
		}
	}
	else {
		strcpy(son_bankid[0], G_bankid);
		strcpy(son_hostid[0], "00");
	}

	memset(rpt, 0, sizeof(rpt));

	/* only used for display */
	getdatef(date, "/");
	gettimef(time, ":");

	if (!(fp = fopen(file1, "w"))) {
		daylog(ERROR, "Open %s error!", file1);
		return(-1);	/* File operate error */
	}
	if (FileHead_jydz(fp, logic_date, date, time)) {
		fclose(fp);
		return(-2);	/* Database operate error */
	}

$ifdef wyz020429_mod;
	$declare jy_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;
$else;
	$declare jy_cur cursor for
	select * from cur_settle_ls
	where acq_bank_id != iss_bank_id
	and snd_settle_date = :logic_date
	and card_type = '02'
	order by card_no;
$endif;

	$open jy_cur;
	if (SQLCODE) {
		daylog(ERROR, "Open jy_cur error![%d]", SQLCODE);
		fclose(fp);
		return(-2);
	}

	FetBufSize = 32000;

	while (1) {
		$fetch jy_cur into :ls;
		if (SQLCODE == 100) break;
		if (SQLCODE) {
			daylog(ERROR, "Fetch jy_cur error![%d]", SQLCODE);
			$close jy_cur;
			fclose(fp);
			return(-2);
		}
		del_st_space("tran_ls", &ls);
		if (add_rpt(0, ls, son_bankid, son_hostid,
			    rpt, &num, logic_date,
			    date, time, file2[0])) {
			$close jy_cur;
			fclose(fp);
			return(-1);
		}
		if (add_rpt(1, ls, son_bankid, son_hostid,
			    rpt, &num, logic_date,
			    date, time, file2[0])) {
			$close jy_cur;
			fclose(fp);
			return(-1);
		}
	}
	$close jy_cur;

	if (file2[0]) {
		for (i = 0; i < num; i++) {
			fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
			fprintf(rpt[i].fp, "%s %s %14.2lf %s %6d %s %14.2lf %s %6d\n\n", "总  计", "贷记金额", rpt[i].credit_amt, "贷记笔数", rpt[i].credit_cnt, "借记金额", rpt[i].debit_amt,  "借记笔数", rpt[i].debit_cnt);
			fclose(rpt[i].fp);
		}
		sprintf(cmd, "> %s", file2);
		system(cmd);
	}

	memset(&total, 0, sizeof(total));
	for (i = 0; i < num; i++)
		if (!strcmp(rpt[i].bankid, "0004"))
			break;
	if (i < num) {
		if (file2[0]) {
			sprintf(cmd, "cat %s >> %s", rpt[i].filename, file2);
			system(cmd);
			unlink(rpt[i].filename);
		}
		FileDetail_jydz(fp, rpt[i]);
		total.credit_amt += rpt[i].credit_amt;
		total.credit_cnt += rpt[i].credit_cnt;
		total.debit_amt += rpt[i].debit_amt;
		total.debit_cnt += rpt[i].debit_cnt;
		rpt[i].bankid[0] = 0;
	}
	for (i = 0; son_bankid[i][0]; i++) {
		for (j = 0; j < num; j++)
			if (!strcmp(rpt[j].bankid, son_bankid[i]))
				break;
		if (j < num) {
			if (file2[0]) {
				sprintf(cmd, "cat %s >> %s", rpt[j].filename,
					file2);
				system(cmd);
				unlink(rpt[j].filename);
			}
			FileDetail_jydz(fp, rpt[j]);
			total.credit_amt += rpt[j].credit_amt;
			total.credit_cnt += rpt[j].credit_cnt;
			total.debit_amt += rpt[j].debit_amt;
			total.debit_cnt += rpt[j].debit_cnt;
			rpt[j].bankid[0] = 0;
		}
	}
	FileTail_jydz(fp, total);
	fclose(fp);
	return(0);
}

int add_rpt(flag, ls, son_bankid,son_hostid, rpt, pnum,logic_date,date,time,mx)
int	flag;
S_tran_ls ls;
char	son_bankid[48][12];
char	son_hostid[48][3];
S_rpt	rpt[48];
int	*pnum;
char	logic_date[11];
char	date[11];
char	time[9];
int	mx;
{
	$char bankid[12], hostid[3], bankname[31];
	int i;
	char	logic_date1[11];	/* YYYY/MM/DD */
	char	tmp_date[11];	/* YYYY/MM/DD */
	char	tmp_time[9];	/* hh:mm:ss */
	$char	sign_bankid[12];
	$char	sign_hostid[3];
	$char	merch_id[16];

$ifdef wyz020427_mod;
$else;
	strcpy(merch_id, ls.merchant_id);
	if (strcmp(G_cen_bankid, G_bankid)) {
		get_sign_bank(merch_id, sign_bankid, sign_hostid);
		DelSpace(sign_bankid);
		if (strcmp(G_cen_bankid, G_bankid)) {
			if (strcmp(G_bankid, sign_bankid))
				return 0;
		}
	}
$endif;

	if (flag) {
		if (!check_son(ls.iss_bank_id, "00", son_bankid, son_hostid)) {
			strcpy(bankid, BOC_CENTER /*"0004"*/);
			strcpy(hostid, "00");
		} else {
			strcpy(bankid, ls.iss_bank_id);
			strcpy(hostid, "00");
		}
	} else {
		if (!check_son(ls.acq_bank_id, ls.acq_host_id, son_bankid, son_hostid)) {
			strcpy(bankid, BOC_CENTER /*"0004"*/);
			strcpy(hostid, "00");
		} else {
			strcpy(bankid, ls.acq_bank_id);
			strcpy(hostid, ls.acq_host_id);
		}
	}
	for (i = 0; i < *pnum; i++)
		if (!strcmp(bankid, rpt[i].bankid))
			break;
	if (i == *pnum) {
		strcpy(rpt[i].bankid, bankid);
		strcpy(rpt[i].hostid, hostid);
		get_bank_name(bankid, hostid, bankname);
		
		strcpy(rpt[i].bankname, bankname);
		if (mx) {
			sprintf(rpt[i].filename, "/tmp/.%-4.4s", bankid);
			rpt[i].fp = fopen(rpt[i].filename, "w");
			if (!rpt[i].fp) {
				daylog(ERROR, "Open %s error!",rpt[i].filename);
				for (i = 0; i < *pnum; i++) {
					fclose(rpt[i].fp);
					unlink(rpt[i].filename);
				}
				return(-1);
			}
			fprintf(rpt[i].fp, "%42s中国银行BTS系统借记卡\n", " ");
			fprintf(rpt[i].fp, "%42s全辖交易明细报表\n", " ");
			str2date(logic_date1, logic_date, "/");
			fprintf(rpt[i].fp, "BTS-801%77s清算逻辑日: %s\n", " ", logic_date1);
			fprintf(rpt[i].fp, "%-5.5s%-82s%s %s\n", bankid, bankname, date, time);
			fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
			fprintf(rpt[i].fp, "%-21s %-8s %14s %6s %-10s %-8s %-6s %-6s %-10s %-8s\n", "卡  号", "交易类型", "交易金额", "授权码", "商户号", "EDC 号", "收单行", "发卡行", "交易日期", "交易时间");
			fprintf(rpt[i].fp, "----------------------------------------------------------------------------------------------------------\n");
		}
		(*pnum)++;
	}
	if (mx) {
		str2date(tmp_date, ls.local_sys_date, "/");
		str2time(tmp_time, ls.local_sys_time, ":");

		type2buf(ls.tran_type, bankname);
		fprintf(rpt[i].fp, "%-6.6s-%-4.4s-%-9.9s %-8s %14.2lf %6s %-10.10s %-8.8s %-6.6s %-6.6s %-10s %-8s\n", ls.card_no, ls.card_no + 6, ls.card_no + 10, bankname, ls.tran_amt, ls.auth_no, ls.merchant_id, ls.terminal_id, ls.acq_bank_id, ls.iss_bank_id, tmp_date, tmp_time);
	}

	switch (ls.tran_type) {
	    case PURCHASE:
	    case WITHDRAWAL:
	    case CONFIRM:
	    case TRANS_OUT:
		if (flag) {
			rpt[i].debit_cnt++;
			rpt[i].debit_amt += ls.tran_amt;
		} else {
			rpt[i].credit_cnt++;
			rpt[i].credit_amt += ls.tran_amt;
		}
		break;
	    case REFUND:
	    case DEPOSIT:
		if (flag) {
			rpt[i].credit_cnt++;
			rpt[i].credit_amt += ls.tran_amt;
		} else {
			rpt[i].debit_cnt++;
			rpt[i].debit_amt += ls.tran_amt;
		}
		break;
	}
	return(0);
}

int FileHead_jydz(FILE *fp, char *logic_date, char *date, char *time)
{
	$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);
	fprintf(fp, "%27s中国银行BTS系统借记卡\n", " ");
	fprintf(fp, "%27s全辖交易汇总报表\n", " ");
	str2date(logic_date1, logic_date, "/");
	fprintf(fp, "BTS-800%48s清算逻辑日: %s\n", " ", logic_date1);
#ifdef wyz020427_mod
	get_bank_name(sys.bank_id, sys.host_id, bank_name);
	fprintf(fp, "%-5.5s%-53s%s %s\n", sys.bank_id, bank_name, date, time);
#else
	get_bank_name(G_bankid, "00", bank_name);
	fprintf(fp, "%-5.5s%-53s%s %s\n", G_bankid, bank_name, date, time);
#endif
	fprintf(fp, "-----------------------------------------------------------------------------\n");

	fprintf(fp, "%-8s %-20s %14s %8s %14s %8s\n",
	"联行行号", "联行名称", "贷记金额", "贷记笔数", "借记金额", "借记笔数");

	fprintf(fp, "-----------------------------------------------------------------------------\n");
	return(0);
}

int FileDetail_jydz(FILE *fp, S_rpt rpt)
{
	fprintf(fp, "%-8.8s %-20.20s %14.2lf %8d %14.2lf %8d\n", rpt.bankid, rpt.bankname, rpt.credit_amt, rpt.credit_cnt, rpt.debit_amt, rpt.debit_cnt);
	return(0);
}

int FileTail_jydz(FILE *fp, S_rpt rpt)
{
	fprintf(fp, "-----------------------------------------------------------------------------\n");
	if (rpt.credit_cnt + rpt.debit_cnt)
		fprintf(fp, "%-8.8s %-20s %14.2lf %8d %14.2lf %8d\n", "总    计", " ", rpt.credit_amt, rpt.credit_cnt, rpt.debit_amt, rpt.debit_cnt);
	return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -