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

📄 net_settle.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:
		t_amt += amt;
		flag = 1;
	}

	t_amt *= 100;
	sprintf(str + 22, "%06d%016.0f", t_num, t_amt);

	if (get_total(ARG, REFUND, 0, &num, &amt)) return(-1); 
	t_num = num;
	t_amt = amt;

	if (get_total(ARG, DEPOSIT, 0, &num, &amt)) return(-1); 
	t_num += num;
	t_amt += amt;

	if (flag) {
		flag = 2;
		if (get_total(ARG, PURCHASE, 0, &num, &amt)) return(-1);
		t_num += num;
		t_amt += amt;
		if (get_total(ARG, WITHDRAWAL, 0, &num, &amt)) return(-1);
		t_num += num;
		t_amt += amt;
		if (get_total(ARG, CONFIRM, 0, &num, &amt)) return(-1);
		t_num += num;
		t_amt += amt;
		flag = 1;
	}

	t_amt *= 100;
	sprintf(str + 44, "%06d%016.0f", t_num, t_amt);

	if (get_total(ARG, POS_VOID, REFUND, &num, &amt)) return(-1); 
	t_num = num;
	t_amt = amt;

	if (get_total(ARG, POS_VOID, DEPOSIT, &num, &amt)) return(-1); 
	t_num += num;
	t_amt += amt;

	if (flag) {
		flag = 2;
		if (get_total(ARG, POS_VOID, PURCHASE, &num, &amt)) return(-1);
		t_num += num;
		t_amt += amt;
		if (get_total(ARG, POS_VOID, WITHDRAWAL, &num, &amt))return(-1);
		t_num += num;
		t_amt += amt;
		if (get_total(ARG, POS_VOID, CONFIRM, &num, &amt)) return(-1);
		t_num += num;
		t_amt += amt;
		flag = 1;
	}

	t_amt *= 100;
	sprintf(str + 66, "%06d%016.0f", t_num, t_amt);

	if (get_total(ARG, TRANS_OUT, 0, &num, &amt)) return(-1); 
	t_num = num;

/*================== WuBin 2001-8-17 18:49 ======Start==============
	if (get_total(ARG, AGENT, 0, &num, &amt)) return(-1); 
	t_num += num;
===========================2001-8-17 18:49=======End==============*/


	if (flag) {
		flag = 2;
		if (get_total(ARG, TRANS_OUT, 0, &num, &amt)) return(-1); 
		t_num += num;
/*================== WuBin 2001-8-17 18:49 ======Start==============
		if (get_total(ARG, AGENT, 0, &num, &amt)) return(-1); 
		t_num += num;
		flag = 1;
===========================2001-8-17 18:49=======End==============*/

	}

	sprintf(str + 88, "%06d", t_num);

	if (get_total(ARG, POS_VOID, TRANS_OUT, &num, &amt)) return(-1); 
	t_num = num;

/*================== WuBin 2001-8-17 18:49 ======Start==============
	if (get_total(ARG, POS_VOID, AGENT, &num, &amt)) return(-1); 
	t_num += num;
===========================2001-8-17 18:49=======End==============*/


	if (flag) {
		flag = 2;
		if (get_total(ARG, POS_VOID, TRANS_OUT, &num, &amt)) return(-1); 
		t_num += num;
/* 		if (get_total(ARG, POS_VOID, AGENT, &num, &amt)) return(-1); 
		t_num += num; */
		flag = 1;
	}

	sprintf(str + 94, "%06d", t_num);

	if (get_total(ARG, AUTH_PUR, 0, &num, &amt)) return(-1); 
	t_num = num;

	if (get_total(ARG, PRE_AUTH, 0, &num, &amt)) return(-1); 
	t_num += num;

	if (flag) {
		flag = 2;
		if (get_total(ARG, AUTH_PUR, 0, &num, &amt)) return(-1); 
		t_num += num;
		if (get_total(ARG, PRE_AUTH, 0, &num, &amt)) return(-1); 
		t_num += num;
		flag = 1;
	}

	sprintf(str + 100, "%06d", t_num);

	strcpy(settlement, str);
	return(0);
}

/*
 * 统计交易总笔数总金额
 */
int get_total(flag, bankid, hostid, logic_date, tran_type, old_type, pnum, pamt)
	int flag;
	$parameter char *bankid;
	$parameter char *hostid;
	$parameter char *logic_date;
	$parameter int tran_type;
	$parameter int old_type;
	int *pnum;
	double *pamt;
{
	$int num;
	$short indi;
	$double amt;

	/*
	 *	WHERE ((source_bankid = :bankid)
	 *	OR (target_bankid = :bankid))
	 * 该行发送或接收的交易
	 */

	switch (flag) {
	    case 0:	/* 主机对帐 */
		EXEC SQL SELECT count(*), sum(tran_amt)
		INTO :num:indi, :amt
		FROM cur_tran_ls
		WHERE tran_type = :tran_type
		AND void_tran_type = :old_type
		AND resp_code like '00%' 
		AND saf_flag = '0'
		AND manual_flag = 'N'
		AND ( acq_bank_id = :bankid or
		      acq_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid) or
		      iss_bank_id = :bankid or
		      iss_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid) )
		AND local_logic_date = :logic_date
		AND card_type = '02';	/* 借记卡 */
		break;
	    case 1:	/* 分行对帐 */
		EXEC SQL SELECT count(*), sum(tran_amt)
		INTO :num:indi, :amt
		FROM cur_tran_ls
		WHERE (acq_bank_id = :bankid or
		       acq_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid))
		AND tran_type = :tran_type
		AND void_tran_type = :old_type
		AND resp_code like '00%' 
		AND saf_flag = '0'
		AND manual_flag = 'N'
		AND local_logic_date = :logic_date
		AND card_type = '02';	/* 借记卡 */
		break;
	    case 2:
		EXEC SQL SELECT count(*), sum(tran_amt)
		INTO :num:indi, :amt
		FROM cur_tran_ls
		WHERE (iss_bank_id = :bankid or
		       iss_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid))
		AND tran_type = :tran_type
		AND void_tran_type = :old_type
		AND resp_code like '00%' 
		AND saf_flag = '0'
		AND manual_flag = 'N'
		AND local_logic_date = :logic_date
		AND card_type = '02';	/* 借记卡 */
		break;
	}

	if (SQLCODE < 0) {
		daylog(ERROR, "Get total error[%d]!", SQLCODE);
		return(-1);
	}

	if ((indi == -1) || (num == 0)) {
		num = 0;
		amt = 0;
	}

	*pnum = num;
	*pamt = amt;

	return(0);
}

/*
 * 更新对帐标志
 */
int update_flag(flag, bankid, hostid, logic_date, value)
	int flag;
	$parameter char *bankid;
	$parameter char *hostid;
	$parameter char *logic_date;
	$parameter char value;
{
	$S_sys_param sys;
	$char	cur_date[11];

	getdatef(cur_date, "");

	$select * into :sys from sys_param;
	if (SQLCODE) {
		daylog(ERROR, "Update flag error![%s][%s]", bankid, logic_date);
		return(-1);
	}
	del_st_space("sys_param", &sys);;

	if (flag) {	/* 网间对帐 */
		begin_tran();
		/*
		 *	WHERE ((source_bankid = :bankid)
		 * 该行或该行下属行发送出的交易
		 */
		$UPDATE cur_tran_ls
		SET	snd_settle_flag = :value,
			snd_settle_date = :cur_date
		WHERE (acq_bank_id = :bankid or
		       acq_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid))
		AND local_logic_date = :logic_date
		AND card_type = '02';	/* 借记卡 */
		if (SQLCODE < 0) {
			daylog(ERROR, "Update snd_settle_flag error![%s-%s][%s][%d]",
			       bankid, hostid, logic_date, SQLCODE);
			rollback_tran();
			return(-1);
		}

		/*
		 *	WHERE target_bankid = :bankid
		 * 该行或下属行接收到的交易
		 */
		$UPDATE cur_tran_ls
		SET	rcv_settle_flag = :value,
			rcv_settle_date = :cur_date
		WHERE (iss_bank_id = :bankid or
		       iss_bank_id in (select bank_id from bank_info
				     where adm_bank_id = :bankid
				     and   adm_host_id = :hostid))
		AND local_logic_date = :logic_date
		AND card_type = '02';
		if (SQLCODE < 0) {
			daylog(ERROR, "Update snd_settle_flag error![%s-%s][%s][%d]",
			       bankid, hostid, logic_date, SQLCODE);
			rollback_tran();
			return(-1);
		}
		commit_tran();
	} else {	/* 主机对帐 */
		$UPDATE cur_tran_ls
		SET	rcv_settle_flag = :value,
			rcv_settle_date = :cur_date
		WHERE iss_bank_id = :bankid
		AND rcv_logic_date = :logic_date
		AND card_type = '02';
		if (SQLCODE < 0) {
			daylog(ERROR, "Update up_flag error![%s][%s][%d]",
			       bankid, logic_date, SQLCODE);
			return(-1);
		}
	}
	return(0);
}

/*
 * 将对帐数据插入网间对帐表(net_settle)
 */
int insert_settle(ppub, pstl, bankid, hostid, logic_date)
	PUBLIC *ppub;
	char *pstl;
	char *bankid;
	char *hostid;
	char *logic_date;
{
	$S_net_settle se;
	char buf[128];

	memset((void *)&se, 0, sizeof(S_net_settle));

	strcpy(se.snd_bank_id, bankid);
	strcpy(se.snd_host_id, hostid);
	strcpy(se.logic_date, logic_date);
	getdatef(se.check_date, "");
	gettimef(se.check_time, "");
	strcpy(se.resp_code, ppub->Resp_code);

	if (!memcmp(se.resp_code, "00", 2) || !memcmp(se.resp_code, "95", 2)) {
		sprintf(buf, "%6.6s", ppub->Add_data);
		se.n_cre_cnt = atoi(buf);
		sprintf(buf, "%16.16s", ppub->Add_data+6);
		se.n_cre_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", ppub->Add_data+22);
		se.n_void_cre_cnt = atoi(buf);
		sprintf(buf, "%16.16s", ppub->Add_data+28);
		se.n_void_cre_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", ppub->Add_data+44);
		se.n_deb_cnt = atoi(buf);
		sprintf(buf, "%16.16s", ppub->Add_data+50);
		se.n_deb_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", ppub->Add_data+66);
		se.n_void_deb_cnt = atoi(buf);
		sprintf(buf, "%16.16s", ppub->Add_data+72);
		se.n_void_deb_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", ppub->Add_data+88);
		se.n_trans_cnt = atoi(buf);

		sprintf(buf, "%6.6s", ppub->Add_data+94);
		se.n_void_trans_cnt = atoi(buf);

		sprintf(buf, "%6.6s", ppub->Add_data+100);
		se.n_auth_cnt = atoi(buf);
#ifdef zgx010820_added
#else
		sprintf(buf, "%16.16s", ppub->Add_data+106);
		se.n_trans_amt = atof(buf)/100;
		sprintf(buf, "%16.16s", ppub->Add_data+122);
		se.n_void_trans_amt = atof(buf)/100;
		sprintf(buf, "%6.6s", ppub->Add_data+128);
		se.n_void_trans_cnt = atoi(buf);
#endif

		sprintf(buf, "%6.6s", pstl);
		se.l_cre_cnt = atoi(buf);
		sprintf(buf, "%16.16s", pstl+6);
		se.l_cre_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", pstl+22);
		se.l_void_cre_cnt = atoi(buf);
		sprintf(buf, "%16.16s", pstl+28);
		se.l_void_cre_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", pstl+44);
		se.l_deb_cnt = atoi(buf);
		sprintf(buf, "%16.16s", pstl+50);
		se.l_deb_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", pstl+66);
		se.l_void_deb_cnt = atoi(buf);
		sprintf(buf, "%16.16s", pstl+72);
		se.l_void_deb_amt = atof(buf)/100;

		sprintf(buf, "%6.6s", pstl+88);
		se.l_trans_cnt = atoi(buf);

		sprintf(buf, "%6.6s", pstl+94);
		se.l_void_trans_cnt = atoi(buf);

		sprintf(buf, "%6.6s", pstl+100);
		se.l_auth_cnt = atoi(buf);

#ifdef zgx010820_added
#else
		sprintf(buf, "%16.16s", pstl+106);
		se.l_trans_amt = atof(buf)/100;
		sprintf(buf, "%16.16s", pstl+122);
		se.l_void_trans_amt = atof(buf)/100;
		sprintf(buf, "%6.6s", pstl+128);
		se.l_void_trans_cnt = atoi(buf);
#endif
	}

	$insert into net_settle values(:se);
	if (SQLCODE) {
		daylog(ERROR, "Insert to net_settle error![%d]", SQLCODE);
		return(-1);
	}
	return(0);
}

/*
 * 获取借记卡直联模块的模块号
 */
int getid(cen_bankid, cen_hostid)
$parameter char *cen_bankid, *cen_hostid;
{
	int ret = DEBIT_MODULE_ID;	/* 缺省模块号为79 */
	$int module_id;

	$declare deb_cur cursor for
	select module_id from card_route
	where rcv_bank_id = :cen_bankid
	and rcv_host_id = :cen_hostid
	and card_type = '02'
	order by module_id;
	$open deb_cur;
	if (SQLCODE)
		daylog(ERROR, "Open deb_cur error![%d]", SQLCODE);
	else {
		$fetch deb_cur into :module_id;
		if (SQLCODE)
			daylog(ERROR, "Fetch deb_cur error![%d]", SQLCODE);
		else
			ret = module_id;
	}
	return(ret);
}

⌨️ 快捷键说明

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