using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data;

using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;

namespace Cosmos.Service
{
    /// <summary>
    /// TPay Service 
    /// </summary>
    class TPay : PaymentBase, IPaymentUs
    {
        /// <summary>
        /// T페이 동글
        /// </summary>
        private ITPaygleUs m_cDeviceTPaygle = null;

        /// <summary>
        /// T페이 통합결제 일때 SKT 할인 ITEM 
        /// </summary>
        private Column.TR_PAYMENT.DATA m_cSktItem = null;

        /// <summary>
        /// T페이 카드 기본 프리픽스 
        /// </summary>
        private readonly string[] TPAY_CARD_PREFIX = new string[] { "292", "294", "297" };
        /// <summary>
        /// T페이 카드 프리픽스 구분자 ("T")
        /// </summary>
        private const string TPAY_CARD_DIV = "T";

        /// <summary>
        /// 생성자 
        /// </summary>
        public TPay()
        {
            m_cDeviceTPaygle = (ITPaygleUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_TPAYGLE);
        }

        /// <summary>
        /// 결제조회
        /// </summary>
        /// <param name="aParam">
        /// 0:조회구분 (PosConst.TPAY_SEARCH_TYPE)
        /// </param>
        /// <param name="aRet"></param>
        /// <returns></returns>
        public string SearchPayment(string[] aParam, ref string[] aRet)
        {
            string ret = UserCom.RST_ERR; 
            try
            {
                switch (aParam[0])
                {
                    #region ### T페이 카드프리픽스 조회
                    case PosConst.TPAY_SEARCH_TYPE.PREFIX:
                        
                        {
                            // 0:조회구분 
                            // 1:카드프리픽스 (T페이)
                            string cardBin = aParam[1].Substring(0, 6);

                            // 카드 프리픽스 마스터 조회 
                            IMasterUs cMater = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.PAY_DC_MASTER);
                            DataTable dtData = cMater.Select(new string[] { PosMst.MST_CARD_PREFIX.TABLE_NAME, cardBin, TPAY_CARD_DIV });
                            if (dtData != null && dtData.Rows.Count > 0)
                            {
                                aRet[0] = CmUtil.GetDataRowStr(dtData.Rows[0], PosMst.MST_CARD_PREFIX.DATA.CARD_DIV);
                                aRet[1] = CmUtil.GetDataRowStr(dtData.Rows[0], PosMst.MST_CARD_PREFIX.DATA.PRFX_NM);
                                return UserCom.RST_OK;
                            }
                            else if (TPAY_CARD_PREFIX.Contains(cardBin.Substring(0,3)))
                            {
                                aRet[0] = TPAY_CARD_DIV;
                                aRet[1] = "T-PAY";
                                ret = UserCom.RST_OK;
                            }
                            else
                            {
                                ret = UserCom.RST_IGNORE + MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0546);
                            }
                        }
                        break;  
                    #endregion

                    #region ### 통합결제 SKT할인 ITEM 조회/설정
                    case PosConst.TPAY_SEARCH_TYPE.SKTDC_ITEM:
                        {
                            // 0:조회구분 
                            // 1:T페이 거래일련번호 
                            string payWayCd = GetMenuKeyToPayWayCd(PosKey.MENU_KEY.SKT);
                            string payDtlCd = GetMenuKeyToPayDtlCd(PosKey.MENU_KEY.SKT);
                            string tradeSeqNo = aParam[1].Trim();

                            int selectRow = -1;
                            ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                            for (var i = 0; i < alPayItem.Count; i++)
                            {
                                Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[i];

                                if (cPayItem.CANCEL_DIV == ItemConst.PAY_CANCEL_DIV.CANCEL) continue;

                                if (cPayItem.PAY_WAY_CD != payWayCd) continue;
                                if (cPayItem.PAY_DTL_CD_01 != payDtlCd) continue;

                                if (cPayItem.OCCUR_ENTRY_15.Trim() != tradeSeqNo) continue;

                                selectRow = i;
                                break;
                            }
                            aRet[0] = selectRow.ToString();
                            ret = selectRow >= 0 ? UserCom.RST_OK : UserCom.RST_ERR;
                        }
                        break;  
                    #endregion

                    #region ### 통합결제 T페이 결제 아이템
                    case PosConst.TPAY_SEARCH_TYPE.TPAY_ITEM:
		                {
                            // 0:조회구분 
                            // 1:T페이 거래일련번호 
                            string payWayCd = GetMenuKeyToPayWayCd(PosKey.MENU_KEY.T_PAY);
                            string payDtlCd = GetMenuKeyToPayDtlCd(PosKey.MENU_KEY.T_PAY);
                            string tradeSeqNo = aParam[1].Trim();

                            int selectRow = -1;
                            ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);
                            for (var i = 0; i < alPayItem.Count; i++)
                            {
                                Column.TR_PAYMENT.DATA cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[i];

                                if (cPayItem.CANCEL_DIV == ItemConst.PAY_CANCEL_DIV.CANCEL) continue;

                                if (cPayItem.PAY_WAY_CD != payWayCd) continue;
                                if (cPayItem.PAY_DTL_CD_01 != payDtlCd) continue;

                                if (cPayItem.OCCUR_ENTRY_15.Trim() != tradeSeqNo) continue;

                                selectRow = i;
                                break;
                            }
                            aRet[0] = selectRow.ToString();
                            ret = selectRow >= 0 ? UserCom.RST_OK : UserCom.RST_ERR;
                        }
                        break; 
	                #endregion
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
                ret = UserCom.RST_ERR + ex.Message;
            }
            return ret; 
        }

        /// <summary>
        /// 결제 정보 획득
        /// </summary>
        /// <param name="aParam">
        /// 0:결제세부코드 (ItemConst.TR_ITEM_ID)
        /// </param>
        /// <returns></returns>
        public object GetPayment(string[] aParam)
        {
            object retValue = null; 
            try
            {
                if (aParam[0] == ItemConst.TR_ITEM_ID.MOBILE_COM.MOBILE_SKT)
                {
                    retValue = base.m_cPayItem;
                }
                else if (aParam[0] == ItemConst.TR_ITEM_ID.PAY.T_PAY)
                {
                    retValue = this.m_cSktItem;
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
            }
            return retValue;
        }

        /// <summary>
        /// 결제등록
        /// </summary>
        /// <param name="aParam">
        /// 0:메뉴키			(PosKey.MENU_KEY.T_PAY)
        /// 1:T페이 결제구분	(PosConst.TPAY_TRADE_TYPE, 0:통합결제, 1:일반결제)
        /// 2:입력구분      (PosConst.POS_VAN_MASTER.INPUT_TYPE)
        /// 3:입력모드		(PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE)
        /// 4:카드데이터		
        /// 5:암호화카드번호	
        /// 6:암호화비밀번호
        /// 7:할인대상금액
        /// 8:T페이결제금액
        /// </param>
        /// <returns></returns>
        public string SetPayment(string[] aParam)
        {
            string posMenuKey = string.Empty;       // 0:메뉴키 
            string tpayTradeType = string.Empty;    // 1:T페이 결제구분  (PosConst.TPAY_TRADE_TYPE, 0:통합결제, 1:일반결제)
            string inputType = string.Empty;        // 2:입력구분       (PosConst.POS_VAN_MASTER.INPUT_TYPE)
            string entryMode = string.Empty;        // 3:입력모드		(PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE)
            string inputData = string.Empty;        // 4:카드데이터
            string encData = string.Empty;          // 5:암호화카드번호
            string encPass = string.Empty;          // 6:암호화비밀번호
            double destAmt = 0;                     // 7:할인대상금액
            double payAmt = 0;                      // 8:T페이결제금액

            try
            {
                string ret = UserCom.RST_ERR;

                posMenuKey = aParam[0].Trim();
                tpayTradeType = aParam[1].Trim();
                inputType = aParam[2].Trim();
                entryMode = aParam[3].Trim();
                inputData = aParam[4].Trim();
                encData = aParam[5].Trim();
                encPass = aParam[6].Trim();
                destAmt = CmUtil.DoubleParse(aParam[7]);
                payAmt = CmUtil.DoubleParse(aParam[8]);

                string productCode = "1001";
                string pointType = base.GetMenuKeyToPointType(posMenuKey);

                // 통신사(SKT)할인 ITEM 
                this.m_cSktItem = null; 

                // T페이 결제 ITEM
                base.m_cPayItem = new Column.TR_PAYMENT.DATA();
                base.m_cPayItem.PAY_WAY_CD = GetMenuKeyToPayWayCd(posMenuKey);
                base.m_cPayItem.PAY_DTL_CD_01 = GetMenuKeyToPayDtlCd(posMenuKey);

                // T페이 결제 승인 
                ret = this.ExecuteIrt(PosConst.CANCEL_DIV.NORMAL, PosConst.POS_VAN_MASTER.TRADE_ID.VAN_POT_DIS_A
                                    , tpayTradeType, pointType, inputType, entryMode, inputData, encData, encPass, destAmt, payAmt, productCode);
                if (ret != UserCom.RST_OK) return ret;

                // 결제 아이템 추가
                ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);

                // SKT할인 아이템 추가 
                if (tpayTradeType == PosConst.TPAY_TRADE_TYPE.COMPLEX && this.m_cSktItem != null)
                {
                    this.m_cSktItem.SEQ = alPayItem.Count + 1;
                    alPayItem.Add(this.m_cSktItem);

                    if (this.m_cSktItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.DC)
                    {
                        // 상품아이템에 할인금액 설정
                        SetPluDiscountAmount(-1, m_cSktItem.PAY_WAY_CD + m_cSktItem.PAY_DTL_CD_01, "", m_cSktItem.PAY_AMT);
                    }
                }

                // T페이 아이템 추가 
                base.m_cPayItem.SEQ = alPayItem.Count + 1;
                alPayItem.Add(base.m_cPayItem);


                base.m_cDataService.UpdatePluAmount();       // 상품 합계금액 계산(거래해더)
                base.m_cDataService.UpdatePayAmount();       // 결제 금액 재 계산 처리

                return UserCom.RST_OK;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
                return UserCom.RST_ERR + ex.Message;
            }
            finally
            {
                CmUtil.ZeroFillClear(ref aParam);
                CmUtil.ZeroFillClear(ref inputData);
            }
        }

        /// <summary>
        ///  결제취소
        /// </summary>
        /// <param name="aParam">
        /// 0:취소행번호
        /// </param>
        /// <returns></returns>
        public string CancelPayment(string[] aParam)
        {
            string inputType = string.Empty;        // 입력구분     (PosConst.POS_VAN_MASTER.INPUT_TYPE)
            string entryMode = string.Empty;        // 입력모드		(PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE)
            string inputData = string.Empty;        // 카드데이터
            string encData = string.Empty;          // 암호화카드번호
            string encPass = string.Empty;          // 암호화비밀번호

            try
            {
                string ret = UserCom.RST_ERR; 

                if (m_cTrnStatus.Head.TradeDiv != ItemConst.TRAN_DIV.NORMAL) return UserCom.RST_ERR;

                // 결제목록
                ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);

                // 결제내역 (T페이)
                int payRow = CmUtil.IntParse(aParam[0]);
                base.m_cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[payRow];

                // 결제내역 (SKT할인)
                this.m_cSktItem = null;
                string[] aRet = new string[5];
                ret = this.SearchPayment(new string[] { PosConst.TPAY_SEARCH_TYPE.SKTDC_ITEM, base.m_cPayItem.OCCUR_ENTRY_15 }, ref aRet);
                if (ret == UserCom.RST_OK)
                {
                    int sktRow = CmUtil.IntParse(aRet[0]);
                    if (sktRow >= 0 && sktRow < alPayItem.Count)
                    {
                        this.m_cSktItem = (Column.TR_PAYMENT.DATA)alPayItem[sktRow];
                        this.m_cSktItem.OCCUR_ENTRY_05 = m_cPayItem.OCCUR_ENTRY_05;
                    }
                }


                string tpayTradeType = this.m_cSktItem != null ? PosConst.TPAY_TRADE_TYPE.COMPLEX
                                                               : PosConst.TPAY_TRADE_TYPE.NORMAL;                   // T페이 결제구분  (PosConst.TPAY_TRADE_TYPE, 0:통합결제, 1:일반결제)

                //#20170906 T페이 고도화 작업 phj, start 

                //292 : t멤버십, 294 통합결제, 297 : 일반결제
                if ((this.m_cSktItem != null) && ((this.m_cSktItem.OCCUR_ENTRY_01.Substring(0, 3) == "294") || (this.m_cSktItem.OCCUR_ENTRY_01.Substring(0, 3) == "292")))
                {
                    tpayTradeType = PosConst.TPAY_TRADE_TYPE.COMPLEX;
                }
                else
                {
                    tpayTradeType = PosConst.TPAY_TRADE_TYPE.NORMAL;
                }

                //#20170906 T페이 고도화 작업 phj, end 
                
                string pointType = base.GetPayDtlCdToPointType(m_cPayItem.PAY_WAY_CD, m_cPayItem.PAY_DTL_CD_01);    // 포인트구분
                string apprNo = base.m_cPayItem.OCCUR_ENTRY_02;
                string apprDate = base.m_cPayItem.OCCUR_ENTRY_03;
                double destAmt = base.m_cPayItem.AMT_ENTRY_10;                                                      // 할인대상금액
                double payAmt = base.m_cPayItem.AMT_ENTRY_01 + base.m_cPayItem.AMT_ENTRY_02;                        // T페이결제금액 + SKT할인금액

                inputType = base.m_cPayItem.OCCUR_ENTRY_05;
                inputData = base.m_cPayItem.OCCUR_ENTRY_01;
                entryMode = PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE.KEYIN;
                encData = base.m_cPayItem.CanFiller1;
                encPass = this.m_cDeviceTPaygle.GetHashPassword(base.m_cPayItem.CanFiller2.Trim());
                if (string.IsNullOrWhiteSpace(encPass))
                {
                    return UserCom.RST_ERR + POS_MESSAGE.ERROR.MSG_0545;
                }


                // T페이 결제 승인 
                ret = this.ExecuteIrt(PosConst.CANCEL_DIV.CANCEL, PosConst.POS_VAN_MASTER.TRADE_ID.VAN_POT_DIS_C
                                    , tpayTradeType, pointType, inputType, entryMode, inputData, encData, encPass, destAmt, payAmt, "", m_cPayItem.OCCUR_ENTRY_03, m_cPayItem.OCCUR_ENTRY_02);
                if (ret != UserCom.RST_OK) return ret;

                // SKT할인 아이템 후 처리  
                if (tpayTradeType == PosConst.TPAY_TRADE_TYPE.COMPLEX && this.m_cSktItem != null)
                {
                    if (this.m_cSktItem.PAY_DTL_CD_05 == PosConst.PAY_DC_TYPE.DC)
                        ClearPluDiscountAmount(this.m_cSktItem.PAY_WAY_CD + this.m_cSktItem.PAY_DTL_CD_01, "");
                    
                    this.m_cSktItem.CANCEL_DIV = PosConst.CANCEL_DIV.CANCEL;
                }
                // T페이 결제 취소 처리 
                base.m_cPayItem.CANCEL_DIV = PosConst.CANCEL_DIV.CANCEL;

                base.m_cDataService.UpdatePluAmount();       // 상품 합계금액 계산(거래해더)
                base.m_cDataService.UpdatePayAmount();       // 결제 금액 재 계산 처리

                return UserCom.RST_OK;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
                return UserCom.RST_ERR + ex.Message;

            }
            finally
            {
                CmUtil.ZeroFillClear(ref inputData);
                CmUtil.ZeroFillClear(ref encData);
                CmUtil.ZeroFillClear(ref encPass);
                CmUtil.ZeroFillClear(ref aParam);

                if (base.m_cPayItem != null)
                {
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller1);
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller2);
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller3);
                }
            }
        }

        /// <summary>
        /// 결제반품(자동반품)
        /// </summary>
        /// <param name="aParam">
        /// 0:취소행번호
        /// </param>
        /// <returns></returns>
        public string RefundPayment(string[] aParam)
        {
            string inputType = string.Empty;        // 입력구분     (PosConst.POS_VAN_MASTER.INPUT_TYPE)
            string entryMode = string.Empty;        // 입력모드		(PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE)
            string inputData = string.Empty;        // 카드데이터
            string encData = string.Empty;          // 암호화카드번호
            string encPass = string.Empty;          // 암호화비밀번호

            try
            {
                string ret = UserCom.RST_ERR;

                // 결제목록
                ArrayList alPayItem = (ArrayList)StateObject.GetItemObject(Column.TR_PAYMENT.ITEM);

                // 결제내역 (T페이)
                int payRow = CmUtil.IntParse(aParam[0]);
                base.m_cPayItem = (Column.TR_PAYMENT.DATA)alPayItem[payRow];

                if (m_cPayItem.OCCUR_ENTRY_08.ToString() != ItemConst.PAY_APP_DIV.NORMAL)
                {
                    //임의 등록 이면 승인 없이 데이터 처리
                    //WinManager.ConfirmMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0240));
                    m_cPayItem.OCCUR_ENTRY_06 = m_cPayItem.OCCUR_ENTRY_02;
                    m_cPayItem.OCCUR_ENTRY_07 = m_cPayItem.OCCUR_ENTRY_03;

                    ret = UserCom.RST_OK;
                }
                else
                {

                    // 결제내역 (SKT할인)
                    this.m_cSktItem = null;
                    string[] aRet = new string[5];
                    ret = this.SearchPayment(new string[] { PosConst.TPAY_SEARCH_TYPE.SKTDC_ITEM, base.m_cPayItem.OCCUR_ENTRY_15 }, ref aRet);
                    if (ret == UserCom.RST_OK)
                    {
                        int sktRow = CmUtil.IntParse(aRet[0]);
                        if (sktRow >= 0 && sktRow < alPayItem.Count)
                        {
                            this.m_cSktItem = (Column.TR_PAYMENT.DATA)alPayItem[sktRow];
                            this.m_cSktItem.OCCUR_ENTRY_05 = base.m_cPayItem.OCCUR_ENTRY_05;
                        }
                    }


                    string tpayTradeType = this.m_cSktItem != null ? PosConst.TPAY_TRADE_TYPE.COMPLEX
                                                                   : PosConst.TPAY_TRADE_TYPE.NORMAL;                   // T페이 결제구분  (PosConst.TPAY_TRADE_TYPE, 0:통합결제, 1:일반결제)

                    //#20170906 T페이 고도화 작업 phj, start 
                    
                    //292 : t멤버십, 294 통합결제, 297 : 일반결제
                    if ((this.m_cSktItem != null) && ((this.m_cSktItem.OCCUR_ENTRY_01.Substring(0, 3) == "294") || (this.m_cSktItem.OCCUR_ENTRY_01.Substring(0, 3) == "292")))
                    {
                        tpayTradeType = PosConst.TPAY_TRADE_TYPE.COMPLEX;
                    }
                    else
                    {
                        tpayTradeType = PosConst.TPAY_TRADE_TYPE.NORMAL;
                    }

                    //#20170906 T페이 고도화 작업 phj, end                    
                    
                    string pointType = base.GetPayDtlCdToPointType(m_cPayItem.PAY_WAY_CD, m_cPayItem.PAY_DTL_CD_01);    // 포인트구분
                    string apprNo = base.m_cPayItem.OCCUR_ENTRY_02;
                    string apprDate = base.m_cPayItem.OCCUR_ENTRY_03;
                    double destAmt = base.m_cPayItem.AMT_ENTRY_10;                                                      // 할인대상금액
                    double payAmt = base.m_cPayItem.AMT_ENTRY_01 + base.m_cPayItem.AMT_ENTRY_02;                        // T페이결제금액 + SKT할인금액

                    inputType = base.m_cPayItem.OCCUR_ENTRY_05;
                    inputData = base.m_cPayItem.OCCUR_ENTRY_01;
                    entryMode = PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE.KEYIN;
                    encData = base.m_cPayItem.CanFiller1;
                    encPass = this.m_cDeviceTPaygle.GetHashPassword(base.m_cPayItem.CanFiller2.Trim());
                    if (string.IsNullOrWhiteSpace(encPass))
                    {
                        return UserCom.RST_ERR + POS_MESSAGE.ERROR.MSG_0545;
                    }

                    // T페이 결제 승인 
                    ret = this.ExecuteIrt(PosConst.CANCEL_DIV.CANCEL, PosConst.POS_VAN_MASTER.TRADE_ID.VAN_POT_DIS_C
                                        , tpayTradeType, pointType, inputType, entryMode, inputData, encData, encPass, destAmt, payAmt, "", m_cPayItem.OCCUR_ENTRY_03, m_cPayItem.OCCUR_ENTRY_02);
                }
                return ret;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
                return UserCom.RST_ERR + ex.Message;
            }
            finally
            {
                CmUtil.ZeroFillClear(ref inputData);
                CmUtil.ZeroFillClear(ref encData);
                CmUtil.ZeroFillClear(ref encPass);
                CmUtil.ZeroFillClear(ref aParam);

                if (base.m_cPayItem != null)
                {
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller1);
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller2);
                    CmUtil.ZeroFillClear(ref base.m_cPayItem.CanFiller3);
                }
            }
        }

        /// <summary>
        /// 결제 수기 등록(임의등록)
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public string SetMenualPayment(string[] aParam)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// T페이 결제 IRT
        /// </summary>
        /// <param name="trandeDiv">취소구분 (PosConst.CANCEL_DIV)</param>
        /// <param name="tranType">	거래구분	 (PosConst.POS_VAN_MASTER.TRADE_ID)</param>
        /// <param name="tpayTradeType">T페이 결제구분	(PosConst.TPAY_TRADE_TYPE, 0:통합결제, 1:일반결제)</param>
        /// <param name="pointType">포인트구분 ("TPAY")</param>
        /// <param name="inputType">입력모드 (PosConst.POS_VAN_MASTER.INPUT_TYPE)</param>
        /// <param name="entryMode">입력모드 (PosConst.POS_VAN_MASTER.TPAY_ENTRY_MODE)</param>
        /// <param name="inputData">카드번호	</param>
        /// <param name="encData">암호화카드번호</param>
		/// <param name="encPass">암호화비밀번호</param>
        /// <param name="destAmt">할인대상금액</param>
        /// <param name="payAmt">결제금액</param>
        /// <param name="productCode">SKT상품코드("1001")</param>
        /// <param name="orgApprDate">원승인일자</param>
        /// <param name="orgApprNo">원승인번호</param>
        /// <returns></returns>
        private string ExecuteIrt(string trandeDiv, string tranType, string tpayTradeType, string pointType, string inputType, string entryMode, string inputData, string encData, string encPass, double destAmt, double payAmt, string productCode
                                , string orgApprDate = "", string orgApprNo = "")
		{
            string[] aIrtRsp = null;

			try
			{
				string ret = UserCom.RST_ERR;

                // Van Code 
				string vanCd = base.GetPayDtlCdToVanCode(base.m_cPayItem.PAY_WAY_CD, base.m_cPayItem.PAY_DTL_CD_01);
                if (vanCd == "")
                {
                    WinManager.ErrorMessage(POS_MESSAGE.ERROR.MSG_0563);
                    return UserCom.RST_ERR;
                }

                // 통합결제 시 T페이 거래일련번호 (SKT할인 매칭키)
                string tradeSeqNo = tpayTradeType == PosConst.TPAY_TRADE_TYPE.COMPLEX ? DateTime.Now.ToString("yyyyMMddHHmmssfff") : string.Empty;

                // 추가정보 
                string[] aAddInfoReq = new string[Column.TPAY_ADDINFO_REQ.LEN.Length];
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.TrTypeCode] = tpayTradeType == PosConst.TPAY_TRADE_TYPE.COMPLEX ? "000040" : "000050";
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.DisDestAmt] = destAmt.ToString();
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.TotAmount] = payAmt.ToString();
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.PosEntryMode] = entryMode;
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.EncPassword] = encPass;
                aAddInfoReq[Column.TPAY_ADDINFO_REQ.SEQ.VReserved] = "";
                string addInfoReq = ItemColumn.MakeMessage(aAddInfoReq, Column.TPAY_ADDINFO_REQ.LEN, Column.TPAY_ADDINFO_REQ.TYPE);

                aIrtRsp = new string[Column.POS_RES_POINT.LEN.Length];
				if (m_cPosStatus.Base.TrainingFlag == "1" || m_cPosStatus.Mst.TestStorYn == "1")
				{
                    // 연습모드 
                    ret = SetTrainingData(base.m_cPayItem.PAY_WAY_CD, base.m_cPayItem.PAY_DTL_CD_01, vanCd, tranType, pointType, inputType, inputData, encData, payAmt, destAmt, ref aIrtRsp);
				}
				else
				{
                    ret = ExecutePointIrt(trandeDiv, base.m_cPayItem.PAY_WAY_CD, base.m_cPayItem.PAY_DTL_CD_01
                                        , vanCd, tranType, pointType, inputType, inputData, encData, destAmt, orgApprDate, orgApprNo, "", productCode, "", "", addInfoReq, ref aIrtRsp, "", "");
				}
                if (ret != UserCom.RST_OK) return ret;

                // 추가응답정보 분해 
                string[] aAddInfoRes = new string[Column.TPAY_ADDINFO_RES.LEN.Length];
                ItemColumn.ParseMessage(Column.TPAY_ADDINFO_RES.LEN, Column.TPAY_ADDINFO_RES.TYPE, aIrtRsp[Column.POS_RES_POINT.SEQ.ResAddRespon], 0, ref aAddInfoRes);

                #region T-페이 결제 ITEM 생성
                if (trandeDiv == PosConst.CANCEL_DIV.NORMAL)
                {
                    base.m_cPayItem.PAY_AMT = CmUtil.DoubleParse(aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.AppAmt]);              // 받은금액     (T페이 결제금액)

                    base.m_cPayItem.PAY_DTL_CD_02 = string.Empty;
                    base.m_cPayItem.PAY_DTL_CD_03 = string.Empty;
                    base.m_cPayItem.PAY_DTL_CD_04 = string.Empty;
                    base.m_cPayItem.PAY_DTL_CD_05 = PosConst.PAY_DC_TYPE.PAY;

                    base.m_cPayItem.QTY_ENTRY_01 = 0;
                    base.m_cPayItem.QTY_ENTRY_02 = 0;
                    base.m_cPayItem.QTY_ENTRY_03 = 0;
                    base.m_cPayItem.QTY_ENTRY_04 = 0;
                    base.m_cPayItem.QTY_ENTRY_05 = 0;

                    base.m_cPayItem.AMT_ENTRY_01 = CmUtil.DoubleParse(aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.AppAmt]);         // 받은금액     (T페이 결제금액)
                    base.m_cPayItem.AMT_ENTRY_02 = CmUtil.DoubleParse(aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.DisAmt]);         // 할인금액     (SKT 멤버십 할인금액)
                    base.m_cPayItem.AMT_ENTRY_03 = CmUtil.DoubleParse(aIrtRsp[Column.POS_RES_POINT.SEQ.ResSavePoint]);          // 총포인트
                    base.m_cPayItem.AMT_ENTRY_04 = CmUtil.DoubleParse(aIrtRsp[Column.POS_RES_POINT.SEQ.ResUsesPoint]);          // 가용포인트   (할인후결제금액)
                    base.m_cPayItem.AMT_ENTRY_05 = CmUtil.DoubleParse(aIrtRsp[Column.POS_RES_POINT.SEQ.ResSavePoint]);          // 잔여포인트
                    base.m_cPayItem.AMT_ENTRY_06 = 0;
                    base.m_cPayItem.AMT_ENTRY_07 = 0;
                    base.m_cPayItem.AMT_ENTRY_08 = 0;
                    base.m_cPayItem.AMT_ENTRY_09 = 0;
                    base.m_cPayItem.AMT_ENTRY_10 = destAmt;                                                                     // SKT 할인대상금액

                    // TPAY 실바코드번호 설정 오류 수정(2017.07.17)
                    base.m_cPayItem.OCCUR_ENTRY_01 = inputData;                                                                 // 바코드번호
                    //base.m_cPayItem.OCCUR_ENTRY_01 = encData; //inputData;                                                      // 바코드번호 => T페이 실바코드번호(2017.06.20)
                    base.m_cPayItem.OCCUR_ENTRY_02 = aIrtRsp[Column.POS_RES_POINT.SEQ.ResApprNo].Trim();                        // 승인번호
                    base.m_cPayItem.OCCUR_ENTRY_03 = CmUtil.MidH(aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrDate], 0, 6);            // 승인일자
                    base.m_cPayItem.OCCUR_ENTRY_04 = CmUtil.MidH(aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrDate], 6, 4);            // 승인시간
                    base.m_cPayItem.OCCUR_ENTRY_05 = inputType;                                                                 // 입력구분
                    base.m_cPayItem.OCCUR_ENTRY_06 = string.Empty;                                                              // 원승인번호
                    base.m_cPayItem.OCCUR_ENTRY_07 = string.Empty;                                                              // 원승인일자
                    base.m_cPayItem.OCCUR_ENTRY_08 = ItemConst.PAY_APP_DIV.NORMAL;                                              // 승인구분
                    base.m_cPayItem.OCCUR_ENTRY_09 = string.Empty; 
                    base.m_cPayItem.OCCUR_ENTRY_10 = string.Empty;                                                              // 가맹점구분
                    base.m_cPayItem.OCCUR_ENTRY_11 = string.Empty;                                                              // 가맹점추가사용
                    base.m_cPayItem.OCCUR_ENTRY_12 = string.Empty;                                                              //  
                    base.m_cPayItem.OCCUR_ENTRY_13 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_14 = entryMode;                                                                 // T페이 입력구분    (010:KEYIN,020:SWIPE,031:BARCODE,032:BLE,033:NFC)
                    base.m_cPayItem.OCCUR_ENTRY_15 = tradeSeqNo;                                                                // T페이 거래일련번호(통합결제 시 SKT할인 매칭키)
                    base.m_cPayItem.OCCUR_ENTRY_16 = vanCd;                                                                     // VAN 구분
                    base.m_cPayItem.OCCUR_ENTRY_17 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_18 = aIrtRsp[Column.POS_RES_POINT.SEQ.ResStoreNo];                              // 가맹점번호
                    base.m_cPayItem.OCCUR_ENTRY_19 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_20 = GetPayDtlCdToPayDtlName(m_cPayItem.PAY_WAY_CD, m_cPayItem.PAY_DTL_CD_01);  // 결제수단명
                    base.m_cPayItem.OCCUR_ENTRY_21 = ItemConst.PAY_CASHBILL_DIV.NO;                                             // 현금영수증발행여부
                    base.m_cPayItem.OCCUR_ENTRY_22 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_23 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_24 = string.Empty;
                    base.m_cPayItem.OCCUR_ENTRY_25 = string.Empty;

                    base.m_cPayItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.NORMAL;
                    base.m_cPayItem.BILLSPR_NO = base.m_cTrnStatus.Sale.BillSplitNo;                                            // 빌분리 번호
                }
                else
                {
                    // TPAY 실바코드번호 설정 오류 수정(2017.07.17) => 반품시 카드번호 재설정 안함.
                    //base.m_cPayItem.OCCUR_ENTRY_01 = encData; //inputData;                                                      // 바코드번호 => T페이 실바코드번호(2017.06.20)
                    base.m_cPayItem.OCCUR_ENTRY_02 = aIrtRsp[Column.POS_RES_POINT.SEQ.ResApprNo].Trim();                        // 승인번호
                    base.m_cPayItem.OCCUR_ENTRY_03 = CmUtil.MidH(aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrDate], 0, 6);            // 승인일자
                    base.m_cPayItem.OCCUR_ENTRY_04 = CmUtil.MidH(aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrDate], 6, 4);            // 승인시간
                    //base.m_cPayItem.OCCUR_ENTRY_05 = inputType;                                                                 // 입력구분
                    base.m_cPayItem.OCCUR_ENTRY_06 = orgApprNo;                                                                 // 원승인번호
                    base.m_cPayItem.OCCUR_ENTRY_07 = orgApprDate;                                                               // 원승인일자

                    base.m_cPayItem.OCCUR_ENTRY_13 = entryMode;                                                                 // T페이 입력구분    (010:KEYIN,020:SWIPE,031:BARCODE,032:BLE,03:NFC)
                } 
                #endregion

                #region SKT 할인 ITEM 생성 (T페이 통합결제 일때)
                if (tpayTradeType == PosConst.TPAY_TRADE_TYPE.COMPLEX && base.m_cPayItem.AMT_ENTRY_02 != 0)
                {
                    if (trandeDiv == PosConst.CANCEL_DIV.NORMAL)
                    {
                        this.m_cSktItem = new Column.TR_PAYMENT.DATA();
                        
                        m_cSktItem.PAY_WAY_CD = GetMenuKeyToPayWayCd(PosKey.MENU_KEY.SKT);                                      // 결제수단코드 
                        m_cSktItem.PAY_AMT = base.m_cPayItem.AMT_ENTRY_02;                                                      // 사용포인트   (할인금액)
                        m_cSktItem.PAY_DTL_CD_01 = GetMenuKeyToPayDtlCd(PosKey.MENU_KEY.SKT);                                   // 결제세부코드1
                        m_cSktItem.PAY_DTL_CD_02 = string.Empty;

                        // SKT할인 할인결제구분 마스터 조회
                        string payDcType = PosMstManager.GetMstPayDc(m_cSktItem.PAY_WAY_CD, m_cSktItem.PAY_DTL_CD_01, PosMst.MST_PAY_DC.DATA.PAY_DC_TYPE);
                        m_cSktItem.PAY_DTL_CD_03 = payDcType == PosConst.PAY_DC_TYPE.PAY ? "0" : "1";                           // 할인금액아이템적용여부 (0:미적용, 1:적용)
                        m_cSktItem.PAY_DTL_CD_04 = string.Empty;
                        m_cSktItem.PAY_DTL_CD_05 = payDcType;                                                                   // 할인결제구분 (1:결제, 2:할인)

                        m_cSktItem.QTY_ENTRY_01 = 0;
                        m_cSktItem.QTY_ENTRY_02 = 0;
                        m_cSktItem.QTY_ENTRY_03 = 0;
                        m_cSktItem.QTY_ENTRY_04 = 0;
                        m_cSktItem.QTY_ENTRY_05 = 0;

                        m_cSktItem.AMT_ENTRY_01 = base.m_cPayItem.AMT_ENTRY_02;                                                 // 사용포인트   (할인금액)

                        m_cSktItem.AMT_ENTRY_02 = 0;                                                                            // 캠페인할인금액 
                        m_cSktItem.AMT_ENTRY_03 = base.m_cPayItem.AMT_ENTRY_03;                                                 // 총포인트
                        m_cSktItem.AMT_ENTRY_04 = base.m_cPayItem.AMT_ENTRY_04;                                                 // 가용포인트   (할인후결제금액)
                        m_cSktItem.AMT_ENTRY_05 = base.m_cPayItem.AMT_ENTRY_05;                                                 // 잔여포인트
                        m_cSktItem.AMT_ENTRY_06 = 0;
                        m_cSktItem.AMT_ENTRY_07 = 0;
                        m_cSktItem.AMT_ENTRY_08 = 0;
                        m_cSktItem.AMT_ENTRY_09 = 0;
                        m_cSktItem.AMT_ENTRY_10 = base.m_cPayItem.AMT_ENTRY_10;                                                 // SKT 할인대상금액

                        m_cSktItem.OCCUR_ENTRY_01 = base.m_cPayItem.OCCUR_ENTRY_01;                                             // 바코드번호
                        m_cSktItem.OCCUR_ENTRY_02 = base.m_cPayItem.OCCUR_ENTRY_02;                                             // 승인번호
                        m_cSktItem.OCCUR_ENTRY_03 = base.m_cPayItem.OCCUR_ENTRY_03;                                             // 승인일자
                        m_cSktItem.OCCUR_ENTRY_04 = base.m_cPayItem.OCCUR_ENTRY_04;                                             // 승인시간
                        m_cSktItem.OCCUR_ENTRY_05 = base.m_cPayItem.OCCUR_ENTRY_05;                                             // 입력구분
                        m_cSktItem.OCCUR_ENTRY_06 = string.Empty;                                                               // 원승인번호
                        m_cSktItem.OCCUR_ENTRY_07 = string.Empty;                                                               // 원승인일자
                        m_cSktItem.OCCUR_ENTRY_08 = ItemConst.PAY_APP_DIV.NORMAL;                                               // 승인구분
                        m_cSktItem.OCCUR_ENTRY_09 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_10 = string.Empty;                                                               //
                        m_cSktItem.OCCUR_ENTRY_11 = string.Empty;                                                               // 
                        m_cSktItem.OCCUR_ENTRY_12 = string.Empty;                                                               // 
                        m_cSktItem.OCCUR_ENTRY_13 = string.Empty;                                                               // 
                        m_cSktItem.OCCUR_ENTRY_14 = string.Empty;                                                               // 
                        m_cSktItem.OCCUR_ENTRY_15 = base.m_cPayItem.OCCUR_ENTRY_15;                                             // T페이 거래일련번호 (통합결제시 매칭키)
                        m_cSktItem.OCCUR_ENTRY_16 = base.m_cPayItem.OCCUR_ENTRY_16;                                             // VAN 구분
                        m_cSktItem.OCCUR_ENTRY_17 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_18 = base.m_cPayItem.OCCUR_ENTRY_18;                                             // 가맹점번호
                        m_cSktItem.OCCUR_ENTRY_19 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_20 = GetPayDtlCdToPayDtlName(m_cSktItem.PAY_WAY_CD, m_cSktItem.PAY_DTL_CD_01);   // 결제수단명
                        m_cSktItem.OCCUR_ENTRY_21 = GetPayDtlCdToCashBillYn(m_cSktItem.PAY_WAY_CD, m_cSktItem.PAY_DTL_CD_01);   // 현금영수증 발행여부
                        m_cSktItem.OCCUR_ENTRY_22 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_23 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_24 = string.Empty;
                        m_cSktItem.OCCUR_ENTRY_25 = string.Empty;

                        m_cSktItem.CANCEL_DIV = ItemConst.PAY_CANCEL_DIV.NORMAL;
                        m_cSktItem.BILLSPR_NO = base.m_cPayItem.BILLSPR_NO;                                                     // 빌분리 번호
                    }
                    else
                    {
                        m_cSktItem.OCCUR_ENTRY_01 = base.m_cPayItem.OCCUR_ENTRY_01;                                             // 바코드번호
                        m_cSktItem.OCCUR_ENTRY_02 = base.m_cPayItem.OCCUR_ENTRY_02;                                             // 승인번호
                        m_cSktItem.OCCUR_ENTRY_03 = base.m_cPayItem.OCCUR_ENTRY_03;                                             // 승인일자
                        m_cSktItem.OCCUR_ENTRY_04 = base.m_cPayItem.OCCUR_ENTRY_04;                                             // 승인시간
                        m_cSktItem.OCCUR_ENTRY_05 = base.m_cPayItem.OCCUR_ENTRY_05;                                             // 입력구분
                        m_cSktItem.OCCUR_ENTRY_06 = orgApprNo;                                                                  // 원승인번호
                        m_cSktItem.OCCUR_ENTRY_07 = orgApprDate;                                                                // 원승인일자
                    }
                }
                
                #endregion

                return UserCom.RST_OK;
			}
			catch (Exception ex)
			{
				UserLog.WriteLogFile(UserCom.LOG_ERROR,
									 System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
									 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
									 System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
									 "Exception." + ex.Message);
				return UserCom.RST_ERR + ex.Message;

			}
			finally
			{
                CmUtil.ZeroFillClear(ref inputData);
                CmUtil.ZeroFillClear(ref encData);
                CmUtil.ZeroFillClear(ref encPass);
				CmUtil.ZeroFillClear(ref aIrtRsp);
			}
		}

        /// <summary>
        /// 연습 데이터 설정
        /// </summary>
        /// <param name="aIrtRsp"></param>
        /// <returns></returns>
        private string SetTrainingData(string payWayCd, string payDtlCd, string vanCd, string tranType, string pointType, string inputType, string inputData, string encData, double payAmt, double destAmt, ref string[] aIrtRsp)
        {
            try
            {
                // 제휴사 결제 할인 금액 계산
                double disAmt = m_cDataCommon.ExecTermCoopCmpPayDc(m_cPayItem.PAY_WAY_CD, m_cPayItem.PAY_DTL_CD_01, "", destAmt);
                if (disAmt == 0)
                {
                    disAmt = (int)((destAmt * 0.1) / 10) * 10 ;
                }


                string[] aAddInfoRes = new string[Column.TPAY_ADDINFO_RES.LEN.Length];
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.MemberLevel] = "MV";
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.DisAmt] = disAmt.ToString();
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.AppAmt] = (payAmt - disAmt).ToString();
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.BillAmt] = "0";
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.RemainLimit1] = "0";
                aAddInfoRes[Column.TPAY_ADDINFO_RES.SEQ.RemainLimit2] = "0";
                string addInfoRes = ItemColumn.MakeMessage(aAddInfoRes, Column.TPAY_ADDINFO_RES.LEN, Column.TPAY_ADDINFO_RES.TYPE);


                aIrtRsp[Column.POS_RES_POINT.SEQ.ResDocVer] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResStatus] = "O";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrDate] = DateTime.Now.ToString("yyMMddhhmm");
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResMessage1] = "T페이".PadRight(16);
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResMessage2] = "OK:99999999".PadRight(16);
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResApprNo] = "99999999".PadRight(12);
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResTrPoint] = disAmt.ToString().PadLeft(9, '0');
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResUsesPoint] = "0".PadRight(9, '0');
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResSavePoint] = "0".PadRight(9, '0');
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResSparePoint] = "0".PadRight(9, '0');
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResStoreNo] = "TEST".PadRight(15);
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResNotice1] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResNotice2] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResNotice3] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.Resnotice4] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResReserved] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResCampaign] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResRS] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResAddRespon] = addInfoRes;
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResGS] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResKeyDownLoad] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResFsLen] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResFsField] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResETX] = "";
                aIrtRsp[Column.POS_RES_POINT.SEQ.ResCR] = "";
                
                return UserCom.RST_OK;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     "Exception." + ex.Message);
                return UserCom.RST_ERR + ex.Message;

            }
        }
    }
}
