📄 mcc_stat.ec
字号:
/****************************************************
* MCC 分析
*
* 最后修改: 周国祥 2001/08/24
* 最后修改: Wubin 2001/09/03
****************************************************/
#include <curses.h>
#include "mytools.h"
#include "tool.h"
#include "analysis.h"
$include "db_struct.h";
EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
extern char G_cen_bankid[12];
extern char G_bankid[12];
int mcc_stat()
{
WINDOW *my_win;
$char mcc[5];
$long count;
$double amount;
$char start_date[11], end_date[11], bankid[15/*12*/], hostid[3];
$char acq_bankid[12];
$char in_date1[15], in_date2[15];
char scr_dump_file[80], bankname[31], mccs[32][5], buf[80];
long counts[32];
double amounts[32];
char ddcount[20],ddamount[20],dd_total_count[20],dd_total_amount[20];
int num, i;
long total_count;
double total_amount;
S_sys_param sy;
strcpy(audit_title, "MCC 分析");
sprintf(scr_dump_file, "/tmp/.mcc_stat.%d", getpid());
scr_dump(scr_dump_file);
disp_below("MCC 分析");
clear_wline(stdscr, LINES-1);
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "MCC 分析", 0, 0);
my_win = newwin(19, 80, 3, 0);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
wrefresh(my_win);
set_prompt(PROMPT_OFF);
getdatef(in_date1, "");
strcpy(in_date2, in_date1);
mvwprintw(my_win, 2, 14, "日 期: [ ] 到 [ ]");
if (in_item(my_win, "", 2, 25, in_date1, 8, NULL, NULL, 0, 0) !=
ENTER) goto end;
if (in_item(my_win, "", 2, 39, in_date2, 8, NULL, NULL, 0, 0) !=
ENTER) goto end;
date2str(in_date1, start_date, "");
date2str(in_date2, end_date, "");
bankid[0] = 0;
acq_bankid[0] = 0;
strcpy(hostid, "00");
#ifdef Wubin20020709_mod
if (!select_sys_param(&sy)) {
strcpy(bankid, sy.bank_id);
strcpy(hostid, sy.host_id);
}
#else
strcpy(acq_bankid, G_cen_bankid);
strcpy(bankid, G_bankid);
#endif
mvwprintw(my_win, 3, 14, "联行行号: [%-11.11s][%-2.2s] [%-30.30s]", bankid, hostid, "");
if (strcmp(G_bankid, G_cen_bankid) == 0)
{
if (in_item(my_win, "", 3, 25, bankid, 11, NULL, NULL, 0, 0) !=
ENTER) goto end;
if (in_item(my_win, "", 3, 38, hostid, 2, NULL, NULL, 0, 0) !=
ENTER) goto end;
DelSpace(bankid);
DelSpace(hostid);
i = get_bank_name(bankid, hostid,bankname);
if (bankid[0] && i) {
h_winprompt(my_win, 17, 4, "无此联行行号!", 1, 0);
goto end;
}
mvwprintw(my_win, 3, 43, "%-30.30s", bankname);
wrefresh(my_win);
}
DelSpace(bankid);
DelSpace(hostid);
mvwprintw(my_win, 5, 14, "处理中, 请稍候 ...");
wrefresh(my_win);
if (strcmp(bankid, G_cen_bankid) == 0)
{
strcat(bankid, "%");
exec sql declare mcc_cur_1 cursor for
select mcc, count(*), sum(tran_amt)
from cur_tran_ls
where acq_bank_id like :bankid
and local_sys_date >= :start_date
and local_sys_date <= :end_date
and resp_code like '00%'
and edc_err_flag in ('0') /* 正常 */
and tran_flag in ('0','4') /* 交易标志:正常,已退货 */
and tran_type not in (4,12) /* 预授权,撤消 */
and tran_amt >= 0.01 /* 交易金额为0*/
group by mcc
order by mcc asc;
exec sql open mcc_cur_1;
if (sqlca.sqlcode) {
errcall ( ERROR, "Open mcc_cur_1[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
goto end;
}
num = 0;
total_count = 0;
total_amount = 0;
while (1) {
exec sql fetch mcc_cur_1 into :mcc, :count, :amount;
if (sqlca.sqlcode)
break;
DelSpace(mcc);
total_count += count;
total_amount += amount;
strcpy(mccs[num], mcc);
counts[num] = count;
amounts[num] = amount;
num++;
}
exec sql close mcc_cur_1;
exec sql declare mcc_cur_2 cursor for
select mcc, count(*), sum(tran_amt)
from his_tran_ls
where acq_bank_id like :bankid
and local_sys_date >= :start_date
and local_sys_date <= :end_date
and resp_code like '00%'
and edc_err_flag in ('0') /* 正常 */
and tran_flag in ('0','4') /* 交易标志:正常,已退货 */
and tran_type not in (4,12) /* 预授权,撤消 */
and tran_amt >= 0.01 /* 交易金额为0*/
group by mcc
order by mcc asc;
exec sql open mcc_cur_2;
if (sqlca.sqlcode) {
errcall(ERROR, "Open mcc_cur_2 error!");
h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
goto end;
}
while (1) {
exec sql fetch mcc_cur_2 into :mcc, :count, :amount;
if (sqlca.sqlcode)
break;
DelSpace(mcc);
total_count += count;
total_amount += amount;
for (i = 0; i < num; i++)
if (!strcmp(mcc, mccs[i])) break;
if (i == num) {
strcpy(mccs[i], mcc);
counts[i] = count;
amounts[i] = amount;
num++;
} else {
counts[i] += count;
amounts[i] += amount;
}
}
exec sql close mcc_cur_2;
}
else
{
strcat(bankid, "%");
exec sql declare mcc_cur_12 cursor for
select mcc, count(*), sum(tran_amt)
from cur_tran_ls
where acq_bank_id = :acq_bankid
and exists(select merchant_id from merchant_base
where sign_bank_id like :bankid and cur_tran_ls.merchant_id = merchant_base.merchant_id)
and local_sys_date >= :start_date
and local_sys_date <= :end_date
and resp_code like '00%'
and edc_err_flag in ('0') /* 正常 */
and tran_flag in ('0','4') /* 交易标志:正常,已退货 */
and tran_type not in (4,12) /* 预授权,撤消 */
and tran_amt >= 0.01 /* 交易金额为0*/
group by mcc
order by mcc asc;
exec sql open mcc_cur_12;
if (sqlca.sqlcode) {
errcall ( ERROR, "Open mcc_cur_12[%d]",SQLCODE );
h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
goto end;
}
num = 0;
total_count = 0;
total_amount = 0;
while (1) {
exec sql fetch mcc_cur_12 into :mcc, :count, :amount;
if (sqlca.sqlcode)
break;
DelSpace(mcc);
total_count += count;
total_amount += amount;
strcpy(mccs[num], mcc);
counts[num] = count;
amounts[num] = amount;
num++;
}
exec sql close mcc_cur_12;
exec sql declare mcc_cur_21 cursor for
select mcc, count(*), sum(tran_amt)
from his_tran_ls
where acq_bank_id = :acq_bankid
and exists(select merchant_id from merchant_base
where sign_bank_id like :bankid and his_tran_ls.merchant_id = merchant_base.merchant_id)
and local_sys_date >= :start_date
and local_sys_date <= :end_date
and resp_code like '00%'
and edc_err_flag in ('0') /* 正常 */
and tran_flag in ('0','4') /* 交易标志:正常,已退货 */
and tran_type not in (4,12) /* 预授权,撤消 */
and tran_amt >= 0.01 /* 交易金额为0*/
group by mcc
order by mcc asc;
exec sql open mcc_cur_21;
if (sqlca.sqlcode) {
errcall(ERROR, "Open mcc_cur_21 error!");
h_winprompt(my_win, 17, 4, "数据库操作错误!", 1, 0);
goto end;
}
while (1) {
exec sql fetch mcc_cur_21 into :mcc, :count, :amount;
if (sqlca.sqlcode)
break;
DelSpace(mcc);
total_count += count;
total_amount += amount;
for (i = 0; i < num; i++)
if (!strcmp(mcc, mccs[i])) break;
if (i == num) {
strcpy(mccs[i], mcc);
counts[i] = count;
amounts[i] = amount;
num++;
} else {
counts[i] += count;
amounts[i] += amount;
}
}
exec sql close mcc_cur_21;
}
CreateList(15, 58, 7, 11, "商户类型 交易笔数 百分比 交易金额 百分比");
for (i = 0; i < num; i++) {
mystruct.type=DDINT;
mystruct.ddnum.intnum=counts[i];
strcpy(ddcount,add_demical(mystruct));
mystruct.type=DDDOUB;
mystruct.ddnum.doublenum=amounts[i];
strcpy(ddamount,add_demical(mystruct));
sprintf(buf, "%-8.8s %8s %6.2f%% %14s %6.2f%%",
mccs[i],ddcount, (double)counts[i]/total_count*100,ddamount,
amounts[i]/total_amount*100);
AddListItem(buf, 0);
}
AddListItem("", 0);
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(buf, "%-8.8s %8s %14s ",
"总计",dd_total_count, dd_total_amount);
AddListItem(buf, 0);
h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓打印:CTRL_P 返回: ESC", 0, 0);
DispList(0);
FreeList();
end:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -