📄 c_qsdz_rpt.ec
字号:
/****************************************************
* 信用卡全省对帐报表(c_qsdz_rpt)
*
* 最后修改: 周国祥 2001/08/23
****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "macro_def.h"
#include "credit_rpt.h"
#include "all.h"
$include "db_struct.h"
$include sqlca;
$include sqlhdr;
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;
int init_bank_rpt_item ()
{
int i;
$int cnt;
$char b_id[12], h_id[3], b_id2[12], h_id2[3], b_name[31];
$select * into $sy from sys_param;
if ( SQLCODE ) {
daylog ( ERROR , "Error select sys_param %d" , SQLCODE );
return -1;
}
del_st_space("sys_param", &sy);
$select count(*) into $cnt from bank_info
where adm_bank_id=$sy.bank_id and adm_host_id=$sy.host_id
and (not (bank_id=$sy.bank_id and host_id=$sy.host_id));
if ( SQLCODE == 0 && sqlca.sqlerrd[2] == 0 )
cnt = 0;
else if ( SQLCODE < 0 ) {
daylog ( ERROR , "Error select count(*) from bank_info %d" ,\
SQLCODE );
return -1;
}
cnt+=2;
bank_rpt_cnt = cnt;
bank_rpt_item = (BANK_RPT_ITEM *)malloc (sizeof(BANK_RPT_ITEM)*cnt);
if ( bank_rpt_item == NULL ) {
daylog ( ERROR , "Error malloc null !" );
return -1;
}
memset ( (void *)bank_rpt_item , '\0' , sizeof(BANK_RPT_ITEM)*cnt );
strcpy ( bank_rpt_item[0].bank_id , sy.bank_id );
strcpy ( bank_rpt_item[0].host_id , sy.host_id );
get_bank_name(sy.bank_id, sy.host_id, b_name);
strcpyn ( bank_rpt_item[0].bank_name , b_name , 30 );
bank_rpt_item[0].up_credit_amt = 0.;
bank_rpt_item[0].up_debit_amt = 0.;
bank_rpt_item[0].down_credit_amt = 0.;
bank_rpt_item[0].down_debit_amt = 0.;
bank_rpt_item[0].in_fee_amt = 0.;
bank_rpt_item[0].out_fee_amt = 0.;
strcpy ( bank_rpt_item[cnt-1].bank_id , sy.adm_bank_id );
strcpy ( bank_rpt_item[cnt-1].host_id , sy.adm_host_id );
get_bank_name(sy.adm_bank_id, sy.adm_host_id, b_name);
strcpy ( bank_rpt_item[cnt-1].bank_name , b_name );
bank_rpt_item[cnt-1].up_credit_amt = 0.;
bank_rpt_item[cnt-1].up_debit_amt = 0.;
bank_rpt_item[cnt-1].down_credit_amt = 0.;
bank_rpt_item[cnt-1].down_debit_amt = 0.;
bank_rpt_item[cnt-1].in_fee_amt = 0.;
bank_rpt_item[cnt-1].out_fee_amt = 0.;
cnt--;
if ( cnt > 0 ) {
$declare bank_rpt cursor for
select bank_id, host_id, bank_name from bank_info
where adm_bank_id=$sy.bank_id and adm_host_id=$sy.host_id
and (not (bank_id=$sy.bank_id and host_id=$sy.host_id));
if ( SQLCODE ) {
daylog ( ERROR , "Error declare bank_rpt cursor %d ",\
SQLCODE );
return -1;
}
$open bank_rpt;
if ( SQLCODE ) {
daylog ( ERROR , "Error open bank_rpt %d " , SQLCODE );
return -1;
}
for ( i = 1 ; i < cnt ; i++ ) {
$fetch bank_rpt into $b_id, $h_id, $b_name;
if ( SQLCODE == 100 )
break;
if ( SQLCODE ) {
daylog ( ERROR , "Error fetch %d " , SQLCODE );
$close bank_rpt;
return -1;
}
DelSpace(b_id);
DelSpace(h_id);
DelSpace(b_name);
strcpy ( bank_rpt_item[i].bank_id , b_id );
strcpy ( bank_rpt_item[i].host_id , h_id );
strcpy ( bank_rpt_item[i].bank_name , b_name );
bank_rpt_item[i].up_credit_amt = 0.;
bank_rpt_item[i].up_debit_amt = 0.;
bank_rpt_item[i].down_credit_amt = 0.;
bank_rpt_item[i].down_debit_amt = 0.;
bank_rpt_item[i].in_fee_amt = 0.;
bank_rpt_item[i].out_fee_amt = 0.;
}
$close bank_rpt;
}
memset ( head_bank_id , 0 , sizeof(head_bank_id) );
memset ( head_host_id , 0 , sizeof(head_host_id) );
strcpy ( b_id , bank_rpt_item[0].bank_id );
strcpy ( h_id , bank_rpt_item[0].host_id );
for ( i=0 , head_bank_cnt=0 ; i < 12 ; i++ ) {
strcpy ( head_bank_id[i] , b_id );
strcpy ( head_host_id[i] , h_id );
head_bank_cnt++;
$select adm_bank_id, adm_host_id
into $b_id2, $h_id2 from bank_info
where bank_id = $b_id and host_id = $h_id;
if ( SQLCODE && SQLCODE != 100) {
daylog(ERROR, "Unable select head %s-%s %d ", b_id, h_id, SQLCODE);
break;
}
else if (SQLCODE == 100) {
break;
}
DelSpace(b_id2);
DelSpace(h_id2);
strcpy ( b_id , b_id2 );
strcpy ( h_id , h_id2 );
if ( !strcmp(b_id, head_bank_id[i]) &&
!strcmp(h_id, head_host_id[i]) )
break;
}
return 0;
}
int search_bankid ( char *dst_bankid, char *dst_hostid, int *dst )
{
$char b_id[12], h_id[3], b_id2[12], h_id2[3];
char head_bank_id2[12][12];
char head_host_id2[12][3];
int head_bank_cnt2=0;
int i, j, b_i;
int adjust_dst=0;
memset ( head_bank_id2 , 0 , sizeof(head_bank_id) );
memset ( head_host_id2 , 0 , sizeof(head_host_id) );
strcpy ( b_id , dst_bankid );
strcpy ( h_id , dst_hostid );
for ( i=0 ; i < 12 ; i++ ) {
strcpy ( head_bank_id2[i] , b_id );
strcpy ( head_host_id2[i] , h_id );
head_bank_cnt2++;
for ( j=0 ; j < head_bank_cnt ; j++ )
if ( !strcmp(head_bank_id[j], b_id) &&
!strcmp(head_host_id[j], h_id) )
break;
if ( j < head_bank_cnt ) break;
$select adm_bank_id, adm_host_id
into $b_id2, $h_id2
from bank_info
where bank_id = $b_id
and host_id = $h_id;
if ( SQLCODE ) {
j--;
adjust_dst=1;
daylog(ERROR, "Unable select head %s-%s %d", b_id, h_id, SQLCODE);
break;
}
DelSpace(b_id2);
DelSpace(h_id2);
strcpy ( b_id , b_id2 );
strcpy ( h_id , h_id2 );
if ( !strcmp(b_id, head_bank_id2[i]) &&
!strcmp(h_id, head_host_id2[i]) ) {
j = head_bank_cnt-1;
break;
}
}
if ( j == 0 && i == 0 )
b_i=0;
else if ( j == 0 ) {
for ( j=1 ; j < bank_rpt_cnt ; j++ )
if ( !strcmp(head_bank_id2[i-1], bank_rpt_item[j].bank_id) &&
!strcmp(head_host_id2[i-1], bank_rpt_item[j].host_id) )
break;
b_i=j;
j=0;
}
else
b_i=bank_rpt_cnt-1;
*dst = j+i+adjust_dst;
return b_i;
}
void bank_rpt_proc ()
{
int sd_i , fk_i;
int sd_d , fk_d;
sd_i = search_bankid ( ls.acq_bank_id, ls.acq_host_id, &sd_d );
fk_i = search_bankid ( ls.iss_bank_id, ls.acq_host_id, &fk_d );
if ( sd_d+fk_d > 1 ) {
if ( sd_d > 0 && fk_d != 0 ) {
bank_rpt_item[fk_i].in_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d);
bank_rpt_item[fk_i].in_fee_num+=(sd_d>0);
bank_rpt_total.in_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d);
bank_rpt_total.in_fee_num+=(fk_d>0);
}
if ( sd_d-1 > 0 ) {
bank_rpt_item[sd_i].out_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d-1);
bank_rpt_item[sd_i].out_fee_num+=(sd_d-1)>0;
bank_rpt_total.out_fee_amt+=(0.3/(sd_d+fk_d-1))*(sd_d-1);
bank_rpt_total.out_fee_num+=(sd_d-1)>0;
}
}
if ( sd_i != fk_i )
switch ( ls.tran_type ) {
case DEPOSIT:
case REFUND:
case TRANS_IN:
cre_tip = get_qs_tip ( ls );
bank_rpt_item[sd_i].up_debit_amt += ls.tran_amt+cre_tip;
bank_rpt_item[sd_i].up_debit_num++;
bank_rpt_total.up_debit_amt += ls.tran_amt+cre_tip;
bank_rpt_total.up_debit_num++;
bank_rpt_item[fk_i].down_credit_amt += ls.tran_amt+cre_tip;
bank_rpt_item[fk_i].down_credit_num++;
bank_rpt_total.down_credit_amt += ls.tran_amt+cre_tip;
bank_rpt_total.down_credit_num++;
break;
case PURCHASE:
case WITHDRAWAL:
case TRANS_OUT:
cre_tip = get_qs_tip ( ls );
bank_rpt_item[sd_i].up_credit_amt += ls.tran_amt+cre_tip;
bank_rpt_item[sd_i].up_credit_num++;
bank_rpt_total.up_credit_amt += ls.tran_amt+cre_tip;
bank_rpt_total.up_credit_num++;
bank_rpt_item[fk_i].down_debit_amt += ls.tran_amt+cre_tip;
bank_rpt_item[fk_i].down_debit_num++;
bank_rpt_total.down_debit_amt += ls.tran_amt+cre_tip;
bank_rpt_total.down_debit_num++;
break;
}
if ( sd_i != fk_i ) {
if ( ( bank_rpt_item[sd_i].up_debit_num+\
bank_rpt_item[sd_i].up_credit_num ) == 1 )
FileHead_bank_up_mx ( &(bank_rpt_item[sd_i]) );
FileDetail_bank_up_mx ( &(bank_rpt_item[sd_i]) );
if ( ( bank_rpt_item[fk_i].down_credit_num+\
bank_rpt_item[fk_i].down_debit_num ) == 1 )
FileHead_bank_down_mx ( &(bank_rpt_item[fk_i]) );
FileDetail_bank_down_mx ( &(bank_rpt_item[fk_i]) );
}
}
void end_bank_rpt ()
{
int i;
FileHead_bank_up_hz ();
FileHead_bank_down_hz ();
FileHead_bank_in_fee ();
FileHead_bank_out_fee ();
for ( i=0 ; i < bank_rpt_cnt ; i++ ) {
if ( i == bank_rpt_cnt-1 && \
!strcmp(bank_rpt_item[0].bank_id, bank_rpt_item[i].bank_id) &&
!strcmp(bank_rpt_item[0].host_id, bank_rpt_item[i].host_id) )
break;
if ( (bank_rpt_item[i].up_credit_num+\
bank_rpt_item[i].up_debit_num) != 0 ) {
FileTail_bank_up_mx ( &(bank_rpt_item[i]) );
FileDetail_bank_up_hz ( &(bank_rpt_item[i]) );
}
if ( (bank_rpt_item[i].down_credit_num+\
bank_rpt_item[i].down_debit_num) != 0 ) {
FileTail_bank_down_mx ( &(bank_rpt_item[i]) );
FileDetail_bank_down_hz ( &(bank_rpt_item[i]) );
}
if ( bank_rpt_item[i].in_fee_num != 0 )
FileDetail_bank_in_fee ( &(bank_rpt_item[i]) );
if ( bank_rpt_item[i].out_fee_num != 0 )
FileDetail_bank_out_fee ( &(bank_rpt_item[i]) );
}
FileTail_bank_up_hz ( &bank_rpt_total );
FileTail_bank_down_hz ( &bank_rpt_total );
FileTail_bank_in_fee ( &bank_rpt_total );
FileTail_bank_out_fee ( &bank_rpt_total );
}
int c_qsdz_rpt(char *e_date, char *f1, char *m1, char *f2, char *m2,
char *f3, char *f4)
{
$char sql[256];
$char tmp[50];
$char merch_id[16];
char settle_date[9];
char sign_bankid[12], sign_hostid[3];
int cur_flag = 1;
init_all();
if (init_bank_rpt_item() < 0) {
daylog(ERROR, "Unable init bank_rpt item!");
free_all();
return(-1);
}
$ifndef wyz020429_mod;
$select distinct snd_settle_date into :tmp from cur_settle_ls;
if (SQLCODE < 0) {
daylog(ERROR, "Fetch cur_settle_ls error!");
free_all();
return(-1);
}
if (SQLCODE == 100)
tmp[0] = 0;
DelSpace(tmp);
if (strcmp(e_date, tmp))
{
strcpy(tmp, "his_settle_ls");
cur_flag = 0;
}
else
{
strcpy(tmp, "cur_settle_ls");
cur_flag = 1;
}
$else;
get_settle_date(settle_date);
if (strcmp(e_date, settle_date) >= 0)
cur_flag = 1;
else
cur_flag = 0;
$endif;
strcpy(file1, f1);
strcpy(mx1, m1);
strcpy(file2, f2);
strcpy(mx2, m2);
strcpy(file3, f3);
strcpy(file4, f4);
strcpy(logic_date, e_date);
$ifdef wyz020429_mod;
sprintf(sql, "select * from %s where card_type = '%s' and snd_settle_date = '%s' and saf_flag = '0' and tran_flag = '0' and tran_type not in (%d,%d)", tmp, CREDIT_CARD, e_date, POS_VOID, PRE_AUTH);
$else;
if (cur_flag == 1)
sprintf(sql, "select distinct merchant_id from cur_settle_ls");
else
sprintf(sql, "select distinct merchant_id from his_settle_ls");
EXEC SQL PREPARE select_merch from :sql;
EXEC SQL DECLARE select_merch_cur CURSOR FOR select_merch;
if (SQLCODE) {
daylog(ERROR, "DECLARE cursor failed![%d]", SQLCODE);
free_all();
return(-1);
}
EXEC SQL OPEN select_merch_cur;
if (SQLCODE) {
daylog(ERROR, "OPEN cursor failed![%d]", SQLCODE);
free_all();
return(-1);
}
while(1) {
EXEC SQL FETCH select_merch_cur INTO :merch_id;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "FETCH cursor failed![%d]", SQLCODE);
$close select_merch_cur;
free_all();
close_all_file();
return(-1);
}
DelSpace(merch_id);
get_sign_bank(merch_id, sign_bankid, sign_hostid);
if (strcmp(G_cen_bankid, G_bankid)) {
if (strcmp(G_bankid, sign_bankid))
continue;
}
$endif;
if (cur_flag == 1)
sprintf(sql, "select * from cur_settle_ls \
where merchant_id = \'%s\' \
and card_type = \'%s\' \
and snd_settle_date = \'%s\'",
merch_id, CREDIT_CARD, e_date);
else
sprintf(sql, "select * from his_settle_ls \
where merchant_id = \'%s\' \
and card_type = \'%s\' \
and snd_settle_date = \'%s\'",
merch_id, CREDIT_CARD, e_date);
$prepare s_sql from :sql;
$declare settle_rpt cursor for s_sql;
if (SQLCODE) {
daylog(ERROR, "Unable decalre settle_rpt cursor![%d]", SQLCODE);
free_all();
return(-1);
}
$open settle_rpt;
if (SQLCODE) {
daylog(ERROR, "Unable open settle_rpt![%d]", SQLCODE);
free_all();
return(-1);
}
while (1) {
$fetch settle_rpt into $ls;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
daylog(ERROR, "Error fetch settle_rpt![%d]", SQLCODE);
$close settle_rpt;
free_all();
close_all_file();
return(-1);
}
del_st_space("tran_ls", &ls);
bank_rpt_proc();
}
$close settle_rpt;
$free settle_rpt;
#ifdef wyz020429_mod
#else
}
#endif
end_bank_rpt();
free_all();
close_all_file();
create_cre_bank_up_mx();
create_cre_bank_down_mx();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -