sdhfx.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 341 行
EC
341 行
/****************************************************
* 收单行分析 sdhfx()
*
* 最后修改: 周国祥 2001/08/26
* 最后修改: Wubin 2001/09/03
****************************************************/
#include <curses.h>
#include <tool.h>
#include "mytools.h"
#include "analysis.h"
$include "db_struct.h";
$include sqlca;
/* defined in cglfx.ec */
extern struct {
char bankid[12];
char hostid[3];
int count;
double amount;
} bankids[400];
double calc_double(char *);
int sdhfx ()
{
WINDOW *my_win;
$char sqlstr[1024];
$int i, count, total_count, bank_num;
$double amount, total_amount;
$short indi1, indi2;
$char bankid[16], hostid[3], bankname[50];
char table[30], in_date1[15], in_date2[15], str[100];
char date1[10], date2[10];
char ddcount[20],ddamount[20],dd_total_count[20],dd_total_amount[20];
char scr_dump_file[80];
S_sys_param sy;
char iss_bank[12];
int ret = 0;
ddcount[0] = 0;
ddamount[0] = 0;
dd_total_count[0] = 0;
dd_total_amount[0] = 0;
strcpy(audit_title,"收单行分析" );
count = total_count = 0;
amount = total_amount = 0;
sprintf( scr_dump_file, "/tmp/.screen_dump.%d", getpid() );
scr_dump ( scr_dump_file );
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,"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
set_prompt(PROMPT_OFF);
wrefresh(my_win);
if ( i = select_sys_param(&sy) ) {
errcall(ERROR, "查本地参数表错误[%d]!",i);
h_winprompt(my_win, 17, 4, "查本地参数表错误!",1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
if ( get2date( my_win, 2, 20, in_date1, in_date2, table ) < 0 ) {
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
date2str(in_date1, date1, "");
date2str(in_date2, date2, "");
strcpy(iss_bank,G_bankid);
if ((strcmp(G_cen_bankid, G_bankid)) == 0) {
mvwprintw(my_win, 3,22, "请输入银行行号: [%11s]", " ");
ret =in_item(my_win, "", 3, 39, iss_bank, 11, NULL, NULL, 0, 0);
if (ret != ENTER) {
delwin(my_win);
scr_restore(scr_dump_file);
unlink(scr_dump_file);
return(-1);
}
} else {
mvwprintw(my_win, 3,22, "请输入银行行号: [%s]", iss_bank);
}
DelSpace(iss_bank);
errcall(ERROR,"银行行号: [%s]",iss_bank);
mvwprintw(my_win, 4, 22, "处理中, 请稍候 ...");
wrefresh(my_win);
#ifdef Wubin20020607_mod
sprintf(sqlstr,
"select count(*), sum(tran_amt) from cur_tran_ls\
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' ",
date1, date2, sy.bank_id);
#else
sprintf(sqlstr,
"select count(*), sum(tran_amt) from cur_tran_ls\
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' ",
date1, date2, iss_bank);
#endif
$prepare s_comm0 from $sqlstr;
$declare sdhfx_cur0 cursor for s_comm0;
$open sdhfx_cur0;
if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
h_winprompt(my_win, 17, 4, "1数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
$fetch sdhfx_cur0 into $count:indi1, $amount:indi2;
if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
$close sdhfx_cur0;
h_winprompt(my_win, 17, 4, "2数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
if ( SQLCODE == SQLNOTFOUND || indi1 == -1 || indi2 == -1 ) {
count = 0;
amount = 0;
}
$close sdhfx_cur0;
#ifdef Wubin20020607_mod
sprintf(sqlstr,
"select count(*), sum(tran_amt) from his_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' ",
date1, date2, sy.bank_id);
#else
sprintf(sqlstr,
"select count(*), sum(tran_amt) from his_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' ",
date1, date2, iss_bank);
#endif
$prepare s_comm1 from $sqlstr;
$declare sdhfx_cur1 cursor for s_comm1;
$open sdhfx_cur1;
if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
h_winprompt(my_win, 17, 4, "4数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
$fetch sdhfx_cur1 into $total_count:indi1, $total_amount:indi2;
if ( SQLCODE && SQLCODE != SQLNOTFOUND ) {
$close sdhfx_cur1;
h_winprompt(my_win, 17, 4, "5数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
if ( SQLCODE == SQLNOTFOUND || indi1 == -1 || indi2 == -1 ) {
total_count = 0;
total_amount = 0;
}
$close sdhfx_cur1;
total_count += count;
total_amount += amount;
/* select count, amount of every bank from cur_tran_ls and his_tran_ls */
bank_num = 0;
#ifdef Wubin20020607_mod
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from his_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' \
group by acq_bank_id",
date1, date2, sy.bank_id);
#else
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from his_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' \
group by acq_bank_id",
date1, date2, iss_bank);
#endif
$prepare s_comm2 from $sqlstr;
$declare sdhfx_cur2 cursor for s_comm2;
$open sdhfx_cur2;
if ( SQLCODE ) {
errcall ( ERROR, "open sdhfx_cur err[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "6数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
while ( bank_num < 400 ) {
$fetch sdhfx_cur2 into $bankid, $count:indi1, $amount:indi2;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
$close sdhfx_cur2;
errcall ( ERROR, "fetch sdhfx_cur2 err[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "7数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
if ( indi1 != -1 && indi2 != -1 && count ) {
DelSpace(bankid);
strcpy ( bankids[bank_num].bankid, bankid );
strcpy ( bankids[bank_num].hostid, "00" );
bankids[bank_num].count = count;
bankids[bank_num].amount = amount;
bank_num ++;
}
}
$close sdhfx_cur2;
#ifdef Wubin20020607_mod
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from cur_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' \
group by acq_bank_id",
date1, date2, sy.bank_id);
#else
sprintf(sqlstr,
"select distinct acq_bank_id, count(*), sum(tran_amt) \
from cur_tran_ls \
where local_sys_date >= \'%s\' and local_sys_date <= \'%s\' \
and resp_code =\'00\' and iss_bank_id =\'%s\' \
group by acq_bank_id",
date1, date2, iss_bank);
#endif
$prepare s_comm3 from $sqlstr;
$declare sdhfx_cur3 cursor for s_comm3;
$open sdhfx_cur3;
if ( SQLCODE ) {
errcall ( ERROR, "open sdhfx_cur err[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "8数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
while ( bank_num < 400 ) {
$fetch sdhfx_cur3 into $bankid, $count:indi1, $amount:indi2;
if ( SQLCODE == SQLNOTFOUND )
break;
if ( SQLCODE ) {
$close sdhfx_cur3;
errcall ( ERROR, "fetch cglfx_cur err[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "9数据库操作错误!", 1,0);
delwin ( my_win );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( -1 );
}
DelSpace(bankid);
if ( indi1 != -1 && indi2 != -1 && count ) {
for ( i=0; i<bank_num; i++ )
if ( !strcmp ( bankids[i].bankid, bankid ) )
break;
if ( i >= bank_num ) {
DelSpace(bankid);
strcpy ( bankids[bank_num].bankid, bankid );
strcpy ( bankids[bank_num].hostid, "00" );
bankids[bank_num].count = count;
bankids[bank_num].amount = amount;
bank_num ++;
} else {
bankids[i].count += count;
bankids[i].amount += amount;
}
}
}
$close sdhfx_cur3;
sprintf(str,"%-7.7s%-18.18s%9s%8s%12s%8s",
"收单行","收单行名称","交易笔数","百分比","交易总额","百分比");
CreateList(16, 80, 6, 0, str);
ddcount[0] = '\0';
ddamount[0] = '\0';
dd_total_count[0] = '\0';
dd_total_amount[0] = '\0';
for ( i=0; i<bank_num; i++ ) {
strcpy ( bankid, bankids[i].bankid );
strcpy ( hostid, bankids[i].hostid );
get_bank_name(bankid, hostid, bankname);
mystruct.type=DDINT;
mystruct.ddnum.intnum=bankids[i].count;
strcpy(ddcount,add_demical(mystruct));
mystruct.type=DDDOUB;
mystruct.ddnum.doublenum=bankids[i].amount;
strcpy(ddamount,add_demical(mystruct));
mystruct.type=DDINT;
mystruct.ddnum.intnum=total_count;
strcpy(dd_total_count,add_demical(mystruct));
mystruct.type=DDDOUB;
mystruct.ddnum.doublenum=total_amount;
strcpy(dd_total_amount,add_demical(mystruct));
sprintf(str,"%-7.7s%-18.18s%9s %6.2f%%%12s %6.2f%%",
bankid, bankname, ddcount,
(double)bankids[i].count/total_count*100, ddamount,
bankids[i].amount/total_amount*100);
AddListItem(str,0);
}
AddListItem(" ",0);
sprintf(str,"%-25s%9s %14s ",
"总计", dd_total_count,dd_total_amount);
AddListItem(str,0);
h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓打印:CTRL_P 返回: ESC", 0, 0);
DispList(0);
FreeList();
delwin ( my_win );
clear_wline ( stdscr, LINES-1 );
scr_restore ( scr_dump_file );
unlink ( scr_dump_file );
return ( 0 );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?