jyds_rpt.ec

来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 207 行

EC
207
字号
/****************************************************
 *	地市行交易明细报表 jyds_rpt()
 *	called by gen_jydz() -- 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 {
	double credit_amt;
	double debit_amt;
	int credit_cnt;
	int debit_cnt;
} S_jyds;

int jyds_rpt(file, logic_date)
char *file;
$parameter char *logic_date;
{
	FILE *fp;
	S_jyds total;
	char bankid[12];
	$S_tran_ls ls;

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

	memset(&total, 0, sizeof(S_jyds));
$ifdef wyz020508_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 manual_flag = 'N'
	and resp_code like '00%'
	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);
		FileDetail_jyds(fp, ls, &total, bankid);
	}
	$close jy_cur;

	FileTail_jyds(fp, &total);
	fclose(fp);
	return(0);
}

int FileHead_jyds(FILE *fp, char *logic_date, char *bankid)
{
	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, "%42s中国银行BTS系统借记卡\n", " ");
	fprintf(fp, "%42s地市行交易明细报表\n", " ");
	str2date(logic_date1, logic_date, "/");
	fprintf(fp, "BTS-900%77s清算逻辑日: %s\n", " ", logic_date1);
#ifdef wyz020427_mod
	get_bank_name(sys.bank_id, sys.host_id, bank_name);
	fprintf(fp, "%-5.5s%-82s%s %s\n", sys.bank_id, bank_name, date, time);
#else
	get_bank_name(G_bankid, "00", bank_name);
	fprintf(fp, "%-5.5s%-82s%s %s\n", G_bankid, bank_name, date, time);
#endif
	fprintf(fp, "----------------------------------------------------------------------------------------------------------\n");
	fprintf(fp, "%-21s %-8s %14s %6s %-15s %-8s %-6s %-6s %-10s %-8s\n", "卡  号", "交易类型", "交易金额", "授权码", "商户号", "EDC 号", "收单行", "发卡行", "交易日期", "交易时间");
	fprintf(fp, "----------------------------------------------------------------------------------------------------------\n");

#ifdef wyz020427_mod
	strcpy(bankid, sys.bank_id);
#else
	strcpy(bankid, G_bankid);
#endif
	return(0);
}

int FileDetail_jyds(FILE *fp, S_tran_ls ls, S_jyds *ptotal, char *bankid)
{
	char buf[16];
	int flag;
	char	tmp_date[11], tmp_time[9];
	$char	sign_bankid[12];
	$char	merch_id[16];

$ifdef wyz020427_mod;
$else;
	strcpy(merch_id, ls.merchant_id);

	$select sign_bank_id
	into :sign_bankid from merchant_base
	where merchant_id = :merch_id;

	if (SQLCODE) {
		daylog(ERROR, "Get %s error!", merch_id);

		if (strcmp(G_cen_bankid, G_bankid))
			return 0;
	} else {
		DelSpace(sign_bankid);
		if (strcmp(G_cen_bankid, G_bankid)) {
			if (strcmp(G_bankid, sign_bankid))
				return 0;
		}
	}
$endif;

	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 %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, 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, bankid);
	switch (ls.tran_type) {
	    case PURCHASE:
	    case WITHDRAWAL:
	    case CONFIRM:
	    case TRANS_OUT:
		if (flag) {
			ptotal->debit_cnt++;
			ptotal->debit_amt += ls.tran_amt;
		} else {
			ptotal->credit_cnt++;
			ptotal->credit_amt += ls.tran_amt;
		}
		break;
	    case REFUND:
	    case DEPOSIT:
		if (flag) {
			ptotal->credit_cnt++;
			ptotal->credit_amt += ls.tran_amt;
		} else {
			ptotal->debit_cnt++;
			ptotal->debit_amt += ls.tran_amt;
		}
		break;
	}
	return(0);
}

int FileTail_jyds(FILE *fp, S_jyds *ptotal)
{
	fprintf(fp, "----------------------------------------------------------------------------------------------------------\n");
	if (ptotal->credit_cnt + ptotal->debit_cnt)
		fprintf(fp, "%s %s %14.2lf %s %6d %s %14.2lf %s %6d\n\n", "总  计", "贷记金额", ptotal->credit_amt, "贷记笔数", ptotal->credit_cnt, "借记金额", ptotal->debit_amt,  "借记笔数", ptotal->debit_cnt);
	return(0);
}

⌨️ 快捷键说明

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