📄 edc_no_settle.ec
字号:
/******************************************
* EDC异常批次处理
*
* 最后修改: 周国祥 2001/08/16
******************************************/
#include <stdio.h>
#include <curses.h>
#include "all.h"
#include "tool.h"
#include "macro_def.h"
$include "db_struct.h"
$include sqlca;
typedef struct {
double normal_amt;
int normal_cnt;
double refund_amt;
int refund_cnt;
double adjust_amt;
int adjust_cnt;
double amt;
int cnt;
} Edc_no_Batch;
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_s_date[11], e_s_date[11];
void FileHead_edc_no_settle(FILE *fp, S_sys_param sy)
{
char date[11], time[9];
char bank_name[128];
getdatef( date, "/" );
gettimef( time, ":" );
fprintf(fp, "%27s中国银行BTS系统信用卡\n", " ");
fprintf(fp, "%27s EDC未结帐统计报表\n\n", " ");
get_bank_name(sy.bank_id, sy.host_id, bank_name);
fprintf(fp, "%5.5s%-52s%s %s\n", sy.bank_id, bank_name, date, time);
fprintf(fp, "----------------------------------------------------------------------------\n");
fprintf(fp, "%-15s %-20s %8s %10s %10s\n"," 商户号", " 商户名称", " EDC 号 ", "未结帐笔数", "未结帐金额");
fprintf(fp, "----------------------------------------------------------------------------\n");
}
void FileSubHead_edc_no_settle(FILE *fp, char *merch_id, char *term_id, char *tmp, Edc_no_Batch batch)
{
fprintf(fp, "%-15s %20s %8s %7d %14.2lf\n", merch_id, tmp, term_id, batch.normal_cnt, batch.normal_amt);
}
void FileTail_edc_no_settle( FILE *fp )
{
fprintf(fp, "----------------------------------------------------------------------------\n");
}
void add_edc_no_batch(Edc_no_Batch *pbatch, S_tran_ls ls)
{
switch (ls.tran_type) {
case REFUND:
pbatch->refund_amt += ls.tran_amt;
pbatch->refund_cnt ++;
pbatch->amt -= ls.tran_amt;
pbatch->cnt ++;
break;
case ADJUST:
pbatch->adjust_amt += ls.tran_amt - ls.void_amt;
pbatch->adjust_cnt ++;
pbatch->amt += ls.tran_amt - ls.void_amt;
pbatch->cnt ++;
break;
default:
pbatch->normal_amt += ls.tran_amt;
pbatch->normal_cnt ++;
pbatch->amt += ls.tran_amt;
pbatch->cnt ++;
break;
}
}
int edc_no_settle()
{
$S_sys_param sys;
char cmd[300];
WINDOW *my_win;
char filename[128], path[80];
char mer_id[16], ter_id[11];
char rpt[120], fileout[200];
int mer_cnt, ret, i, ter_cnt;
static char pflag[3], first=1;
sprintf(filename, "/tmp/.edc_no_settle.%d", getpid());
scr_dump(filename);
disp_below("EDC 未结帐统计");
clear_wline(stdscr, LINES-1);
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "EDC 未结帐统计", 0, 0);
my_win = newwin(19, 80, 3, 0);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
wrefresh(my_win);
set_prompt(PROMPT_OFF);
/* getdatef(s_s_date, "/");
mvwprintw(my_win, 2, 4, "请输入起始日期: [%s]", s_s_date);
if (in_item(my_win, "", 2, 21, s_s_date, 10, NULL, NULL, 0, 0) !=
ENTER) goto end_shdz;
*/
getdatef(e_s_date, "");
mvwprintw(my_win, 3, 4, "请输入结束日期: [%s]", e_s_date);
if (in_item(my_win, "", 3, 21, e_s_date, 8, NULL, NULL, 0, 0) !=
ENTER) goto end_shdz;
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;
strcpy ( ter_id , "" );
mvwprintw(my_win, 5, 4, "请输入EDC编号: [%8s]", " ");
if (in_item(my_win, "", 5, 20, ter_id, 8, NULL, NULL, 0, 0) !=
ENTER) goto end_shdz;
if ( ter_id[0] > '9' || ter_id[0] < '0' )
ter_cnt = 0;
else
ter_cnt = 1;
daylog(DEBUG, "正在统计未结帐EDC情况, 交易日期: %s, 请稍候 ...", e_s_date );
mvwprintw(my_win, 6, 4, "正在统计未结帐EDC情况, 请稍候 ...");
wrefresh(my_win);
strcpy(path, getenv("WORKDIR"));
sprintf(rpt, "%s/prt/%s/edc_no_settle",
path, G_bankid);
ret = gen_no_edc_view( rpt, mer_id , mer_cnt, ter_id , ter_cnt );
if (ret < 0) {
h_winprompt(my_win, 17, 4, "统计未结帐EDC情况出错!", 1, 0);
goto end_shdz;
}
print_file( my_win, 9, 17, 1, rpt );
wrefresh( my_win );
end_shdz:
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
int gen_no_edc_view ( char *filename, void *mer_list , int mer_cnt, void *ter_list, int ter_cnt )
{
Edc_no_Batch batch;
$char sql[2048];
$char tmp[128];
$int cnt;
$S_merchant_card s_c;
char mer_id[16], ter_id[9];
int i, flag;
long batch_no;
FILE *fp;
if ( ! ( fp = fopen( filename, "w") ) ) {
daylog ( ERROR, "Open %s file error !", filename );
return( -1 );
}
$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);
FileHead_edc_no_settle( fp, sy );
strcpy(tmp, "cur_tran_ls");
sprintf ( sql , "select * from %s where acq_bank_id = '%s' and acq_host_id = '%s' and local_sys_date <= '%s' " , tmp , sy.bank_id, sy.host_id, e_s_date );
if ( mer_cnt > 0 ) {
strcpy ( sql+strlen(sql) , "and merchant_id in ( " );
for ( i=0 ; i < mer_cnt ; i++ ) {
sprintf ( tmp , "%s," , (char *)((long )mer_list+11*i) );
strcpy ( sql+strlen(sql) , tmp );
}
strcpy ( sql+strlen(sql)-1 , ") " );
}
if ( ter_cnt > 0 ) {
strcpy ( sql+strlen(sql) , "and terminal_id in ( '" );
for ( i=0 ; i < ter_cnt ; i++ ) {
sprintf ( tmp , "%s," , (char *)((long )ter_list+9*i) );
strcpy ( sql+strlen(sql) , tmp );
}
strcpy ( sql+strlen(sql)-1 , "') " );
}
daylog( ERROR, "%s", sql );
strcpy ( sql+strlen(sql) , "and snd_settle_flag = 'N' and terminal_id not like 'TEL%' and terminal_id not like 'TRM%' and terminal_id not like 'TLX%' and resp_code like '00%' order by merchant_id, terminal_id, card_no " );
$prepare s_sql from :sql;
$declare no_edc_rpt cursor for s_sql;
if (SQLCODE) {
daylog(ERROR, "Unable declare no_edc_rpt cursor![%d]", SQLCODE);
fclose(fp);
return(-1);
}
$open no_edc_rpt;
if (SQLCODE) {
daylog(ERROR, "Unable open no_edc_rpt![%d]", SQLCODE);
fclose(fp);
return(-1);
}
mer_id[0] = ter_id[0] = 0;
flag = 0;
memset(&batch, 0, sizeof(Edc_no_Batch));
while (1) {
$fetch no_edc_rpt into $ls;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "Error fetch no_edc_rpt![%d]", SQLCODE);
$close no_edc_rpt;
fclose(fp);
return(-1);
}
del_st_space("tran_ls", &ls);
if (strcmp(ls.merchant_id, mer_id) ||
strcmp(ls.terminal_id, ter_id) ) {
if ( flag == 1 )
FileSubHead_edc_no_settle(fp, mer_id, ter_id, tmp, batch);
if (strcmp(ls.merchant_id, mer_id)) {
$select merchant_cname
into :tmp from merchant_base
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(WARN, "Fetch name of %s error!",
ls.merchant_id);
strcpy(tmp, "Unknown");
}
DelSpace(tmp);
#ifdef Wubin_del_20011207
$select * into :s_c from merchant_card
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(WARN, "Fetch fee of %s error!",
ls.merchant_id);
}
del_st_space("merchant_card", &s_c);
#endif
flag = 1;
}
memset(&batch, 0, sizeof(Edc_no_Batch));
strcpy(mer_id, ls.merchant_id);
strcpy(ter_id, ls.terminal_id);
}
add_edc_no_batch(&batch, ls);
}
if ( mer_id[0] )
FileSubHead_edc_no_settle(fp, mer_id, ter_id, tmp, batch);
FileTail_edc_no_settle(fp);
$close no_edc_rpt;
fclose( fp );
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -