CashWithdraw

/*PB3.0系统自动生成demo源码文件*/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <string.h>
#include <signal.h>
#include <setjmp.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <dirent.h>
#include <ctype.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <math.h>


#include "pbconstval.h"
#include "pbstructdef.h"
#include "atmi.h"   /* TUXEDO  Header File */
#include "stdarg.h"


#ifdef ORACLE_DATABASE
EXEC SQL include "pbranchdb.h";
#else
#include "pbranchdb.h" 
#endif
#include "pberrlog.h"
#include "pbglbvardef.h"
#include "pbbasefunc.h"
EXEC SQL INCLUDE "pbappdb.h";
EXEC SQL INCLUDE "pbdbfunc.h";
EXEC SQL INCLUDE "pbbusi/busi004.h";
#define ENTRY_ROW 100
#define ENTRY_COL 1024
/* Fuction  :  Data_CashWithdrawal_RQ
 * Action   :  CashWithdrawalRequest
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Data_CashWithdrawal_RQ()
{
    EXEC SQL BEGIN DECLARE SECTION;
    char systracenum[6+1];
    char trandatetime[10+1];
    EXEC SQL END DECLARE SECTION;

    char entry[ENTRY_ROW][ENTRY_COL];
    int entry_count = 0;
    int i =0;
    struct S_CSTM_INFO s_cstm_info[1];

    char pbjourno[10+1];
    char hostjourno[10+1];
    char listjourno[10+1];

    char pwd[6+1];
    char pwd_enc[6+1];

    char filename[50+1];
    char filepath[128+1];
    char fullfilepath[256+1];
    FILE *fp=NULL;
    char strbuf[10240+1];
    char trandate[8+1];
    char AccNum[10+1];
    int ret = -1;
    int rellen = 0;
    char card_id[32+1];
    char tmp_str[100+1];
    char currtype[2+1];
    double tmp_tran_amt = 0.00;
    
    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 expiry_date[4+1];
    char settle_date[4+1];
    char merchant_type[4+1];
    char acq_ins_cou_code[3+1];
    char ser_entry_mod[3+1];
    char ser_cond_code[2+1];
    char tran_fee[9+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 card_accp_id[15+1];
    char card_accp_name_loc[40+1];
    char tran_curr_code[3+1];
    char pin_block_data[16+1];
    memset(systracenum,0x00,sizeof(systracenum));
    memset(trandatetime,0x00,sizeof(trandatetime));
    memset(entry,0,sizeof(entry));
    memset(AccNum,0,sizeof(AccNum));
    memset(pwd,0,sizeof(pwd));
    memset(pwd_enc,0,sizeof(pwd_enc));

    memset(&s_cstm_info,0x00,sizeof(s_cstm_info));

    memset(pbjourno,0x00,sizeof(pbjourno));
    memset(hostjourno,0x00,sizeof(hostjourno));
    memset(listjourno,0x00,sizeof(listjourno));
    memset(filename,0x00,sizeof(filename));
    memset(filepath,0x00,sizeof(filepath));
    memset(fullfilepath,0x00,sizeof(fullfilepath));
    memset(strbuf,0x00,sizeof(strbuf));
    memset(trandate,0x00,sizeof(trandate));
    memset(card_id,0x00,sizeof(card_id));
    memset(tmp_str,0x00,sizeof(tmp_str));
    memset(currtype,0x00,sizeof(currtype));
    
    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(expiry_date,0x00,sizeof(expiry_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(ser_entry_mod,0x00,sizeof(ser_entry_mod));
    memset(ser_cond_code,0x00,sizeof(ser_cond_code));
    memset(tran_fee,0x00,sizeof(tran_fee));
    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(card_accp_id,0x00,sizeof(card_accp_id));
    memset(card_accp_name_loc,0x00,sizeof(card_accp_name_loc));
    memset(tran_curr_code,0x00,sizeof(tran_curr_code));
    memset(pin_block_data,0x00,sizeof(pin_block_data));
    
    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] begin =========");
    /* Get the data */
    ret = Get_pbjourno(pbjourno,hostjourno,listjourno);
    if( ret != PB_OK )
    {
        WriteLog(ERR_LVL , "Err Get_pbjourno" );
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
    trim(pbjourno);
    trim(hostjourno);
    trim(listjourno);
    trim(trandate);
    WriteLog(ERR_LVL,"pbjourno[%s]",pbjourno);
    WriteLog(ERR_LVL,"hostjourno[%s]",hostjourno);
    WriteLog(ERR_LVL,"listjourno[%s]",listjourno);
    WriteLog(ERR_LVL,"trandate[%s]",trandate);

    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);
    GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
    GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
    GetPoolDataByName("Bconnex8583","expiry_date",0,0,expiry_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","ser_entry_mod",0,0,ser_entry_mod,&rellen);
    GetPoolDataByName("Bconnex8583","ser_cond_code",0,0,ser_cond_code,&rellen);
    GetPoolDataByName("Bconnex8583","tran_fee",0,0,tran_fee,&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","card_accp_id",0,0,card_accp_id,&rellen);
    GetPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,&rellen);
    GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
    GetPoolDataByName("Bconnex8583","pin_block_data",0,0,pin_block_data,&rellen);
    rtrim(PAccNum);
    rtrim(ProcCode);
    rtrim(tran_amt);
    rtrim(tran_date_time);
    rtrim(sys_trace_num);
    rtrim(local_time);
    rtrim(local_tran_date);
    rtrim(expiry_date);
    rtrim(settle_date);
    rtrim(merchant_type);
    rtrim(acq_ins_cou_code);
    rtrim(ser_entry_mod);
    rtrim(ser_cond_code);
    rtrim(tran_fee);
    rtrim(acq_ins_id);
    rtrim(track2_data);
    rtrim(retr_ref_num);
    rtrim(card_accp_termid);
    rtrim(card_accp_id);
    rtrim(card_accp_name_loc);
    rtrim(tran_curr_code);
    rtrim(pin_block_data);
    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);
    WriteLog(ERR_LVL,"local_time[%s]",local_time);
    WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
    WriteLog(ERR_LVL,"expiry_date[%s]",expiry_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,"ser_entry_mod[%s]",ser_entry_mod);
    WriteLog(ERR_LVL,"ser_cond_code[%s]",ser_cond_code);
    WriteLog(ERR_LVL,"tran_fee[%s]",tran_fee);
    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,"card_accp_id[%s]",card_accp_id);
    WriteLog(ERR_LVL,"card_accp_name_loc[%s]",card_accp_name_loc);
    WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
    WriteLog(ERR_LVL,"pin_block_data[%s]",pin_block_data);

    /* 由于报文不包含小数点,需要对tran_amt进行格式化*/
    sscanf(tran_amt,"%lf",&tmp_tran_amt);
    tmp_tran_amt = tmp_tran_amt/100;
    WriteLog(ERR_LVL,"tmp_tran_amt[%lf]",tmp_tran_amt);
    /* 根据系统追踪号 和 交易日期时间  检查是否重复记账记录 */
    memcpy(systracenum,sys_trace_num,6);
    memcpy(trandatetime,tran_date_time,10);
    
    WriteLog(ERR_LVL,"systracenum[%s]",systracenum);
    WriteLog(ERR_LVL,"trandatetime[%s]",trandatetime);
    
    EXEC SQL SELECT  *
         FROM    t_ap_journal
         WHERE rltseqno = :systracenum
         AND hststlmdtime = :trandatetime
         AND transtat = "0";
    /* 存在重复记账记录,报错返回 */     
    if(SQLCODE!=100)
    {
            WriteLog(ERR_LVL,"ERROR: select data err!systracenum[%s] trandatetime[%s] [%s] %ld\n", systracenum,trandatetime,SQLMSG,SQLCODE);
            Pb_ReturnClient8583("06");
            return PB_ERR;
    }
    WriteLog(ERR_LVL, "SQLCODE is [%d]", SQLCODE);
    /* HostAddHead */
    
    ret = Data_HostAddHead("5712");
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"HostAddHead failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    /* HostAddBody */
    strncpy(card_id,track2_data+1,19);
    rtrim(card_id);
    WriteLog(ERR_LVL,"card_id[%s]",card_id);

    /**********hsm test************/
    char pin_block[6+1];
    char mingwen[6+1];
    unsigned char pin_data[16+1];
    unsigned char sPinOut2[17];

    memset(pin_block,0x00,sizeof(pin_data));
    memset(mingwen,0x00,sizeof(mingwen));
    memset(pin_data,0x00,sizeof(pin_data));
    memset(sPinOut2,0x00,sizeof(sPinOut2));

    memcpy(pin_block,"111111",6);
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    WriteLog(ERR_LVL,"pin_block[%s]",pin_block);

    ret=Data_encry_new(pin_data,card_id,pin_block);
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"call Data_encry failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    trim(pin_data);
    WriteLog(ERR_LVL,"pin_data=[%s]",pin_data);

    ret = Data_decry_new(pin_data,card_id,mingwen);
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"call Data_decry failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    trim(mingwen);
    WriteLog(ERR_LVL,"mingwen=[%s]",mingwen);
    
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    /**********hsm test************/
    
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    /******* 密码软加密 *************/
    memcpy(pwd,mingwen,6);
    ret = CrtCstmPwd(pwd,pwd_enc);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ,"Err CrtCstmPwd ");
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    WriteLog( ERR_LVL ,"pwd[%s]   pwd_enc[%s]",pwd,pwd_enc);
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        
    /* 币种转换 */
    if(memcmp(currtype,"XX",2)==0)
    {
        WriteLog( ERR_LVL, "get currtype err!!!!   currtype[%s] tran_curr_code[%s]", currtype,tran_curr_code);
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    else
    {
        WriteLog( ERR_LVL, "Now currtype[%s]", currtype);
    }

    /* 币种检查,系统不支持跨币种记账,所以只允许本币取款 */
    if(memcmp(currtype,"40",2)!=0)
    {
        WriteLog( ERR_LVL, "cashwithdrawal currtype err!currtype[%s]", currtype);
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }

    /* 5712 body */
    sprintf(tmp_str,"%s||%s|%lf|||%s|%s||| ",card_id,currtype,tmp_tran_amt,pwd_enc,track2_data);
    WriteLog(ERR_LVL,"5712 condition[%s]",tmp_str);
    PutPoolDataByName("FDYL","checkstr",0,0,"01111311111111111011111011100000000000000000000000000000",0);
    PutPoolDataByName("FDYL","condition",0,0,tmp_str,0);

    /* 5710 body */
    PutPoolDataByName( "CBS", "CardFlag", 0, 0, "2" , 0 );
    sprintf( filename, "%s-%s.txt",  "001003", pbjourno );
    sprintf( filepath, "%s/%s/%s",getenv("INST_PATH"),getenv("INST_NO_PATH"), filename );
    sprintf( fullfilepath, "%s/%s",getenv("PRINTERDIR"), filepath );
    PutPoolDataByName( "CBS", "Track3Data", 0, 0, filepath , 0 );
    WriteLog( ERR_LVL, "filepath[%s] ", filepath );
    WriteLog( ERR_LVL, "fullfilepath[%s] ", fullfilepath );
        
    memcpy(s_cstm_info[0].acc_no,card_id,19);
    s_cstm_info[0].tran_amt = tmp_tran_amt;
    s_cstm_info[0].fee_amt = 0.00;
    memcpy(s_cstm_info[0].curr_type,currtype,2);
        
    WriteLog( ERR_LVL , "s_cstm_info.acc_no[%s]",s_cstm_info->acc_no);
    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);
    
    /* write acc file */
    fp = fopen( fullfilepath, "w+b" );
    if( NULL == fp )
    {   
        WriteLog( ERR_LVL, "Open file error![%s]",fullfilepath );
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    
    
    /* 组装上传记账分录格式 */
    ret = GetJourEntryArray3(trandate,s_cstm_info,entry,&entry_count);
    if(ret != PB_OK)
    {
        WriteLog(ERR_LVL,"Err GetJournalEntry");
        Pb_ReturnClient8583("96");
        return PB_ERR;  
    }
    WriteLog(ERR_LVL,"entry_count[%d]",entry_count);
    /* 记账分录写入文件 */
    for( i = 0;i<entry_count;i++)
    {
        fprintf( fp, "%s\n", entry[i] );
        WriteLog(ERR_LVL,"entry[%s]",entry[i]);
    }

    fclose(fp);

    sprintf( AccNum ,"%s" , &entry_count );
    PutPoolDataByName( "CBS", "AccNum", 0, 0, AccNum , 0 );
    /* ftp file to host */
    ret = Host_ftpData( filename );
    if( ret !=0 )
    {
        WriteLog(ERR_LVL,"Host_ftpData[%s] err", filename );
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }

    /* Pb_ReturnClient8583("00"); */

    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] end =========");

    return PB_OK;

}

/* Fuction  :  Data_CashWithdrawal_RP
 * Action   :  CashWithdrawalResponse
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */ 
int
Data_CashWithdrawal_RP()
{
    int ret = -1;
    int rellen = 0;
    
    char errcode[10+1]; 
    char errmsg[300+1];
    long hoststat=-1;
    char pbjourno[10+1];
    char hostjourno[10+1];
    char listjourno[10+1];
    char trandate[10+1];
    char rem[300+1];
    char rem_str[32+1];
    char out_recode[2+1];
    
    char auth_num[4+1];
    char resp_code[2+1];

    memset(auth_num,0x00,sizeof(auth_num));
    memset(resp_code,0x00,sizeof(resp_code));

    memset(out_recode, 0x00, sizeof(out_recode));
    memset(errcode,0x00,sizeof(errcode));
    memset(errmsg,0x00,sizeof(errmsg));
    memset(rem,0x00,sizeof(rem));
    memset(rem_str,0x00,sizeof(rem_str));
    memset(pbjourno,0x00,sizeof(pbjourno));
    memset(hostjourno,0x00,sizeof(hostjourno));
    memset(listjourno,0x00,sizeof(listjourno));
    memset(trandate,0x00,sizeof(trandate));

    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] begin =========");

    /* Get the data */
    GetPoolDataByName("ABSHEAD", "_host_stat", 0, 0, (char *)&hoststat, &rellen );
    WriteLog( ERR_LVL, "hoststat[%ld]", hoststat );
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
    WriteLog(ERR_LVL ,"trandate[%s]",trandate);
    Get_pbjourno(pbjourno,hostjourno,listjourno);

    if(hoststat==0)
    {
        ret = GetAuthNo(auth_num);
        if(ret != PB_OK)
        {
            WriteLog(ERR_LVL ,"GetAuthNo Err");
            Pb_ReturnClient8583("06");
            return PB_ERR;
        }
        PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
        PutPoolDataByName("Bconnex8583","resp_code",0,0,"00",0);
        WriteLog(ERR_LVL ,"Transaction Success!pbjourno[%s] hostjourno[%s] trandate[%s]",pbjourno,hostjourno,trandate);
    }
    else
    {
        GetPoolDataByName("ABSHEAD","_error_code",0,0,rem,&rellen);
        if(strlen(rem)<=32)
        {
            memcpy(rem_str,rem,strlen(rem));
        }
        else
        {
            memcpy(rem_str,rem,32);
        }
        sscanf( rem, "[%[^]]]:%[^'']", errcode,errmsg );
        trim(errcode); 
        trim(errmsg);
        if(strlen(errcode)==0)
        {
            sscanf( rem, "%*[^0-9]%*[0-9]%*[^0-9]%[0-9]]:%[^'']",errcode,errmsg);
            trim(errcode);
            trim(errmsg);
        }
        WriteLog(ERR_LVL ,"errcode[%s]errmsg[%s]hoststat[%ld]",errcode,errmsg,hoststat);
        errcode_transform(errcode,out_recode);
        trim(out_recode);
        WriteLog(ERR_LVL, "out_recode[%s]", out_recode);
        Pb_ReturnClient8583(out_recode);
        return PB_ERR;
    }   
        
    Pb_ReturnClient8583("00");
    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] end =========");

    return PB_OK;

}


/* Fuction  :  Data_CashWithdrawal_RQ
 * Action   :  CashWithdrawalRequest
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Data_CashWithdrawal_RQ()
{
    EXEC SQL BEGIN DECLARE SECTION;
    char systracenum[6+1];
    char trandatetime[10+1];
    EXEC SQL END DECLARE SECTION;


    char entry[ENTRY_ROW][ENTRY_COL];
    int entry_count = 0;
    int i =0;
    struct S_CSTM_INFO s_cstm_info[1];


    char pbjourno[10+1];
    char hostjourno[10+1];
    char listjourno[10+1];


    char pwd[6+1];
    char pwd_enc[6+1];


    char filename[50+1];
    char filepath[128+1];
    char fullfilepath[256+1];
    FILE *fp=NULL;
    char strbuf[10240+1];
    char trandate[8+1];
    char AccNum[10+1];
    int ret = -1;
    int rellen = 0;
    char card_id[32+1];
    char tmp_str[100+1];
    char currtype[2+1];
    double tmp_tran_amt = 0.00;
    
    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 expiry_date[4+1];
    char settle_date[4+1];
    char merchant_type[4+1];
    char acq_ins_cou_code[3+1];
    char ser_entry_mod[3+1];
    char ser_cond_code[2+1];
    char tran_fee[9+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 card_accp_id[15+1];
    char card_accp_name_loc[40+1];
    char tran_curr_code[3+1];
    char pin_block_data[16+1];
    memset(systracenum,0x00,sizeof(systracenum));
    memset(trandatetime,0x00,sizeof(trandatetime));
    memset(entry,0,sizeof(entry));
    memset(AccNum,0,sizeof(AccNum));
    memset(pwd,0,sizeof(pwd));
    memset(pwd_enc,0,sizeof(pwd_enc));


    memset(&s_cstm_info,0x00,sizeof(s_cstm_info));


    memset(pbjourno,0x00,sizeof(pbjourno));
    memset(hostjourno,0x00,sizeof(hostjourno));
    memset(listjourno,0x00,sizeof(listjourno));
    memset(filename,0x00,sizeof(filename));
    memset(filepath,0x00,sizeof(filepath));
    memset(fullfilepath,0x00,sizeof(fullfilepath));
    memset(strbuf,0x00,sizeof(strbuf));
    memset(trandate,0x00,sizeof(trandate));
    memset(card_id,0x00,sizeof(card_id));
    memset(tmp_str,0x00,sizeof(tmp_str));
    memset(currtype,0x00,sizeof(currtype));
    
    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(expiry_date,0x00,sizeof(expiry_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(ser_entry_mod,0x00,sizeof(ser_entry_mod));
    memset(ser_cond_code,0x00,sizeof(ser_cond_code));
    memset(tran_fee,0x00,sizeof(tran_fee));
    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(card_accp_id,0x00,sizeof(card_accp_id));
    memset(card_accp_name_loc,0x00,sizeof(card_accp_name_loc));
    memset(tran_curr_code,0x00,sizeof(tran_curr_code));
    memset(pin_block_data,0x00,sizeof(pin_block_data));
    
    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] begin =========");
    /* Get the data */
    ret = Get_pbjourno(pbjourno,hostjourno,listjourno);
    if( ret != PB_OK )
    {
        WriteLog(ERR_LVL , "Err Get_pbjourno" );
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
    trim(pbjourno);
    trim(hostjourno);
    trim(listjourno);
    trim(trandate);
    WriteLog(ERR_LVL,"pbjourno[%s]",pbjourno);
    WriteLog(ERR_LVL,"hostjourno[%s]",hostjourno);
    WriteLog(ERR_LVL,"listjourno[%s]",listjourno);
    WriteLog(ERR_LVL,"trandate[%s]",trandate);


    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);
    GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
    GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
    GetPoolDataByName("Bconnex8583","expiry_date",0,0,expiry_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","ser_entry_mod",0,0,ser_entry_mod,&rellen);
    GetPoolDataByName("Bconnex8583","ser_cond_code",0,0,ser_cond_code,&rellen);
    GetPoolDataByName("Bconnex8583","tran_fee",0,0,tran_fee,&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","card_accp_id",0,0,card_accp_id,&rellen);
    GetPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,&rellen);
    GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
    GetPoolDataByName("Bconnex8583","pin_block_data",0,0,pin_block_data,&rellen);
    rtrim(PAccNum);
    rtrim(ProcCode);
    rtrim(tran_amt);
    rtrim(tran_date_time);
    rtrim(sys_trace_num);
    rtrim(local_time);
    rtrim(local_tran_date);
    rtrim(expiry_date);
    rtrim(settle_date);
    rtrim(merchant_type);
    rtrim(acq_ins_cou_code);
    rtrim(ser_entry_mod);
    rtrim(ser_cond_code);
    rtrim(tran_fee);
    rtrim(acq_ins_id);
    rtrim(track2_data);
    rtrim(retr_ref_num);
    rtrim(card_accp_termid);
    rtrim(card_accp_id);
    rtrim(card_accp_name_loc);
    rtrim(tran_curr_code);
    rtrim(pin_block_data);
    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);
    WriteLog(ERR_LVL,"local_time[%s]",local_time);
    WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
    WriteLog(ERR_LVL,"expiry_date[%s]",expiry_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,"ser_entry_mod[%s]",ser_entry_mod);
    WriteLog(ERR_LVL,"ser_cond_code[%s]",ser_cond_code);
    WriteLog(ERR_LVL,"tran_fee[%s]",tran_fee);
    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,"card_accp_id[%s]",card_accp_id);
    WriteLog(ERR_LVL,"card_accp_name_loc[%s]",card_accp_name_loc);
    WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
    WriteLog(ERR_LVL,"pin_block_data[%s]",pin_block_data);


    /* 由于报文不包含小数点,需要对tran_amt进行格式化*/
    sscanf(tran_amt,"%lf",&tmp_tran_amt);
    tmp_tran_amt = tmp_tran_amt/100;
    WriteLog(ERR_LVL,"tmp_tran_amt[%lf]",tmp_tran_amt);
    /* 根据系统追踪号 和 交易日期时间  检查是否重复记账记录 */
    memcpy(systracenum,sys_trace_num,6);
    memcpy(trandatetime,tran_date_time,10);
    
    WriteLog(ERR_LVL,"systracenum[%s]",systracenum);
    WriteLog(ERR_LVL,"trandatetime[%s]",trandatetime);
    
    EXEC SQL SELECT  *
         FROM    t_ap_journal
         WHERE rltseqno = :systracenum
         AND hststlmdtime = :trandatetime
         AND transtat = "0";
    /* 存在重复记账记录,报错返回 */     
    if(SQLCODE!=100)
    {
            WriteLog(ERR_LVL,"ERROR: select data err!systracenum[%s] trandatetime[%s] [%s] %ld\n", systracenum,trandatetime,SQLMSG,SQLCODE);
            Pb_ReturnClient8583("06");
            return PB_ERR;
    }
    WriteLog(ERR_LVL, "SQLCODE is [%d]", SQLCODE);
    /* HostAddHead */
    
    ret = Data_HostAddHead("5712");
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"HostAddHead failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    /* HostAddBody */
    strncpy(card_id,track2_data+1,19);
    rtrim(card_id);
    WriteLog(ERR_LVL,"card_id[%s]",card_id);


    /**********hsm test************/
    char pin_block[6+1];
    char mingwen[6+1];
    unsigned char pin_data[16+1];
    unsigned char sPinOut2[17];


    memset(pin_block,0x00,sizeof(pin_data));
    memset(mingwen,0x00,sizeof(mingwen));
    memset(pin_data,0x00,sizeof(pin_data));
    memset(sPinOut2,0x00,sizeof(sPinOut2));


    memcpy(pin_block,"111111",6);
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    WriteLog(ERR_LVL,"pin_block[%s]",pin_block);


    ret=Data_encry_new(pin_data,card_id,pin_block);
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"call Data_encry failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    trim(pin_data);
    WriteLog(ERR_LVL,"pin_data=[%s]",pin_data);


    ret = Data_decry_new(pin_data,card_id,mingwen);
    if(ret !=0)
    {
        WriteLog(ERR_LVL,"call Data_decry failed!");
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    trim(mingwen);
    WriteLog(ERR_LVL,"mingwen=[%s]",mingwen);
    
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    /**********hsm test************/
    
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    /******* 密码软加密 *************/
    memcpy(pwd,mingwen,6);
    ret = CrtCstmPwd(pwd,pwd_enc);
    if( ret != PB_OK )
    {
        WriteLog( ERR_LVL ,"Err CrtCstmPwd ");
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    WriteLog( ERR_LVL ,"pwd[%s]   pwd_enc[%s]",pwd,pwd_enc);
    WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        
    /* 币种转换 */
    if(memcmp(currtype,"XX",2)==0)
    {
        WriteLog( ERR_LVL, "get currtype err!!!!   currtype[%s] tran_curr_code[%s]", currtype,tran_curr_code);
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }
    else
    {
        WriteLog( ERR_LVL, "Now currtype[%s]", currtype);
    }


    /* 币种检查,系统不支持跨币种记账,所以只允许本币取款 */
    if(memcmp(currtype,"40",2)!=0)
    {
        WriteLog( ERR_LVL, "cashwithdrawal currtype err!currtype[%s]", currtype);
        Pb_ReturnClient8583("06");
        return PB_ERR;
    }


    /* 5712 body */
    sprintf(tmp_str,"%s||%s|%lf|||%s|%s||| ",card_id,currtype,tmp_tran_amt,pwd_enc,track2_data);
    WriteLog(ERR_LVL,"5712 condition[%s]",tmp_str);
    PutPoolDataByName("FDYL","checkstr",0,0,"01111311111111111011111011100000000000000000000000000000",0);
    PutPoolDataByName("FDYL","condition",0,0,tmp_str,0);


    /* 5710 body */
    PutPoolDataByName( "CBS", "CardFlag", 0, 0, "2" , 0 );
    sprintf( filename, "%s-%s.txt",  "001003", pbjourno );
    sprintf( filepath, "%s/%s/%s",getenv("INST_PATH"),getenv("INST_NO_PATH"), filename );
    sprintf( fullfilepath, "%s/%s",getenv("PRINTERDIR"), filepath );
    PutPoolDataByName( "CBS", "Track3Data", 0, 0, filepath , 0 );
    WriteLog( ERR_LVL, "filepath[%s] ", filepath );
    WriteLog( ERR_LVL, "fullfilepath[%s] ", fullfilepath );
        
    memcpy(s_cstm_info[0].acc_no,card_id,19);
    s_cstm_info[0].tran_amt = tmp_tran_amt;
    s_cstm_info[0].fee_amt = 0.00;
    memcpy(s_cstm_info[0].curr_type,currtype,2);
        
    WriteLog( ERR_LVL , "s_cstm_info.acc_no[%s]",s_cstm_info->acc_no);
    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);
    
    /* write acc file */
    fp = fopen( fullfilepath, "w+b" );
    if( NULL == fp )
    {   
        WriteLog( ERR_LVL, "Open file error![%s]",fullfilepath );
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }
    
    
    /* 组装上传记账分录格式 */
    ret = GetJourEntryArray3(trandate,s_cstm_info,entry,&entry_count);
    if(ret != PB_OK)
    {
        WriteLog(ERR_LVL,"Err GetJournalEntry");
        Pb_ReturnClient8583("96");
        return PB_ERR;  
    }
    WriteLog(ERR_LVL,"entry_count[%d]",entry_count);
    /* 记账分录写入文件 */
    for( i = 0;i<entry_count;i++)
    {
        fprintf( fp, "%s\n", entry[i] );
        WriteLog(ERR_LVL,"entry[%s]",entry[i]);
    }


    fclose(fp);


    sprintf( AccNum ,"%s" , &entry_count );
    PutPoolDataByName( "CBS", "AccNum", 0, 0, AccNum , 0 );
    /* ftp file to host */
    ret = Host_ftpData( filename );
    if( ret !=0 )
    {
        WriteLog(ERR_LVL,"Host_ftpData[%s] err", filename );
        Pb_ReturnClient8583("96");
        return PB_ERR;
    }


    /* Pb_ReturnClient8583("00"); */


    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] end =========");


    return PB_OK;


}


/* Fuction  :  Data_CashWithdrawal_RP
 * Action   :  CashWithdrawalResponse
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */ 
int
Data_CashWithdrawal_RP()
{
    int ret = -1;
    int rellen = 0;
    
    char errcode[10+1]; 
    char errmsg[300+1];
    long hoststat=-1;
    char pbjourno[10+1];
    char hostjourno[10+1];
    char listjourno[10+1];
    char trandate[10+1];
    char rem[300+1];
    char rem_str[32+1];
    char out_recode[2+1];
    
    char auth_num[4+1];
    char resp_code[2+1];


    memset(auth_num,0x00,sizeof(auth_num));
    memset(resp_code,0x00,sizeof(resp_code));


    memset(out_recode, 0x00, sizeof(out_recode));
    memset(errcode,0x00,sizeof(errcode));
    memset(errmsg,0x00,sizeof(errmsg));
    memset(rem,0x00,sizeof(rem));
    memset(rem_str,0x00,sizeof(rem_str));
    memset(pbjourno,0x00,sizeof(pbjourno));
    memset(hostjourno,0x00,sizeof(hostjourno));
    memset(listjourno,0x00,sizeof(listjourno));
    memset(trandate,0x00,sizeof(trandate));


    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] begin =========");


    /* Get the data */
    GetPoolDataByName("ABSHEAD", "_host_stat", 0, 0, (char *)&hoststat, &rellen );
    WriteLog( ERR_LVL, "hoststat[%ld]", hoststat );
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
    WriteLog(ERR_LVL ,"trandate[%s]",trandate);
    Get_pbjourno(pbjourno,hostjourno,listjourno);


    if(hoststat==0)
    {
        ret = GetAuthNo(auth_num);
        if(ret != PB_OK)
        {
            WriteLog(ERR_LVL ,"GetAuthNo Err");
            Pb_ReturnClient8583("06");
            return PB_ERR;
        }
        PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
        PutPoolDataByName("Bconnex8583","resp_code",0,0,"00",0);
        WriteLog(ERR_LVL ,"Transaction Success!pbjourno[%s] hostjourno[%s] trandate[%s]",pbjourno,hostjourno,trandate);
    }
    else
    {
        GetPoolDataByName("ABSHEAD","_error_code",0,0,rem,&rellen);
        if(strlen(rem)<=32)
        {
            memcpy(rem_str,rem,strlen(rem));
        }
        else
        {
            memcpy(rem_str,rem,32);
        }
        sscanf( rem, "[%[^]]]:%[^'']", errcode,errmsg );
        trim(errcode); 
        trim(errmsg);
        if(strlen(errcode)==0)
        {
            sscanf( rem, "%*[^0-9]%*[0-9]%*[^0-9]%[0-9]]:%[^'']",errcode,errmsg);
            trim(errcode);
            trim(errmsg);
        }
        WriteLog(ERR_LVL ,"errcode[%s]errmsg[%s]hoststat[%ld]",errcode,errmsg,hoststat);
        errcode_transform(errcode,out_recode);
        trim(out_recode);
        WriteLog(ERR_LVL, "out_recode[%s]", out_recode);
        Pb_ReturnClient8583(out_recode);
        return PB_ERR;
    }   
        
    Pb_ReturnClient8583("00");
    WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] end =========");


    return PB_OK;


}

内容概要:本文系统梳理了2025年数学前沿领域的研究动态与发展趋势,涵盖代数几何、数论、微分几何、拓扑学、偏微分方程、数学物理等多个核心方向,并介绍了当前国际数学研究的三大主流趋势:代数几何与数论、分析与偏微分方程、几何拓扑与表示论。文中重点报道了青年数学家王虹成功证明三维挂谷猜想的重大突破,以及韦东奕在偏微分方程与几何分析方面的研究成果,展现了中国数学界的崛起态势。同时,文档还涉及数学基础研究、应用数学、数学教育、期刊评价体系及国际数学强国格局等内容,引用大量视频、文章和权威资源,呈现数学学科的全貌与发展前景。; 适合人群:具备一定数学基础的本科生、研究生及科研工作者,关注数学前沿发展的教师、科技爱好者以及从事人工智能、物理、工程等相关领域并需数学支撑的专业人士。; 使用场景及目标:①了解2025年数学领域的重要突破与研究热点,如挂谷猜想的证明、朗兰兹纲领、拓扑数据分析等;②把握数学各分支的前沿方向与交叉应用,服务于科研选题、学术规划或跨学科研究;③获取权威学习资源与经典文献推荐,辅助数学学习与教学实践。; 阅读建议:此文档为信息聚合型资料,建议结合所列视频、书籍和论文深入拓展学习,重点关注核心突破案例(如王虹、韦东奕)与主流研究方向的演进脉络,宜以批判性思维梳理知识体系,避免碎片化阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值