apppack

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>
#include "pbbase/pbtcpdeal.h"
#include "pbsysstrlen.h"
#include "pbstructdef.h"
#include "pbcomm.h"
#include "pbbase/pberrlog.h"
#include "pbbase/pbbaseipc.h"
#include "pbbase/pbmsgdeal.h"
#include "pbbase/pbsem.h"
#include "pbbase/pbshm.h"
#include "pbsys/pbconstval.h"
#include "pbbase/pbfuncroute.h"
EXEC SQL INCLUDE "pbappdb.h";
EXEC SQL INCLUDE "pbdbfunc.h";
#define ENTRY_ROW 100
#define ENTRY_COL 1024
EXEC SQL INCLUDE "pbbusi/busi004.h";
/*
 * Name  : Data_HostAddHead( char *hosttrancode_para )
 * Action: HostAddHead
 * Input : _tx_code
 * Output:
 * Return: 0-succ other-false
 * Auther: syd
 * Date  : 20130131
 */

int
Data_HostAddHead( char *hosttrancode_para )
{
    EXEC SQL BEGIN DECLARE SECTION;
    char tlrno[10+1];
    char instno[4+1];
    EXEC SQL END DECLARE SECTION;

    char hosttrancode[50];

    char pbjourno[10+1];
    char seq_no[10+1];
    char tmp_str[8+1];
    char ListSeqNo[10+1];
    char clrdate[8+1];
    char r_idx[200+1];
    char tran_date_time[10+1];
    char pbdate_str[8+1];
    char sys_trace_num[6+1];
    int  i=0;
    long rellen=0;
    int relen=0;

    memset( hosttrancode, 0x00, sizeof(hosttrancode) );

    memset( pbjourno, 0x00, sizeof(pbjourno) );
    memset( seq_no, 0x00, sizeof(seq_no) );
    memset( tmp_str, 0x00, sizeof(tmp_str) );
    memset( ListSeqNo, 0x00, sizeof(ListSeqNo) );
    memset( clrdate, 0x00, sizeof(clrdate) );
    memset( r_idx, 0x00, sizeof(r_idx) );
    memset(tran_date_time,0x00,sizeof(tran_date_time));
    memset(sys_trace_num,0x00,sizeof(sys_trace_num));
    memset(pbdate_str,0x00,sizeof(pbdate_str));

    /* set data for host head */
    GetPoolDataByName("PBSYS", "PbJourNo", 0, 0, pbjourno, &relen );
    if(strlen(pbjourno)<=8)
    {
        for(i=0;i<8-strlen(pbjourno);i++)
        {
            tmp_str[i]='0';

        }
        strcat(tmp_str,pbjourno);
        WriteLog( ERR_LVL, "tmp_str1[%s]", tmp_str );
    }
    else
    {
        memcpy(tmp_str,pbjourno+(strlen(pbjourno)-8),8);
        WriteLog( ERR_LVL, "tmp_str2[%s]", tmp_str );
    }
    sprintf(seq_no, "%s%s", "TT", tmp_str );
    trim(seq_no);
    sprintf(ListSeqNo, "%s%s", "PB", tmp_str );
    trim(ListSeqNo);
    WriteLog( ERR_LVL, "seq_no[%s]ListSeqNo[%s]", seq_no ,ListSeqNo );

    /* add by syd 20150119 */
    GetPoolDataByName("Bconnex8583","tran_date_time",0,0,tran_date_time,&relen);
    GetPoolDataByName("Bconnex8583","sys_trace_num",0,0,sys_trace_num,&relen);
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, pbdate_str, &relen );
    trim(tran_date_time);
    trim(sys_trace_num);
    trim(pbdate_str);
    WriteLog( ERR_LVL, "tran_date_time[%s]", tran_date_time );
    WriteLog( ERR_LVL, "sys_trace_num[%s]", sys_trace_num );
    WriteLog( ERR_LVL, "PbDate[%s]", pbdate_str );
    memcpy(clrdate,pbdate_str,4);
    memcpy(clrdate+4,tran_date_time,4);
    sprintf(r_idx,"%s%s",clrdate,sys_trace_num);
    trim(clrdate);
    trim(r_idx);
    WriteLog( ERR_LVL, "clrdate[%s]", clrdate );
    WriteLog( ERR_LVL, "r_idx[%s]", r_idx );
    PutPoolDataByName( "ABSHEAD", "ClrDate", 0, 0, clrdate , 0 );
    PutPoolDataByName( "ABSHEAD", "record_idx", 0, 0, r_idx , 0 );
    PutPoolDataByName( "ABSHEAD", "AddElements", 0, 0, "||||||||||" , 0 );
    PutPoolDataByName( "ABSHEAD", "PBDate", 0, 0, pbdate_str, 0 );
    strcpy( hosttrancode, hosttrancode_para );
    PutPoolDataByName( "ABSHEAD", "_tx_code", 0, 0, hosttrancode , 0 );
    PutPoolDataByName( "ABSHEAD", "chnl_no", 0, 0, "4", 0 );
    PutPoolDataByName( "ABSHEAD", "_tx_op_stat", 0, 0, "N", 0 );
    if(memcmp(hosttrancode,"9099",4)==0)
    {
        PutPoolDataByName( "ABSHEAD", "_seq_no", 0, 0, tmp_str, 0 );
        PutPoolDataByName( "ABSHEAD", "list_seqno", 0, 0, "", 0 );
    }
    else
    {
        PutPoolDataByName( "ABSHEAD", "_seq_no", 0, 0, seq_no, 0 );
    }
    PutPoolDataByName( "ABSHEAD", "AreaNo", 0, 0, "000000", 0 );
    PutPoolDataByName( "ABSHEAD", "ChnlNo", 0, 0, "001", 0 );
    PutPoolDataByName( "ABSHEAD", "BusiType", 0, 0, "001", 0 );
    if(memcmp(hosttrancode,"5710",4)==0 || memcmp(hosttrancode,"5715",4)==0 || memcmp(hosttrancode,"5718",4)==0)
    {   
        PutPoolDataByName( "ABSHEAD", "list_seqno", 0, 0, ListSeqNo, 0 );
    }   
    PutPoolDataByName( "ABSHEAD", "tran_flag", 0, 0, (char *)&rellen, 0 );
    
    memset( instno, 0x00, sizeof(instno) );
    memset( tlrno, 0x00, sizeof(tlrno) );
        
    EXEC SQL select virinstno,virtlrno into :instno, :tlrno from t_pb_busi_tlr where chnlno='001' and busitype='001' and areano='000000' and terminal_no='0000000000' and terminal_type = '1' and flag='00000000000000000000';
    if( SQLCODE != 0 )
    {
        WriteLog( ERR_LVL, "select instno,tlrno err SQLCODE[%d]!", SQLCODE );
    }
    rtrim(tlrno);
    WriteLog( ERR_LVL, "tlrno[%s]", tlrno );
    
    rtrim(instno);
    WriteLog( ERR_LVL, "instno[%s]", instno ); 
    
    if( (0>=strlen(instno)) || (0>=strlen(tlrno)) )
    {
        WriteLog( ERR_LVL, "instno[%s] tlrno[%s] err", instno, tlrno );
        return(-1);
    }
    
    PutPoolDataByName( "ABSHEAD", "organ_no", 0, 0, instno, 0 );
    PutPoolDataByName( "ABSHEAD", "_tlr_no", 0, 0, tlrno, 0 );
    
    return(0);
    
}   
    
    
/* Fuction  :  Pb_ftpData
 * Action   :  PB call host ftp sever
 * Input    :  filename
 * Output   :
 * Author   :
 * Date     : 2013/02/20
 */
int
Pb_ftpData(char *filename)
{
    int ret;
    char file_name[500+1];
    memset( file_name, 0x00, sizeof(file_name) );

    //sprintf(file_name, "%s/99/9996/%s",getenv("PRINTERDIR"),filename );
    sprintf(file_name, "%s/%s/%s/%s",getenv("PRINTERDIR"),getenv("INST_PATH"),getenv("INST_NO_PATH"),filename );

    //ret = TransFileRecv( "FTPFILE", file_name, "9996", 0 );
    ret = TransFileRecv( "FTPFILE", file_name, getenv("INST_NO_PATH"), 0 );
    if( ret !=0 )
    {
        WriteLog(ERR_LVL,"Receiving file failed!");
        return PB_ERR;
    }
    return PB_OK;
}


/* Fuction  :  Host_ftpData
 * Action   :  PB call host ftp sever, put file to host
 * Input    :  filename
 * Output   :
 * Author   :
 * Date     : 2013/02/20
 */
int
Host_ftpData(char *filename)
{
    int ret;
    char file_name[500+1];
    memset( file_name, 0x00, sizeof(file_name) );

    memcpy(file_name, filename, strlen(filename));

    //ret = TransFileSend( "FTPFILE", file_name, "9996", 0 );
    ret = TransFileSend( "FTPFILE", file_name, getenv("INST_NO_PATH"), 0 );
    if( ret !=0 )
    {
        WriteLog(ERR_LVL,"Sending file failed!");
        return PB_ERR;
    }
    return PB_OK;
}

const char *get_date_time( )
{
    EXEC SQL BEGIN DECLARE SECTION;
        dtime_t process_begin;
    EXEC SQL END DECLARE SECTION;
 
    static char t_time[30];
    char s_time[30];
    char tmp_time[30];

    memset( s_time, 0, sizeof(s_time) );
    memset( t_time, 0, sizeof(t_time) );
    memset( tmp_time, 0, sizeof(tmp_time) );

    dtcurrent( &process_begin );
    dttoasc( &process_begin, s_time );
    memcpy(tmp_time,s_time,10);
    strcpy(t_time,tmp_time);
    memset(tmp_time, 0x00, sizeof( tmp_time)); 
    memcpy(tmp_time,s_time+11,12);
    strcat(t_time, tmp_time);
    rtrim(t_time);
        
    WriteLog( ERR_LVL, "1111111t_time[%s]", t_time );
    
    return(t_time);
}

int
Get_pbjourno(char * const PbJourNo,char * const TTPbJourNo,char * const PBPbJourNo)
{
    int rellen=0;
    int i;  
    char tmp_str[8+1];
 
    memset(tmp_str,0x00,sizeof(tmp_str));

    GetPoolDataByName("PBSYS","PbJourNo",0,0,PbJourNo,&rellen);
    if(strlen(PbJourNo)<=8)
    {
        for(i=0;i<8-strlen(PbJourNo);i++)
        {
            tmp_str[i]='0';
        }
        strcat(tmp_str,PbJourNo);
        WriteLog( ERR_LVL, "tmp_str1[%s]", tmp_str );
    }
    else
    {   
        memcpy(tmp_str,PbJourNo+(strlen(PbJourNo)-8),8);
        WriteLog( ERR_LVL, "tmp_str2[%s]", tmp_str );
    }
    sprintf(TTPbJourNo, "%s%s", "TT", tmp_str );
    trim(TTPbJourNo);
    sprintf(PBPbJourNo, "%s%s", "PB", tmp_str );
    trim(PBPbJourNo);
    WriteLog( ERR_LVL, "PbJourNo[%s]TTPbJourNo[%s]PBPbJourNo[%s]",PbJourNo,TTPbJourNo,PBPbJourNo);

    return PB_OK;
}




/***************************************
    Function    :GetValue
    Action      :从串中取对应域的值
    Author      :WangQiao
    Date        :2010/03/24
    Paramater
    input_str   :输入
    index       :域号
    output_str  :输出
    seq_str     :分隔符
***************************************/
int
GetValue( char * const input_str, int index, char * const output_str, char * const seq_str)
{
    char *ptr= NULL;
    char *hptr = NULL;
    int i = 0;

    /*输出串初始化*/

    rtrim(seq_str);
    ltrim(seq_str);

    if (index <= 0 )
    {
        WriteLog( ERR_LVL, "域号必须为大于零的整数index[%d]!", index );
        return PB_ERR;
    }
    if( strlen(seq_str) == 0 )
    {
        WriteLog( ERR_LVL, "seq_str不能为空!");
        return PB_ERR;
    }

    hptr = input_str;

    ptr=strstr( input_str, seq_str );
    while( ptr != NULL )
    {
        i++;
        if( i == index )
            break;
        hptr = ptr+strlen(seq_str);
        if( *hptr == '\0' )
            break;
        ptr = NULL;
        ptr = strstr( hptr, seq_str );
    }
    
    if( i < index )
    {
        WriteLog( ERR_LVL, "串中最大域号为:[%d]", i);
        return PB_ERR;
    }

    strncpy( output_str, hptr, ptr-hptr );
    output_str[ptr-hptr] = '\0'; 
    rtrim( output_str );
    ltrim( output_str );
    
    return PB_OK;
}   
    
    
int get_out_currtype(char * const CurrType,char * const currtype)
{
    memset( currtype, 0x00, sizeof(currtype) );

    rtrim(CurrType);
    if(memcmp(CurrType,"01",2)==0)
        memcpy(currtype,"156",3);
    else if(memcmp(CurrType,"14",2)==0)
        memcpy(currtype,"840",3);
    else if(memcmp(CurrType,"41",2)==0)
        memcpy(currtype,"746",3);
    else if(memcmp(CurrType,"40",2)==0)
        memcpy(currtype,"418",3);
    else
        memcpy(currtype,"XXX",3);
        
    WriteLog( ERR_LVL, "currtype[%s]", currtype );
    
    return 0;
}   
        
int get_in_currtype(char * const CurrType,char * const currtype)
{   
    memset( currtype, 0x00, sizeof(currtype) );
    
    rtrim(CurrType);
    if(memcmp(CurrType,"156",3)==0)
        memcpy(currtype,"01",2);
    else if(memcmp(CurrType,"840",3)==0)
        memcpy(currtype,"14",2);
    else if(memcmp(CurrType,"746",3)==0)
        memcpy(currtype,"41",2);
    else if(memcmp(CurrType,"418",3)==0)
        memcpy(currtype,"40",2);
    else    
        memcpy(currtype,"XX",2);
    WriteLog( ERR_LVL, "currtype[%s]", currtype );

    return 0;
}

/* Fuction  :  Pb_ReturnClient8583
 * Action   :  Pb Return data to Client8583
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Pb_ReturnClient8583(char *ret_code)
{
    int ret = -1;
    int rellen = 0;
    char trancode[6+1];
    char tmp_str[100+1];

    char PAccNum[99+1];
    char ProcCode[6+1];
    char tran_amt[12+1];
    char tran_date_time[10+1];
    char sys_trace_num[6+1];
    char local_time[6+1];
    char local_tran_date[4+1];
    char settle_date[4+1];
    char merchant_type[4+1];
    char acq_ins_cou_code[3+1];
    char acq_ins_id[99+1];
    char track2_data[99+1];
    char retr_ref_num[12+1];
    char card_accp_termid[8+1];
    char tran_curr_code[3+1];
    char auth_num[6+1];
    char add_amt[99+1];

    char card_accp_name_loc[40+1];
    char orig_data_ele[42+1];

    memset(trancode,0x00,sizeof(trancode));
    memset(tmp_str,0x00,sizeof(tmp_str));

    memset(PAccNum,0x00,sizeof(PAccNum));
    memset(ProcCode,0x00,sizeof(ProcCode));
    memset(tran_amt,0x00,sizeof(tran_amt));
    memset(tran_date_time,0x00,sizeof(tran_date_time));
    memset(sys_trace_num,0x00,sizeof(sys_trace_num));
    memset(local_time,0x00,sizeof(local_time));
    memset(local_tran_date,0x00,sizeof(local_tran_date));
    memset(settle_date,0x00,sizeof(settle_date));
    memset(merchant_type,0x00,sizeof(merchant_type));
    memset(acq_ins_cou_code,0x00,sizeof(acq_ins_cou_code));
    memset(acq_ins_id,0x00,sizeof(acq_ins_id)); 
    memset(track2_data,0x00,sizeof(track2_data));
    memset(retr_ref_num,0x00,sizeof(retr_ref_num));
    memset(card_accp_termid,0x00,sizeof(card_accp_termid));
    memset(tran_curr_code,0x00,sizeof(tran_curr_code));
    memset(auth_num,0x00,sizeof(auth_num));
    memset(add_amt,0x00,sizeof(add_amt));
 
    memset(card_accp_name_loc,0x00,sizeof(card_accp_name_loc));
    memset(orig_data_ele,0x00,sizeof(orig_data_ele));
    
    WriteLog(ERR_LVL,"========= Pb_ReturnClient8583 begin =========");
    /* Add Public Information Returns */
    GetPoolDataByName("Bconnex8583","PAccNum",0,0,PAccNum,&rellen);
    GetPoolDataByName("Bconnex8583","ProcCode",0,0,ProcCode,&rellen);
    GetPoolDataByName("Bconnex8583","tran_amt",0,0,tran_amt,&rellen);
    GetPoolDataByName("Bconnex8583","tran_date_time",0,0,tran_date_time,&rellen);
    GetPoolDataByName("Bconnex8583","sys_trace_num",0,0,sys_trace_num,&rellen);
    rtrim(PAccNum);
    rtrim(ProcCode);
    rtrim(tran_amt);
    rtrim(tran_date_time);
    rtrim(sys_trace_num);
    WriteLog(ERR_LVL,"PAccNum[%s]",PAccNum);
    WriteLog(ERR_LVL,"ProcCode[%s]",ProcCode);
    WriteLog(ERR_LVL,"tran_amt[%s]",tran_amt);
    WriteLog(ERR_LVL,"tran_date_time[%s]",tran_date_time);
    WriteLog(ERR_LVL,"sys_trace_num[%s]",sys_trace_num);
    PutPoolDataByName("Bconnex8583","PAccNum",0,0,PAccNum,0);
    PutPoolDataByName("Bconnex8583","ProcCode",0,0,ProcCode,0);
    PutPoolDataByName("Bconnex8583","tran_amt",0,0,tran_amt,0);
    PutPoolDataByName("Bconnex8583","tran_date_time",0,0,tran_date_time,0);
    PutPoolDataByName("Bconnex8583","sys_trace_num",0,0,sys_trace_num,0);
    
    GetPoolDataByName("PBSYS", "TranCode", 0, 0, trancode, &rellen );
    rtrim(trancode);
    WriteLog(ERR_LVL ,"TranCode[%s]",trancode);

    if(memcmp(trancode,"001001",6)==0 || \
       memcmp(trancode,"001009",6)==0 || \
       memcmp(trancode,"001010",6)==0 || \
       memcmp(trancode,"001012",6)==0)
    {
        GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
        GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
        GetPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,&rellen);
        GetPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,&rellen);
        GetPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,&rellen);
        GetPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,&rellen);
        GetPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,&rellen);
        GetPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,&rellen);
        GetPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,&rellen);
        GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
        GetPoolDataByName("Bconnex8583","add_amt",0,0,add_amt,&rellen);
        GetPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,&rellen);
        rtrim(local_time);
        rtrim(local_tran_date);
        rtrim(settle_date);
        rtrim(merchant_type);
        rtrim(acq_ins_cou_code);
        rtrim(acq_ins_id);
        rtrim(track2_data);
        rtrim(retr_ref_num);
        rtrim(card_accp_termid);
        rtrim(tran_curr_code);
        rtrim(add_amt);
        trim(auth_num);
        WriteLog(ERR_LVL,"local_time[%s]",local_time);
        WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
        WriteLog(ERR_LVL,"settle_date[%s]",settle_date);
        WriteLog(ERR_LVL,"merchant_type[%s]",merchant_type);
        WriteLog(ERR_LVL,"acq_ins_cou_code[%s]",acq_ins_cou_code);
        WriteLog(ERR_LVL,"acq_ins_id[%s]",acq_ins_id);
        WriteLog(ERR_LVL,"track2_data[%s]",track2_data);
        WriteLog(ERR_LVL,"retr_ref_num[%s]",retr_ref_num);
        WriteLog(ERR_LVL,"card_accp_termid[%s]",card_accp_termid);
        WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
        WriteLog(ERR_LVL,"add_amt[%s]",add_amt);
        WriteLog(ERR_LVL,"auth_num[%s]",auth_num);

        PutPoolDataByName("Bconnex8583","local_time",0,0,local_time,0);
        PutPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,0);
        PutPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,0);
        PutPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,0);
        PutPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,0);
        PutPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,0);
        PutPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,0);
        PutPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,0);
        PutPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,0);
        PutPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,0);
        PutPoolDataByName("Bconnex8583","MsgType",0,0,"0210",0);
        if(strlen(add_amt)==0)
        {
            sprintf(tmp_str,"00  %s %0*d%s",tran_curr_code,12-strlen(add_amt),0,"");
            rtrim(tmp_str);
            PutPoolDataByName("Bconnex8583","add_amt",0,0,tmp_str,0);
            WriteLog(ERR_LVL,"***now*** add_amt[%s]",tmp_str);
        }
        if(strlen(auth_num)==0)
        {
            ret = GetAuthNo(auth_num);
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL, "GetAuthNo err!!!!" );
                Pb_ReturnClient8583("06");
                return PB_ERR;
            }
            rtrim(auth_num);
            PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
            WriteLog(ERR_LVL,"***now*** auth_num[%s]",auth_num);
        }
    }   
    else if(memcmp(trancode,"001003",6)==0 || \
            memcmp(trancode,"001007",6)==0 || \
            memcmp(trancode,"001008",6)==0 || \
            memcmp(trancode,"001011",6)==0)
    {   
        GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
        GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
        GetPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,&rellen);
        GetPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,&rellen);
        GetPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,&rellen);
        GetPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,&rellen);
        GetPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,&rellen);
        GetPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,&rellen);
        GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
        GetPoolDataByName("Bconnex8583","add_amt",0,0,add_amt,&rellen);
        GetPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,&rellen);
        rtrim(local_time);
        rtrim(local_tran_date);
        rtrim(settle_date);
        rtrim(merchant_type);
        rtrim(acq_ins_id);
        rtrim(track2_data);
        rtrim(retr_ref_num);
        rtrim(card_accp_termid);
        rtrim(tran_curr_code);
        rtrim(add_amt);
        trim(auth_num);
        WriteLog(ERR_LVL,"local_time[%s]",local_time);
        WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
        WriteLog(ERR_LVL,"settle_date[%s]",settle_date);
        WriteLog(ERR_LVL,"merchant_type[%s]",merchant_type);
        WriteLog(ERR_LVL,"acq_ins_id[%s]",acq_ins_id);
        WriteLog(ERR_LVL,"track2_data[%s]",track2_data);
        WriteLog(ERR_LVL,"retr_ref_num[%s]",retr_ref_num);
        WriteLog(ERR_LVL,"card_accp_termid[%s]",card_accp_termid);
        WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
        WriteLog(ERR_LVL,"add_amt[%s]",add_amt);
        WriteLog(ERR_LVL,"auth_num[%s]",auth_num);
            
        PutPoolDataByName("Bconnex8583","local_time",0,0,local_time,0);
        PutPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,0);
        PutPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,0);
        PutPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,0);
        PutPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,0);
        PutPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,0);
        PutPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,0);
        PutPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,0);
        PutPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,0);
        PutPoolDataByName("Bconnex8583","MsgType",0,0,"0210",0);
        if(strlen(add_amt)==0)
        {
            sprintf(tmp_str,"00  %s %0*d%s",tran_curr_code,12-strlen(add_amt),0,"");
            rtrim(tmp_str);
            PutPoolDataByName("Bconnex8583","add_amt",0,0,tmp_str,0);
            WriteLog(ERR_LVL,"***now*** add_amt[%s]",tmp_str);
        }
        if(strlen(auth_num)==0)
        {
            ret = GetAuthNo(auth_num);
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL, "GetAuthNo err!!!!" );
                Pb_ReturnClient8583("06");
                return PB_ERR;
            }
            rtrim(auth_num);
            PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
            WriteLog(ERR_LVL,"***now*** auth_num[%s]",auth_num);
        }
    }
    else if(memcmp(trancode,"001004",6)==0 || \
            memcmp(trancode,"001013",6)==0 || \
            memcmp(trancode,"001014",6)==0 || \
            memcmp(trancode,"001015",6)==0)
    {
        GetPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,&rellen);
        GetPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,&rellen);
        GetPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,&rellen);
        GetPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,&rellen);
        GetPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,&rellen);
        GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
        GetPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,&rellen);
        GetPoolDataByName("Bconnex8583","orig_data_ele",0,0,orig_data_ele,&rellen);
        rtrim(acq_ins_cou_code);
        rtrim(acq_ins_id);
        rtrim(track2_data);
        rtrim(retr_ref_num);
        rtrim(card_accp_termid);
        rtrim(tran_curr_code);
        rtrim(card_accp_name_loc);
        rtrim(orig_data_ele);
        WriteLog(ERR_LVL,"acq_ins_cou_code[%s]",acq_ins_cou_code);
        WriteLog(ERR_LVL,"acq_ins_id[%s]",acq_ins_id);
        WriteLog(ERR_LVL,"track2_data[%s]",track2_data);
        WriteLog(ERR_LVL,"retr_ref_num[%s]",retr_ref_num);
        WriteLog(ERR_LVL,"card_accp_termid[%s]",card_accp_termid);
        WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
        WriteLog(ERR_LVL,"card_accp_name_loc[%s]",card_accp_name_loc);
        WriteLog(ERR_LVL,"orig_data_ele[%s]",orig_data_ele);

        PutPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,0);
        PutPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,0);
        PutPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,0);
        PutPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,0);
        PutPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,0);
        PutPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,0);
        PutPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,0);
        PutPoolDataByName("Bconnex8583","orig_data_ele",0,0,orig_data_ele,0);
        PutPoolDataByName("Bconnex8583","MsgType",0,0,"0430",0);
    }   
    else
    {   
        WriteLog(ERR_LVL,"get TranCode failed!");
    }       
    PutPoolDataByName("Bconnex8583","resp_code",0,0,ret_code,0);
    WriteLog(ERR_LVL,"***now*** RetCode[%s]",ret_code);
                
    WriteLog(ERR_LVL,"========= Pb_ReturnClient8583 end =========");
            
    return PB_OK;
            
}           
        
    
int 
errcode_transform(char *errcode,char * const ret_code)
{           
    EXEC SQL BEGIN DECLARE SECTION; 
        char err_code[10+1];
        char tmp_str[20+1];
    EXEC SQL END DECLARE SECTION;
        
    int ret = -1;
    char recode[2+1];
        
    memset(err_code,0x00,sizeof(err_code));
    memset(tmp_str,0x00,sizeof(tmp_str));
    memset(recode,0x00,sizeof(recode));
        
    memcpy(err_code,errcode,strlen(errcode));
    rtrim(err_code);
    WriteLog(ERR_LVL,"errcode[%s]",err_code);
        
    WriteLog(ERR_LVL,"========= ****** errcode_transform begin ****** =========");
    EXEC SQL select retcode into :tmp_str from t_pb_busi_ret_code where areano='000000' and chnlno='001' and hostretcode=:err_code;
    WriteLog( ERR_LVL, "select retcode from t_pb_busi_ret_code where areano='000000' and chnlno='001' and hostretcode='%s' SQLCODE[%d]!", err_code,SQLCODE );
    if( SQLCODE != 0 )
    {   
        WriteLog( ERR_LVL, "Data is not found, the default return!!!" );
        EXEC SQL select retcode into :tmp_str from t_pb_busi_ret_code where areano='000000' and chnlno='001' and hostretcode='DFT';
        WriteLog( ERR_LVL, "select retcode from t_pb_busi_ret_code where areano='000000' and chnlno='001' and hostretcode='DFT' SQLCODE[%d]!",SQLCODE );
        if( SQLCODE != 0 )
        {   
            WriteLog( ERR_LVL, "errcode transform err!!!, the default return!!!" );
            memcpy(tmp_str,"96",2);
        }
    }   
    rtrim(tmp_str);
    memcpy(ret_code,tmp_str,2);
    WriteLog( ERR_LVL, "ret_code[%s]", ret_code );

    WriteLog(ERR_LVL,"========= ******  errcode_transform end  ****** =========");

    return PB_OK;
}

/* Fuction  :  Pb_Amt_Exch8583
 * Action   :  Pb  amount exchange,call 5716
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Pb_Amt_Exch8583(char *currtype,char *amt,char * const nowamt)
{
    int ret = -1;
    int rellen = 0;

    long transtate = 0;
    char retmsg[2000+1];
    char out_recode[2+1];
    char errcode[10+1];
    char errmessage[300+1];
    char tag_amt[22+1];
    char exch_rate[9+1];

    memset(retmsg,0x00,sizeof(retmsg));
    memset(out_recode,0x00,sizeof(out_recode));
    memset(errcode,0x00,sizeof(errcode));
    memset(errmessage,0x00,sizeof(errmessage));
    memset(tag_amt,0x00,sizeof(tag_amt));
    memset(exch_rate,0x00,sizeof(exch_rate));

    WriteLog(ERR_LVL,"========= ****** Pb_Amt_Exch8583 begin ****** =========");

    rtrim(currtype);
    rtrim(amt);
    WriteLog(ERR_LVL,"currtype[%s]",currtype);
    WriteLog(ERR_LVL,"amt[%s]",amt);

    /* HostAddHead */
    ret = Data_HostAddHead("5716");
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"HostAddHead failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }

    /* HostAddBody */
    PutPoolDataByName("FDWH","soc_currtype",0,0,currtype,0);
    PutPoolDataByName("FDWH","soc_amt",0,0,amt,0);
    PutPoolDataByName("FDWH","tag_currtype",0,0,currtype,0);
    PutPoolDataByName("FDWH","CR_flag",0,0,"0",0);
    PutPoolDataByName("FDWH","BS_flag",0,0,"0",0);
    PutPoolDataByName("FDWH","amt_rate",0,0,"100",0);
    PutPoolDataByName("FDWH","tag_CR_flag",0,0,"1",0);
 
    /* CallHost */
    WriteLog( DEBUG_LVL0, "-----------fml dopack-------------");
    ret = Data_PackFml("810|5716|0");
    if( ret < 0 )
    {
        Pb_ReturnClient8583("96");
        WriteLog( ERR_LVL, "fml dopack err! " );
        return PB_ERR;
    }

    WriteLog( DEBUG_LVL0, "-------------call host-------------");
    ret = Comm_AcCallFml( "810|PBSVC" );
    if( ret < 0 )
    {
        Pb_ReturnClient8583("96");
        WriteLog( ERR_LVL, "call host err! " );
        return PB_ERR;
    }
    
    WriteLog( DEBUG_LVL0, "-----------fml unpack-----------");
    ret = Data_UnpackFml("810|5716|1");
    if( ret < 0 )
    {
        Pb_ReturnClient8583("96");
        WriteLog( ERR_LVL, "fml unpack err! " );
        return PB_ERR;
    }
    
    GetPoolDataByName("FDWH","transtate",0,0,&transtate,&rellen);
    WriteLog(ERR_LVL ,"transtate[%ld]",transtate);
    GetPoolDataByName("FDWH", "retmsg", 0, 0, retmsg, &rellen );
    rtrim(retmsg);
    WriteLog(ERR_LVL ,"retmsg[%s]",retmsg);
    
    if(transtate!=0)
    {
        WriteLog(ERR_LVL,"chech failed! msg[%s]",retmsg);
        sscanf(retmsg,"[%[^]]]:%[^'']",errcode,errmessage);
        trim(errcode);
        trim(errmessage);
        if(strlen(errcode)==0)
        {
            sscanf(retmsg,"%*[^0-9]%*[0-9]%*[^0-9]%[0-9]]:%[^'']",errcode,errmessage);
            trim(errcode);
            trim(errmessage);
        }
        WriteLog(ERR_LVL ,"errcode[%s]errmsg[%s]transtate[%ld]",errcode,errmessage,transtate);
        errcode_transform(errcode,out_recode);
        Pb_ReturnClient8583(out_recode);
        return PB_ERR;
    }
    else
    {
        GetPoolDataByName("FDWH", "tag_amt", 0, 0, tag_amt, &rellen );
        rtrim(tag_amt);
        WriteLog(ERR_LVL ,"tag_amt[%s]",tag_amt);
        GetPoolDataByName("FDWH", "exch_rate", 0, 0, exch_rate, &rellen );
        rtrim(exch_rate);
        WriteLog(ERR_LVL ,"exch_rate[%s]",exch_rate);
        if(strlen(tag_amt)<11)
        {
            memcpy(nowamt,tag_amt,strlen(tag_amt));
        }
        else
        {
            memcpy(nowamt,tag_amt,11);
        }
        WriteLog(ERR_LVL ,"**********amt[%s]**********",nowamt);
    }

    WriteLog(ERR_LVL,"========= ******  Pb_Amt_Exch8583 end  ****** =========");

    return PB_OK;

}

/*
* 取系统追踪号
*/
int
GetSysTraceNo(char *systraceno)
{
    EXEC SQL BEGIN DECLARE SECTION;
    long             jour_no;
    EXEC SQL END DECLARE SECTION;

    int  i = 0;

    EXEC SQL SELECT  SystemTraceAuditNumber.nextval
         INTO    :jour_no
         FROM    dual;
    if(SQLCODE)
    {
            WriteLog(ERR_LVL,"ERROR: GetSysTraceNo:SystemTraceAuditNumber.nextval ERR  [%s] %ld\n", SQLMSG,SQLCODE);
            return PB_ERR;
    }

    if ( jour_no < 0  || jour_no > 999999)
    {
        WriteLog( DEBUG_LVL0,"INFO:   ERROR_Value[%ld] time[%d]",jour_no,i);
        return PB_ERR ;
    }   
        
    sprintf(systraceno,"%06ld",jour_no);
    
    return PB_OK;
}   
        
        
/*      
* 取日期天数
*/      
int     
GetDayCount(char *startDay,char *countDay)
{       
    int idate1=0,idate2=0;
        
    rdefmtdate(&idate1, "yyyymmdd",startDay);
    rdefmtdate(&idate2, "yyyymmdd",countDay);
            
    return (idate1 - idate2 + 1);
}       
    
/*
* 取授权码
*/
int 
GetAuthNo(char *authno)
{
    EXEC SQL BEGIN DECLARE SECTION;
    long             jour_no;
    EXEC SQL END DECLARE SECTION;

    int  i = 0;

    EXEC SQL SELECT  AuthorizationNumber.nextval
         INTO    :jour_no
         FROM    dual;
    if(SQLCODE)
    {
            WriteLog(ERR_LVL,"ERROR: GetAuthorizationNumber:AuthorizationNumber.nextval ERR  [%s] %ld\n", SQLMSG,SQLCODE);
            return PB_ERR;
    }
         
    if ( jour_no < 0  || jour_no > 999999)
    {
        WriteLog( DEBUG_LVL0,"INFO:   ERROR_Value[%ld] time[%d]",jour_no,i);
        return PB_ERR ;
    }       
    
    sprintf(authno,"%06ld",jour_no);
    
    return PB_OK;
}       
        
/*
* 取内部帐机构元素
* 输入:区域号、渠道号、业务类型、终端号、终端类型
* 输出:机构号
*/
int
GetInstNo(char *areano,char *chnlno,char *busitype,char *terminal_no,char *terminal_type,char *inst)
{
    int rellen=0;
    EXEC SQL BEGIN DECLARE SECTION;
        char instno[4+1];
        char tm_no[30+1];
        char tm_type[1+1];
        char area_no[6+1];
        char chnl_no[3+1];
        char busi_type[3+1];
    EXEC SQL END DECLARE SECTION;

    memset(instno,0x00,sizeof(instno));
    memset(tm_no,0x00,sizeof(tm_no));
    memset(tm_type,0x00,sizeof(tm_type));
    memset(area_no,0x00,sizeof(area_no));
    memset(chnl_no,0x00,sizeof(chnl_no));
    memset(busi_type,0x00,sizeof(busi_type));

    memcpy(area_no,areano,strlen(areano));
    memcpy(chnl_no,chnlno,strlen(chnlno));
    memcpy(busi_type,busitype,strlen(busitype));
    memcpy(tm_no,terminal_no,strlen(terminal_no));
    memcpy(tm_type,terminal_type,strlen(terminal_type));
    rtrim(tm_no);
    rtrim(tm_type);
    rtrim(area_no);
    rtrim(chnl_no);
    rtrim(busi_type);
    WriteLog( ERR_LVL, "areano[%s]", area_no );
    WriteLog( ERR_LVL, "busitype[%s]", busi_type );
    WriteLog( ERR_LVL, "chnlno[%s]", chnl_no );
    WriteLog( ERR_LVL, "terminal_no[%s]", tm_no );
    WriteLog( ERR_LVL, "tm_type[%s]", tm_type );

    EXEC SQL select accinstno into :instno from t_pb_busi_tlr where areano=:area_no and chnlno=:chnl_no and busitype=:busi_type
           and terminal_no=:tm_no and terminal_type=:tm_type;
    if( SQLCODE != 0 )
    {
        WriteLog( ERR_LVL, "select instno err SQLCODE[%d]!", SQLCODE );
        return PB_ERR;
    }
    rtrim(instno);
    WriteLog( ERR_LVL, "instno[%s]", instno );
    memcpy(inst,instno,strlen(instno));
    WriteLog( ERR_LVL, "ret instno[%s]!!!!!!", inst );
    return PB_OK;
}

/*
* 取内部帐分录尾
* 输入:区域号、渠道号、业务类型、交易码、记账类型、现转类型、币种、分录类型、账类、序号
* 输出:分录尾
*/
int
GetEntryTail(char *areano,char *chnlno,char *busitype,char *trancode,char *acc_flag,char *csh_tsf_type,char *curr_type,char *entry_type,char *acc_type,char *sort_no,char *entry_tail)
{   
    int rellen=0;
    EXEC SQL BEGIN DECLARE SECTION;
        char entry[25+1];
        char area_no[6+1];
        char chnl_no[3+1];
        char busi_type[3+1];
        char tcode[20+1];
        char ac_flag[1+1];
        char ct_type[1+1];
        char c_type[3+1];
        char e_type[1+1];
        char ac_type[1+1];
        char s_no[4+1];
    EXEC SQL END DECLARE SECTION;
    
    memset(entry,0x00,sizeof(entry));
    memset(area_no,0x00,sizeof(area_no));
    memset(chnl_no,0x00,sizeof(chnl_no));
    memset(busi_type,0x00,sizeof(busi_type));
    memset(tcode,0x00,sizeof(tcode));
    memset(ac_flag,0x00,sizeof(ac_flag));
    memset(ct_type,0x00,sizeof(ct_type));
    memset(c_type,0x00,sizeof(c_type));
    memset(e_type,0x00,sizeof(e_type));
    memset(ac_type,0x00,sizeof(ac_type));
    memset(s_no,0x00,sizeof(s_no));
    
    memcpy(area_no,areano,strlen(areano));
    memcpy(chnl_no,chnlno,strlen(chnlno));
    memcpy(busi_type,busitype,strlen(busitype));
    memcpy(tcode,trancode,strlen(trancode));
    memcpy(ac_flag,acc_flag,strlen(acc_flag));
    memcpy(ct_type,csh_tsf_type,strlen(csh_tsf_type));
    memcpy(c_type,curr_type,strlen(curr_type));
    memcpy(e_type,entry_type,strlen(entry_type));
    memcpy(ac_type,acc_type,strlen(acc_type));
    memcpy(s_no,sort_no,strlen(sort_no)); 
    rtrim(area_no);
    rtrim(chnl_no);
    rtrim(busi_type);
    rtrim(tcode);
    rtrim(ac_flag);
    rtrim(ct_type);
    rtrim(c_type);
    rtrim(e_type);
    rtrim(ac_type);
    rtrim(s_no);
    WriteLog( ERR_LVL, "areano[%s]", area_no );
    WriteLog( ERR_LVL, "chnlno[%s]", chnl_no );
    WriteLog( ERR_LVL, "busitype[%s]", busi_type );
    WriteLog( ERR_LVL, "trancode[%s]", tcode );
    WriteLog( ERR_LVL, "acc_flag[%s]", ac_flag );
    WriteLog( ERR_LVL, "csh_tsf_type[%s]", ct_type );
    WriteLog( ERR_LVL, "curr_type[%s]", c_type );
    WriteLog( ERR_LVL, "entry_type[%s]", e_type );
    WriteLog( ERR_LVL, "acc_type[%s]", ac_type );
    WriteLog( ERR_LVL, "sort_no[%s]", s_no );

    EXEC SQL select acc into :entry from t_pb_busi_entry where areano=:area_no and chnlno=:chnl_no and busitype=:busi_type
           and trancode=:tcode and acc_flag=:ac_flag and csh_tsf_type=:ct_type and curr_type=:c_type and entry_type=:e_type
            and acc_type = :ac_type and sort_no=:s_no;
    if( SQLCODE != 0 )
    {
        WriteLog( ERR_LVL, "select entry err SQLCODE[%d]!", SQLCODE );
        return PB_ERR;
    }
    rtrim(entry);
    WriteLog( ERR_LVL, "entry[%s]", entry );
    memcpy(entry_tail,entry,strlen(entry));
    WriteLog( ERR_LVL, "entry_tail[%s]!!!!!!", entry_tail );
    return PB_OK;
}

/*
* 取内部帐分录
* 输入:交易码、记账类型、现转类型、币种、分录类型、序号
* 输出:内部帐分录
*/
int
GetEntry(char *trancode,char *acc_flag,char *csh_tsf_type,char *curr_type,char *entry_type,char *sort_no,char *entry)
{
    int ret = -1;
    int rellen=0;
    char instno[4+1];
    char entry_tail[25+1];
    char areano[6+1];
    char chnlno[3+1];
    char busitype[3+1];

    memset(instno,0x00,sizeof(instno));
    memset(entry_tail,0x00,sizeof(entry_tail));
    memset(areano,0x00,sizeof(areano));
    memset(chnlno,0x00,sizeof(chnlno));
    memset(busitype,0x00,sizeof(busitype));

    GetPoolDataByName("PBSYS", "AreaNo", 0, 0, areano, &rellen );
    GetPoolDataByName("PBSYS", "BusiType", 0, 0, busitype, &rellen );
    GetPoolDataByName("PBSYS", "RChnlNo", 0, 0, chnlno, &rellen );
    rtrim(areano);
    rtrim(chnlno);
    rtrim(busitype);
    WriteLog( ERR_LVL, "areano[%s]", areano );
    WriteLog( ERR_LVL, "chnlno[%s]", chnlno );
    WriteLog( ERR_LVL, "busitype[%s]", busitype );
    
    ret = GetInstNo(areano,chnlno,busitype,"0000000000","1",instno);
    if( ret != PB_OK ) 
    {
        WriteLog( ERR_LVL, "GetInstNo err!!!!" );
        return PB_ERR; 
    }
    ret = GetEntryTail(areano,chnlno,busitype,trancode,acc_flag,csh_tsf_type,curr_type,entry_type,"0",sort_no,entry_tail);
    if( ret != PB_OK )
    {      
        WriteLog( ERR_LVL, "GetEntryTail err!!!!" );
        return PB_ERR;
    }
        
    sprintf(entry ,"%4s%2s%1s%12s",instno,curr_type,"5",entry_tail);
    rtrim(entry);
    WriteLog( ERR_LVL, "entry[%s]", entry );
    return PB_OK;
}   
    
    
/*
* 取记账分录
* 输入:区域号、渠道号、业务类型、交易码、记账类型、现转类型、PB交易日期、(账户、户名、交易金额、币种)
* 输出:记账分录数组、记账分录个数
*/
int 
GetJourEntryArray(areano,chnlno,busitype,trancode,accflag,cshtsftype,pbtrandate,s_cstm_info,entry,entry_count)
char *areano;
char *chnlno; 
char *busitype;
char *trancode;
char *accflag;
char *cshtsftype;
char *pbtrandate;
char entry[ENTRY_ROW][ENTRY_COL];
int *entry_count;
struct S_CSTM_INFO *s_cstm_info;
{
    int ret = -1;
    int count = 0;
    int i = 0;  
    char innentry[32+1];
    
    EXEC SQL BEGIN DECLARE SECTION;
        char area_no[6+1];             /* 区域号 */
        char chnl_no[3+1];             /* 渠道号 */
        char busi_type[3+1];           /* 业务类型 */
        char tran_code[20+1];          /* 交易码 */
        char acc_flag[1+1];            /* 记账类型 0-记账 1-冲账 */
        char csh_tsf_type[1+1];        /*现转类型 0-现金(本代本) 1-现金(本代他)2-  现金(他代本) 3-  转账(本转本) 4-  转
账(本转他)5-  转账(他转本) */
        char curr_type[2+1];           /* 币种 */
        struct S_PB_BUSI_ENTRY busientry;
    EXEC SQL END DECLARE SECTION;

    memset(area_no,0x00,sizeof(area_no));
    memset(chnl_no,0x00,sizeof(chnl_no));
    memset(busi_type,0x00,sizeof(busi_type));
    memset(tran_code,0x00,sizeof(tran_code));
    memset(acc_flag,0x00,sizeof(acc_flag));
    memset(csh_tsf_type,0x00,sizeof(csh_tsf_type));
    memset(curr_type,0x00,sizeof(curr_type));
    memset(innentry,0x00,sizeof(innentry));

    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetJourEntryArray<<<<<<<<<<<<<,");
    memcpy(area_no,areano,6);
    memcpy(chnl_no,chnlno,3);
    memcpy(busi_type,busitype,3);
    memcpy(tran_code,trancode,20);
    memcpy(acc_flag,accflag,1);
    memcpy(csh_tsf_type,cshtsftype,1);
    memcpy(curr_type,s_cstm_info->curr_type,2);

    rtrim(area_no);
    rtrim(chnl_no);
    rtrim(busi_type);
    rtrim(tran_code);
    rtrim(acc_flag);
    rtrim(csh_tsf_type);
    rtrim(curr_type);

    WriteLog( ERR_LVL ,"area_no[%s]",area_no);
    WriteLog( ERR_LVL ,"chnl_no[%s]",chnl_no);
    WriteLog( ERR_LVL ,"busi_type[%s]",busi_type);
    WriteLog( ERR_LVL ,"tran_code[%s]",tran_code);
    WriteLog( ERR_LVL ,"acc_flag[%s]",acc_flag);
    WriteLog( ERR_LVL ,"curr_type[%s]",curr_type);

    EXEC SQL DECLARE cur_getentry CURSOR FOR
        SELECT * FROM t_pb_busi_entry
        WHERE areano = :area_no
        AND   chnlno = :chnl_no
        AND   busitype = :busi_type
        AND   trancode = :tran_code
        AND   acc_flag = :acc_flag
        AND   csh_tsf_type = :csh_tsf_type
        AND   curr_type = :curr_type
        AND   entry_type = '0';

    EXEC SQL OPEN cur_getentry;
    if (SQLCODE != 0)
    {   
        WriteLog(ERR_LVL, "打开游标错 = [%d]", SQLCODE);  
        return(-1);
    } 
        
    while(1)
    {
        memset(&busientry,0x00,sizeof(busientry));
        EXEC SQL FETCH cur_getentry INTO :busientry;
        if (SQLCODE == SQLNOTFOUND)
            break;
        else if( SQLCODE )
        {
            WriteLog(ERR_LVL, "数据库操作错 SQLCODE = [%d]", SQLCODE);
            EXEC SQL CLOSE cur_getentry;
            EXEC SQL FREE cur_getentry;
            return( -1 );
        }
    
        rtrim(busientry.areano);
        rtrim(busientry.chnlno);
        rtrim(busientry.busitype);
        rtrim(busientry.trancode);
        rtrim(busientry.acc_flag);
        rtrim(busientry.csh_tsf_type);
        rtrim(busientry.CshTsfFlag);
        rtrim(busientry.curr_type);
        rtrim(busientry.entry_type);
        rtrim(busientry.acc_type);
        rtrim(busientry.sort_no);
        rtrim(busientry.entry_desc);
        rtrim(busientry.dr_cr_flag);
        rtrim(busientry.acc);
        rtrim(busientry.FeeNo);
        rtrim(busientry.AccStat);
        rtrim(busientry.ProcFlag);
        rtrim(busientry.summ_no);
        rtrim(busientry.summ);
        rtrim(busientry.remark);
        rtrim(busientry.cert_no);
        rtrim(busientry.cert_type);
        rtrim(busientry.Cert_date);
        rtrim(busientry.CshItmFlag);
        rtrim(busientry.TwoEntryFlag);
        rtrim(busientry.FeeFlag);
        rtrim(busientry.AnalCode);
        rtrim(busientry.FeeTranCode);
        rtrim(busientry.DistFlag);
        rtrim(busientry.note1);
        rtrim(busientry.note2);
        rtrim(busientry.note3);

        WriteLog( ERR_LVL, "busientry.areano[%s]",busientry.areano);
        WriteLog( ERR_LVL, "busientry.chnlno[%s]",busientry.chnlno);
        WriteLog( ERR_LVL, "busientry.busitype[%s]",busientry.busitype);
        WriteLog( ERR_LVL, "busientry.trancode[%s]",busientry.trancode);
        WriteLog( ERR_LVL, "busientry.acc_flag[%s]",busientry.acc_flag);
        WriteLog( ERR_LVL, "busientry.csh_tsf_type[%s]",busientry.csh_tsf_type);
        WriteLog( ERR_LVL, "busientry.CshTsfFlag[%s]",busientry.CshTsfFlag);
        WriteLog( ERR_LVL, "busientry.curr_type[%s]",busientry.curr_type);
        WriteLog( ERR_LVL, "busientry.entry_type[%s]",busientry.entry_type);
        WriteLog( ERR_LVL, "busientry.acc_type[%s]",busientry.acc_type);
        WriteLog( ERR_LVL, "busientry.sort_no[%s]",busientry.sort_no);
        WriteLog( ERR_LVL, "busientry.entry_desc[%s]",busientry.entry_desc);
        WriteLog( ERR_LVL, "busientry.dr_cr_flag[%s]",busientry.dr_cr_flag);
        WriteLog( ERR_LVL, "busientry.acc[%s]",busientry.acc);
        WriteLog( ERR_LVL, "busientry.FeeNo[%s]",busientry.FeeNo);
        WriteLog( ERR_LVL, "busientry.AccStat[%s]",busientry.AccStat);
        WriteLog( ERR_LVL, "busientry.ProcFlag[%s]",busientry.ProcFlag);
        WriteLog( ERR_LVL, "busientry.summ_no[%s]",busientry.summ_no);
        WriteLog( ERR_LVL, "busientry.summ[%s]",busientry.summ);
        WriteLog( ERR_LVL, "busientry.remark[%s]",busientry.remark);
        WriteLog( ERR_LVL, "busientry.cert_no[%s]",busientry.cert_no);
        WriteLog( ERR_LVL, "busientry.cert_type[%s]",busientry.cert_type);
        WriteLog( ERR_LVL, "busientry.Cert_date[%s]",busientry.Cert_date);
        WriteLog( ERR_LVL, "busientry.CshItmFlag[%s]",busientry.CshItmFlag);
        WriteLog( ERR_LVL, "busientry.TwoEntryFlag[%s]",busientry.TwoEntryFlag);
        WriteLog( ERR_LVL, "busientry.FeeFlag[%s]",busientry.FeeFlag);
        WriteLog( ERR_LVL, "busientry.AnalCode[%s]",busientry.AnalCode);
        WriteLog( ERR_LVL, "busientry.FeeTranCode[%s]",busientry.FeeTranCode);
        WriteLog( ERR_LVL, "busientry.DistFlag[%s]",busientry.DistFlag);
        WriteLog( ERR_LVL, "busientry.note1[%s]",busientry.note1);
        WriteLog( ERR_LVL, "busientry.note2[%s]",busientry.note2);
        WriteLog( ERR_LVL, "busientry.note3[%s]",busientry.note3);


        WriteLog( ERR_LVL , "s_cstm_info[atoi(busientry.sort_no)].acc_no[%s]",s_cstm_info[atoi(busientry.sort_no)].acc_no);
        WriteLog( ERR_LVL , "s_cstm_info[atoi(busientry.sort_no)].tran_amt[%lf]",s_cstm_info[atoi(busientry.sort_no)].tran_amt);
        /* acc_type 0-内部帐 1-客户帐  */
        if( strcmp(busientry.acc_type,"1") == 0 )           /* 客户帐  */
        {
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_info[atoi(busientry.sort_no)].curr_type,
                                s_cstm_info[atoi(busientry.sort_no)].acc_no,
                                s_cstm_info[atoi(busientry.sort_no)].tran_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                busientry.FeeFlag,
                                busientry.FeeTranCode,
                                s_cstm_info[atoi(busientry.sort_no)].acc_no,
                                busientry.FeeNo);
        }
        else            /* 内部帐  */
        {
            ret = GetEntry(tran_code,acc_flag,csh_tsf_type,s_cstm_info[atoi(busientry.sort_no)].curr_type,"0",busientry.sort_no,innentry);
            rtrim(innentry);
            WriteLog( ERR_LVL ," innentry[%s] ",innentry );
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL , " Err Call GetEntry ");
                return(-1);
            }
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||||||",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_info[atoi(busientry.sort_no)].curr_type,
                                innentry,
                                s_cstm_info[atoi(busientry.sort_no)].tran_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,   
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag);
        }
        count++;
    }   
        
    EXEC SQL CLOSE cur_getentry;
    EXEC SQL FREE cur_getentry;
                                
    /****** 组手续费分录  **********/
    memset(innentry,0x00,sizeof(innentry));
    EXEC SQL DECLARE cur_getentry2 CURSOR FOR
        SELECT * FROM t_pb_busi_entry
        WHERE areano = :area_no 
        AND   chnlno = :chnl_no 
        AND   busitype = :busi_type
        AND   trancode = :tran_code 
        AND   acc_flag = :acc_flag 
        AND   csh_tsf_type = :csh_tsf_type 
        AND   curr_type = :curr_type
        AND   entry_type = '1'; 
                                
    EXEC SQL OPEN cur_getentry2;
    if (SQLCODE != 0)
    {
        WriteLog(ERR_LVL, "打开游标错 = [%d]", SQLCODE);
        return(-1);
    }

    while(1)
    {
        memset(&busientry,0x00,sizeof(busientry));
        EXEC SQL FETCH cur_getentry2 INTO :busientry;
        if (SQLCODE == SQLNOTFOUND)
            break;
        else if( SQLCODE )
        {
            WriteLog(ERR_LVL, "数据库操作错 SQLCODE = [%d]", SQLCODE);
            EXEC SQL CLOSE cur_getentry2;
            EXEC SQL FREE cur_getentry2;
            return( -1 );
        }

        rtrim(busientry.areano);
        rtrim(busientry.chnlno);
        rtrim(busientry.busitype);
        rtrim(busientry.trancode);
        rtrim(busientry.acc_flag);
        rtrim(busientry.csh_tsf_type);
        rtrim(busientry.CshTsfFlag);
        rtrim(busientry.curr_type);
        rtrim(busientry.entry_type);
        rtrim(busientry.acc_type);
        rtrim(busientry.sort_no);
        rtrim(busientry.entry_desc);
        rtrim(busientry.dr_cr_flag);
        rtrim(busientry.acc);
        rtrim(busientry.FeeNo);
        rtrim(busientry.AccStat);
        rtrim(busientry.ProcFlag);
        rtrim(busientry.summ_no);
        rtrim(busientry.summ);
        rtrim(busientry.remark);
        rtrim(busientry.cert_no);
        rtrim(busientry.cert_type);
        rtrim(busientry.Cert_date);
        rtrim(busientry.CshItmFlag);
        rtrim(busientry.TwoEntryFlag);
        rtrim(busientry.FeeFlag);
        rtrim(busientry.AnalCode);
        rtrim(busientry.FeeTranCode);
        rtrim(busientry.DistFlag);
        rtrim(busientry.note1);
        rtrim(busientry.note2);
        rtrim(busientry.note3);

        WriteLog( ERR_LVL, "busientry.areano[%s]",busientry.areano);
        WriteLog( ERR_LVL, "busientry.chnlno[%s]",busientry.chnlno);
        WriteLog( ERR_LVL, "busientry.busitype[%s]",busientry.busitype);
        WriteLog( ERR_LVL, "busientry.trancode[%s]",busientry.trancode);
        WriteLog( ERR_LVL, "busientry.acc_flag[%s]",busientry.acc_flag);
        WriteLog( ERR_LVL, "busientry.csh_tsf_type[%s]",busientry.csh_tsf_type);
        WriteLog( ERR_LVL, "busientry.CshTsfFlag[%s]",busientry.CshTsfFlag);
        WriteLog( ERR_LVL, "busientry.curr_type[%s]",busientry.curr_type);
        WriteLog( ERR_LVL, "busientry.entry_type[%s]",busientry.entry_type);
        WriteLog( ERR_LVL, "busientry.acc_type[%s]",busientry.acc_type);
        WriteLog( ERR_LVL, "busientry.sort_no[%s]",busientry.sort_no);
        WriteLog( ERR_LVL, "busientry.entry_desc[%s]",busientry.entry_desc);
        WriteLog( ERR_LVL, "busientry.dr_cr_flag[%s]",busientry.dr_cr_flag);
        WriteLog( ERR_LVL, "busientry.acc[%s]",busientry.acc);
        WriteLog( ERR_LVL, "busientry.FeeNo[%s]",busientry.FeeNo);
        WriteLog( ERR_LVL, "busientry.AccStat[%s]",busientry.AccStat);
        WriteLog( ERR_LVL, "busientry.ProcFlag[%s]",busientry.ProcFlag);
        WriteLog( ERR_LVL, "busientry.summ_no[%s]",busientry.summ_no);
        WriteLog( ERR_LVL, "busientry.summ[%s]",busientry.summ);
        WriteLog( ERR_LVL, "busientry.remark[%s]",busientry.remark);
        WriteLog( ERR_LVL, "busientry.cert_no[%s]",busientry.cert_no);
        WriteLog( ERR_LVL, "busientry.cert_type[%s]",busientry.cert_type);
        WriteLog( ERR_LVL, "busientry.Cert_date[%s]",busientry.Cert_date);
        WriteLog( ERR_LVL, "busientry.CshItmFlag[%s]",busientry.CshItmFlag);
        WriteLog( ERR_LVL, "busientry.TwoEntryFlag[%s]",busientry.TwoEntryFlag);
        WriteLog( ERR_LVL, "busientry.FeeFlag[%s]",busientry.FeeFlag);
        WriteLog( ERR_LVL, "busientry.AnalCode[%s]",busientry.AnalCode);
        WriteLog( ERR_LVL, "busientry.FeeTranCode[%s]",busientry.FeeTranCode);
        WriteLog( ERR_LVL, "busientry.DistFlag[%s]",busientry.DistFlag);
        WriteLog( ERR_LVL, "busientry.note1[%s]",busientry.note1);
        WriteLog( ERR_LVL, "busientry.note2[%s]",busientry.note2);
        WriteLog( ERR_LVL, "busientry.note3[%s]",busientry.note3);
        
        
        WriteLog( ERR_LVL , "s_cstm_info[atoi(busientry.sort_no)].acc_no[%s]",s_cstm_info[atoi(busientry.sort_no)].acc_no);
        WriteLog( ERR_LVL , "s_cstm_info[atoi(busientry.sort_no)].fee_amt[%lf]",s_cstm_info[atoi(busientry.sort_no)].fee_amt);
        /* acc_type 0-内部帐 1-客户帐  */
        if( strcmp(busientry.acc_type,"1") == 0 )           /* 客户帐  */
        {
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_info[atoi(busientry.sort_no)].curr_type,
                                s_cstm_info[atoi(busientry.sort_no)].acc_no,
                                s_cstm_info[atoi(busientry.sort_no)].fee_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                busientry.FeeFlag,
                                busientry.FeeTranCode,
                                s_cstm_info[atoi(busientry.sort_no)].acc_no,
                                busientry.FeeNo);
        }
        else            /* 内部帐  */
        {
            ret = GetEntry(tran_code,acc_flag,csh_tsf_type,s_cstm_info[atoi(busientry.sort_no)].curr_type,"1",busientry.sort_no,innentry);
            rtrim(innentry);
            WriteLog( ERR_LVL ," innentry[%s] ",innentry );
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL , " Err Call GetEntry ");
                return(-1);
            }
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||||||",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_info[atoi(busientry.sort_no)].curr_type,
                                innentry,
                                s_cstm_info[atoi(busientry.sort_no)].fee_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag);
        }
        count++;
    }

    *entry_count = count;
    WriteLog( ERR_LVL , "entry_count[%d]",*entry_count );
    EXEC SQL CLOSE cur_getentry2;
    EXEC SQL FREE cur_getentry2;
    for( i = 0;i<count;i++)
    {
        WriteLog( ERR_LVL ,"!!!entry[%d][%s]",i,entry[i]);
    }

    return PB_OK;
}


/*
* 取记账分录
* 输入:记账类型、现转类型、分录类型、PB交易日期、(账户、户名、交易金额、币种)
* 输出:记账分录数组、记账分录个数
*/                              
int                             
GetJourEntryArray2(accflag,cshtsftype,pbtrandate,s_cstm_info,entry,entry_count)
char *accflag;                  
char *cshtsftype;               
char *pbtrandate;
char entry[ENTRY_ROW][ENTRY_COL];  
int *entry_count;
struct S_CSTM_INFO *s_cstm_info;
{           
    long rellen = 0;
    int ret = -1;
            
    int count = 0;
    char areano[6+1];
    char chnlno[3+1];
    char busitype[3+1]; 
    char trancode[20+1];        
                                
    memset( areano , 0x00 , sizeof(areano));
    memset( chnlno , 0x00 , sizeof(chnlno));    
    memset( busitype , 0x00 , sizeof(busitype));
    memset( trancode , 0x00 , sizeof(trancode));
                                
    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetJourEntryArray2<<<<<<<<<<<<<,");
    GetPoolDataByName("PBSYS", "AreaNo", 0, 0, areano, &rellen );
    GetPoolDataByName("PBSYS", "RChnlNo", 0, 0, chnlno, &rellen );
    GetPoolDataByName("PBSYS", "BusiType", 0, 0, busitype, &rellen );
    GetPoolDataByName("PBSYS", "TranCode", 0, 0, trancode, &rellen );
    rtrim(areano);              
    rtrim(chnlno);              
    rtrim(busitype);            
    rtrim(trancode);            
    WriteLog(ERR_LVL ,"areano[%s]",areano);
    WriteLog(ERR_LVL ,"chnlno[%s]",chnlno);
    WriteLog(ERR_LVL ,"busitype[%s]",busitype);
    WriteLog(ERR_LVL ,"trancode[%s]",trancode);
    
    ret = GetJourEntryArray(areano,chnlno,busitype,trancode,accflag,cshtsftype,pbtrandate,s_cstm_info,entry,&count);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ,"Err Call GetJourEntryArray" );
        return(-1);
    }   
    
    *entry_count = count;
    return PB_OK;
}


/*
* 取记账分录
* 输入:PB交易日期、(账户、户名、交易金额、币种)
* 输出:记账分录数组、记账分录个数
*/
int
GetJourEntryArray3(pbtrandate,s_cstm_info,entry,entry_count)
char *pbtrandate;
char entry[ENTRY_ROW][ENTRY_COL];
int *entry_count;
struct S_CSTM_INFO *s_cstm_info;
{
    int ret = -1;

    int i = 0;
    char accflag[1+1];
    char cshtsftype[1+1];

    int entry_count1 = 0;
    memset( accflag, 0x00, sizeof(accflag));
    memset( cshtsftype, 0x00, sizeof(cshtsftype));

    sprintf(accflag,"0");
    sprintf(cshtsftype,"2");

    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetJourEntryArray3<<<<<<<<<<<<<,");

    WriteLog( ERR_LVL , "s_cstm_info.acc_no[%s]",s_cstm_info->acc_no);
    WriteLog( ERR_LVL , "s_cstm_info.cstm_name[%s]",s_cstm_info->cstm_name);
    WriteLog( ERR_LVL , "s_cstm_info.tran_amt[%lf]",s_cstm_info->tran_amt);
    WriteLog( ERR_LVL , "s_cstm_info.curr_type[%s]",s_cstm_info->curr_type);

    ret = GetJourEntryArray2(accflag,cshtsftype,pbtrandate,s_cstm_info,entry,&entry_count1);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ," Err Call GetJourEntryArray2");
        return(-1);
    }

    *entry_count = entry_count1;

    return PB_OK;
}

/*
* 取冲账记账分录
* 输入:区域号、渠道号、业务类型、交易码、记账类型、现转类型、PB交易日期、(账户、户名、交易金额、币种)
* 输出:冲账分录数组、冲账分录个数
*/
int
GetReverEntryArray(areano,chnlno,busitype,trancode,accflag,cshtsftype,pbtrandate,s_cstm_rever_info,entry,entry_count)
char *areano;
char *chnlno;
char *busitype;
char *trancode;
char *accflag;
char *cshtsftype;
char *pbtrandate;
char entry[ENTRY_ROW][ENTRY_COL];
int *entry_count;
struct S_CSTM_REVER_INFO *s_cstm_rever_info;
{
    int ret = -1;
    int count = 0;
    int i = 0;  
    char innentry[32+1];
    
    EXEC SQL BEGIN DECLARE SECTION;
        char area_no[6+1];             /* 区域号 */
        char chnl_no[3+1];             /* 渠道号 */
        char busi_type[3+1];           /* 业务类型 */
        char tran_code[20+1];          /* 交易码 */
        char acc_flag[1+1];            /* 记账类型 0-记账 1-冲账 */
        char csh_tsf_type[1+1];        /*现转类型 0-现金(本代本) 1-现金(本代他)2-  现金(他代本) 3-  转账(本转本) 4-  转
账(本转他)5-  转账(他转本) */
        char curr_type[2+1];           /* 币种 */
        struct S_PB_BUSI_ENTRY busientry;
    EXEC SQL END DECLARE SECTION;

    memset(area_no,0x00,sizeof(area_no));
    memset(chnl_no,0x00,sizeof(chnl_no));
    memset(busi_type,0x00,sizeof(busi_type));
    memset(tran_code,0x00,sizeof(tran_code));
    memset(acc_flag,0x00,sizeof(acc_flag));
    memset(csh_tsf_type,0x00,sizeof(csh_tsf_type));
    memset(curr_type,0x00,sizeof(curr_type));
    memset(innentry,0x00,sizeof(innentry));
    
    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetJourEntryArray<<<<<<<<<<<<<,");
    memcpy(area_no,areano,6);
    memcpy(chnl_no,chnlno,3);
    memcpy(busi_type,busitype,3);
    memcpy(tran_code,trancode,20);
    memcpy(acc_flag,accflag,1);
    memcpy(csh_tsf_type,cshtsftype,1);
    memcpy(curr_type,s_cstm_rever_info->curr_type,2);

    rtrim(area_no);
    rtrim(chnl_no);
    rtrim(busi_type);
    rtrim(tran_code); 
    rtrim(acc_flag);
    rtrim(csh_tsf_type);
    rtrim(curr_type);
    
    WriteLog( ERR_LVL ,"area_no[%s]",area_no);
    WriteLog( ERR_LVL ,"chnl_no[%s]",chnl_no);
    WriteLog( ERR_LVL ,"busi_type[%s]",busi_type);
    WriteLog( ERR_LVL ,"tran_code[%s]",tran_code);
    WriteLog( ERR_LVL ,"acc_flag[%s]",acc_flag);
    WriteLog( ERR_LVL ,"curr_type[%s]",curr_type);
    EXEC SQL DECLARE cur_getentry3 CURSOR FOR
        SELECT * FROM t_pb_busi_entry
        WHERE areano = :area_no
        AND   chnlno = :chnl_no
        AND   busitype = :busi_type
        AND   trancode = :tran_code
        AND   acc_flag = :acc_flag
        AND   csh_tsf_type = :csh_tsf_type
        AND   curr_type = :curr_type
        AND   entry_type = '0';

    EXEC SQL OPEN cur_getentry3;
    if (SQLCODE != 0)
    {
        WriteLog(ERR_LVL, "打开游标错 = [%d]", SQLCODE);
        return(-1);
    }

    while(1)
    {
        memset(&busientry,0x00,sizeof(busientry));
        EXEC SQL FETCH cur_getentry3 INTO :busientry;
        if (SQLCODE == SQLNOTFOUND)
            break;
        else if( SQLCODE )
        {
            WriteLog(ERR_LVL, "数据库操作错 SQLCODE = [%d]", SQLCODE);
            EXEC SQL CLOSE cur_getentry3;
            EXEC SQL FREE cur_getentry3;
            return( -1 );
        }

        rtrim(busientry.areano);
        rtrim(busientry.chnlno);
        rtrim(busientry.busitype);
        rtrim(busientry.trancode);
        rtrim(busientry.acc_flag);
        rtrim(busientry.csh_tsf_type);
        rtrim(busientry.CshTsfFlag);
        rtrim(busientry.curr_type);
        rtrim(busientry.entry_type);
        rtrim(busientry.acc_type);
        rtrim(busientry.sort_no);
        rtrim(busientry.entry_desc);
        rtrim(busientry.dr_cr_flag);
        rtrim(busientry.acc);
        rtrim(busientry.FeeNo);
        rtrim(busientry.AccStat);
        rtrim(busientry.ProcFlag);
        rtrim(busientry.summ_no);
        rtrim(busientry.summ);
        rtrim(busientry.remark);
        rtrim(busientry.cert_no);
        rtrim(busientry.cert_type);
        rtrim(busientry.Cert_date);
        rtrim(busientry.CshItmFlag);
        rtrim(busientry.TwoEntryFlag);
        rtrim(busientry.FeeFlag);
        rtrim(busientry.AnalCode);
        rtrim(busientry.FeeTranCode);
        rtrim(busientry.DistFlag);
        rtrim(busientry.note1);
        rtrim(busientry.note2);
        rtrim(busientry.note3);

        WriteLog( ERR_LVL, "busientry.areano[%s]",busientry.areano);
        WriteLog( ERR_LVL, "busientry.chnlno[%s]",busientry.chnlno);
        WriteLog( ERR_LVL, "busientry.busitype[%s]",busientry.busitype);
        WriteLog( ERR_LVL, "busientry.trancode[%s]",busientry.trancode);
        WriteLog( ERR_LVL, "busientry.acc_flag[%s]",busientry.acc_flag);
        WriteLog( ERR_LVL, "busientry.csh_tsf_type[%s]",busientry.csh_tsf_type);
        WriteLog( ERR_LVL, "busientry.CshTsfFlag[%s]",busientry.CshTsfFlag);
        WriteLog( ERR_LVL, "busientry.curr_type[%s]",busientry.curr_type);
        WriteLog( ERR_LVL, "busientry.entry_type[%s]",busientry.entry_type);
        WriteLog( ERR_LVL, "busientry.acc_type[%s]",busientry.acc_type);
        WriteLog( ERR_LVL, "busientry.sort_no[%s]",busientry.sort_no);
        WriteLog( ERR_LVL, "busientry.entry_desc[%s]",busientry.entry_desc);
        WriteLog( ERR_LVL, "busientry.dr_cr_flag[%s]",busientry.dr_cr_flag);
        WriteLog( ERR_LVL, "busientry.acc[%s]",busientry.acc);
        WriteLog( ERR_LVL, "busientry.FeeNo[%s]",busientry.FeeNo);
        WriteLog( ERR_LVL, "busientry.AccStat[%s]",busientry.AccStat);
        WriteLog( ERR_LVL, "busientry.ProcFlag[%s]",busientry.ProcFlag);
        WriteLog( ERR_LVL, "busientry.summ_no[%s]",busientry.summ_no);
        WriteLog( ERR_LVL, "busientry.summ[%s]",busientry.summ);
        WriteLog( ERR_LVL, "busientry.remark[%s]",busientry.remark);
        WriteLog( ERR_LVL, "busientry.cert_no[%s]",busientry.cert_no);
        WriteLog( ERR_LVL, "busientry.cert_type[%s]",busientry.cert_type);
        WriteLog( ERR_LVL, "busientry.Cert_date[%s]",busientry.Cert_date);
        WriteLog( ERR_LVL, "busientry.CshItmFlag[%s]",busientry.CshItmFlag);
        WriteLog( ERR_LVL, "busientry.TwoEntryFlag[%s]",busientry.TwoEntryFlag);
        WriteLog( ERR_LVL, "busientry.FeeFlag[%s]",busientry.FeeFlag);
        WriteLog( ERR_LVL, "busientry.AnalCode[%s]",busientry.AnalCode);
        WriteLog( ERR_LVL, "busientry.FeeTranCode[%s]",busientry.FeeTranCode);
        WriteLog( ERR_LVL, "busientry.DistFlag[%s]",busientry.DistFlag);
        WriteLog( ERR_LVL, "busientry.note1[%s]",busientry.note1);
        WriteLog( ERR_LVL, "busientry.note2[%s]",busientry.note2);
        WriteLog( ERR_LVL, "busientry.note3[%s]",busientry.note3);
        
        
        WriteLog( ERR_LVL , "s_cstm_rever_info[atoi(busientry.sort_no)].acc_no[%s]",s_cstm_rever_info[atoi(busientry.sort_no)].acc_no);
        WriteLog( ERR_LVL , "s_cstm_rever_info[atoi(busientry.sort_no)].tran_amt[%lf]",s_cstm_rever_info[atoi(busientry.sort_no)].tran_amt);
        /* acc_type 0-内部帐 1-客户帐  */
        if( strcmp(busientry.acc_type,"1") == 0 )           /* 客户帐  */
        {
            sprintf( entry[count],"%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||%s|%s|%s|%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,
                                s_cstm_rever_info[atoi(busientry.sort_no)].acc_no,
                                s_cstm_rever_info[atoi(busientry.sort_no)].tran_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                busientry.FeeFlag,
                                busientry.FeeTranCode,
                                s_cstm_rever_info[atoi(busientry.sort_no)].acc_no,
                                busientry.FeeNo,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_flag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_date,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corrseqno);
        }
        else            /* 内部帐  */
        {
            ret = GetEntry(tran_code,acc_flag,csh_tsf_type,s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,"0",busientry.sort_no,innentry);
            rtrim(innentry);
            WriteLog( ERR_LVL ," innentry[%s] ",innentry );
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL , " Err Call GetEntry ");
                return(-1);
            }
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||||||%s|%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,
                                innentry,
                                s_cstm_rever_info[atoi(busientry.sort_no)].tran_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_flag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_date,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corrseqno);
        }
        count++;
    }
                                
    EXEC SQL CLOSE cur_getentry3;
    EXEC SQL FREE cur_getentry3;
                                
    /****** 组手续费分录  **********/
    memset(innentry,0x00,sizeof(innentry));
    EXEC SQL DECLARE cur_getentry4 CURSOR FOR
        SELECT * FROM t_pb_busi_entry
        WHERE areano = :area_no 
        AND   chnlno = :chnl_no 
        AND   busitype = :busi_type
        AND   trancode = :tran_code 
        AND   acc_flag = :acc_flag 
        AND   csh_tsf_type = :csh_tsf_type 
        AND   curr_type = :curr_type
        AND   entry_type = '1'; 
                                
    EXEC SQL OPEN cur_getentry4;
    if (SQLCODE != 0)           
    {                           
        WriteLog(ERR_LVL, "打开游标错 = [%d]", SQLCODE);
        return(-1);     
    }   
            
    while(1)
    {       
        memset(&busientry,0x00,sizeof(busientry));
        EXEC SQL FETCH cur_getentry4 INTO :busientry;
        if (SQLCODE == SQLNOTFOUND) 
            break;
        else if( SQLCODE )
        {   
            WriteLog(ERR_LVL, "数据库操作错 SQLCODE = [%d]", SQLCODE);
            EXEC SQL CLOSE cur_getentry4;
            EXEC SQL FREE cur_getentry4;
            return( -1 );       
        }                       
                                
        rtrim(busientry.areano);
        rtrim(busientry.chnlno);
        rtrim(busientry.busitype);
        rtrim(busientry.trancode);
        rtrim(busientry.acc_flag);
        rtrim(busientry.csh_tsf_type);
        rtrim(busientry.CshTsfFlag);
        rtrim(busientry.curr_type);
        rtrim(busientry.entry_type);
        rtrim(busientry.acc_type);
        rtrim(busientry.sort_no);
        rtrim(busientry.entry_desc);
        rtrim(busientry.dr_cr_flag);
        rtrim(busientry.acc);
        rtrim(busientry.FeeNo);
        rtrim(busientry.AccStat);
        rtrim(busientry.ProcFlag);
        rtrim(busientry.summ_no);
        rtrim(busientry.summ);
        rtrim(busientry.remark);
        rtrim(busientry.cert_no);
        rtrim(busientry.cert_type);
        rtrim(busientry.Cert_date);
        rtrim(busientry.CshItmFlag);
        rtrim(busientry.TwoEntryFlag);
        rtrim(busientry.FeeFlag);
        rtrim(busientry.AnalCode);
        rtrim(busientry.FeeTranCode);
        rtrim(busientry.DistFlag);
        rtrim(busientry.note1);
        rtrim(busientry.note2);
        rtrim(busientry.note3);

        WriteLog( ERR_LVL, "busientry.areano[%s]",busientry.areano);
        WriteLog( ERR_LVL, "busientry.chnlno[%s]",busientry.chnlno);
        WriteLog( ERR_LVL, "busientry.busitype[%s]",busientry.busitype);
        WriteLog( ERR_LVL, "busientry.trancode[%s]",busientry.trancode);
        WriteLog( ERR_LVL, "busientry.acc_flag[%s]",busientry.acc_flag);
        WriteLog( ERR_LVL, "busientry.csh_tsf_type[%s]",busientry.csh_tsf_type);
        WriteLog( ERR_LVL, "busientry.CshTsfFlag[%s]",busientry.CshTsfFlag);
        WriteLog( ERR_LVL, "busientry.curr_type[%s]",busientry.curr_type);
        WriteLog( ERR_LVL, "busientry.entry_type[%s]",busientry.entry_type);
        WriteLog( ERR_LVL, "busientry.acc_type[%s]",busientry.acc_type);
        WriteLog( ERR_LVL, "busientry.sort_no[%s]",busientry.sort_no);
        WriteLog( ERR_LVL, "busientry.entry_desc[%s]",busientry.entry_desc);
        WriteLog( ERR_LVL, "busientry.dr_cr_flag[%s]",busientry.dr_cr_flag);
        WriteLog( ERR_LVL, "busientry.acc[%s]",busientry.acc);
        WriteLog( ERR_LVL, "busientry.FeeNo[%s]",busientry.FeeNo);
        WriteLog( ERR_LVL, "busientry.AccStat[%s]",busientry.AccStat);
        WriteLog( ERR_LVL, "busientry.ProcFlag[%s]",busientry.ProcFlag);
        WriteLog( ERR_LVL, "busientry.summ_no[%s]",busientry.summ_no);
        WriteLog( ERR_LVL, "busientry.summ[%s]",busientry.summ);
        WriteLog( ERR_LVL, "busientry.remark[%s]",busientry.remark);
        WriteLog( ERR_LVL, "busientry.cert_no[%s]",busientry.cert_no);
        WriteLog( ERR_LVL, "busientry.cert_type[%s]",busientry.cert_type);
        WriteLog( ERR_LVL, "busientry.Cert_date[%s]",busientry.Cert_date);
        WriteLog( ERR_LVL, "busientry.CshItmFlag[%s]",busientry.CshItmFlag);
        WriteLog( ERR_LVL, "busientry.TwoEntryFlag[%s]",busientry.TwoEntryFlag);
        WriteLog( ERR_LVL, "busientry.FeeFlag[%s]",busientry.FeeFlag);
        WriteLog( ERR_LVL, "busientry.AnalCode[%s]",busientry.AnalCode);
        WriteLog( ERR_LVL, "busientry.FeeTranCode[%s]",busientry.FeeTranCode);
        WriteLog( ERR_LVL, "busientry.DistFlag[%s]",busientry.DistFlag);
        WriteLog( ERR_LVL, "busientry.note1[%s]",busientry.note1);
        WriteLog( ERR_LVL, "busientry.note2[%s]",busientry.note2);
        WriteLog( ERR_LVL, "busientry.note3[%s]",busientry.note3);


        WriteLog( ERR_LVL , "s_cstm_rever_info[atoi(busientry.sort_no)].acc_no[%s]",s_cstm_rever_info[atoi(busientry.sort_no)].acc_no);
        WriteLog( ERR_LVL , "s_cstm_rever_info[atoi(busientry.sort_no)].fee_amt[%lf]",s_cstm_rever_info[atoi(busientry.sort_no)].fee_amt);
        /* acc_type 0-内部帐 1-客户帐  */
        if( strcmp(busientry.acc_type,"1") == 0 )           /* 客户帐  */
        {
            sprintf( entry[count],"%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||%s|%s|%s|%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,
                                s_cstm_rever_info[atoi(busientry.sort_no)].acc_no,
                                s_cstm_rever_info[atoi(busientry.sort_no)].fee_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                busientry.FeeFlag,
                                busientry.FeeTranCode,
                                s_cstm_rever_info[atoi(busientry.sort_no)].acc_no,
                                busientry.FeeNo,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_flag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_date,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corrseqno);
        }
        else            /* 内部帐  */
        {
            ret = GetEntry(tran_code,acc_flag,csh_tsf_type,s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,"1",busientry.sort_no,innentry);
            rtrim(innentry);
            WriteLog( ERR_LVL ," innentry[%s] ",innentry );
            if( ret != PB_OK )
            {
                WriteLog( ERR_LVL , " Err Call GetEntry ");
                return(-1);
            }
            sprintf( entry[count] , "%s|%s|%s|%s|%s||%lf|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s||||||||||||||||||||%s|%s|%s|",
                                busientry.AccStat,
                                busientry.ProcFlag,
                                pbtrandate,
                                s_cstm_rever_info[atoi(busientry.sort_no)].curr_type,
                                innentry,
                                s_cstm_rever_info[atoi(busientry.sort_no)].fee_amt,
                                busientry.cert_type,
                                busientry.cert_no,
                                busientry.Cert_date,
                                busientry.dr_cr_flag,
                                busientry.CshTsfFlag,
                                busientry.CshItmFlag,
                                busientry.summ_no,
                                busientry.summ,
                                busientry.remark,
                                busientry.TwoEntryFlag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_flag,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corr_date,
                                s_cstm_rever_info[atoi(busientry.sort_no)].corrseqno);
        }                       
        count++;                
    }                           
                                
    *entry_count = count;       
    WriteLog( ERR_LVL , "entry_count[%d]",*entry_count );
    EXEC SQL CLOSE cur_getentry4;
    EXEC SQL FREE cur_getentry4;
    for( i = 0;i<count;i++)     
    {                           
        WriteLog( ERR_LVL ,"!!!entry[%d][%s]",i,entry[i]);
    }                           
                                
    return PB_OK;               
}                               
                                
                                
/*                              
* 取冲账分录                    
* 输入:冲账类型、现转类型、分录类型、PB交易日期、(账户、户名、交易金额、币种)
* 输出:冲账分录数组、冲账分录个数
*/                              
int                             
GetReverEntryArray2(accflag,cshtsftype,pbtrandate,s_cstm_rever_info,entry,entry_count)
char *accflag;          
char *cshtsftype;
char *pbtrandate; 
char entry[ENTRY_ROW][ENTRY_COL];
int *entry_count;
struct S_CSTM_REVER_INFO *s_cstm_rever_info;
{           
    int rellen = 0;
    int ret = -1;
            
    int count = 0;
    char areano[6+1];           
    char chnlno[3+1];           
    char busitype[3+1];         
    char trancode[20+1];        
                                
    memset( areano , 0x00 , sizeof(areano));    
    memset( chnlno , 0x00 , sizeof(chnlno));    
    memset( busitype , 0x00 , sizeof(busitype));  
    memset( trancode , 0x00 , sizeof(trancode));
                                
    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetJourEntryArray2<<<<<<<<<<<<<,");
    GetPoolDataByName("PBSYS", "AreaNo", 0, 0, areano, &rellen );
    GetPoolDataByName("PBSYS", "RChnlNo", 0, 0, chnlno, &rellen );
    GetPoolDataByName("PBSYS", "BusiType", 0, 0, busitype, &rellen );
    GetPoolDataByName("PBSYS", "TranCode", 0, 0, trancode, &rellen );
    rtrim(areano);              
    rtrim(chnlno);
    rtrim(busitype);
    rtrim(trancode);
    WriteLog(ERR_LVL ,"areano[%s]",areano);
    WriteLog(ERR_LVL ,"chnlno[%s]",chnlno);
    WriteLog(ERR_LVL ,"busitype[%s]",busitype);
    WriteLog(ERR_LVL ,"trancode[%s]",trancode);

    ret = GetReverEntryArray(areano,chnlno,busitype,trancode,accflag,cshtsftype,pbtrandate,s_cstm_rever_info,entry,&count);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ,"Err Call GetReverEntryArray" );
        return(-1);
    }

    *entry_count = count;
    return PB_OK;
}
/*
* 取冲账分录
* 输入:PB交易日期、(账户、户名、交易金额、币种)
* 输出:冲账分录数组、冲账分录个数
*/
int
GetReverEntry(pbtrandate,s_cstm_rever_info,entry,entry_count)
char *pbtrandate;
char entry[ENTRY_ROW][ENTRY_COL];
int *entry_count;
struct S_CSTM_REVER_INFO *s_cstm_rever_info;
{
    int ret = -1;

    int i = 0;
    char accflag[1+1];
    char cshtsftype[1+1];

    int entry_count1 = 0;
    memset( accflag, 0x00, sizeof(accflag));
    memset( cshtsftype, 0x00, sizeof(cshtsftype));

    sprintf(accflag,"1");
    sprintf(cshtsftype,"2");

    WriteLog( ERR_LVL , ">>>>>>>>>>>>GetReverEntry<<<<<<<<<<<<<,");

    WriteLog( ERR_LVL , "s_cstm_rever_info.acc_no[%s]",s_cstm_rever_info->acc_no);
    WriteLog( ERR_LVL , "s_cstm_rever_info.cstm_name[%s]",s_cstm_rever_info->cstm_name);
    WriteLog( ERR_LVL , "s_cstm_rever_info.tran_amt[%lf]",s_cstm_rever_info->tran_amt);
    WriteLog( ERR_LVL , "s_cstm_rever_info.curr_type[%s]",s_cstm_rever_info->curr_type);

    ret = GetReverEntryArray2(accflag,cshtsftype,pbtrandate,s_cstm_rever_info,entry,&entry_count1);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ," Err Call GetJourEntryArray2");
       return(-1);
    }
    
    *entry_count = entry_count1;
    
    return PB_OK; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值