end_day_rpt.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 2,216 行 · 第 1/4 页
EC
2,216 行
/****************************************************
* 商户入帐明细报表 shop_r_rpt(), gen_shop_r_rpt()
* 银行对帐明细报表 bank_d_rpt(), gen_bank_d_rpt_cre(),
gen_bank_d_rpt_fg(),
* zgx010817_NOTE
* 原仅处理长城信用卡、长城借记卡以及五种外卡。
* 现暂加上他行信用卡、他行借记卡;
* 以后最好区分各银行的信用卡、借记卡。
*
* 最后修改: 周国祥 2001/08/16
****************************************************/
#include <stdio.h>
#include <curses.h>
#include <fcntl.h>
#include <signal.h>
#include "all.h"
#include "tool.h"
#include "macro_def.h"
#include "credit_rpt.h"
$include "db_struct.h"
$include sqlca;
$include sqlhdr;
/* use for cards[] */
#define CARD_VISA 0 /* 51 */
#define CARD_MC 1 /* 52 */
#define CARD_AE 2 /* 53 */
#define CARD_DINER 3 /* 54 */
#define CARD_JCB 4 /* 55 */
#define CARD_BOC_CRE 5 /* 长城信用卡 */
#define CARD_BOC_DE 6 /* 长城借记卡 */
#define CARD_BOC_UN_CRE 7 /* 银联信用卡 */
#define CARD_OTH_CRE 8 /* 他行信用卡 */
#define CARD_OTH_DE 9 /* 他行借记卡 */
#define SETTLE_CARDS_NUM 10 /* 五种外卡、长城信用卡、借记卡以及 */
/* 银联信用卡、他行信用卡、借记卡 */
typedef struct {
char name[11];
int cnt;
double amt;
double fee;
double rebate;
} Edc_shop_dz;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
$S_sys_param sy;
$S_tran_ls ls;
char s_date[11], e_date[11]; /* YYYYMMDD */
char s_date1[11], e_date1[11]; /* YYYY/MM/DD */
int ch;
void FileHead_shop_r_rpt(FILE *fp, S_sys_param sy)
{
char date[11], time[9];
char bank_name[128];
getdatef( date, "/" );
gettimef( time, ":" );
fprintf(fp, "%33s%s\n", " ", GV_filehead);
fprintf(fp, "%33s商户入帐明细报表\n", " ");
fprintf(fp, "%26s清算日期: %s--%s\n", " ", s_date1, e_date1 );
#ifdef wyz020427_mod
get_bank_name(sy.bank_id, sy.host_id, bank_name);
fprintf(fp, "%-11.11s%-50s%s %s\n\n", sy.bank_id, bank_name, date, time);
#else
get_bank_name1(G_bankid, bank_name);
fprintf(fp, "%-11.11s %-50s%s %s\n\n", G_bankid, bank_name, date, time);
#endif
}
void FileHead_bank_d_rpt(FILE *fp, S_sys_param sy, void *title)
{
char date[11], time[9];
char bank_name[128];
getdatef( date, "/" );
gettimef( time, ":" );
fprintf(fp, "%33s中国银行BTS系统%s\n", " ", title);
fprintf(fp, "%33s 银行对帐明细报表\n", " ");
fprintf(fp, "%26s清算日期: %s--%s\n", " ", s_date1, e_date1 );
#ifdef wyz020427_mod
get_bank_name(sy.bank_id, sy.host_id, bank_name);
fprintf(fp, "%-11.11s%-56s%s %s\n\n", sy.bank_id, bank_name, date, time);
#else
get_bank_name1(G_bankid, bank_name);
fprintf(fp, "%-11.11s%-56s%s %s\n\n", G_bankid, bank_name, date, time);
#endif
fprintf(fp, "--------------------------------------------------------------------------------------\n");
fprintf(fp, "%-15.15s %6s %-19s %8s %14s %6s %-10s \n", " 商户号", "批次号", " 卡 号", "交易类型", "交易金额 ", "授权码", " 交易日期" );
fprintf(fp, "--------------------------------------------------------------------------------------\n");
}
void FileSubHead_shop_r_rpt(FILE *fp, S_tran_ls ls, char *tmp)
{
fprintf(fp, "商户号: %-15.15s 商户名称: %s\n", ls.merchant_id, tmp);
fprintf(fp, "--------------------------------------------------------------------------------------\n");
fprintf(fp, "%8s %-19s %8s %14s %6s %-10s %-8s\n", " EDC 号 ", " 卡 号", "交易类型", "交易金额 ", "授权码", " 交易日期", "交易时间");
fprintf(fp, "--------------------------------------------------------------------------------------\n");
}
void FileSubHead_bank_d_rpt(FILE *fp, void *merch, int count_bs, double count_je)
{
fprintf(fp, "%-15s (%6d) %35.2lf \n\n\n", merch, count_bs, count_je );
}
void FileDetail_shop_r_rpt(FILE *fp, S_tran_ls ls)
{
char tran_name[9];
char tmp_date[11]; /* YYYY/MM/DD */
char tmp_time[9]; /* hh:mm:ss */
str2date(tmp_date, ls.local_sys_date, "/");
str2time(tmp_time, ls.local_sys_time, ":");
type2buf( ls.tran_type, tran_name );
fprintf(fp, "%8s %-19s %8s %14.2lf %6s %-15s %-8s\n",
ls.terminal_id, ls.card_no, tran_name,
(ls.tran_type==ADJUST)?ls.tran_amt-ls.void_amt:ls.tran_amt,
ls.auth_no, tmp_date, tmp_time);
}
void FileDetail_bank_d_rpt(FILE *fp, S_tran_ls ls)
{
char tran_name[9];
char tmp_date[11]; /* YYYY/MM/DD */
str2date(tmp_date, ls.local_sys_date, "/");
type2buf( ls.tran_type, tran_name );
fprintf(fp, "%-15.15s %06d %-19s %8s %14.2lf %6s %-10s \n",
ls.merchant_id, ls.batch_no, ls.card_no, tran_name,
(ls.tran_type==ADJUST)?ls.tran_amt-ls.void_amt:ls.tran_amt,
ls.auth_no, tmp_date);
}
void FileTail_shop_r_rpt(FILE *fp, Edc_shop_dz *cards)
{
int i;
double tmp_db, inout();
fprintf(fp, "\n======================================================================================\n");
fprintf(fp, "%-10s %6s %14s %8s %8s %14s\n", " 卡 类", "笔数 ", "交易金额 ", " 回扣率 ", "手续费 ", "交易净额 " );
fprintf(fp, "--------------------------------------------------------------------------------------\n");
/*
* zgx010817_NOTE
* 每种卡类一条,原仅处理长城信用卡、长城借记卡以及五种外卡。
* 现暂加上银联卡信用卡、他行信用卡、他行借记卡;
* 以后最好区分各银行的信用卡、借记卡。
*/
for ( i = 0; i < SETTLE_CARDS_NUM/*7*/; i ++ ) {
tmp_db = 0.0;
if ( cards[i].cnt > 0 ) {
tmp_db = inout(cards[i].fee); /* 四舍五入 */
cards[i].fee = tmp_db;
fprintf( fp, "%-10s %6d %14.2lf %6.2f%% %8.2lf %14.2lf\n", cards[i].name, cards[i].cnt, cards[i].amt, cards[i].rebate * 100, cards[i].fee, cards[i].amt - cards[i].fee );
}
cards[SETTLE_CARDS_NUM].cnt += cards[i].cnt;
cards[SETTLE_CARDS_NUM].amt += cards[i].amt;
cards[SETTLE_CARDS_NUM].fee += cards[i].fee;
}
fprintf(fp, "--------------------------------------------------------------------------------------\n");
fprintf(fp, "%-10s %6d %14.2lf %8s %8.2lf %14.2lf\n", cards[SETTLE_CARDS_NUM].name, cards[SETTLE_CARDS_NUM].cnt, cards[SETTLE_CARDS_NUM].amt, " ", cards[SETTLE_CARDS_NUM].fee, cards[SETTLE_CARDS_NUM].amt - cards[SETTLE_CARDS_NUM].fee);
fprintf(fp, "======================================================================================\n\n\f");
}
void FileTail_bank_d_rpt(FILE *fp)
{
fprintf(fp, "--------------------------------------------------------------------------------------\n");
}
void FileTail_bank_d_rpt_total( FILE *fp, int total_bs, double total_je )
{
fprintf(fp, " 总交易量:%6d 总交易金额:%14.2lf\n\n", total_bs, total_je );
}
void FileTail_bank_d_rpt_fg_total( FILE *fp, int total_bs, double total_je ,double total_dzje)
{
fprintf(fp, " 总交易量:%6d 总交易金额:%14.2lf\n\n", total_bs, total_je );
fprintf(fp, " %6s (对帐金额) %14.2lf\n\n", " ", total_dzje);
}
void add_rpt_total(S_tran_ls ls, Edc_shop_dz *cards)
{
int i;
#ifdef zgx010817_modi
i = atoi(ls.card_type) - 51;
if ( i == -50 /*-51*/ ) {
i = 5;
cards[5].cnt ++;
}
else
if ( i == -49 /*-50*/ ) {
i = 6;
cards[6].cnt ++;
}
else
cards[i].cnt ++;
#else
i = atoi(ls.card_type) - atoi(VISA_CARD); /* 外卡从VISA始 */
if (i < 0) { /* 非外卡 */
if (!strcmp(ls.card_type, CREDIT_CARD)) {
if (!strcmp(ls.bank_type, BOC_BANK)) {
if ((ls.card_no[0] == '4') || (ls.card_no[0] == '5')) {
/* 银联信用卡 */
i = CARD_BOC_UN_CRE;
cards[CARD_BOC_UN_CRE].cnt ++;
} else {
/* 中行信用卡 */
i = CARD_BOC_CRE;
cards[CARD_BOC_CRE].cnt ++;
}
} else {
/* 他行信用卡 */
i = CARD_OTH_CRE;
cards[CARD_OTH_CRE].cnt ++;
}
} else { /* DEBIT_CARD */
if (!strcmp(ls.bank_type, BOC_BANK)) {
/* 中行借记卡 */
i = CARD_BOC_DE;
cards[CARD_BOC_DE].cnt ++;
} else {
/* 他行借记卡 */
i = CARD_OTH_DE;
cards[CARD_OTH_DE].cnt ++;
}
}
} else /* 外卡 */
cards[i].cnt ++;
#endif
switch (ls.tran_type) {
case REFUND:
cards[i].amt -= ls.tran_amt;
break;
case ADJUST:
#ifdef wyz_mod_011229
cards[i].amt += ls.tran_amt - ls.void_amt;
cards[i].fee += (ls.tran_amt - ls.void_amt) * cards[i].rebate;
break;
#else
#endif
default:
cards[i].amt += ls.tran_amt;
cards[i].fee += ls.tran_amt * cards[i].rebate;
break;
}
}
/*
* 商户入帐明细报表
* prt/shop_r_rpt
*/
int shop_r_rpt()
{
$S_sys_param sys;
WINDOW *my_win;
SETTLE_RESULT s_r;
FILE *fp;
char tmp_file[128];
char filename[128], path[80];
char mer_id[16], ter_id[9];
char rpt[120];
char tmp_str[128];
int mer_cnt, ret, i, ter_cnt;
static char pflag[5]={0,0,0,0,0}, first = 1;
long card_enable;
if ( first ) {
first = 0;
memset ( pflag , 1 , 5 );
}
sprintf(filename, "/tmp/.shop_r_rpt.%d", getpid());
scr_dump(filename);
$select * into :sys from sys_param;
if (SQLCODE) {
daylog(ERROR, "Select sys_param error![%d]", SQLCODE);
h_winprompt(my_win, 17,4,"取本地逻辑日失败, 按任意键继续",1, 0);
goto end_shdz;
}
del_st_space("sys_param", &sys);
/*总行不产生商户入帐明细报表*/
if (!strcmp(sys.bank_id, sys.adm_bank_id))
return(0);
disp_below("商户入帐明细报表");
clear_wline(stdscr, LINES-1);
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "商户入帐明细报表", 0, 0);
my_win = newwin(19, 80, 3, 0);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
wrefresh(my_win);
set_prompt(PROMPT_OFF);
#ifndef wyz_mod_020408
getdatef(s_date,"");
getdatef(e_date,"");
#else
/*默认值为上次成功清算的日期*/
sprintf(tmp_file, "%s/etc/settle_result", getenv("WORKDIR"));
if ((fp = fopen(tmp_file, "r")) == NULL) {
daylog(ERROR, "Open etc/settle_result failed");
goto end_shdz;
}
if ((fread(&s_r, sizeof(SETTLE_RESULT), 1, fp)) != 1) {
daylog(ERROR, "Read etc/settle_result failed");
goto end_shdz;
}
if (s_r.result == 0) {
strcpy(s_date, s_r.settle_date);
}
else
getdatef(s_date, "");
fclose(fp);
#endif
/*改原输入起始日期和结束日期为输入日期然后确认*/
mvwprintw(my_win, 2, 4, "请输入清算日期: [%s]", s_date);
if (in_item(my_win, "", 2, 21, s_date, 8, NULL, NULL, 0, 0) != ENTER)
goto end_shdz;
str2date(s_date1, s_date, "/");
strcpy(e_date, s_date);
mvwprintw(my_win, 3, 4, "请确认清算日期: [%s]", e_date);
if (in_item(my_win, "", 3, 21, e_date, 8, NULL, NULL, 0, 0) != ENTER)
goto end_shdz;
str2date(e_date1, e_date, "/");
#ifdef Wubin2002087_del
if (strcmp(s_date, e_date) != 0) {
mvwprintw(stdscr,LINES-3, 6, "输入的清算日期不一致");
getch();
goto end_shdz;
}
if (strcmp(s_date, s_r.settle_date) > 0) {
sprintf(tmp_str, "[%s]还没有进行清算", s_date);
mvwprintw(stdscr,LINES-3, 6, tmp_str);
getch();
goto end_shdz;
}
#endif
strcpy ( mer_id , "" );
mvwprintw(my_win, 4, 4, "请输入商户编号: [%15s]", " ");
if (in_item(my_win, "", 4, 21, mer_id, 15, NULL, NULL, 0, 0) !=
ENTER) goto end_shdz;
if ( mer_id[0] > '9' || mer_id[0] < '0' )
mer_cnt = 0;
else
mer_cnt = 1;
createsbox ( 10 , 20 , 8 , 1 , 1 , "请选择卡类型 " );
additem ( 0 , "国际卡" , pflag[0] );
additem ( 0 , "信用卡" , pflag[1] );
additem ( 0 , "借记卡" , pflag[2] );
clear_wline(stdscr, LINES-1);
mvwprintw(stdscr,LINES-1, 23, "切换: Space 确认: Enter 取消: ESC");
refresh();
ret = dispsbox();
if ( ret != 0 ) {
freesbox();
goto end_shdz;
}
else {
card_enable = 0;
for ( i=0 ; i < 3 ; i++ ) {
getitemflag ( 0 , i , &(pflag[i]) );
if ( pflag[i] == 1 ) {
switch ( i ) {
case 0:
card_enable |= FOREIGN;
break;
case 1:
card_enable |= CREDIT;
break;
case 2:
card_enable |= DEBIT;
break;
}
}
}
freesbox();
}
if ( card_enable == 0 )
goto end_shdz;
daylog(DEBUG, "正在生成商户入帐报表, 清算日期: %s--%s, 请稍候 ...", s_date1, e_date1 );
mvwprintw(my_win, 6, 4, "正在生成商户入帐明细报表, 请稍候 ...");
wrefresh(my_win);
strcpy(path, getenv("WORKDIR"));
#ifdef wyz020427_mod
sprintf(rpt, "%s/prt/shop_r_rpt", path);
#else
sprintf(rpt, "%s/prt/%s/shop_r_rpt", path, G_bankid);
#endif
#ifdef Wubin20010918mod
if(!func_enable(SETT_ENABLE_FLAG))
ret = ah_gen_shop_r_rpt( rpt, mer_id, mer_cnt, card_enable );
else
ret = gen_shop_r_rpt( rpt, mer_id, mer_cnt, card_enable );
#else
ret = gen_shop_r_rpt( rpt, mer_id, mer_cnt, card_enable );
#endif
if (ret < 0) {
h_winprompt(my_win, 17, 4, "生成商户入帐明细报表出错!", 1, 0);
goto end_shdz;
}
print_file( my_win, 9, 17, 1, rpt );
/* viewfile( 24, 80, 0, 0, rpt, "" ); */
wrefresh( my_win );
end_shdz:
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
int gen_shop_r_rpt ( char *filename, void * mer_list, int mer_cnt, long card_enable )
{
Edc_shop_dz cards[SETTLE_CARDS_NUM+1] = {
{"威士卡", }, {"万事达卡",},
{"运通卡", }, {"大莱卡", },
{"JCB 卡", },
{"长城信用卡",}, {"长城借计卡",},
{"银联信用卡",}, {"他行信用卡",}, {"他行借计卡",},
{"总 计",} };
$char sql[1024];
$char tmp[128];
$int cnt;
$S_merchant_card s_c;
$char s_s_date[11],e_s_date[11];
$char card_type[50];
$char sign_bankid[12];
char foreign[40],credit[5],debit[5],unite[40];
char mer_id[16], ter_id[9];
int i;
int ret=0;
long enable;
long batch_no;
FILE *fp;
if ( ! ( fp = fopen( filename, "w") ) ) {
daylog ( ERROR, "Open %s file error !", filename );
return( -1 );
}
enable = card_enable;
memset( card_type, 0, sizeof( card_type ) );
memset( foreign, 0, sizeof( foreign ) );
memset( credit, 0, sizeof( credit ) );
memset( debit, 0, sizeof( debit ) );
memset( unite, 0, sizeof( unite ) );
if ( enable & FOREIGN ){
sprintf( foreign, "%s", "\'51\',\'52\',\'53\',\'54\',\'55\'" );
strcat( card_type, foreign );
}
if ( enable & CREDIT ){
if( card_type[0] == 0 )
strcpy( credit, "\'01\'" );
else
strcpy( credit, ",\'01\'");
strcat( card_type, credit );
}
if ( enable & DEBIT ){
if( card_type[0] == 0 )
strcpy( debit, "\'02\'");
else
strcpy( debit, ",\'02\'");
strcat( card_type, debit );
}
$select * into $sy from sys_param;
if (SQLCODE) {
daylog(ERROR, "Error select sys_param![%d]", SQLCODE);
fclose(fp);
return(-1);
}
del_st_space("sys_param", &sy);
strcpy( s_s_date, s_date );
strcpy( e_s_date, e_date );
$ifndef wyz_mod_020408;
/*修改通过数据库查询判断使用库表名为通过上次清算结果文件查询*/
daylog(ERROR, "justy which table begin...");
$select count(*) into $cnt from cur_settle_ls
where snd_settle_date >= $s_s_date
and snd_settle_date <= $e_s_date;
daylog(ERROR, "justy which table end.");
if ( SQLCODE < 0 ) {
daylog( ERROR, "Fetch cur_settle_ls error!" );
fclose( fp );
return( -1 );
}
if ( SQLCODE == 100 )
strcpy( tmp, "his_settle_ls" );
else {
if ( cnt == 0 )
strcpy( tmp, "his_settle_ls" );
else
strcpy( tmp, "cur_settle_ls" );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?