end_day_rpt.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 2,216 行 · 第 1/4 页
EC
2,216 行
}
$else;
if ((ret = check_which_table(s_s_date, e_s_date)) == 0) {
strcpy(tmp, "cur_settle_ls");
}
else if (ret == 1) {
strcpy(tmp, "his_settle_ls");
}
else {
daylog( ERROR, "判断使用当前清算流水表或历史流水表进行清算失败!" );
fclose( fp );
return( -1 );
}
$endif;
FileHead_shop_r_rpt( fp, sy );
$ifdef wyz_mod_020403;
sprintf ( sql , "select * from %s \
where snd_settle_date <= '%s' \
and snd_settle_date >= '%s' \
and acq_bank_id = '%s' \
and edc_err_flag = '0' \
and tran_flag = '0' \
and saf_flag = '0' \
and tran_type not in ( %d,%d ) \
and card_type in ( %s ) ",
tmp, e_date, s_date, sy.bank_id,
PRE_AUTH, POS_VOID, card_type);
$else;
/*进清算流水表已过滤,不需要其它条件*/
sprintf(sql, "select * from %s \
where snd_settle_date <= '%s' \
and snd_settle_date >= '%s' \
and card_type in ( %s ) ",
tmp, e_date, s_date,
card_type);
$endif;
$ifdef wyz_mod_020403;
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 , ") " );
}
$else;
/*现在的系统状况,只允许一个商户, 而且不适应15位商户号*/
if (mer_cnt == 1) {
strcpy(sql+strlen(sql), "and merchant_id =");
strcpy(sql+strlen(sql), mer_list);
}
$endif;
$ifdef wyz_mod_020403;
strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, card_no, tran_amt ");
$else;
/*修改以适应cur_settle_ls或his_settle_ls表中的索引*/
strcpy(sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, invoice_no");
$endif;
$prepare s_sql from :sql;
$declare shop_r_rpt cursor for s_sql;
if (SQLCODE) {
daylog(ERROR, "Unable declare shop_r_rpt cursor![%d]", SQLCODE);
fclose(fp);
return(-1);
}
$open shop_r_rpt;
if (SQLCODE) {
daylog(ERROR, "Unable open shop_r_rpt![%d]", SQLCODE);
fclose(fp);
return(-1);
}
daylog(ERROR, "generate shop r rpt begin[%s(%s)]...",
G_cen_bankid, G_bankid);
FetBufSize=32000;
mer_id[0] = ter_id[0] = 0;
batch_no = -1;
while (1) {
$fetch shop_r_rpt into $ls;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "Error fetch shop_r_rpt![%d]", SQLCODE);
$close shop_r_rpt;
fclose(fp);
return(-1);
}
del_st_space("tran_ls", &ls);
if (strcmp(ls.merchant_id, mer_id) ) {
#ifdef wyz020427_mod
/* 不同商户分组打印 */
if (batch_no != -1) {
FileTail_shop_r_rpt(fp, cards);
for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
cards[i].cnt = 0;
cards[i].amt = 0.00;
cards[i].fee = 0.00;
cards[i].rebate = 0.00;
}
}
#else
#endif
if (strcmp(ls.merchant_id, mer_id)) {
/* 不同商户打印商户号、商户名子表头 */
$select merchant_cname, sign_bank_id
into :tmp, :sign_bankid from merchant_base
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(WARN, "Fetch name of %s error!",
ls.merchant_id);
#ifdef wyz020427_mod
strcpy(tmp, "Unknown");
#else
if (strcmp(G_cen_bankid, G_bankid)) {
continue;
}
else
strcpy(tmp, "Unknown");
#endif
}
DelSpace(tmp);
#ifdef wyz020427_mod
#else
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
if (strcmp(sign_bankid, G_bankid)) {
// daylog(DEBUG, "[%s]非本行商户", ls.merchant_id);
continue;
}
}
#endif
#ifdef wyz020427_mod
#else
/* 不同商户分组打印 */
if (batch_no != -1) {
FileTail_shop_r_rpt(fp, cards);
for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
cards[i].cnt = 0;
cards[i].amt = 0.00;
cards[i].fee = 0.00;
cards[i].rebate = 0.00;
}
}
#endif
for ( i = 0; i < SETTLE_CARDS_NUM; i ++ ) {
cards[i].cnt = 0;
cards[i].amt = 0.00;
cards[i].fee = 0.00;
cards[i].rebate = 0.00;
}
#ifdef zgx010817_modi
$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);
cards[0].rebate = s_c.visa_rebate / 100;
cards[1].rebate = s_c.master_rebate / 100;
cards[2].rebate = s_c.ae_rebate / 100;
cards[3].rebate = s_c.dinner_rebate / 100;
cards[4].rebate = s_c.jcb_rebate / 100;
cards[5].rebate = s_c.rmbc_rebate / 100;
cards[6].rebate = s_c.debit_rebate / 100;
#else
get_rebate(ls.merchant_id, VISA_CARD, &cards[CARD_VISA].rebate);
get_rebate(ls.merchant_id, MC_CARD, &cards[CARD_MC].rebate);
get_rebate(ls.merchant_id, AE_CARD, &cards[CARD_AE].rebate);
get_rebate(ls.merchant_id, DINER_CARD, &cards[CARD_DINER].rebate);
get_rebate(ls.merchant_id, JCB_CARD, &cards[CARD_JCB].rebate);
get_rebate(ls.merchant_id, CREDIT_CARD, &cards[CARD_BOC_CRE].rebate);
get_rebate(ls.merchant_id, DEBIT_CARD, &cards[CARD_BOC_DE].rebate);
get_rebate(ls.merchant_id, DEBIT_CARD, &cards[CARD_BOC_DE].rebate);
/* 他行回扣率暂依长城卡的回扣率为准 */
cards[CARD_BOC_UN_CRE].rebate = cards[CARD_BOC_CRE].rebate; /* 银联卡, 回扣率同长城卡 wubin 20010900 */
cards[CARD_OTH_CRE].rebate = cards[CARD_BOC_CRE].rebate;
cards[CARD_OTH_DE].rebate = cards[CARD_BOC_DE].rebate;
#endif
}
strcpy(mer_id, ls.merchant_id);
strcpy(ter_id, ls.terminal_id);
batch_no = ls.batch_no;
FileSubHead_shop_r_rpt(fp, ls, tmp);
}
if (ls.tran_amt != 0 ) {
add_rpt_total(ls, cards);
if (fp) FileDetail_shop_r_rpt(fp, ls);
}
}
if (batch_no != -1) {
FileTail_shop_r_rpt(fp, cards);
for ( i = 0; i < SETTLE_CARDS_NUM + 1; i ++ ) {
cards[i].cnt = 0;
cards[i].amt = 0.00;
cards[i].fee = 0.00;
cards[i].rebate = 0.00;
}
}
$close shop_r_rpt;
daylog(ERROR, "generate shop r rpt end.");
fclose( fp );
return(0);
}
/*
* 银行对帐报表
*/
int bank_d_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], rpt1[120], rpt2[120];
int mer_cnt, ret, i, ter_cnt;
sprintf(filename, "/tmp/.bank_d_rpt.%d", getpid());
scr_dump(filename);
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, "");
#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_bkdz;
}
if ((fread(&s_r, sizeof(SETTLE_RESULT), 1, fp)) != 1) {
daylog(ERROR, "Read etc/settle_result failed");
goto end_bkdz;
}
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_bkdz;
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_bkdz;
str2date(e_date1, e_date, "/");
#ifdef Wubin20020827_del
if (strcmp(s_date, e_date) != 0)
goto end_bkdz;
#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_bkdz;
if ( mer_id[0] > '9' || mer_id[0] < '0' )
mer_cnt = 0;
else
mer_cnt = 1;
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/bank_d_rpt_fg", path);
sprintf(rpt1, "%s/prt/bank_d_rpt_cre", path);
sprintf(rpt2, "%s/prt/bank_d_rpt_deb", path);
#else
sprintf(rpt, "%s/prt/%s/bank_d_rpt_fg", path, G_bankid);
sprintf(rpt1, "%s/prt/%s/bank_d_rpt_cre", path, G_bankid);
sprintf(rpt2, "%s/prt/%s/bank_d_rpt_deb", path, G_bankid);
#endif
daylog(DEBUG, "gen_bank_d_rpt_fg");
ret = gen_bank_d_rpt_fg( rpt, mer_id, mer_cnt );
if (ret < 0) {
h_winprompt(my_win, 17, 4, "生成银行对帐(外卡)报表出错!", 1, 0);
goto end_bkdz;
}
daylog(DEBUG, "gen_bank_d_rpt_cre");
ret = gen_bank_d_rpt_cre( rpt1, mer_id, mer_cnt );
if (ret < 0) {
h_winprompt(my_win, 17, 4, "生成银行对帐(信用卡)报表出错!", 1, 0);
goto end_bkdz;
}
daylog(DEBUG, "gen_bank_d_rpt_deb");
ret = gen_bank_d_rpt_deb( rpt2, mer_id, mer_cnt );
if (ret < 0) {
h_winprompt(my_win, 17, 4, "生成银行对帐(借计卡)报表出错!", 1, 0);
goto end_bkdz;
}
daylog(DEBUG, "gen_bank_d_rpt end");
print_file( my_win, 9, 17, 3, rpt, rpt1, rpt2 );
wrefresh( my_win );
end_bkdz:
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
int gen_bank_d_rpt_fg ( char *filename, void * mer_list, int mer_cnt )
{
$char sql[2048];
$char tmp[128];
$int cnt;
$S_merchant_card s_c;
$S_bank_acct bank_acct;
$char s_s_date[11],e_s_date[11];
$char sign_bankid[12];
$char bank_acct_id[12];
char mer_id[16], ter_id[9];
double count_je, count_dzje, total_je, total_dzje;
double visa, master, din, ae, jcb;
int i, count_bs, total_bs, cardtype;
long batch_no;
FILE *fp;
int ret=0;
if ( ! ( fp = fopen( filename, "w") ) ) {
daylog ( ERROR, "Open %s file error !", filename );
return( -1 );
}
memset(bank_acct_id, 0, sizeof(bank_acct_id));
get_bank_acct_id(bank_acct_id); /* 获取缺省汇率行号 */
$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);
#ifdef Wubin20020529_mod
$select * into $bank_acct from bank_acct where bank_id="0004";
#else
$select * into $bank_acct from bank_acct where bank_id = :bank_acct_id;
#endif
if (SQLCODE) {
$select * into $bank_acct from bank_acct where bank_id= :sy.bank_id;
if (SQLCODE) {
daylog(ERROR, "Error select bank_acct ![%d]", SQLCODE);
fclose(fp);
return(-1);
}
}
/* 获得银行的受理卡回扣率 */
visa =bank_acct.visa_discount * 0.01;
master =bank_acct.mast_discount * 0.01;
ae =bank_acct.ae_discount * 0.01;
din =bank_acct.din_discount * 0.01;
jcb =bank_acct.jcb_discount * 0.01;
daylog(DEBUG,"visa=[%lf],master=[%lf],jcb=[%lf],ae=[%lf],din=[%lf]",visa,master,jcb,ae,din);
strcpy( s_s_date, s_date );
strcpy( e_s_date, e_date );
$ifndef wyz_mod_020408;
$select count(*) into $cnt from cur_settle_ls
where snd_settle_date >= $s_s_date
and snd_settle_date <= $e_s_date;
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" );
}
$else;
if ((ret = check_which_table(s_s_date, e_s_date)) == 0) {
strcpy(tmp, "cur_settle_ls");
}
else if (ret == 1) {
strcpy(tmp, "his_settle_ls");
}
else {
daylog( ERROR, "判断使用当前清算流水表或历史清算流水表失败!" );
fclose( fp );
return( -1 );
}
$endif;
FileHead_bank_d_rpt( fp, sy, "国际卡" );
#ifdef wyz_mod_020403
sprintf ( sql , "select * from %s \
where snd_settle_date <= '%s' \
and snd_settle_date >= '%s' \
and acq_bank_id = '%s' \
and edc_err_flag = '0' \
and tran_flag = '0' \
and saf_flag = '0' \
and tran_type not in ( %d, %d ) \
and card_type in ( '51', '52', '53', '54', '55' ) ",
tmp, e_date, s_date,
sy.bank_id, POS_VOID, PRE_AUTH);
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 , ") " );
}
strcpy( sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, card_no, tran_amt ");
#else
sprintf ( sql , "select * from %s \
where snd_settle_date <= '%s' \
and snd_settle_date >= '%s' \
and card_type > '50'",
tmp, e_date, s_date);
if (mer_cnt > 0) {
strcpy(sql+strlen(sql), "and merchant_id = ");
strcpy(sql+strlen(sql), mer_list);
}
strcpy(sql+strlen(sql), "order by merchant_id, terminal_id, batch_no, invoice_no");
#endif
$prepare fg_sql from :sql;
$declare bank_d_rpt_fg cursor for fg_sql;
if (SQLCODE) {
daylog(ERROR, "Unable declare bank_d_rpt_fg cursor![%d]", SQLCODE);
fclose(fp);
return(-1);
}
$open bank_d_rpt_fg;
if (SQLCODE) {
daylog(ERROR, "Unable open bank_d_rpt_fg![%d]", SQLCODE);
fclose(fp);
return(-1);
}
count_bs = total_bs = 0;
count_je = count_dzje = total_je = total_dzje = 0;
mer_id[0] = ter_id[0] = 0;
batch_no = -1;
FetBufSize = 32000;
while (1) {
$fetch bank_d_rpt_fg into $ls;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "Error fetch bank_d_rpt_fg![%d]", SQLCODE);
$close bank_d_rpt_fg;
fclose(fp);
return(-1);
}
del_st_space("tran_ls", &ls);
if (strcmp(ls.merchant_id, mer_id) ) {
$select merchant_cname, sign_bank_id
into :tmp, :sign_bankid from merchant_base
where merchant_id = :ls.merchant_id;
if (SQLCODE) {
daylog(WARN, "Fetch name of %s error!",
ls.merchant_id);
#ifdef wyz020427_mod
#else
if (strcmp(G_cen_bankid, G_bankid))
continue;
else
#endif
strcpy(tmp, "Unknown");
}
DelSpace(tmp);
#ifdef wyz020427_mod
#else
DelSpace(sign_bankid);
if (strcmp(G_cen_bankid, G_bankid)) {
if (strcmp(G_bankid, sign_bankid))
continue;
}
#endif
if ( mer_id[0] )
FileSubHead_bank_d_rpt(fp, mer_id, count_bs, count_je);
strcpy(mer_id, ls.merchant_id);
strcpy(ter_id, ls.terminal_id);
total_bs += count_bs;
total_je += count_je;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?