Beispiel #1
0
        private AppXmlExecResult Do_IB_INCOPR_TFR_Process(EaiContext context, string correlationID, string txID, HostTxDef txDef, XmlDocument requestXml)
        {
            try
            {
                string    mbRs      = string.Empty;
                string    msgId     = txID;
                XmlHelper xmlHelper = XmlHelper.GetInstance(requestXml);

                #region 擷取存於MSMQ_Body中的IB.INCOPR.TFR電文,並置換借方貸方帳號
                //1.擷取欄位
                string IntAcctNo = xmlHelper.GetXPath(requestXml, "//CREDIT_ACCT_NO").Trim();  //CNY1406100010002
                string DebAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYER_ACCT_NO").Trim(); //000281000012504
                string CreAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYEE_ACCT_NO").Trim(); //000281000000077
                string RecId     = xmlHelper.GetXPath(requestXml, "//REQ_TXN_ID").Trim();      //取扣帳時回覆的RSP_TXN_ID(FT流水號)
                string RecTxn    = string.Empty;                                               //存入帳時回覆的RSP_TXN_ID(FT流水號)
                int    Status    = (int)IBNextIntTransStatus.NOT_REVERSE;                      // 1:NOT_REVERSE(不可撤銷)
                //2.置換借貸方
                xmlHelper.SetMultipleXPath(requestXml, "//REQ_TXN_ID", "");                    //將原先扣帳時暫存在REQ_TXN_ID的FT流水號清空
                xmlHelper.SetMultipleXPath(requestXml, "//DEBIT_ACCT_NO", IntAcctNo);          //CNY1406100010002
                xmlHelper.SetMultipleXPath(requestXml, "//CREDIT_ACCT_NO", CreAcctNo);         //000281000000077
                #endregion

                string strT24DataXmlRQ = RemoveNamespace(xmlHelper.SelectSingleNode(requestXml, "//T24_DATA").OuterXml);
                m_log.Info("Do_IB_INCOPR_TFR_Process strT24DataXmlRQ : {0} ", strT24DataXmlRQ);

                #region 發到T24進行入帳
                AppXmlExecResult t24_result     = SendMsgToEAIProcess(context, strT24DataXmlRQ, msgId, true);
                XmlHelper        xmlHelperT24RS = XmlHelper.GetInstance(t24_result.ResponseXml);

                string rs_Code  = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_CODE");
                string rs_Msg   = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_MSG");
                string proc_ret = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_PROC_RET");

                XmlNodeList xNodeT24DataRS  = t24_result.ResponseXml.GetElementsByTagName("T24_DATA");
                string      strT24DataXmlRS = (xNodeT24DataRS.Count > 0) ? xNodeT24DataRS[0].InnerXml : string.Empty;
                mbRs = RemoveNamespace(strT24DataXmlRS);
                m_log.Info("Do_NextDay_Trans_Process strT24DataXmlRS : {0} ", strT24DataXmlRS);

                if (rs_Code == "E-000000" && proc_ret == "SUCC")
                {
                    //入帳成功後更新IBNextIntTrans
                    RecTxn = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_TXN_ID");
                    DBLog.UpdateAfterNextIntTrans(RecId, RecTxn, Status); //更新:RecTxn(入帳FT流水號)&Status(不可撤銷)

                    XmlDocument responseXml = base.TransformCommMsg("0", "Info", "交易完成", mbRs);
                    return(base.BuildExecResult(context, responseXml));
                }
                else
                {
                    // 若交易失敗,貸方帳號CREDIT_ACCT_NO改帶DebAcctNo(000281000012504)
                    xmlHelper.SetMultipleXPath(requestXml, "//CREDIT_ACCT_NO", DebAcctNo);
                    strT24DataXmlRQ = RemoveNamespace(xmlHelper.SelectSingleNode(requestXml, "//T24_DATA").OuterXml);
                    m_log.Info("Do_IB_INCOPR_TFR_Process Change CREDIT_ACCT_NO strT24DataXmlRQ : {0} ", strT24DataXmlRQ);

                    #region 發到T24進行入帳
                    t24_result     = SendMsgToEAIProcess(context, strT24DataXmlRQ, msgId, true);
                    xmlHelperT24RS = XmlHelper.GetInstance(t24_result.ResponseXml);

                    rs_Code  = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_CODE");
                    rs_Msg   = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_MSG");
                    proc_ret = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_PROC_RET");

                    xNodeT24DataRS  = t24_result.ResponseXml.GetElementsByTagName("T24_DATA");
                    strT24DataXmlRS = (xNodeT24DataRS.Count > 0) ? xNodeT24DataRS[0].InnerXml : string.Empty;
                    mbRs            = RemoveNamespace(strT24DataXmlRS);
                    m_log.Info("Do_NextDay_Trans_Process Change CREDIT_ACCT_NO strT24DataXmlRS : {0} ", strT24DataXmlRS);

                    if (rs_Code == "E-000000" && proc_ret == "SUCC")
                    {
                        //入帳成功後更新IBNextIntTrans
                        RecTxn = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_TXN_ID");
                        DBLog.UpdateAfterNextIntTrans(RecId, RecTxn, Status);

                        XmlDocument responseXml = base.TransformCommMsg("0", "Info", "交易完成", mbRs);
                        return(base.BuildExecResult(context, responseXml));
                    }
                    else
                    {
                        // 1.SendErrorMail
                        new SendMail().Send(string.Format("{0} Do_IB_INCOPR_TFR_Process Error", txID), "", string.Format("{0} Do_IB_INCOPR_TFR_Process Error, PLS Check RQ:[{1}]", txID, context.RequestXml.OuterXml));
                        m_log.Error("Do_IB_INCOPR_TFR_Process Fail !!! rs_Code=[{0}] proc_ret=[{1}]", rs_Code, proc_ret);

                        // 2.回覆失敗報文
                        XmlDocument responseXml = base.TransformCommMsg(t24_result.EaiRs.EaiErrCode, t24_result.EaiRs.EaiErrText, "交易完成", mbRs);
                        return(base.BuildExecResult(context, responseXml));
                    }
                    #endregion
                }
                #endregion
            }
            catch (Exception ex)
            {
                m_log.ErrorException(string.Format("Do_IB_INCOPR_TFR_Process Error ! TXID=[{0}] ", txID) + ex.ToString(), ex);
                XmlDocument responseXml = base.TransformCommMsg("99999", "Error", ex.Message, "");
                return(base.BuildExecResult(context, responseXml));
            }
        }