CashWithdrawReverse

/* Fuction  :  Data_CashWithdrawalReversal_RQ
 * Action   :  CashWithdrawalReversalRequest
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Data_CashWithdrawalReversal_RQ()
{
    EXEC SQL BEGIN DECLARE SECTION;
    AP_JOURNAL origjnl;
    char OrignSysTraceNo[6+1];
    char origTranDTime[10+1];
    EXEC SQL END DECLARE SECTION;
    char entry[ENTRY_ROW][ENTRY_COL];
    int entry_count = 0;
    int i =0;
    struct S_CSTM_REVER_INFO s_cstm_rever_info[1];
    char AccNum[10+1];
    double tmp_tran_amt = 0.00;
    double tmp_tran_amt2 = 0.00;
    
    char pwd[6+1];
    char pwd_enc[6+1];
    char record_idx[200+1];

    int ret = -1;
    int rellen = 0;
    char tmp_str[100+1];
    char currtype[2+1]; 
    char pbjourno[10+1];
    char hostjourno[10+1];
    char listjourno[10+1];
    char trandate[8+1];
    char PAccNum[99+1];
    char ProcCode[6+1];
    char tran_amt[12];
    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 resp_code[2+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 orig_data_ele[42+1];
    char origMsgType[4+1];
    char origRecvInstCode[11+1];
    char origSndInstCode[11+1];

    char card_id[19+1];
    char filename[50+1];
    char filepath[128+1];
    char fullfilepath[256+1];
    FILE *fp = NULL;
    char strbuf[10240+1];
    char loc_sndpkg_time[10+1];

    memset(entry,0,sizeof(entry));
    memset(AccNum,0,sizeof(AccNum));
    memset(&s_cstm_rever_info,0x00,sizeof(s_cstm_rever_info));
    memset(pwd,0,sizeof(pwd));
    memset(pwd_enc,0,sizeof(pwd_enc));
    memset(record_idx,0,sizeof(record_idx));
    
    memset(tmp_str, 0x00, sizeof(tmp_str));
    memset(currtype, 0x00,sizeof(currtype));
    memset(pbjourno, 0x00, sizeof(pbjourno));
    memset(hostjourno, 0x00, sizeof(hostjourno));
    memset(listjourno, 0x00, sizeof(listjourno));
    memset(trandate, 0x00, sizeof(trandate));
    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(resp_code,0x00,sizeof(resp_code));
    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(orig_data_ele,0x00,sizeof(orig_data_ele));
    memset(&origjnl, 0x00, sizeof(&origjnl));
    memset(card_id, 0x00, sizeof(card_id));
    memset(loc_sndpkg_time, 0x00, sizeof(loc_sndpkg_time));
    memset(OrignSysTraceNo, 0x00, sizeof(OrignSysTraceNo));
    memset(origTranDTime, 0x00, sizeof(origTranDTime));
    memset(origMsgType, 0x00, sizeof(origMsgType));
    memset(origRecvInstCode, 0x00, sizeof(origRecvInstCode));
    memset(origSndInstCode, 0x00, sizeof(origSndInstCode));

    ret = GetSndPkgTime8583(loc_sndpkg_time);
    if(ret==PB_ERR)
    {
        WriteLog(ERR_LVL, "生成8583报文中发报时间错误");
        return PB_ERR;
    }
    WriteLog(ERR_LVL, "loc_sndpkg_time [%s]", loc_sndpkg_time);
    WriteLog(ERR_LVL,"========= Data_CashWithdrawalReversal_RQ[001004] begin =========");

    /* Get the data */
    Get_pbjourno(pbjourno,hostjourno,listjourno);
    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","resp_code",0,0,resp_code,&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","orig_data_ele",0,0,orig_data_ele,&rellen);
    GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
    GetPoolDataByName("Bconnex8583","orig_data_ele",0,0,orig_data_ele,&rellen);

    PutPoolDataByName("Bconnex8583","resp_code", 0, 0, "06", 0); //如果流程出错,则为resp_code赋值
    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(resp_code);
    rtrim(card_accp_termid);
    rtrim(card_accp_id);
    rtrim(card_accp_name_loc);
    rtrim(tran_curr_code);
    rtrim(orig_data_ele);
    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,"resp_code[%s]",resp_code);
    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,"orig_data_ele[%s]",orig_data_ele);

    get_in_currtype(tran_curr_code, currtype);
    WriteLog(ERR_LVL, "发送到核心的币种为[%s]", currtype);

    memcpy(card_id, track2_data+1, 19);
    memcpy(origMsgType, orig_data_ele, 4);
    memcpy(card_id, track2_data+1, 19);
    memcpy(origMsgType, orig_data_ele, 4);
    memcpy(OrignSysTraceNo, orig_data_ele+4, 6);
    memcpy(origTranDTime, orig_data_ele+10, 10); 
    memcpy(origRecvInstCode, orig_data_ele+20, 11);
    memcpy(origSndInstCode, orig_data_ele+31,11);
    
    WriteLog(ERR_LVL, "Original massage type is [%s]\n", origMsgType);
    WriteLog(ERR_LVL, "Original system trace audit number is [%s]\n", OrignSysTraceNo);
    WriteLog(ERR_LVL, "OrigTran date and time is [%s]", origTranDTime);
    WriteLog(ERR_LVL, "Original acquirer institution identification code is [%s]\n", origRecvInstCode);
    WriteLog(ERR_LVL, "Original forwarding institution identification code is [%s]", origSndInstCode);
    
    /**********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&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    /**** 查询原交易是否存在 ********/
    EXEC SQL SELECT * INTO :origjnl
        FROM T_AP_JOURNAL
        WHERE rltseqno = :OrignSysTraceNo
        AND hststlmdtime = :origTranDTime
        AND transtat = '0';
    if(SQLCODE!= 0)
    {
        WriteLog(ERR_LVL, "Search orignal transacation error! rltseqno[%s], hststlmdtime[%s], SQLCODE is [%d]", OrignSysTraceNo, origTranDTime, SQLCODE);
        return PB_ERR;
    }
    WriteLog(ERR_LVL, "select table t_ap_journal successflly! sqlcode=[%d]", SQLCODE);

    /******* 取出原流水金额进行转换  ******/
    sscanf(origjnl.Reserve5,"%lf",&tmp_tran_amt);
    tmp_tran_amt = tmp_tran_amt/100;
    WriteLog(ERR_LVL,"tmp_tran_amt[%lf]",tmp_tran_amt);

    sscanf(tran_amt,"%lf",&tmp_tran_amt2);
    tmp_tran_amt2 = tmp_tran_amt2/100;
    WriteLog(ERR_LVL,"tmp_tran_amt2[%lf]",tmp_tran_amt2);

    trim(origjnl.TranStat);
    trim(origjnl.AcctNo);
    trim(origjnl.TranDate);
    trim(origjnl.SysSeqNum);
    WriteLog(ERR_LVL, "原交易状态为[%s]!", origjnl.TranStat);
    WriteLog(ERR_LVL,"原交易账号为[%s]!",origjnl.AcctNo);
    WriteLog(ERR_LVL,"原交易金额为[%lf]", origjnl.Reserve5);
    if(memcmp(origjnl.TranStat, "0", 1) !=0 )   /* 该笔交易是 成功 状态  */
    {
        WriteLog(ERR_LVL, "原交易不符合冲正条件!");
        return PB_ERR;
    }

    if( fabs(tmp_tran_amt2 - tmp_tran_amt) > ZERO_AMT )
    {
        WriteLog(ERR_LVL, " 冲正金额和原交易金额不相等!");
        return PB_ERR;
    }

    if( memcmp(origjnl.AcctNo, card_id, 19)!=0 )
    {
        WriteLog(ERR_LVL, "冲正交易账号和原交易账号不匹配!");
        return PB_ERR;
    }

    /* HostAddHead */
    ret = Data_HostAddHead("5712");
    if(ret !=0)
    {   
        WriteLog(ERR_LVL,"HostAddHead failed!");
        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);
    
    /* 5718 body */
    PutPoolDataByName( "FDCZ", "DataFlag", 0, 0, "2" , 0 );
    memcpy(card_id,track2_data+1,19);
    WriteLog(ERR_LVL,"card_id[%s]",card_id);
    
    sprintf( filename, "%s-%s.txt",  "001004", pbjourno );
    sprintf( filepath, "%s/%s/%s",getenv("INST_PATH"),getenv("INST_NO_PATH"), filename );
    sprintf( fullfilepath, "%s/%s",getenv("PRINTERDIR"), filepath );
    WriteLog( ERR_LVL, "filepath[%s] ", filepath );
    WriteLog( ERR_LVL, "fullfilepath[%s] ", fullfilepath );
    PutPoolDataByName( "FDCZ", "FileName", 0, 0, filepath , 0 );
    
    
    rtrim(origjnl.AppIndex);    
    sprintf(record_idx,"%s",origjnl.AppIndex);
    WriteLog( ERR_LVL ,"record_idx[%s]",record_idx);
    PutPoolDataByName( "FDCZ", "CorrRecordIdx", 0, 0, record_idx , 0 );
    
    fp = fopen( fullfilepath, "w+b" );
    if( NULL == fp )
    {
        WriteLog( ERR_LVL, "Open file error![%s]",fullfilepath );
        return PB_ERR;
    }
        
    memcpy(s_cstm_rever_info->acc_no,card_id,19);
    s_cstm_rever_info->tran_amt = tmp_tran_amt;
    s_cstm_rever_info->fee_amt = 0.00;
    memcpy(s_cstm_rever_info->curr_type,currtype,2);
    
    memcpy(s_cstm_rever_info->corr_flag,"1",1); 
    memcpy(s_cstm_rever_info->corr_date,origjnl.AcctDate,10);
    sprintf(s_cstm_rever_info->corrseqno,"TT%s",origjnl.SysSeqNum);

    /* 组装上传记账分录格式 */ 
    ret = GetReverEntry(origjnl.AcctDate,s_cstm_rever_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]);
    }

    sprintf( AccNum ,"%s" , &entry_count );
    PutPoolDataByName( "FDCZ", "AccNum", 0, 0, AccNum , 0 );
    fclose(fp);

    ret = Host_ftpData( filename );
    if( ret !=0 )
    {
        WriteLog(ERR_LVL,"Host_ftpData[%s] err", filename );
        return PB_ERR;
    }

    WriteLog(ERR_LVL,"========= Data_CashWithdrawalReversal_RQ[001004] end =========");

    return PB_OK;

}



/* Fuction  :  Data_CashWithdrawalReversal_RP
 * Action   :  CashWithdrawalReversalResponse
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */
int
Data_CashWithdrawalReversal_RP()
{

    int ret = -1;
    int rellen = 0;
    char errcode[10+1];
    char errmsg[300+1];
    char out_recode[2+1];
    long hoststat = -1;
    char rem[300+1];
    char rem_str[32+1];
    char trandate[8+1];
    char origDataEle[42+1];
    char origSysTraceNo[6+1];
    char origTranTime[4+1];
    memset(errcode, 0x00, sizeof(errcode));
    memset(errmsg, 0x00, sizeof(errmsg));
    memset(out_recode, 0x00, sizeof(out_recode));
    memset(rem, 0x00, sizeof(rem));
    memset(rem_str, 0x00, sizeof(rem_str));
    memset(trandate, 0x00, sizeof(trandate));
    memset(origDataEle, 0x00, sizeof(origDataEle));
    memset(origSysTraceNo, 0x00, sizeof(origSysTraceNo));
    memset(origTranTime, 0x00, sizeof(origTranTime));
    /*Get The Data*/
    GetPoolDataByName("ABSHEAD", "_host_stat", 0, 0, (char *)&hoststat, &rellen );
    GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
    GetPoolDataByName("Bconnex8583", "orig_data_ele", 0, 0, origDataEle, &rellen);
    WriteLog(ERR_LVL, "origDataEle is [%s]", origDataEle);
    memcpy(origSysTraceNo, origDataEle+4, 6);
    memcpy(origTranTime, origDataEle+10, 10);
    WriteLog(ERR_LVL, "origSysTraceNo is [%s], origTranTime is [%s]", origSysTraceNo, origTranTime);
    WriteLog( ERR_LVL, "hoststat[%ld]", hoststat );

    /* PutPoolDataByName("Bconnex8583","sys_trace_num", 0, 0, "999999", 0); */
    if(hoststat==0)
    {
        WriteLog(ERR_LVL, "Transaction Success![%ld]", hoststat);

        ret = setFlagAfterReversal(origSysTraceNo, origTranTime);
        if(ret==PB_OK)
        {
            WriteLog(ERR_LVL, "update table T_AP_JOURNAL successfully!");
        }

        Pb_ReturnClient8583("00");
        WriteLog(ERR_LVL,"========= Data_CashWithdrawalReversal_RP[001004] end =========");

    }
    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);
        WriteLog(ERR_LVL,"========= Data_CashWithdrawalReversal_RP[001004] end =========");
        return PB_ERR;
    }

    return PB_OK;

}
/* Fuction  :  GetSndPkgTime8583
 * Action   :  GetSndPkgTime8583
 * Input    :
 * Output   :
 * Author   :
 * Date     : 2014/11/06
 */

int GetSndPkgTime8583(char *Time8583)
{
    char DateFromPB[8+1];
    char TimeFromPB[8+1];
    char tmpTime[10+1];

    int rellen=0;
    memset(DateFromPB, 0x00, sizeof(DateFromPB));
    memset(TimeFromPB, 0x00, sizeof(TimeFromPB));
    memset(tmpTime, 0x00, sizeof(tmpTime));

    GetPoolDataByName("PBSYS", "SysDate",0, 0, DateFromPB, &rellen);
    GetPoolDataByName("PBSYS", "SysTime", 0, 0, TimeFromPB, &rellen);
    trim(DateFromPB);
    trim(TimeFromPB);
    if(strlen(DateFromPB)!=8)
    {
        WriteLog(ERR_LVL, "取PB系统日期错误\n");
        return PB_ERR;
    }
    if(strlen(TimeFromPB)!=6 && strlen(TimeFromPB)!=8)
    {
        WriteLog(ERR_LVL, "取PB系统时间错误\n");
        return PB_ERR;
    }

    WriteLog(ERR_LVL, "DateFromPB is [%s], TimeFromPB is [%s]", DateFromPB, TimeFromPB);
    memcpy(tmpTime, DateFromPB+4, 4);
    memcpy(tmpTime+4, TimeFromPB,2);
    if(strlen(TimeFromPB)==6)
    {
        memcpy(tmpTime+6, TimeFromPB+2, 2);
        memcpy(tmpTime+8, TimeFromPB+4, 2);
    }
    if(strlen(TimeFromPB)==8)
    {
        memcpy(tmpTime+6, TimeFromPB+3, 2);
        memcpy(tmpTime+8, TimeFromPB+6, 2);
    }
    memcpy(Time8583, tmpTime, 10);
    WriteLog(ERR_LVL, "8385报文的发送时间为 [%s]", tmpTime);
    return PB_OK;
}
/*Fuction  :  Get Retrieval Reference Number
* Action   :  GetRetReferNumber
* Input    :
* Output   :
* Author   :
* Date     : 2014/12/01
*/
int GetRetReferNumber(char * RetReferNumber)
{
    int rellen=0;
    char SysTraceNumber[6+1];
    char Pkg007[10+1];
    int DayOfDate;
    char PBDate[8+1];
    char LastBitYear[1+1];
    char tmpHH[2+1];
    memset(SysTraceNumber, 0x00, sizeof(SysTraceNumber));
    memset(Pkg007, 0x00, sizeof(Pkg007));
    memset(PBDate, 0x00, sizeof(PBDate));
    memset(LastBitYear,0x00, sizeof(LastBitYear));
    memset(tmpHH, 0x00, sizeof(tmpHH));
    
    memcpy(SysTraceNumber, "998998",6);
    GetSndPkgTime8583(Pkg007);
    memcpy(tmpHH, Pkg007+4, 2);
    GetPoolDataByName("PBSYS", "SysDate",0, 0, PBDate, &rellen);
    //DayOfDate = GetdaysBydate(PBDate);
    memcpy(LastBitYear, PBDate+3, 1);
    
    sprintf(RetReferNumber, "%s%03d%s%s",LastBitYear, DayOfDate, tmpHH, SysTraceNumber);
    WriteLog(ERR_LVL, "生成8583报文中的第37域(检索索引号)为 [%s]", RetReferNumber);
    return PB_OK;   
    
}
int setFlagAfterReversal(char *para_origTraceNo, char *para_origTime)
{
    EXEC SQL BEGIN DECLARE SECTION;
    char origSysTraceNo[6+1];
    char origDateTime[10+1];
    EXEC SQL END DECLARE SECTION;
    memset(origSysTraceNo, 0x00, sizeof(origSysTraceNo));
    memset(origDateTime, 0x00, sizeof(origDateTime));

    if(para_origTraceNo==NULL || strlen(para_origTraceNo)!=6 || para_origTime==NULL || strlen(para_origTime)!=10)
    {
        WriteLog(ERR_LVL, "参数错误! para_origTraceNo[%s], para_origTime[%s]", para_origTraceNo, para_origTime);
        return PB_ERR;
    }
    memcpy(origSysTraceNo, para_origTraceNo, 6);
    memcpy(origDateTime, para_origTime, 10);

    WriteLog(ERR_LVL, "origSysTraceNo=[%s], origDateTime=[%s]", origSysTraceNo, origDateTime);
    EXEC SQL UPDATE T_AP_JOURNAL SET TRANSTAT='9' WHERE rltseqno =:origSysTraceNo and hststlmdtime=:origDateTime and transtat='0';
    if(SQLCODE !=0 || sqlca.sqlerrd[2] != 1)
    {
        WriteLog(ERR_LVL, "update table T_AP_JOURNAL fail! SQLCODE=[%d], sqlca.sqlerrd[2]=[%d]", SQLCODE, sqlca.sqlerrd[2]);
        return PB_ERR;
    }
    WriteLog(ERR_LVL, "successfully! SQLCODE=[%d]! sqlerrd[2]=[%d]", SQLCODE, sqlca.sqlerrd[2]);
    return PB_OK;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值