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