using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.IO;
using System.Data;

using Newtonsoft.Json;

using Cosmos.Common;
using Cosmos.CommonManager;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using ICSharpCode.SharpZipLib.Zip;


namespace Cosmos.Network
{
    public class NetworkCheckOver : IWatcher
    {
        private SManager sManager = new SManager();           // 이 객체를 통해 업무 Service 호출

        /// <summary>
        /// StateServer Object (StateServer 객체)
        /// </summary>
        private StateServer StateObject = (StateServer)StateServer.GetInstance();

        /// <summary>
        /// POS Status Value (POS 상태값)
        /// </summary>
        private PosStatus m_cPosStatus = null;

        /// <summary>
        /// Sending Socket (전송 소켓)
        /// </summary>
        private static TcpSocket m_sendSocket = null;

        /// <summary>
        /// MSSQL DB 관련 객체
        /// </summary>
        private static SqlDB sqlDb = null;

        private ICheckOverUs m_cCheckOverDetail = null;

        /// <summary>
        /// 웹정보 서비스
        /// </summary>
        private IDataServiceUs m_cWebBiz = null;                     

        /// <summary>
        /// Server SEND Thread (Server SEND 스레드)
        /// </summary>
        private Thread m_tCheckOver = null;

        /// <summary>
        /// Thread Waiting Time (스레드 대기시간 ms)
        /// </summary>
        private int m_ThreadSleepTerm = 60000;

        /// <summary>
        /// Network CheckOver Operation Yes/No (작동여부)
        /// </summary>
        private bool m_NetworkCheckOverRunning = true;

        /// <summary>
        /// 해피오더 조회/상태변경/취소 URL
        /// </summary>
        private string m_sHappyOrderURL;
        /// <summary>
        /// 빚은몰 주문 건수 조회 URL
        /// </summary>
        private string m_sBizeunSelectURL;
        /// <summary>
        /// 이지웰 주문 건수 조회 URL
        /// </summary>
        private string m_sEzwelSelectURL;
        /// <summary>
        /// 온도정보 URL
        /// </summary>
        private string m_sTempURL;

        //17.08.22 dkshin SS 해피오더
        Hashtable[] m_htOrderLists;
        IHappyOrderList m_cHappyOrder = null;// 해피오더 서비스 처리
        private TranStatus m_cTrnStatus;//거래정보 참조

        //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start
        private IDataCommonUs m_cDataCommon = null;
        //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end

        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 start
        private int iInventoryDispCnt = -1;
        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 end

        public NetworkCheckOver()
        {
            m_cPosStatus = (PosStatus)StateObject.POS;

            m_cWebBiz = (IDataServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_BASIC.DLL, ServiceLists.BSV_BASIC.WEB_POS);

            m_cCheckOverDetail = new CheckOverDetail();

            // 승인업체 코드 조회
            string sVanCD = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ORDER_ITEM, ItemConst.TR_ITEM_ID.ORDER.HAPPYORDER_PAY, PosMst.MST_PAY_DC.DATA.APPR_VEND_CD);
            // 승인 URL 조회
            m_sHappyOrderURL = PosMstManager.GetMstVan(sVanCD, PosMst.MST_VAN.DATA.IP);

            sVanCD = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ETC_INFO_ITEM, ItemConst.TR_ITEM_ID.ETC_INFO.BIZEUN, PosMst.MST_PAY_DC.DATA.APPR_VEND_CD);
            m_sBizeunSelectURL = PosMstManager.GetMstVan(sVanCD, PosMst.MST_VAN.DATA.IP);

            sVanCD = PosMstManager.GetMstPayDc(ItemConst.TR_ITEM_ID.ETC_INFO_ITEM, ItemConst.TR_ITEM_ID.ETC_INFO.EZWEL, PosMst.MST_PAY_DC.DATA.APPR_VEND_CD);
            m_sEzwelSelectURL = PosMstManager.GetMstVan(sVanCD, PosMst.MST_VAN.DATA.IP);

            m_sTempURL = (string)m_cWebBiz.GetData(new string[] { PosKey.MENU_KEY.WEB_TMPRT });

            //17.08.22 dkshin SS 해피오더
            m_cHappyOrder = (IHappyOrderList)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.HAPPY_ORDER_LIST);
            m_cTrnStatus = (TranStatus)StateObject.TRAN;    //거래정보

            //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start
            m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
            //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end
        }

        #region CheckOver Thread START / STOP
        public void Start()
        {
            try
            {
                sqlDb = new SqlDB(m_cPosStatus.Base.LocalDbSource, 
                                  m_cPosStatus.Base.LocalDbCatalog, 
                                  m_cPosStatus.Base.LocalDbUserID, 
                                  m_cPosStatus.Base.LocalDbPassword);

                m_tCheckOver = new Thread(new ThreadStart(ThreadCheckOverRun));
                m_NetworkCheckOverRunning = true;
                m_tCheckOver.Start();
            }
            catch(Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                    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 (함수명))
                                    ex.Message);
            }
        }

        public void Stop()
        {
            try
            {
                // 통신서버 Send Terminated (SC Send 종료)
                m_NetworkCheckOverRunning = false;

                int count = 0;
                while (count < 10)
                {
                    if (m_tCheckOver != null && m_tCheckOver.IsAlive) m_NetworkCheckOverRunning = false;
                    else break;

                    count++;
                    Thread.Sleep(100);
                }

                if (count == 10)
                {
                    UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                         UserCom.INFO_LEVEL,
                                         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 (함수명))
                                         "Force NetworkTranSend Service Stop!!!");
                    m_tCheckOver.Abort();
                }

                // DB Close
                sqlDb.DBClose();
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                    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 (함수명))
                                    ex.Message);
            }
        }
        #endregion CheckOver Thread START / STOP

        #region CheckOver Main
        private void ThreadCheckOverRun()
        {
            string sReqData = string.Empty;
            string sRespData = string.Empty;
            string sReturn = string.Empty;
            int iRet = 0;
            int iSubCount_1 = 0;
            int iSubCount_2 = 0;
            Hashtable htSendData = null;
            Hashtable htRecvData = null;
            try
            {
                while (m_NetworkCheckOverRunning)
                {
                    try
                    {
                        // 해피오더 제일 먼저 조회 - 문성진D 요청
                        #region 5 - 해피오더 주문 건수 조회
                        // 4 - 해피오더
                        
                        if (PosMstManager.GetPosOption(POS_OPTION.OPT035) == "1")
                        {
                            //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 start
                            //기존
                            /*
                            sReqData = string.Format("storeCode={0}&deviceType=POS", m_cPosStatus.Base.StoreNo);
                            //sReqData = string.Format("storeCode={0}&deviceType=POS", "11101");
                            iRet = this.HttpJsonGET_SendReceive(m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_STATUS_COUNT, sReqData, ref sRespData);
                            if (iRet == BaseCom.OK)
                            {
                                UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                    UserCom.WARNING_LEVEL,
                                                    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 (함수명))
                                                    sRespData);

                                sReturn = m_cCheckOverDetail.SelectHappyOrderCountByOrderStatus(JsonConvert.DeserializeObject<Hashtable[]>(sRespData));
                            }
                            */
                            //변경
                            HappyOrderCntChk();
                            //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 end
                        }


                        #endregion

                        #region 1 - 공지사항 요청(점주/알바모드, 위해상품 메시지, 입고등록 확인, 배송정보, 기념일 배송) - 30분 단위
                        // 1 - 공지사항 요청(점주/알바모드, 위해상품 메시지, 입고등록 확인, 배송정보, 기념일 배송)
                        if (iSubCount_1 == 10)
                        {
                            // 전문 생성
                            htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.NOTICE_INQ_REQ, null);
                            
                            // 전문 요청
                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                  Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                  (int)5000, htSendData, ref htRecvData);

                            if (iRet == BaseCom.OK)
                            {
                                if (htRecvData[Column.IQ_NOTICE_INQ_RSP.DATA.RES_CD].ToString() == "00")
                                {
                                    DataTable dtNotice = ParseMsgValueField(htRecvData[Column.IQ_NOTICE_INQ_RSP.DATA.MSG_VALUE].ToString());

                                    // 서브 업무 처리
                                    DoSubProc(dtNotice);
                                }
                            }
                        }
                        #endregion 1 - 공지사항 요청(점주/알바모드, 위해상품 메시지, 입고등록 확인, 배송정보, 기념일 배송)

                        #region 2 - 일반 공지사항 요청
                        // 2 - 일반 공지사항 요청
                        if(iSubCount_2 == 30)
                        {
                            htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.MSG_TRANSFER_REQ, new string[] { "0" 
                                                                                                                              , m_cPosStatus.Base.RegularNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.EmergencyNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT1
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT2 });

                            // 전문 요청
                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                  Convert.ToInt32(m_cPosStatus.Base.SysInfoPort),
                                                  (int)5000, htSendData, ref htRecvData);

                            if (iRet == BaseCom.OK)
                            {
                                if (htRecvData[Column.IQ_MSG_SND_RSP.DATA.RES_CD].ToString() == "00")
                                {
                                    if (InsertIntoEMG_NOTE(htRecvData) != UserCom.OK)
                                    {
                                        UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                            UserCom.WARNING_LEVEL,
                                                            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 (함수명))
                                                            "Failed to insert into MST_EMG_NOTE ( " +
                                                            "[MSG_CD]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD].ToString() +
                                                            "[MSG_DIV]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString() +
                                                            "[MSG_TITLE]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE].ToString() + " )");
                                    }
                                    else
                                    {
                                        // 업데이트 시간 갱신
                                        UpdateNoticesDateTime(htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.UPD_DATE].ToString());

                                        // MSG_DIV = '00'(긴급) 이고 MSG_TYPE = '1'(마스터) 이면
                                        // 긴급 적용 마스터 리스트 Update
                                        if (htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString() == "00" &&
                                            htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE].ToString() == "1")
                                        {

                                            htSendData.Clear();
                                            htSendData = MakePOSMASTERLISTReqData();

                                            // 전문 요청
                                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                                  Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                                  (int)5000, htSendData,
                                                                  ref htRecvData);

                                            if (iRet == BaseCom.OK)
                                            {
                                                if (htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.DOWN_DIV].ToString() == "2")
                                                {
                                                    string[] arMasterList = (htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.MASTER_LIST].ToString()).Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

                                                    if (UpdateMasterTableList(arMasterList) != UserCom.OK)
                                                    {
                                                        UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                                            UserCom.WARNING_LEVEL,
                                                                            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 (함수명))
                                                                            "Failed to update emergency master list [" + htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.MASTER_LIST].ToString() + "]");
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion 2 - 긴급 공지 요청(긴급공지, 주문긴급공지, 관공서 방문 점검 공지, 오늘의 할 일)

                        #region 3 - 긴급 공지사항 요청
                        // 3 - 긴급 공지사항 요청
                        {
                            htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.MSG_TRANSFER_REQ, new string[] { "2" 
                                                                                                                              , m_cPosStatus.Base.RegularNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.EmergencyNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT1
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT2 });

                            // 전문 요청
                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                  Convert.ToInt32(m_cPosStatus.Base.SysInfoPort),
                                                  (int)5000, htSendData, ref htRecvData);

                            if (iRet == BaseCom.OK)
                            {
                                if (htRecvData[Column.IQ_MSG_SND_RSP.DATA.RES_CD].ToString() == "00")
                                {
                                    if (InsertIntoEMG_NOTE(htRecvData) != UserCom.OK)
                                    {
                                        UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                            UserCom.WARNING_LEVEL,
                                                            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 (함수명))
                                                            "Failed to insert into MST_EMG_NOTE ( " +
                                                            "[MSG_CD]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD].ToString() +
                                                            "[MSG_DIV]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString() +
                                                            "[MSG_TITLE]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE].ToString() + " )");
                                    }
                                    else
                                    {
                                        // 업데이트 시간 갱신
                                        UpdateNoticesDateTime(htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.UPD_DATE].ToString());

                                        // MSG_DIV = '00'(긴급) 이고 MSG_TYPE = '1'(마스터) 이면
                                        // 긴급 적용 마스터 리스트 Update
                                        if (htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString() == "00" &&
                                            htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE].ToString() == "1")
                                        {

                                            htSendData.Clear();
                                            htSendData = MakePOSMASTERLISTReqData();

                                            // 전문 요청
                                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                                  Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                                  (int)5000, htSendData,
                                                                  ref htRecvData);

                                            if (iRet == BaseCom.OK)
                                            {
                                                if (htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.DOWN_DIV].ToString() == "2")
                                                {
                                                    string[] arMasterList = (htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.MASTER_LIST].ToString()).Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

                                                    if (UpdateMasterTableList(arMasterList) != UserCom.OK)
                                                    {
                                                        UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                                            UserCom.WARNING_LEVEL,
                                                                            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 (함수명))
                                                                            "Failed to update emergency master list [" + htRecvData[Column.IQ_POSMASTERLIST_REQ.DATA.MASTER_LIST].ToString() + "]");
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion 3 - 긴급 공지사항 요청

                        #region 4 - 영업 공지 요청(오늘의 할 일, 식품 안전 메시지) - 10분 단위
                        // 3 - 영업 공지 요청(오늘의 할 일, 식품 안전 메시지) 1
                        if (iSubCount_1 == 10)
                        {
                            htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.MSG_TRANSFER_REQ, new string[] { "1" 
                                                                                                                              , m_cPosStatus.Base.RegularNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.EmergencyNoticeUpdateDT
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT1
                                                                                                                              , m_cPosStatus.Base.SaleNoticeUpdateDT2 });

                            // 전문 요청
                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                  Convert.ToInt32(m_cPosStatus.Base.SysInfoPort),
                                                  (int)5000, htSendData, ref htRecvData);

                            if (iRet == BaseCom.OK)
                            {
                                if (htRecvData[Column.IQ_MSG_SND_RSP.DATA.RES_CD].ToString() == "00")
                                {
                                    if (InsertIntoEMG_NOTE(htRecvData) != UserCom.OK)
                                    {
                                        UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                                            UserCom.WARNING_LEVEL,
                                                            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 (함수명))
                                                            "Failed to insert into MST_EMG_NOTE ( " +
                                                            "[MSG_CD]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD].ToString() +
                                                            "[MSG_DIV]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString() +
                                                            "[MSG_TITLE]=" + htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE].ToString() + " )");
                                    }
                                    else
                                    {
                                        // 업데이트 시간 갱신
                                        UpdateNoticesDateTime(htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE].ToString(), htRecvData[Column.IQ_MSG_SND_RSP.DATA.UPD_DATE].ToString());
                                    }
                                }
                            }
                        }
                        #endregion 4 - 영업 공지 요청(오늘의 할 일, 식품 안전 메시지)


                        #region 6 - 빚은몰 주문 건수 조회
                        // 5 - 빚은몰
                        if (PosMstManager.GetPosOption(POS_OPTION.OPT036) == "1")
                        {
                            sReqData = string.Format("AMACODE={0}", m_cPosStatus.Base.StoreNo);
                            iRet = this.HttpGET_SendReceive(m_sBizeunSelectURL, string.Empty, sReqData, PosConst.ENCODING_FLAG.KSC, ref sRespData);
                            if (iRet == BaseCom.OK)
                            {
                                sReturn = m_cCheckOverDetail.SelectBizeunOrderCount(sRespData);
                            }
                        }
                        #endregion

                        #region 7 - 이지웰 주문 건수 조회
                        // 6 - 이지웰
                        if (PosMstManager.GetPosOption(POS_OPTION.OPT037) == "1")
                        {
                            sReqData = string.Format("AMACODE={0}", m_cPosStatus.Base.StoreNo);
                            iRet = this.HttpGET_SendReceive(m_sEzwelSelectURL, string.Empty, sReqData, PosConst.ENCODING_FLAG.KSC, ref sRespData);
                            if (iRet == BaseCom.OK)
                            {
                                sReturn = m_cCheckOverDetail.SelectEzwelOrderCount(sRespData);
                            }
                        }
                        #endregion

                        if (m_cPosStatus.Base.PosCommunicationType == PosConst.MAIN_POS_DIV.MAIN_POS)  //메인포스만 전송 처리!
                        {
                            #region 7 - 점포 방문 이력 전송(제조기사 타임 바코드)
                            {

                                /////////////////////////////////////////////////////////////////
                                /// 중요! 테이블 컬럼명 갯수와 명칭은 동일 해야함!
                                /////////////////////////////////////////////////////////////////
                                htSendData = new Hashtable();

                                //전송 내역 확인
                                DataTable dt = SelectSendDataList(ItemConst.IRT_INQ_TYPE.STOR_VISIT);

                                if (!(dt == null || dt.Rows.Count == 0))
                                {
                                    DataRow dr = dt.Rows[0];

                                    for (int iRow = 0; iRow < dr.Table.Columns.Count; iRow++)
                                    {
                                        htSendData.Add(dr.Table.Columns[iRow].ColumnName, dr[iRow].ToString());
                                    }

                                    // 전문 요청
                                    iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                          Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                          (int)5000, htSendData, ref htRecvData);
                                    string sFlag = "9";

                                    if (iRet == BaseCom.OK)
                                    {
                                        if (htRecvData["RES_CD"].ToString() == "00")
                                        {
                                            sFlag = "1";
                                        }
                                    }
                                    UpdateTableSend(ItemConst.IRT_INQ_TYPE.STOR_VISIT, sFlag, htSendData);
                                }



                            }
                            #endregion 7 - 점포 방문 이력 전송(제조기사 타임 바코드)

                            #region 8 - 근태 등록 요청/응답
                            {

                                /////////////////////////////////////////////////////////////////
                                /// 중요! 테이블 컬럼명 갯수와 명칭은 동일 해야함!
                                /////////////////////////////////////////////////////////////////

                                htSendData = new Hashtable();

                                //전송 내역 확인
                                DataTable dt = SelectSendDataList(ItemConst.IRT_INQ_TYPE.EMP_COMMUTE);

                                if (!(dt == null || dt.Rows.Count == 0))
                                {

                                    DataRow dr = dt.Rows[0];

                                    // 전문 생성
                                    for (int iRow = 0; iRow < dr.Table.Columns.Count; iRow++)
                                    {
                                        htSendData.Add(dr.Table.Columns[iRow].ColumnName, dr[iRow].ToString());
                                    }

                                    // 전문 요청
                                    iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                          Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                          (int)5000, htSendData, ref htRecvData);
                                    string sFlag = "9";

                                    if (iRet == BaseCom.OK)
                                    {
                                        if (htRecvData["RES_CD"].ToString() == "00")
                                        {
                                            sFlag = "1";
                                        }
                                    }
                                    UpdateTableSend(ItemConst.IRT_INQ_TYPE.EMP_COMMUTE, sFlag, htSendData);
                                }
                            }
                            #endregion 8 - 근태 등록 요청/응답

                            #region 9 - 점주/알바 모드 전송
                            {
                                /////////////////////////////////////////////////////////////////
                                /// 중요! 테이블 컬럼명 갯수와 명칭은 동일 해야함!
                                /////////////////////////////////////////////////////////////////

                                htSendData = new Hashtable();

                                //전송 내역 확인
                                DataTable dt = SelectSendDataList(ItemConst.IRT_INQ_TYPE.ONWER_MODE);

                                if (!(dt == null || dt.Rows.Count == 0))
                                {

                                    DataRow dr = dt.Rows[0];

                                    // 전문 생성
                                    for (int iRow = 0; iRow < dr.Table.Columns.Count; iRow++)
                                    {
                                        htSendData.Add(dr.Table.Columns[iRow].ColumnName, dr[iRow].ToString());
                                    }

                                    // 전문 요청
                                    iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                          Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                                          (int)5000, htSendData, ref htRecvData);
                                    string sFlag = "9";

                                    if (iRet == BaseCom.OK)
                                    {
                                        if (htRecvData["RES_CD"].ToString() == "00")
                                        {
                                            sFlag = "1";
                                        }
                                    }
                                    UpdateTableSend(ItemConst.IRT_INQ_TYPE.ONWER_MODE, sFlag, htSendData);
                                }
                            }
                            #endregion 9 - 점주/알바 모드 전송
                        }

                        #region 10 - 유해 상품 읽음 전송
                        {

                            /////////////////////////////////////////////////////////////////
                            /// 중요! 테이블 컬럼명 갯수와 명칭은 동일 해야함!
                            /////////////////////////////////////////////////////////////////
                            htSendData = new Hashtable();

                            //전송 내역 확인

                            DataTable dt = SelectSendDataList(ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ);

                            if (!(dt == null || dt.Rows.Count == 0))
                            {
                                DataRow dr = dt.Rows[0];

                                for (int iRow = 0; iRow < dr.Table.Columns.Count; iRow++)
                                {
                                    htSendData.Add(dr.Table.Columns[iRow].ColumnName, dr[iRow].ToString());
                                }

                                // 전문 요청
                                iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                      Convert.ToInt32(m_cPosStatus.Base.SysInfoPort),
                                                      (int)5000, htSendData, ref htRecvData);
                                string sFlag = "9";

                                if (iRet == BaseCom.OK)
                                {
                                    if (htRecvData["RES_CD"].ToString() == "00")
                                    {
                                        sFlag = "2";
                                    }
                                }
                                UpdateTableSend(ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ, sFlag, htSendData);
                            }

                        }
                        #endregion 10 - 유해 상품 읽음 전송

                        #region 11 - 온도정보 조회
                        // 11 - 온도정보
                        if (CmUtil.IsNull(PosMstManager.GetPosOption(POS_OPTION.OPT039), "0") == "1")
                        {
                            string TempURL = string.Empty;

                            if (m_sTempURL.Length > 100)
                            {
                                TempURL = CmUtil.MidH(m_sTempURL, 31, 100).Trim();

                                sRespData = string.Empty;

                                if (m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.CN)
                                {
                                    if (m_cPosStatus.Base.StoreNo.Length >= 7)
                                        sReqData = string.Format("COMP_CD=CP&BRAND_CD={0}&STORE_CD={1}", m_cPosStatus.Base.BrandCd, m_cPosStatus.Base.StoreNo.Substring(2, 5));
                                    else
                                        sReqData = string.Format("COMP_CD=CP&BRAND_CD={0}&STORE_CD={1}", m_cPosStatus.Base.BrandCd, m_cPosStatus.Base.StoreNo);
                                    // 중국 http://si1.paris.co.kr/posLink?COMP_CD=CP&BRAND_CD=5000&STORE_CD=00001
                                }
                                else
                                {
                                    if (m_cPosStatus.Base.StoreNo.Length >= 7)
                                        sReqData = string.Format("COMP_CD={0}&BRAND_CD={1}&STORE_CD={2}", m_cPosStatus.Base.CmpCd.Substring(0, 2), m_cPosStatus.Base.BrandCd, m_cPosStatus.Base.StoreNo.Substring(2, 5));
                                    else
                                        sReqData = string.Format("COMP_CD={0}&BRAND_CD={1}&STORE_CD={2}", m_cPosStatus.Base.CmpCd.Substring(0, 2), m_cPosStatus.Base.BrandCd, m_cPosStatus.Base.StoreNo);
                                    //iRet = this.HttpGET_SendReceive("http://si1.paris.co.kr", "/posLink", "COMP_CD=PC&BRAND_CD=002&STORE_CD=17496", PosConst.ENCODING_FLAG.UTF, ref sRespData);
                                    //iRet = this.HttpGET_SendReceive("http://si1.paris.co.kr", "/posLink", sReqData, PosConst.ENCODING_FLAG.UTF, ref sRespData);
                                    //iRet = this.HttpGET_SendReceive("http://si1.paris.co.kr", "/posLink", "COMP_CD=PC&BRAND_CD=002&STORE_CD=17859", PosConst.ENCODING_FLAG.UTF, ref sRespData);
                                }
                                iRet = this.HttpGET_SendReceive(TempURL, string.Empty, sReqData, PosConst.ENCODING_FLAG.UTF, ref sRespData);
                                if (iRet == BaseCom.OK)
                                {
                                    sReturn = m_cCheckOverDetail.SelectStoreTempInfo(sRespData);
                                }
                            }
                        }
                        #endregion

                        #region 12 - BR팝업 업무 처리
                        if (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.BR)
                            BrPopUpBiz();
                        #endregion

                        #region 13 - LOG 전송 처리
                        {
                            // 전문 생성
                            htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.POS_LOGFILE_REQ, new string[] { PosConst.POS_LOGFILE_REQ_TYPE.LOGFILE_REQ, "" });

                            // 전문 요청
                            iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                  Convert.ToInt32(m_cPosStatus.Base.PayInqPort),
                                                  (int)5000, htSendData, ref htRecvData);
                            if(iRet == BaseCom.OK)
                            {
                                // 전송할 LOG 데이터 있음
                                if(htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.RES_CD].ToString() == "00")
                                {
                                    string sFileNm = "";
                                    
                                    iRet = UploadLogFileProc(htRecvData, ref sFileNm);

                                    if(iRet == BaseCom.OK)
                                    {
                                        // Upload 성공
                                        htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.POS_LOGFILE_REQ, new string[] { PosConst.POS_LOGFILE_REQ_TYPE.LOGFILE_UPLOAD, htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT].ToString() });
                                    }
                                    else if(iRet == BaseCom.NG1)
                                    {
                                        // Upload 파일 존재하지 않음
                                        htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.POS_LOGFILE_REQ, new string[] { PosConst.POS_LOGFILE_REQ_TYPE.NO_LOGFILE, htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT].ToString() });
                                    }
                                    else
                                    {
                                        // Upload 실패
                                        htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.POS_LOGFILE_REQ, new string[] { PosConst.POS_LOGFILE_REQ_TYPE.LOGFILE_UPLOAD_FAIL, htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT].ToString() });
                                    }

                                    // 전문 요청
                                    iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                                          Convert.ToInt32(m_cPosStatus.Base.PayInqPort),
                                                          (int)5000, htSendData, ref htRecvData);
                                }
                            }
                        }
                        #endregion 13 - LOG 전송 처리

                        //17.08.22 dkshin SS 해피오더
                        #region 14 - SS 해피오더 자동 처리
                        //#20171124 해당 옵션 웹에서 등록 안한 경우 동작 안하도록 수정 start
                        //기존
                        //if (PosMstManager.GetPosOption(POS_OPTION.OPT048) != "0")
                        //변경
                        if (PosMstManager.GetPosOption(POS_OPTION.OPT048) != "0" &&
                            PosMstManager.GetPosOption(POS_OPTION.OPT048) != "")
                        //#20171124 해당 옵션 웹에서 등록 안한 경우 동작 안하도록 수정 end
                        {
                            SSHappyOrderAutoProcess();
                        }
                        #endregion

                        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 start
                        #region 해피오더 실시간 재고 알람

                        //****************************************************************************************
                        //WEB에서 재고 미등록 상태일 때 포스로 Y값을 내려주고 Y로 내려오면 판매화면 상단에 깜빡이는 패널 생성해줌.
                        //10분마다 조회하고 1분동안 패널 표시해줌
                        //****************************************************************************************                        
                        if (PosMstManager.GetPosOption(POS_OPTION.OPT518) == "1")
                        {
                            //// 타이머시작
                            //iInventoryDispCnt = iInventoryDispCnt + 1;
                            //// 타이머 전역변수 (초)
                            //m_cPosStatus.Sale.HappyOrderInventoryTime = iInventoryDispCnt.ToString();
                            //// (처음한번)실시간재고알람Y/N 읽어오기
                            //if (iInventoryDispCnt == 0)
                            //{
                            //    HappyOrderInventoryAlram();
                            //}
                            //// (10분마다)실시간재고알람Y/N 읽어오기
                            //else if (iInventoryDispCnt >= 60 * 10)
                            //{
                            //    iInventoryDispCnt = 0;
                            //    HappyOrderInventoryAlram();
                            //}

                            HappyOrderInventoryAlram();
                        }

                        #endregion
                        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 end
                    }
                    catch (Exception ex)
                    {
                        UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                             UserCom.ERROR_LEVEL,
                                             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 in NetworkCheckOver Thread" + ex.Message);
                    }

                    int nNowSleepTerm = 0;
                    while (nNowSleepTerm < m_ThreadSleepTerm)
                    {
                        if (m_NetworkCheckOverRunning == false) break;
                        Thread.Sleep(100);
                        nNowSleepTerm += 100;
                    }
                    if (iSubCount_1 == 10) iSubCount_1 = 0;
                    else iSubCount_1++;
                    if (iSubCount_2 == 30) iSubCount_2 = 0;
                    else iSubCount_2++;
                    //System.Threading.Thread.Sleep(m_ThreadSleepTerm);
                }
            }
            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 (함수명))
                                    ex.Message);
            }
        }

        private void UpdateNoticesDateTime(string sMsgDiv, string sMsgType, string sDateTime)
        {
            try
            {
                // 업데이트 시간 갱신
                switch (sMsgDiv)
                {
                    case "00":       // 긴급 공지
                        m_cPosStatus.Base.EmergencyNoticeUpdateDT = sDateTime;
                        break;
                    case "01":       // 일반 공지
                        m_cPosStatus.Base.RegularNoticeUpdateDT = sDateTime;
                        break;
                    case "02":       // 영업 공지
                        if (sMsgType == "1")
                        {
                            // 오늘의 할 일
                            m_cPosStatus.Base.SaleNoticeUpdateDT1 = sDateTime;
                        }
                        else
                        {
                            // 식품안전 메시지
                            m_cPosStatus.Base.SaleNoticeUpdateDT2 = sDateTime;
                        }
                        break;
                }

                // PosSaleInfo.ini 저장
                IServiceUs cSaveConfigInfo = (IServiceUs)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.SAVE_CONFIGINFO);
                string sRet = cSaveConfigInfo.Execute(new string[] { PosConst.INI_FILE_NAME.PosSaleInfo });
            }
            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 (함수명))
                                    ex.Message);
            }
        }

        //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 start
        private void HappyOrderCntChk()
        {
            string sReqData = string.Empty;
            string sRespData = string.Empty;
            string sReturn = string.Empty;
            int iRet = 0;
            //grayber@20180306 해피오더 주문가능 상태 추가 start - HashTable 추가
            Hashtable htRspData = null;
            //grayber@20180306 해피오더 주문가능 상태 추가 end 
            try
            {

                sReqData = string.Format("storeCode={0}&deviceType=POS", m_cPosStatus.Base.StoreNo);
                //sReqData = string.Format("storeCode={0}&deviceType=POS", "11101");
                


                //#20180605 해피오더 개선 start - 20180618
                //기존
                /*
                //grayber@20180306 해피오더 주문가능 상태 추가 start - 공통사용 함수가 아닌 NetworkCheckOver class 의 함수를 사용를 수정
                // 기존
                //iRet = this.HttpJsonGET_SendReceive(m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_STATUS_COUNT, sReqData, ref sRespData);
                // 변경
                iRet = this.HttpJsonGET_SendReceive(m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_STATUS_COUNT, sReqData, ref sRespData, ref htRspData);
                //grayber@20180306 해피오더 주문가능 상태 추가 end
                */

                //변경
                if (m_cPosStatus.Base.BrandCd == PosConst.MST_BRAND_CODE.PC_PB)
                {
                    iRet = this.HttpJsonGET_SendReceive(m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_STATUS_COUNT_PB, sReqData, ref sRespData, ref htRspData);
                }
                else
                {
                    iRet = this.HttpJsonGET_SendReceive(m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_STATUS_COUNT, sReqData, ref sRespData, ref htRspData);
                }
                //#20180605 해피오더 개선 end - 20180618



                if (iRet == BaseCom.OK)
                {
                    //grayber@20180306 해피오더 주문가능 상태 추가 start - 함수 HashTable 값 추가
                    //기존
                    //sReturn = m_cCheckOverDetail.SelectHappyOrderCountByOrderStatus(JsonConvert.DeserializeObject<Hashtable[]>(sRespData));
                    //변경
                    sReturn = m_cCheckOverDetail.SelectHappyOrderCountByOrderStatus(JsonConvert.DeserializeObject<Hashtable[]>(sRespData) , ref htRspData);
                    //grayber@20180306 해피오더 주문가능 상태 추가 end
                }
            }
            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 (함수명))
                                    ex.Message);
            }
        }
        //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 end

        #endregion CheckOver Main

        #region 공지사항 조회 - 서브 업무 처리
        private void DoSubProc(DataTable dtList)
        {
            int iRet = UserCom.NG;
            try
            {
                for (int nLoop = 0; nLoop < dtList.Rows.Count; nLoop++)
                {
                    DataRow dr = dtList.Rows[nLoop];
                    
                    switch(CmUtil.GetDataRowStr(dr, "MSG_CODE"))
                    {
                        case "01":  // 점주/알바 모드
                            iRet = InsertIntoNOTICE_MNG(new string[] { "01", CmUtil.GetDataRowStr(dr, "VALUE_1"), CmUtil.GetDataRowStr(dr, "VALUE_2") });
                            break;
                        case "02":  // 위해상품 메시지 등록
                            if (CmUtil.GetDataRowInt(dr, "VALUE_1") > 0)
                            {
                                iRet = ProcHarmfulItemMsgReg();
                            }
                            break;
                        case "03":  // 입고등록 확인
                            iRet = InsertIntoNOTICE_MNG(new string[] { "03", CmUtil.GetDataRowStr(dr, "VALUE_3"), CmUtil.GetDataRowStr(dr, "VALUE_4") });
                            break;
                        case "04":  // 배송 정보
                            iRet = InsertIntoNOTICE_MNG(new string[] { "04", CmUtil.GetDataRowStr(dr, "VALUE_3"), CmUtil.GetDataRowStr(dr, "VALUE_4") });
                            break;
                        case "05":  // 기념일 배송
                            iRet = InsertIntoNOTICE_MNG(new string[] { "05", CmUtil.GetDataRowStr(dr, "VALUE_1") });
                            break;
                    }
                }
            }
            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 (함수명))
                                    ex.Message);
            }
        }

        private int ProcHarmfulItemMsgReg()
        {
            int iRet = BaseCom.NG;
            Hashtable htSendData = null;
            Hashtable htRecvData = null;
            try
            {
                // 전문 생성
                htSendData = this.MakeMessageSendingReqData(ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ, null);

                // 전문 요청
                iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                      Convert.ToInt32(m_cPosStatus.Base.SysInfoPort),
                                      (int)5000, htSendData, ref htRecvData);

                if (iRet == BaseCom.OK)
                {
                    if (htRecvData[Column.IQ_FOODMSG_RSP.DATA.RES_CD].ToString() == "00")
                    {
                        // DB Insert
                        iRet = InsertIntoNOTICE_MNG(new string[] { "02", htRecvData[Column.IQ_FOODMSG_RSP.DATA.ISPCTN_ORGAN_CD].ToString(), htRecvData[Column.IQ_FOODMSG_RSP.DATA.DOC_NO].ToString()
                                                                 , htRecvData[Column.IQ_FOODMSG_RSP.DATA.SEQ].ToString(), htRecvData[Column.IQ_FOODMSG_RSP.DATA.ITEM_NM].ToString()
                                                                 , htRecvData[Column.IQ_FOODMSG_RSP.DATA.BAR_CD].ToString() });
                    }
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                    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 (함수명))
                                    ex.Message);
            }

            return iRet;
        }
        #endregion

        #region 공지사항 조회 응답 中 공지사항구분 필드 파싱 처리
        private DataTable ParseMsgValueField(string sMsgValue)
        {
            DataTable dtMsgValue = null;

            try
            {
                dtMsgValue = new DataTable();
                dtMsgValue.Columns.Add(new DataColumn("MSG_CODE", typeof(string)));
                dtMsgValue.Columns.Add(new DataColumn("VALUE_1", typeof(string)));
                dtMsgValue.Columns.Add(new DataColumn("VALUE_2", typeof(string)));
                dtMsgValue.Columns.Add(new DataColumn("VALUE_3", typeof(string)));
                dtMsgValue.Columns.Add(new DataColumn("VALUE_4", typeof(string)));
                dtMsgValue.Clear();

                string[] sRows = sMsgValue.Split(new string[] { "#~" }, StringSplitOptions.RemoveEmptyEntries);
                foreach(string sRow in sRows)
                {
                    string[] sColumns = sRow.Split(new string[] { "|" }, StringSplitOptions.None);

                    DataRow drNew = dtMsgValue.NewRow();
                    drNew["MSG_CODE"] = sColumns[0];
                    drNew["VALUE_1"] = sColumns[1];
                    drNew["VALUE_2"] = sColumns[2];
                    drNew["VALUE_3"] = sColumns[3];
                    drNew["VALUE_4"] = sColumns[4];
                    dtMsgValue.Rows.Add(drNew);
                }
            }
            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 (함수명))
                                     ex.Message);
            }

            return dtMsgValue;
        }
        #endregion

        #region IRT 요청 Data 생성
        private Hashtable MakeMessageSendingReqData(string sInqType, string[] sParams)
        {
            Hashtable htData = new Hashtable();

            try
            {
                if (sInqType == ItemConst.IRT_INQ_TYPE.MSG_TRANSFER_REQ)
                {
                    // 01 - INQ 종별("05":공지메시지)
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.INQ_TYPE, sInqType);
                    // 02 - 영업 일자
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.SALE_DT, m_cPosStatus.Base.SaleDate);
                    // 03 - 점포 코드
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                    // 04 - 사용자
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.USER_ID, m_cPosStatus.Base.CashierNo);
                    // 05 - 반환용 메시지 코드
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.MSG_CD, string.Empty);
                    // 통신서버 측 조회 쿼리가 무거워서 일반과 긴급을 나눔(2017.07.28)
                    //// 06 - 메시지 구분("0":일반/긴급공지, "1":영업공지)
                    // 06 - 메시지 구분("0":일반공지, "1":영업공지, "2":긴급공지)
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.MSG_DIV, sParams[0]);
                    // 07 - 업데이트 일자1
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.UPD_DT1, sParams[1]);
                    // 08 - 업데이트 일자2
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.UPD_DT2, sParams[2]);
                    // 09 - 업데이트 일자3
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.UPD_DT3, sParams[3]);
                    // 10 - 업데이트 일자4
                    htData.Add(Column.IQ_MSG_SND_REQ.DATA.UPD_DT4, sParams[4]);
                }
                else if(sInqType == ItemConst.IRT_INQ_TYPE.NOTICE_INQ_REQ)
                {
                    // 01 - INQ 종별("49":공지사항)
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.INQ_TYPE, sInqType);
                    // 02 - 점포 코드
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                    // 03 - 영업 일자
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.SALE_DT, m_cPosStatus.Base.SaleDate);
                    // 04 - POS 번호
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.POS_NO, m_cPosStatus.Base.PosNo);
                    // 05 - 메시지 등록 코드
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.MSG_VALUE, "");
                    // 06 - 응답 코드
                    htData.Add(Column.IQ_NOTICE_INQ_REQ.DATA.RES_CD, "00");
                }
                else if(sInqType == ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ)
                {
                    // 01 - INQ 종별("20":공지메시지)
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.INQ_TYPE, sInqType);
                    // 02 - 영업일자
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.SALE_DT, m_cPosStatus.Base.SaleDate);
                    // 03 - 점포코드
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                    // 04 - 요청구분
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.REQ_DIV, "1");
                    // 05 - 검사 기간코드
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.ISPCTN_ORGAN_CD, "");
                    // 06 - 문서번호
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.DOC_NO, "");
                    // 07 - 일련번호
                    htData.Add(Column.IQ_FOODMSG_REQ.DATA.SEQ, "");
                    
                }
                else if(sInqType == ItemConst.IRT_INQ_TYPE.POS_LOGFILE_REQ)
                {
                    // 01 - INQ 종별("69":POS 로그 파일 송신요청)
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.INQ_TYPE, sInqType);
                    // 02 - 점포코드
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                    // 03 - POS번호
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.POS_NO, m_cPosStatus.Base.PosNo);
                    // 04 - 요청 LOG 일자
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT, sParams[1]);
                    // 05 - 요청구분("1":로그요청 확인, "2":POS수신완료, "3":FTP송신완료)
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.REQ_DIV, sParams[0]);
                    // 06 - 전송할 FTP PATH
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.FTP_PATH, "");
                    // 07 - FILE_NM
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.FILE_NM, "");
                    // 08 - 응답코드
                    htData.Add(Column.IQ_POS_LOGFILE_REQ.DATA.RES_CD, "00");
                }
            }
            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 (함수명))
                                    ex.Message);
            }

            return htData;
        }

        private Hashtable MakePOSMASTERLISTReqData()
        {
            Hashtable htData = new Hashtable();

            try
            {
                // 01 - INQ 종별
                htData.Add(Column.IQ_POSMASTERLIST_REQ.DATA.INQ_TYPE, "44");
                // 02 - 다운 구분
                htData.Add(Column.IQ_POSMASTERLIST_REQ.DATA.DOWN_DIV, "1");
                // 03 - 다운 마스터 항목
                htData.Add(Column.IQ_POSMASTERLIST_REQ.DATA.MASTER_LIST, "");
            }
            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 (함수명))
                                    ex.Message);
            }

            return htData;
        }
        #endregion

        #region DB 관련 처리
        private int InsertIntoNOTICE_MNG(string[] aParam)
        {
            int iRet = UserCom.NG;
            string sUpdQuery = string.Empty;
            string sInsQuery = string.Empty;
            string sSeqQuery = string.Empty;
            string sCntQuery = string.Empty;
            string sSql = string.Empty;

            DataTable dtData = null;

            try
            {
                sUpdQuery  = " UPDATE POSLOG..ETC_NOTICE_MNG ";
                sUpdQuery += "    SET VAL_ENTRY_01 = N'{0}' ";
                sUpdQuery += "      , VAL_ENTRY_02 = N'{1}' ";
                sUpdQuery += "      , VAL_ENTRY_03 = N'{2}' ";
                sUpdQuery += "      , VAL_ENTRY_04 = N'{3}' ";
                sUpdQuery += "      , VAL_ENTRY_05 = N'{4}' ";
                sUpdQuery += "      , VAL_ENTRY_06 = N'{5}' ";
                sUpdQuery += "      , VAL_ENTRY_07 = N'{6}' ";
                sUpdQuery += "      , VAL_ENTRY_08 = N'{7}' ";
                sUpdQuery += "      , VAL_ENTRY_09 = N'{8}' ";
                sUpdQuery += "      , VAL_ENTRY_10 = N'{9}' ";
                sUpdQuery += "      , SEND_FLAG = '0' ";
                sUpdQuery += "  WHERE CMP_CD = '{10}' ";
                sUpdQuery += "    AND STOR_CD = '{11}' ";
                sUpdQuery += "    AND POS_NO = '{12}' ";
                sUpdQuery += "    AND MSG_DIV = '{13}' ";

                sSeqQuery  = " SELECT MAX(ISNULL(SEQ, 0)) AS SEQ ";
                sSeqQuery += "   FROM POSLOG..ETC_NOTICE_MNG ";
                sSeqQuery += "  WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' ";
                sSeqQuery += "    AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
                sSeqQuery += "    AND POS_NO = '" + m_cPosStatus.Base.PosNo + "' ";
                sSeqQuery += "    AND MSG_DIV = '02' ";

                sCntQuery  = " SELECT COUNT(1) AS CNT ";
                sCntQuery += "   FROM POSLOG..ETC_NOTICE_MNG ";
                sCntQuery += "  WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' ";
                sCntQuery += "    AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
                sCntQuery += "    AND POS_NO = '" + m_cPosStatus.Base.PosNo + "' ";
                sCntQuery += "    AND MSG_DIV = '{0}' ";

                sInsQuery  = " INSERT INTO POSLOG..ETC_NOTICE_MNG ";
                sInsQuery += "        ( CMP_CD, STOR_CD, POS_NO, MSG_DIV, SEQ ";
                sInsQuery += "        , VAL_ENTRY_01, VAL_ENTRY_02, VAL_ENTRY_03, VAL_ENTRY_04, VAL_ENTRY_05 ";
                sInsQuery += "        , VAL_ENTRY_06, VAL_ENTRY_07, VAL_ENTRY_08, VAL_ENTRY_09, VAL_ENTRY_10 ";
                sInsQuery += "        , REG_DATE, UPD_DATE, SEND_FLAG ) ";
                sInsQuery += " VALUES ";
                sInsQuery += "        (   '{0}',   '{1}',   '{2}',   '{3}',    {4} ";
                sInsQuery += "        ,  N'{5}',  N'{6}',  N'{7}',  N'{8}',  N'{9}' ";
                sInsQuery += "        , N'{10}', N'{11}', N'{12}', N'{13}', N'{14}' ";
                sInsQuery += "        ,  '{15}',  '{16}',  '0' ) ";
                           
                switch(aParam[0])
                {
                    case "01":      // 점주/알바 모드
                    case "03":      // 입고등록 확인
                    case "04":      // 배송정보
                        sSql = string.Format(sCntQuery, aParam[0]);
                        sqlDb.DBDataTableSelect(sSql, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);
                        if(dtData != null && dtData.Rows.Count > 0)
                        {
                            if(CmUtil.GetDataRowInt(dtData.Rows[0], "CNT") == 0)
                            {
                                sSql = string.Format(sInsQuery, m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo, aParam[0], "1"
                                                    , aParam[1], aParam[2], "", "", ""
                                                    , "", "", "", "", ""
                                                    , DateTime.Now.ToString("yyyyMMddHHmmss"), "");
                            }
                            else
                            {
                                sSql = string.Format(sUpdQuery, aParam[1], aParam[2], "", "", "", "", "", "", "", ""
                                                    , m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo, aParam[0]);
                            }
                        }
                        break;
                    case "02":      // 위해상품 메시지 등록
                        int iSeq = 0;
                        
                        sqlDb.DBDataTableSelect(sSeqQuery, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);
                        if(dtData != null && dtData.Rows.Count > 0)
                        {
                            iSeq = CmUtil.GetDataRowInt(dtData.Rows[0], "SEQ") + 1;
                        }
                        
                        sSql = string.Format(sInsQuery, m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo, aParam[0], iSeq
                                            , aParam[1], aParam[2], aParam[3], aParam[4], aParam[5]
                                            , "", "", "", "", ""
                                            , DateTime.Now.ToString("yyyyMMddHHmmss"), "");
                        break;
                    case "05":      // 기념일 배송
                        sSql = string.Format(sCntQuery, aParam[0]);
                        sqlDb.DBDataTableSelect(sSql, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);
                        if(dtData != null && dtData.Rows.Count > 0)
                        {
                            if(CmUtil.GetDataRowInt(dtData.Rows[0], "CNT") == 0)
                            {
                                sSql = string.Format(sInsQuery, m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo, aParam[0], "1"
                                                    , aParam[1], "", "", "", ""
                                                    , "", "", "", "", ""
                                                    , DateTime.Now.ToString("yyyyMMddHHmmss"), "");
                            }
                            else
                            {
                                sSql = string.Format(sUpdQuery, aParam[1], "", "", "", "", "", "", "", "", ""
                                                    , m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo, aParam[0]);
                            }
                        }
                        
                        break;
                }

                iRet = sqlDb.DBExecuteNonQuery(sSql, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                     ex.Message);
            }

            return iRet;
        }
        private int InsertIntoEMG_NOTE(Hashtable htRecvData)
        {
            int iRet = UserCom.NG;
            //string sUpdQuery = string.Empty;
            //string sInsQuery = string.Empty;
            string sQuery = string.Empty;
            string sSql = string.Empty;

            try
            {
                //sUpdQuery  = " UPDATE POSMST..MST_EMG_NOTE ";
                //sUpdQuery += "    SET MSG_TITLE = '{0}' ";
                //sUpdQuery += "      , MSG_CONTENTS = '{1}' ";
                //sUpdQuery += "      , POS_EXEC_TYPE = '{2}' ";
                //sUpdQuery += "      , POPUP_YN = '{3}' ";
                //sUpdQuery += "      , FNSH_HOUR = '{4}' ";
                //sUpdQuery += "      , READ_YN = '{5}' ";
                //sUpdQuery += "      , DOWN_YN = '{14}' ";
                //sUpdQuery += "      , UPD_DT = '{6}' ";
                //sUpdQuery += "  WHERE CMP_CD = '{7}' ";
                //sUpdQuery += "    AND STOR_CD = '{8}' ";
                //sUpdQuery += "    AND POS_NO = '{9}' ";
                //sUpdQuery += "    AND START_DT = '{10}' ";
                //sUpdQuery += "    AND MSG_CODE = '{11}' ";
                //sUpdQuery += "    AND MSG_DIV = '{12}' ";
                //sUpdQuery += "    AND MSG_TYPE = '{13}' ";

                //sInsQuery = "INSERT INTO POSMST..MST_EMG_NOTE ";
                //sInsQuery += "       ( CMP_CD, STOR_CD, POS_NO, START_DT, MSG_CODE ";
                //sInsQuery += "       , MSG_DIV, MSG_TYPE, MSG_TITLE, MSG_CONTENTS, POS_EXEC_TYPE ";
                //sInsQuery += "       , POPUP_YN, FNSH_HOUR, READ_YN, DOWN_YN, UPD_DT, REG_DT ) ";
                //sInsQuery += "VALUES ";
                //sInsQuery += "       ( '{0}', '{1}', '{2}', '{3}', '{4}' ";
                //sInsQuery += "       , '{5}', '{6}', '{7}', '{8}', '{9}' ";
                //sInsQuery += "       , '{10}', '{11}', '{12}', '{13}', '{14}', '{15}' ) ";

                sQuery += "UPDATE POSMST..MST_EMG_NOTE ";
                sQuery += "   SET MSG_TITLE = N'{7}' ";
                sQuery += "     , MSG_CONTENTS = N'{8}' ";
                sQuery += "     , POS_EXEC_TYPE = '{9}' ";
                sQuery += "     , POPUP_YN = '{10}' ";
                sQuery += "     , FNSH_HOUR = '{11}' ";
                sQuery += "     , READ_YN = '{12}' ";
                sQuery += "     , DOWN_YN = '{13}' ";
                sQuery += "     , UPD_DT = '{14}' ";
                sQuery += "     , USE_YN = '{15}' ";
                sQuery += " WHERE CMP_CD = '{0}' ";
                sQuery += "   AND STOR_CD = '{1}' ";
                sQuery += "   AND POS_NO = '{2}' ";
                sQuery += "   AND START_DT = '{3}' ";
                sQuery += "   AND MSG_CODE = '{4}' ";
                sQuery += "   AND MSG_DIV = '{5}' ";
                sQuery += "   AND MSG_TYPE = '{6}' ";
                sQuery += "IF @@ROWCOUNT = 0 ";
                sQuery += "INSERT INTO POSMST..MST_EMG_NOTE ";
                sQuery += "       ( CMP_CD, STOR_CD, POS_NO, START_DT, MSG_CODE ";
                sQuery += "       , MSG_DIV, MSG_TYPE, MSG_TITLE, MSG_CONTENTS, POS_EXEC_TYPE ";
                sQuery += "       , POPUP_YN, FNSH_HOUR, READ_YN, DOWN_YN, REG_DT ";
                sQuery += "       , USE_YN ) ";
                sQuery += "VALUES ";
                sQuery += "       ( '{0}', '{1}', '{2}', '{3}', '{4}' ";
                sQuery += "       , '{5}', '{6}', N'{7}', N'{8}', '{9}' ";
                sQuery += "       , '{10}', '{11}', '{12}', '{13}', '{14}' ";
                sQuery += "       , '{15}' ) ";

                //sSql = string.Format(sUpdQuery,
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE],
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CONT],
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.POS_EXEC_TYPE],
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_POPUP],
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.FNSH_DT],
                //                     "0",
                //                     DateTime.Now.ToString("yyyyMMddHHmmss"),
                //                     m_cPosStatus.Base.CmpCd, 
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.STOR_CD], 
                //                     m_cPosStatus.Base.PosNo, 
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.START_DT], 
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD], 
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV],
                //                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE],
                //                    "0");
                //iRet = sqlDb.DBExecuteNonQuery(sSql, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
                //if (iRet != UserCom.OK)
                //{
                //    sSql = string.Format(sInsQuery,
                                         //m_cPosStatus.Base.CmpCd, htRecvData[Column.IQ_MSG_SND_RSP.DATA.STOR_CD], m_cPosStatus.Base.PosNo, htRecvData[Column.IQ_MSG_SND_RSP.DATA.START_DT], htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD], htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV],
                                         //htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE], htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE], htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CONT], htRecvData[Column.IQ_MSG_SND_RSP.DATA.POS_EXEC_TYPE],
                                         //htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_POPUP], htRecvData[Column.IQ_MSG_SND_RSP.DATA.FNSH_DT], "0", "0", DateTime.Now.ToString("yyyyMMddHHmmss"), DateTime.Now.ToString("yyyyMMddHHmmss"));                    

                //    iRet = sqlDb.DBExecuteNonQuery(sSql, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
                //}
                sSql = string.Format(sQuery,
                                     m_cPosStatus.Base.CmpCd,
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.STOR_CD],
                                     m_cPosStatus.Base.PosNo,
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.START_DT],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CD],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_DIV],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TYPE],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_TITLE],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_CONT],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.POS_EXEC_TYPE],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.MSG_POPUP],
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.FNSH_DT],
                                     "0",
                                     "0",
                                     DateTime.Now.ToString("yyyyMMddHHmmss"),
                                     htRecvData[Column.IQ_MSG_SND_RSP.DATA.USE_YN]);

                iRet = sqlDb.DBExecuteNonQuery(sSql, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                    ex.Message);
            }

            return iRet;
        }

        private int UpdateMasterTableList(string[] arList)
        {
            int iRet = UserCom.NG;
            string sSql = string.Empty;

            try
            {
                sSql  = "UPDATE POSMST..MST_POSMST_TABLE_LST ";
                sSql += "   SET EMG_DIV = '1' ";
                sSql += "     , UPD_DT = '" + DateTime.Now.ToString("yyyyMMddHHmmss") + "' ";
                sSql += " WHERE 1 = 1 ";
                sSql += "   AND MST_TBL_CD IN (";

                int i = 0;
                foreach(string sMasterCd in arList)
                {
                    if (i == 0)
                    {
                        sSql += " '" + sMasterCd + "'";
                    }
                    else
                    {
                        sSql += ", '" + sMasterCd + "'";
                    }

                    i++;
                }

                sSql += " )";

                iRet = sqlDb.DBExecuteNonQuery(sSql, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                    ex.Message);
            }
            return iRet;
        }

        /// <summary>
        /// 전송 내역 조회
        /// </summary>
        /// <param name="sInqType">전문타입</param>
        /// <returns></returns>
        private DataTable SelectSendDataList(string sInqType)
        {
            string sSQL = string.Empty;

            string sSerchTableName = "";
            string sSearchDate = "";
            string sCoumn = "";

            DataTable dtData = null;

            try
            {

                //if (sInqType == ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ)  //유해 상품이면....
                //{
                //    sSQL = " SELECT STOR_CD, '2' AS 'REQ_DIV', '0' AS 'DATA_CNT', VAL_ENTRY_01 AS 'ISPCTN_ORGAN_CD', VAL_ENTRY_02 AS 'DOC_NO' ";
                //    sSQL += "       ,VAL_ENTRY_03 AS 'SEQ', VAL_ENTRY_04 AS '', VAL_ENTRY_05 AS 'ITEM_NM', VAL_ENTRY_06 AS 'BAR_CD','' AS RES_CD ";
                //    sSQL += "       ,CMP_CD, POS_NO,MSG_DIV,SEQ AS 'DISP_SEQ' ";
                //    sSQL += "  FROM POSLOG.dbo.ETC_NOTICE_MNG";
                //    sSQL += " WHERE CMP_CD  = '{0}'";
                //    sSQL += "   AND STOR_CD = '{1}'";
                //    sSQL += "   AND POS_NO  = '{2}'";
                //    sSQL += "   AND MSG_DIV IN ('02') ";
                //    sSQL += "   AND SUBSTRING(REG_DATE,1,8) BETWEEN CONVERT(VARCHAR,GETDATE() - 31,112) AND CONVERT(VARCHAR,GETDATE(),112) ";
                //    sSQL += "   AND SEND_FLAG IN ('1', '9') ";
                //    sSQL += " ORDER BY SEND_FLAG ";

                //    if (sSQL != "")
                //    {
                //        sSQL = string.Format(sSQL, m_cPosStatus.Base.CmpCd, m_cPosStatus.Base.StoreNo, m_cPosStatus.Base.PosNo);
                //        sqlDb.DBDataTableSelect(sSQL, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);
                //    }
                //}
                //else
                //{
                    sSQL = " SELECT TOP 1 '{0}' AS INQ_TYPE, {1} ";
                    sSQL += "  FROM {2} ";
                    sSQL += " WHERE CMP_CD  = '" + m_cPosStatus.Base.CmpCd + "' ";
                    sSQL += "   AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";

                    if (sInqType == ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ)    //유해상품이면
                    {
                        sSQL += "   AND POS_NO = '" + m_cPosStatus.Base.PosNo + "' ";
                        sSQL += "   AND MSG_DIV IN ('02') ";
                        sSQL += "   AND SUBSTRING(REG_DATE,1,8) BETWEEN CONVERT(VARCHAR,GETDATE() - 31,112) AND CONVERT(VARCHAR,GETDATE(),112) ";
                        sSQL += "   AND SEND_FLAG IN ('1', '9') ";
                        sSQL += " ORDER BY SEND_FLAG ";
                    }
                    else
                    {
                        sSQL += "   AND {3} BETWEEN CONVERT(VARCHAR,GETDATE()-2,112) AND CONVERT(VARCHAR,GETDATE(),112) ";    //-2일 전부터
                        sSQL += "   AND SEND_YN <> '1' ";
                        sSQL += " ORDER BY SEND_YN ";
                    }
                    
                    

                    if (sInqType == ItemConst.IRT_INQ_TYPE.STOR_VISIT)  //방문,제조기사 타임바코드
                    {
                        sCoumn = " STOR_CD,VISIT_DT,POS_NO,MNG_CARD_NO,VISIT_START_HOUR,VISIT_FNSH_HOUR,VISIT_USER_ID,JOB_TYPE,PCSMM_SEND_YN,MSR_DIV,ORG_BAR_CD_NO,'' AS SEND_YN ";
                        sSerchTableName = "POSLOG.dbo.TR_STORE_VISIT ";
                        sSearchDate = "VISIT_DT";
                    }
                    else if (sInqType == ItemConst.IRT_INQ_TYPE.EMP_COMMUTE)    //근태
                    {
                        sCoumn = " STOR_CD,EMP_NO,WORK_DT,ROS_CD,SEQ,HOUR_STAMP,ROS_HOUR,'' AS RES_CD ";
                        sSerchTableName = "POSLOG.dbo.TR_STOR_EMP ";
                        sSearchDate = "WORK_DT";
                    }
                    else if (sInqType == ItemConst.IRT_INQ_TYPE.ONWER_MODE)     //점주,알바 모드
                    {
                        sCoumn = " STOR_CD,WORK_DT,WORK_HOUR,EMP_DIV,POS_NO,'' AS RES_CD ";
                        sSerchTableName = "POSLOG.dbo.TR_STOR_EMP_WORK ";
                        sSearchDate = "WORK_DT";
                    }
                    else if (sInqType == ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ)  //유해 상품이면....
                    {
                        sCoumn = " STOR_CD, '2' AS REQ_DIV, '0' AS DATA_CNT, VAL_ENTRY_01 AS ISPCTN_ORGAN_CD, VAL_ENTRY_02 AS DOC_NO ";
                        sCoumn += ",VAL_ENTRY_03 AS SEQ, VAL_ENTRY_04 AS ITEM_NM, VAL_ENTRY_05 AS BAR_CD,'' AS RES_CD ";
                        //sCoumn += " ,POS_NO,MSG_DIV,SEQ AS 'DISP_SEQ' ";
                        sSerchTableName = "POSLOG.dbo.ETC_NOTICE_MNG ";
                        sSearchDate = "";
                    }
                    else
                    {
                        sSQL = "";
                    }

                    //쿼리 실행!
                    if (sSQL != "")
                    {
                        sSQL = string.Format(sSQL, sInqType, sCoumn, sSerchTableName, sSearchDate);
                        sqlDb.DBDataTableSelect(sSQL, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);
                    }
                }
            //}
            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 (함수명))
                                    ex.Message);
            }
            return dtData;
        }

        /// <summary>
        /// 전송 플래그 업데이트
        /// </summary>
        /// <param name="sInqType">전송구분</param>
        /// <param name="aParam">파라미터</param>
        /// <returns></returns>
        private int UpdateTableSend(string sInqType, string sFlag, Hashtable htSendData)
        {
            int iRet = UserCom.NG;
            string sSQL = string.Empty;

            try
            {
                if (sInqType == ItemConst.IRT_INQ_TYPE.STOR_VISIT)  //방문,제조기사 타임바코드
                {
                    sSQL = " UPDATE POSLOG.dbo.TR_STORE_VISIT SET SEND_YN = '" + sFlag + "'";
                    sSQL += " WHERE 1 = 1 ";
                    sSQL += "   AND CMP_CD           = '" + m_cPosStatus.Base.CmpCd + "' ";
                    sSQL += "   AND STOR_CD          = '" + htSendData["STOR_CD"] + "'";
                    sSQL += "   AND VISIT_DT         = '" + htSendData["VISIT_DT"] + "'";
                    sSQL += "   AND POS_NO           = '" + htSendData["POS_NO"] + "'";
                    sSQL += "   AND MNG_CARD_NO      = '" + htSendData["MNG_CARD_NO"] + "'";
                    sSQL += "   AND VISIT_START_HOUR = '" + htSendData["VISIT_START_HOUR"] + "'";

                }
                else if (sInqType == ItemConst.IRT_INQ_TYPE.EMP_COMMUTE)    //근태
                {
                    sSQL = " UPDATE POSLOG.dbo.TR_STOR_EMP SET SEND_YN = '" + sFlag + "'";
                    sSQL += " WHERE 1 = 1 ";
                    sSQL += "   AND CMP_CD     = '" + m_cPosStatus.Base.CmpCd + "' ";
                    sSQL += "   AND STOR_CD    = '" + htSendData["STOR_CD"] + "'";
                    sSQL += "   AND EMP_NO     = '" + htSendData["EMP_NO"] + "'";
                    sSQL += "   AND WORK_DT    = '" + htSendData["WORK_DT"] + "'";
                    sSQL += "   AND ROS_CD     = '" + htSendData["ROS_CD"] + "'";
                    sSQL += "   AND SEQ        = '" + htSendData["SEQ"] + "'";
                    sSQL += "   AND HOUR_STAMP = '" + htSendData["HOUR_STAMP"] + "'";

                }
                else if (sInqType == ItemConst.IRT_INQ_TYPE.ONWER_MODE)     //점주,알바 모드
                {
                    sSQL = " UPDATE POSLOG.dbo.TR_STOR_EMP_WORK SET SEND_YN = '" + sFlag + "'";
                    sSQL += " WHERE 1 = 1 ";
                    sSQL += "   AND CMP_CD     = '" + m_cPosStatus.Base.CmpCd + "' ";
                    sSQL += "   AND STOR_CD    = '" + htSendData["STOR_CD"] + "'";
                    sSQL += "   AND WORK_DT    = '" + htSendData["WORK_DT"] + "'";
                    sSQL += "   AND WORK_HOUR  = '" + htSendData["WORK_HOUR"] + "'";
                    sSQL += "   AND EMP_DIV    = '" + htSendData["EMP_DIV"] + "'";
                    sSQL += "   AND POS_NO     = '" + htSendData["POS_NO"] + "'";
                }
                else if (sInqType == ItemConst.IRT_INQ_TYPE.HARMFUL_ITEM_MSG_REQ)     //유해상품
                {
                    sSQL = " UPDATE POSLOG.dbo.ETC_NOTICE_MNG SET SEND_FLAG = '" + sFlag + "'";
                    sSQL += " WHERE 1 = 1 ";
                    sSQL += "   AND CMP_CD     = '" + m_cPosStatus.Base.CmpCd + "' ";
                    sSQL += "   AND STOR_CD    = '" + htSendData["STOR_CD"] + "'";
                    sSQL += "   AND POS_NO     = '" + m_cPosStatus.Base.PosNo + "'";
                    sSQL += "   AND MSG_DIV    = '02'";
                    sSQL += "   AND VAL_ENTRY_01  = '" + htSendData["ISPCTN_ORGAN_CD"] + "'";
                    sSQL += "   AND VAL_ENTRY_02  = '" + htSendData["DOC_NO"] + "'";
                    sSQL += "   AND VAL_ENTRY_03  = '" + htSendData["SEQ"] + "'";
                }
                else
                {
                    sSQL = "";
                }

                iRet = sqlDb.DBExecuteNonQuery(sSQL, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                    ex.Message);
            }
            return iRet;
        }


        #endregion

        #region 통신서버 전송 모듈
        /// <summary>
        /// IRT Json Send/Recv
        /// </summary>
        /// <param name="sSvrIp"></param>
        /// <param name="iPort"></param>
        /// <param name="iTimeout">Time to keep the connection(ms)</param>
        /// <param name="htSendData"></param>
        /// <param name="htRecvData"></param>
        /// <returns></returns>
        private int IRTSendReceive(string sSvrIp, int iPort, int iTimeout, Hashtable htSendData, ref Hashtable htRecvData)
        {
            int nStat = BaseCom.NG;

            try
            {
                // 전송 데이터를 JSON 객체로 변환
                string sJsonSendData = JsonConvert.SerializeObject(htSendData);
                // JSON string 길이를 구하기 위해 byte 변환
                Byte[] arTempData = Encoding.UTF8.GetBytes(sJsonSendData);
                // 통신헤더 전문 생성
                string sCommHeader = ItemColumn.MakeCommHeader(arTempData.Length, ItemConst.COMM_MSG_TYPE.POSIRT);

                string sJsonRecvData = string.Empty;

                UserLog.WriteLogFile(UserCom.LOG_SOCK, 
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (Project Name (프로젝트명))
                                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                     CmUtil.RPadH("[SEND" + ":" + sSvrIp + ":" + iPort, 27) + "] " + sCommHeader + sJsonSendData);

                nStat = SendReceiveData(sSvrIp, iPort, iTimeout, sCommHeader + sJsonSendData, ref sJsonRecvData);

                if (sJsonRecvData != null && sJsonRecvData != "")
                {
                    string sRecvCommHeader = sJsonRecvData.Substring(0, TcpSocket.COMM_HEAD_LEN);
                    string sRecvData = sJsonRecvData.Substring(TcpSocket.COMM_HEAD_LEN);

                    htRecvData = JsonConvert.DeserializeObject<Hashtable>(sRecvData);

                    UserLog.WriteLogFile(UserCom.LOG_SOCK,
                                         System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (Project Name (프로젝트명))
                                         System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +  // Class Name (Class Name (클래스명))
                                         System.Reflection.MethodBase.GetCurrentMethod().Name + "()",                // Function Name (Function Name (함수명))
                                         CmUtil.RPadH("[RECV" + ":" + sSvrIp + ":" + iPort, 27) + "] " + sJsonRecvData);
                }
            }
            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 (함수명))
                                    ex.Message);
            }

            return nStat;
        }
        /// <summary>
        /// IRT Send/Receive
        /// </summary>
        /// <param name="sSvrIp"></param>
        /// <param name="iPort"></param>
        /// <param name="iTimeout">Time to keep the connection(ms)</param>
        /// <param name="sSendData"></param>
        /// <param name="sRecvData"></param>
        /// <returns></returns>
        private int SendReceiveData(string sSvrIp, int iPort, int iTimeout, string sSendData, ref string sRecvData)
        {
            int nStat = BaseCom.NG;
            int nRecvLen = 0;

            try
            {
                m_sendSocket = new TcpSocket(sSvrIp, iPort);

                // Data Send & Receive
                nRecvLen = m_sendSocket.SendReceiveData(sSendData, ref sRecvData, iTimeout);

                if(nRecvLen > 0)
                {
                    nStat = BaseCom.OK;
                }
                else
                {
                    sRecvData = string.Empty;
                    nStat = BaseCom.NG;
                }
            }
            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 (함수명))
                                    ex.Message);
            }
            finally
            {
                if (m_sendSocket != null) m_sendSocket.Close();
            }

            return nStat;
        }
        #endregion

        #region Http 전송 모듈
        /// <summary>
        /// 해피오더 GET방식 Request
        /// </summary>
        /// <param name="sUrl">URL</param>
        /// <param name="sWorkType">메시지 타입</param>
        /// <param name="sReqData">요청Data</param>
        /// <param name="sRespJsonData">응답Data(Json)</param>
        /// <returns></returns>
        ///grayber@20180306 해피오더 주문가능 상태 추가 start - 함수 인자 추가 NetworkCheckOver.HttpJsonGET_SendReceive 함수 HashTable 인자추가
        /// 기존
        /// public int HttpJsonGET_SendReceive(string sUrl, string sWorkType, string sReqData, ref string sRespJsonData)
        /// 변경
        public int HttpJsonGET_SendReceive(string sUrl, string sWorkType, string sReqData, ref string sRespJsonData, ref Hashtable htRspData)
        //grayber@20180306 해피오더 주문가능 상태 추가 end
        {
            int iRet = BaseCom.NG;
            string sRespString = string.Empty;

            try
            {
                if (sUrl.Trim() == "") return iRet;

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType + "?" + sReqData);
                req.Method = "GET";

                using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
                {
                    Stream stream = resp.GetResponseStream();
                    StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("UTF-8"));
                    sRespString = streamReader.ReadToEnd();
                }

                //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 start
                //건수 조회 응답값 로그 추가
                UserLog.WriteLogFile(UserCom.LOG_DEBUG,
                                    UserCom.WARNING_LEVEL,
                                    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 (함수명))
                                    sRespString);
                //#20180228 해피오더 주문 건수 조회 기능 에러시 다른 기능 동작 되도록 수정 end

                Hashtable temp = JsonConvert.DeserializeObject<Hashtable>(sRespString);

                foreach (string key in temp.Keys)
                {
                    string jsonString = temp[key].ToString();
                    if (key.Equals("status"))
                    {
                        Hashtable htHeader = JsonConvert.DeserializeObject<Hashtable>(jsonString);
                        if (htHeader["status"].ToString().Equals("200"))
                        {
                            iRet = BaseCom.OK;
                        }
                    }
                    //grayber@20180306 해피오더 주문가능 상태 추가 start - deliverySupport 처리 추가

                    // 20180306 수신 데이터 sample
                    // http://api.celectory.com/api/ // 리얼
                    // {"status":{"status":200,"code":"20000","message":"조회 완료","devMessage":"success","moreInfo":null,"orderNum":null},"orderStatusCount":[{"status":"0","count":1,"type":"5"},{"status":"8","count":110,"type":"1"},{"status":"8","count":453,"type":"2"},{"status":"8","count":223,"type":"3"},{"status":"8","count":122,"type":"6"},{"status":"2000","count":2,"type":"5"},{"status":"2008","count":31,"type":"2"},{"status":"2008","count":10,"type":"3"},{"status":"2008","count":46,"type":"6"},{"status":"9007","count":8,"type":"5"},{"status":"9009","count":126,"type":"5"},{"status":"300000","count":42,"type":"1"},{"status":"300000","count":177,"type":"2"},{"status":"300000","count":501,"type":"3"},{"status":"300000","count":279,"type":"5"},{"status":"300000","count":110,"type":"6"}]}
                    // http://121.254.240.198:8092/api/ // 개발
                    // {"status":{"status":200,"code":"20000","message":"조회 완료","devMessage":"success","moreInfo":null,"orderNum":null},"orderStatusCount":[{"status":"8","count":1,"type":"3"},{"status":"2008","count":1,"type":"3"},{"status":"9007","count":3,"type":"5"},{"status":"9009","count":12,"type":"5"},{"status":"300000","count":25,"type":"3"},{"status":"300000","count":8,"type":"5"}],"deliverySupport":"Y"}

                    // 기존
                    //else
                    //{
                    //    sRespJsonData = jsonString;
                    //}
                    // 변경
                    else if (key.Equals("deliverySupport"))
                    {
                        if (CmUtil.IsNull(htRspData))
                        {
                            htRspData = new Hashtable();
                        }
                        htRspData.Add(key.ToString(), temp[key].ToString());
                    }
                    else if (key.Equals("orderStatusCount"))
                    {
                        sRespJsonData = jsonString;
                    }
                    //grayber@20180306 해피오더 주문가능 상태 추가 end
                }
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     ex.ToString());
            }

            return iRet;
        }

        /// <summary>
        /// GET방식 Request
        /// </summary>
        /// <param name="sUrl">서버URL</param>
        /// <param name="sWorkType">작업구분</param>
        /// <param name="sReqData">요청Data</param>
        /// <param name="sRespJsonData">JSON String 형태의 응답 데이터</param>
        /// <returns></returns>
        public int HttpGET_SendReceive(string sUrl, string sWorkType, string sReqData, string sEncodingFlag, ref string sRespData)
        {
            int iRet = BaseCom.NG;
            string sRespString = string.Empty;
            StreamReader streamReader = null;

            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType + "?" + sReqData);
                req.Method = "GET";

                using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
                {
                    Stream stream = resp.GetResponseStream();

                    if (sEncodingFlag == PosConst.ENCODING_FLAG.UTF)
                    {
                        streamReader = new StreamReader(stream, Encoding.GetEncoding("UTF-8"));
                    }
                    else
                    {
                        streamReader = new StreamReader(stream, Encoding.GetEncoding("ks_c_5601-1987"));
                    }
                    sRespString = streamReader.ReadToEnd();
                }

                iRet = BaseCom.OK;

                sRespData = sRespString;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR,
                                     System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                     System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                     ex.ToString());
            }

            return iRet;
        }
        #endregion

        #region BR 팝업메세지 처리
        private void BrPopUpBiz()
        {
            string sSQL = "";
            DataTable dtData = null;

            try
            {
                sSQL  = " SELECT * ";
                sSQL += "   FROM POSLOG.dbo.ETC_BR_POPUP";
                sSQL += "  WHERE CMP_CD     = '{0}'";
                sSQL += "    AND BRAND_CD   = '{1}'";
                sSQL += "    AND SALE_DT    = '{2}'";
                sSQL += "    AND STOR_CD    = '{3}'";
                sSQL += "    AND POS_NO     = '{4}'";
                sSQL += "    AND READ_FLAG  = '0'";
                sSQL += "    AND '{5}' BETWEEN START_TM AND END_TM ";
                
                sSQL = string.Format(sSQL
                                    , m_cPosStatus.Base.CmpCd
                                    , m_cPosStatus.Base.BrandCd
                                    , DateTime.Now.ToString("yyyyMMdd")
                                    , m_cPosStatus.Base.StoreNo
                                    , m_cPosStatus.Base.PosNo
                                    , DateTime.Now.ToString("HHmmss"));

                sqlDb.DBDataTableSelect(sSQL, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtData);


                if (dtData == null || dtData.Rows.Count == 0)
                {
                    //처리없음!
                }
                else
                {
                    foreach (DataRow dr in dtData.Rows)
                    {
                        if (dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0015 || dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0018)
                        {
                            ExecuteHostIrt(dr);
                        }
                        else if (dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0016 || dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0019)
                        {

                            if (dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0016 )
                            {
                                string[] aStr = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0570).ToString().Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);

                                dr["SHOW_MSG1"] = aStr[0];
                                dr["SHOW_MSG2"] = aStr[1];
                                dr["SHOW_MSG3"] = aStr[2];
                            }
                            else
                            {
                                dr["SHOW_MSG1"] = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0571);
                            }
                            
                            dr["READ_FLAG"] = "1";

                            BrPopupUpdate(dr);
                        }
                    }
                }

            }
            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 (함수명))
                                    ex.Message);
            }
        }

        /// <summary>
        /// 디비 업데이트
        /// </summary>
        /// <param name="dr"></param>
        /// <returns></returns>
        private bool BrPopupUpdate(DataRow dr)
        {

            bool bRet = false;
            string sSQL = "";

            try
            {
                sSQL = " UPDATE POSLOG.dbo.ETC_BR_POPUP ";
                sSQL += "   SET READ_FLAG  =  '" + dr["READ_FLAG"] + "'";
                sSQL += "      ,SHOW_MSG1  = N'" + dr["SHOW_MSG1"] + "'";
                sSQL += "      ,SHOW_MSG2  = N'" + dr["SHOW_MSG2"] + "'";
                sSQL += "      ,SHOW_MSG3  = N'" + dr["SHOW_MSG3"] + "'";
                sSQL += " WHERE CMP_CD     = '" + dr["CMP_CD"] + "'";
                sSQL += "   AND BRAND_CD   = '" + dr["BRAND_CD"] + "'";
                sSQL += "   AND SALE_DT    = '" + dr["SALE_DT"] + "'";
                sSQL += "   AND STOR_CD    = '" + dr["STOR_CD"] + "'";
                sSQL += "   AND POS_NO     = '" + dr["POS_NO"] + "'";
                sSQL += "   AND CMM_GRP_CD = '" + dr["CMM_GRP_CD"] + "'";
                sSQL += "   AND CMM_CD     = '" + dr["CMM_CD"] + "'";

                int iRet = sqlDb.DBExecuteNonQuery(sSQL, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);

                if (iRet == 1)
                    bRet = true;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }

            return bRet;
        }
        
        /// <summary>
        /// 전문 송수신
        /// </summary>
        /// <param name="sIRTType"></param>
        /// <param name="sStartDate"></param>
        /// <param name="sEndDate"></param>
        /// <param name="sChasu"></param>
        /// <param name="siTemGroup"></param>
        /// <param name="aRet"></param>
        /// <returns></returns>
        private string ExecuteHostIrt(DataRow dr)
        {
            string sRet = UserCom.RST_ERR;
            Hashtable htSendData = new Hashtable();
            Hashtable htRecvData = new Hashtable();

            try
            {
                // 조회
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.SERVER_INTERFACE_SCH);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.STOR_CD, m_cPosStatus.Base.StoreNo);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.POS_NO, m_cPosStatus.Base.PosNo);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.STOR_TY, m_cPosStatus.Mst.DrtFrcsDiv);
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.PRT_DIV, dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0015 ? "100" : "101");
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.START_DT, dr["SALE_DT"].ToString());
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.END_DT, dr["SALE_DT"].ToString());
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.ORD_SEQ, "");
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.ORD_GRP, "");
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.DATA_CNT, "0");
                htSendData.Add(Column.IQ_DATA_SEARCH_REQ.DATA.RES_DATA, "");


                // 전문 요청
                int iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp,
                                      Convert.ToInt32(m_cPosStatus.Base.BizInqPort),
                                      (int)5000, htSendData, ref htRecvData);

                if (iRet != BaseCom.OK || htRecvData.Count == 0)
                {
                    sRet = UserCom.RST_ERR;
                    return "";
                }

                if (CmUtil.DoubleParse(htRecvData[Column.IQ_DATA_SEARCH_REQ.DATA.DATA_CNT].ToString()) <= 0)
                {
                    //sRet = UserCom.RST_ERR;
                    //return "";
                    string sLogtemp = string.Format("BizCmmcd : {0}, RecvCount : {1} >> Skip", dr["CMM_GRP_CD"], htRecvData[Column.IQ_DATA_SEARCH_REQ.DATA.DATA_CNT]);

                    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 (함수명))
                                    sLogtemp);
                }
                
                sRet = htRecvData[Column.IQ_DATA_SEARCH_REQ.DATA.RES_DATA].ToString();

                if (dr["CMM_GRP_CD"].ToString() == PosConst.COMMON_CODE_GROUP.Z0015)
                {
                    if (sRet.StartsWith("N") == true) //     CmUtil.MidH(sRet, 0, 1) == "N")
                    {
                        dr["SHOW_MSG1"] = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0572);
                        dr["READ_FLAG"] = "1";
                    }
                    else
                    {
                        dr["READ_FLAG"] = "2";
                    }
                }
                else
                {
                    if (sRet.StartsWith("Y") == true)
                    {
                        dr["SHOW_MSG1"] = sRet.Substring(2);
                        dr["READ_FLAG"] = "1";
                    }
                    else
                    {
                        dr["READ_FLAG"] = "2";
                    }
                }

                BrPopupUpdate(dr);
                
                sRet = UserCom.RST_OK;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            return sRet;
        }
        #endregion

        #region 로그파일 업로드 처리
        private int UploadLogFileProc(Hashtable htRecvData, ref string sFileNm)
        {
            int iRet = BaseCom.NG;
            string sUploadedFileNm = "";
            ZipFile zip = null;

            try
            {
                // 01 - 요청 받은 로그 파일 압축
                string[] sFiles = Directory.GetFiles(BaseCom.NxLogPath, "*" + htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT].ToString().Substring(2) + ".log*");

                if(sFiles.Length > 0)
                {
                    sUploadedFileNm = htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.LOG_DT].ToString() + "_" + m_cPosStatus.Base.StoreNo + "_" + m_cPosStatus.Base.PosNo + ".zip";
                    zip = ZipFile.Create(BaseCom.NxLogPath + sUploadedFileNm);
                    
                    zip.BeginUpdate();
                    foreach(string sFile in sFiles)
                    {
                        zip.Add(sFile, Path.GetFileName(sFile));
                    }
                    zip.CommitUpdate();
                    zip.Close();
                    zip = null;
                }
                else
                {
                    // 요청받은 일자의 로그가 없음
                    return BaseCom.NG1;
                }

                // 02 - 압축 파일 Upload
                string sIp = htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.FTP_IP].ToString();
                string sPort = htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.FTP_PORT].ToString();
                string sUserId = htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.FTP_ID].ToString();
                string sUserPwd = htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.FTP_PWD].ToString();

                FTP cFtp = new FTP(sIp, sUserId, sUserPwd);

                bool bRtn = cFtp.Upload(BaseCom.NxLogPath + sUploadedFileNm, htRecvData[Column.IQ_POS_LOGFILE_REQ.DATA.FTP_PATH].ToString() + @"/" + sUploadedFileNm );

                if (bRtn == true)
                    iRet = BaseCom.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 (함수명))
                                    ex.Message);
            }
            finally
            {
                if (zip != null)
                    zip.Close();

                if(File.Exists(BaseCom.NxLogPath + sUploadedFileNm) == true)
                {
                    File.Delete(BaseCom.NxLogPath + sUploadedFileNm);
                }
            }

            return iRet;
        }
        #endregion 로그파일 업로드 처리

        //17.08.22 dkshin SS 해피오더
        #region SS 해피오더 자동 처리
        /// <summary>
        /// 최종 거래번호 설정
        /// </summary>
        /// <returns></returns>
        public string LoadLastPosTradeNo(string SSPosno)
        {
            string sQuery = "";
            string sRet = UserCom.RST_ERR;
            DataTable dtTradeInfo = null;

            try
            {
                // 최종거래번호 로딩
                sQuery = " SELECT ISNULL(MAX(TRADE_NO),0) TRADE_NO FROM POSLOG..TR_SALE_HEADER ";
                sQuery += " WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'  ";
                sQuery += "  AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
                sQuery += "  AND SALE_DT = '" + m_cPosStatus.Base.SaleDate + "' ";
                sQuery += "  AND POS_NO = '" + SSPosno + "' ";
                //sQuery += "  AND TRADE_KINDPER NOT IN('90','91','92','93') ";

                //DataTable dtTradeInfo = m_cMstService.Select(new string[] { sQuery });
                sqlDb.DBDataTableSelect(sQuery, CommandType.Text, (System.Data.SqlClient.SqlParameter[])null, out dtTradeInfo);

                if (dtTradeInfo != null && dtTradeInfo.Rows.Count > 0)
                {
                    DataRow dr = dtTradeInfo.Rows[0];

                    int nTradeNo = (int)CmUtil.LongParse(CmUtil.GetDataRowStr(dr, "TRADE_NO"));
                    //if (CmUtil.LongParse(m_cPosStatus.Base.TradeNo) <= nTradeNo)
                    {
                        m_cPosStatus.Base.TradeNo = string.Format("{0:D5}", nTradeNo + 1);
                    }
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }

            return sRet;
        }

        private void SSHappyOrderList()
        {
            Hashtable htRequest = new Hashtable();
            Hashtable htResponse = new Hashtable();
            int iReturn = BaseCom.NG;

            htRequest.Add("storeCode", m_cPosStatus.Base.StoreNo);
            htRequest.Add("status", ItemConst.HAPPYORDER_STATUS.ORDER_REG);
            htRequest.Add("deviceType", "POS");

            //해피오더 주문내역 조회 - 픽업시간
            m_htOrderLists = null;
            m_htOrderLists = m_cHappyOrder.SendReceiveForHappyOrder(new object[] { m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_ORDER_LIST, htRequest }, ref htResponse, ref iReturn);

            if (iReturn != BaseCom.OK)
            {
                return;
            }
        }

        private void SSHappyOrderStatusChange(Column.TR_HPORD.HPORD_HEADER cHeader, string statusValue)
        {
            Hashtable htRequest = new Hashtable();
            Hashtable htResponse = new Hashtable();

            int iReturn = BaseCom.NG;
            ArrayList m_cHappyOrderItem = new ArrayList();

            htRequest.Add("deviceType", "POS");
            htRequest.Add("orderNum", cHeader.OrderNum);
            //#12504 해피오더 외부채널 직접 주문 관련 수정 start, phj
            //htRequest.Add("channel", cHeader.Channel);
            //#12504 해피오더 외부채널 직접 주문 관련 수정 end, phj
            htRequest.Add("cancelReasonType", "");
            htRequest.Add("status", statusValue);

            // 주문상태변경 
            m_cHappyOrder.SendReceiveForHappyOrder(new object[] { m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.UPDATE_STATUS, htRequest }, ref htResponse, ref iReturn);

            if (htResponse == null || htResponse.ContainsKey("status") == false)
            {
                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 (함수명))
                                    "OrderNum = " + cHeader.OrderNum + ", 상태변경 처리 실패");

                //return false;
            }
            if (htResponse["status"].ToString().Equals("200") == false)
            {
                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 (함수명))
                                    "OrderNum = " + cHeader.OrderNum + ", 상태변경 처리 실패(" + htResponse["message"].ToString() + ")");

                //return false;
            }
            else
            {
                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 (함수명))
                                                "OrderNum = " + cHeader.OrderNum + ", 상태변경 처리 완료");

                // 정상 처리
                //bReturn = true;

                //#20171019 SS해피오더 배달 start
                //기존
                //if (statusValue == ItemConst.HAPPYORDER_STATUS.PICKUP_WAIT)
                //변경
                if ((statusValue == ItemConst.HAPPYORDER_STATUS.PICKUP_WAIT) || (statusValue == ItemConst.HAPPYORDER_STATUS.DELIVERY_REQ))
                //#20171019 SS해피오더 배달 end
                {
                    //영양정보 저장?
                    Hashtable[] aResponse = null;
                    Hashtable htRequestForNutrition = new Hashtable();
                    htResponse = null;

                    htRequestForNutrition.Add("orderNum", cHeader.OrderNum);

                    aResponse = m_cHappyOrder.SendReceiveForHappyOrder(new object[] { m_sHappyOrderURL, ItemConst.HAPPYORDER_WORK_TYPE.SELECT_PRODUCT_NUTRITION, htRequestForNutrition }, ref htResponse, ref iReturn);

                    if (aResponse != null && aResponse.Length > 0)
                    {
                        string sMsg = m_cHappyOrder.ParseNutritionMsg(aResponse);
                        if (sMsg != "")
                        {
                            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 (함수명))
                                                    "OrderNum = " + cHeader.OrderNum + ", 영양정보 = " + sMsg);

                            // 영양정보 저장
                            //#20180129 SS해피오더 자동처리 DB작업 수정 start
                            //기존
                            //m_cHappyOrder.UpdateHappyOrderData(new string[] { "Message", sMsg, cHeader.OrderNum, cHeader.OrderDate });
                            //변경
                            UpdateHappyOrderData(new string[] { "Message", sMsg, cHeader.OrderNum, cHeader.OrderDate });
                            //#20180129 SS해피오더 자동처리 DB작업 수정 end
                        }
                    }

                    //grayber@20180202 [BR]해피오더 고객정보 추가 + 원산지 표기 start - 영양정보 호출 함수 처리
                    //m_cHappyOrder.GetHappyOrderNurtitionListDetail(sOrderNum, m_sHappyOrderURL, sOrderDt);
                    //grayber@20180202 [BR]해피오더 고객정보 추가 + 원산지 표기 end

                    //매출처리
                    //해피오더 리스트 상세 조회
                    m_cHappyOrder.GetHappyOrderListDetail(cHeader.OrderNum, m_sHappyOrderURL, ref m_cHappyOrderItem, ref m_htOrderLists);

                    int itemCnt = m_cHappyOrderItem.Count;
                    ArrayList itemList = new ArrayList();
                    for (int i = 0; i < itemCnt; i++)
                    {
                        Column.TR_HPORD.HPORD_ITEM item = (Column.TR_HPORD.HPORD_ITEM)m_cHappyOrderItem[i];
                        item.PickupTime = cHeader.PickupTime;
                        itemList.Add(item);
                    }
                    m_cHappyOrderItem.Clear();
                    m_cHappyOrderItem = new ArrayList(itemList);


                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start

                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start - 20180723 기존 배달 건만이였지만 픽업건도 동일하게 적용하도록 수정
                    //if (statusValue == ItemConst.HAPPYORDER_STATUS.DELIVERY_REQ)
                    //{
                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end - 20180723 기존 배달 건만이였지만 픽업건도 동일하게 적용하도록 수정
                        bool bLandomBoxCheck = false;

                        DataTable dtData = null;
                        for (int nLoop = 0; nLoop < m_cHappyOrderItem.Count; nLoop++)
                        {
                            Column.TR_HPORD.HPORD_ITEM item = (Column.TR_HPORD.HPORD_ITEM)m_cHappyOrderItem[nLoop];

                            dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.T0039, "");
                            if (dtData != null && dtData.Rows.Count > 0)
                            {
                                foreach (DataRow dr in dtData.Rows)
                                {
                                    if (item.GoodsCode == CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01))
                                    {
                                        bLandomBoxCheck = true;
                                        break;
                                    }
                                }
                            }

                            if (bLandomBoxCheck == true)
                            {
                                return;
                            }
                        }
                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start - 20180723 기존 배달 건만이였지만 픽업건도 동일하게 적용하도록 수정
                    //}
                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end - 20180723 기존 배달 건만이였지만 픽업건도 동일하게 적용하도록 수정

                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end

                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 start
                    //기존
                    //string sRet = m_cHappyOrder.MakeTranItem((Column.TR_HPORD.HPORD_HEADER)cHeader, m_cHappyOrderItem);
                    //변경
                    string sRet = m_cHappyOrder.MakeTranItem((Column.TR_HPORD.HPORD_HEADER)cHeader, m_cHappyOrderItem, null);
                    //#15746 해피오더 '쇼킹박스' 관련 POS 시스템 개발 요청 end

                    if (sRet == UserCom.RST_OK)
                    {
                        m_cTrnStatus.Head.TradeKind = ItemConst.TRAN_KIND.FORIGN.O2O;

                        //#20171227 인천공항 포스연동 start, phj - 20180310 해피오더 결제완료 start,phj
                        //m_cPosStatus.Sale.SaleFlow = PosConst.SALE_FLOW.SALE_DOING;
                        //#20171227 인천공항 포스연동 end, phj - 20180310 해피오더 결제완료 end,phj
                        
                        m_cTrnStatus.Head.OrderNo = cHeader.DailyCode;//판매POS의 매출처리시 대기번호도 해당 대기번호로 저장해야 함.
                        String sPosno = m_cPosStatus.Base.PosNo;
                        String sTradeNo = m_cPosStatus.Base.TradeNo;
                        m_cPosStatus.Base.PosNo = PosMstManager.GetPosOption(POS_OPTION.OPT048);
                        LoadLastPosTradeNo(PosMstManager.GetPosOption(POS_OPTION.OPT048));//별도 포스번호별 거래번호 처리
                        m_cTrnStatus.Sale.SSHappyOrderSalePrint = true;//매출 처리 시 영수증 출력 하지 않음 설정.
                        m_cTrnStatus.Head.HPOrderPickupTime = cHeader.PickupTime;//20170918 dkshin 해피오더 중복 거래 완료처리 수정


                        IPaymentUs cPaymentUs = (IPaymentUs)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.HAPPYORDER);

                        //#11054_[공통] 해피오더 외부채널 표시 방식 변경 적용 요청
                        sRet = cPaymentUs.SetPayment(new string[] { ItemConst.TR_ITEM_ID.ORDER.HAPPYORDER_PAY, ItemConst.TR_ITEM_ID.ORDER_TYPE.PICKUP, cHeader.PayMoney, cHeader.OrderNum, cHeader.OrderDate });

                        if (sRet != UserCom.RST_OK)
                            return;

                        // 거래 완료 처리
                        ISaleCompleteUs cSaleComplete = (ISaleCompleteUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.SALE_COMPLETE);
                        sRet = cSaleComplete.PosSaleExecute(new string[] { });
                        if (sRet != UserCom.RST_OK)
                            return;

                        // 해피오더 데이터 삭제
                        //#20180129 SS해피오더 자동처리 DB작업 수정 start
                        //기존
                        //m_cHappyOrder.DeleteSSHappyOrderData(cHeader.DailyCode, cHeader.OrderDate.Substring(0, 10).Replace("-", ""));
                        //변경
                        DeleteSSHappyOrderData(cHeader.DailyCode, cHeader.OrderDate.Substring(0, 10).Replace("-", ""));
                        //#20180129 SS해피오더 자동처리 DB작업 수정 end

                        // KDS전송
                        //20170918 dkshin 해피오더 중복 거래 완료처리 수정
                        // 거래완료처리에서 주방주문 데이타 작성
                        //m_cHappyOrder.KPSItemProc(ItemConst.TRAN_DIV.NORMAL, m_cHappyOrderItem);

                        // 판매상태 변경
                        //#20171227 인천공항 포스연동 start, phj - 20180310 해피오더 결제완료 start,phj
                        //m_cPosStatus.Sale.SaleFlow = PosConst.SALE_FLOW.SALE_WAIT;
                        //#20171227 인천공항 포스연동 end, phj - 20180310 해피오더 결제완료 end,phj
                        m_cPosStatus.Base.PosNo = sPosno;
                        m_cPosStatus.Base.TradeNo = sTradeNo;
                        
                    }
                    else
                    {
                        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 (함수명))
                                             MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0638));
                    }
                }
            }


        }

        private void SSHappyOrderAutoProcess()
        {
            Hashtable htRequest = new Hashtable();
            Hashtable htResponse = new Hashtable();
            ArrayList m_alPickupLists = new ArrayList();

            DateTime pickupTenMinAgo;
            DateTime pickupSevenMinAgo;
            DateTime pickuptime;
            DateTime nowTime = DateTime.Now;
            //DateTime tenMinAgoTime = DateTime.Now.AddMinutes(-10);
            //DateTime sevenMinAgoTime = DateTime.Now.AddMinutes(-7);
            string s_Pickuptime;
            int yyyy, mm, dd, hh, mi;

            SSHappyOrderList();//해피오더 주문내역 조회 - 픽업시간

            //#20171215, 해피오더 주문리스트 조회 시 해피오더 테이블 데이터 삭제 후 저장하도록 수정 Start
            // 해피오더 헤더정보 DB 삭제

            //#20180129 SS해피오더 자동처리 DB작업 수정 start
            //기존
            //m_cHappyOrder.DeleteHappyOrderAllData();
            //변경
            DeleteHappyOrderAllData();
            //#20180129 SS해피오더 자동처리 DB작업 수정 end

            //#20171215, 해피오더 주문리스트 조회 시 해피오더 테이블 데이터 삭제 후 저장하도록 수정 End

            if (m_htOrderLists != null && m_htOrderLists.Length > 0)
            {
                foreach (Hashtable htData in m_htOrderLists)
                {
                    Column.TR_HPORD.HPORD_HEADER header;
                    header = m_cHappyOrder.ParseHappyOrderList(htData);
                    //#20171215, 해피오더 주문리스트 조회 시 해피오더 테이블 데이터 삭제 후 저장하도록 수정 Start
                    // 해피오더 헤더정보 DB 처리

                    //#20180129 SS해피오더 자동처리 DB작업 수정 start
                    //기존
                    //m_cHappyOrder.SaveHappyOrderData(header);
                    //변경
                    SaveHappyOrderData(header);
                    //#20180129 SS해피오더 자동처리 DB작업 수정 end

                    //#20171215, 해피오더 주문리스트 조회 시 해피오더 테이블 데이터 삭제 후 저장하도록 수정 End
                    m_alPickupLists.Add(header);
                }
            }

            Column.TR_HPORD.HPORD_HEADER cHeader;
            for (int i = 0; i < m_alPickupLists.Count; i++)
            {
                s_Pickuptime = ((Column.TR_HPORD.HPORD_HEADER)m_alPickupLists[i]).PickupTime;
                yyyy = Convert.ToInt32(s_Pickuptime.Substring(0, 4));
                mm = Convert.ToInt32(s_Pickuptime.Substring(5, 2));
                dd = Convert.ToInt32(s_Pickuptime.Substring(8, 2));
                hh = Convert.ToInt32(s_Pickuptime.Substring(14, 2));
                mi = Convert.ToInt32(s_Pickuptime.Substring(17, 2));
                

                pickuptime = new DateTime(yyyy, mm, dd, hh, mi, 00);
                pickupTenMinAgo = pickuptime.AddMinutes(-10);
                pickupSevenMinAgo = pickuptime.AddMinutes(-7);

                //픽업시간 10분전 '상품준비'로 상태 변경
                if (DateTime.Compare(pickupTenMinAgo, nowTime) < 0)
                {
                    cHeader = null;
                    cHeader = (Column.TR_HPORD.HPORD_HEADER)m_alPickupLists[i];

                    if (cHeader.OrderStatus == ItemConst.HAPPYORDER_STATUS.ORDER_REG)
                        SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.PRODUCT_READY);
                }
                //픽업시간 7분전 '픽업대기'로 상태 변경 
                if (DateTime.Compare(pickupSevenMinAgo, nowTime) < 0)
                {
                    cHeader = null;
                    cHeader = (Column.TR_HPORD.HPORD_HEADER)m_alPickupLists[i];

                    //OrderStatus 상태값(주문접수:4, 상품준비:5, 픽업대기:7, 픽업완료:8)
                    //'상품준비' 상태가 아니면 '상품준비'로 상태 변경 (픽업시간 10분전을 지나고 판매포스를 킨경우 상태값이 주문접수이므로 상품준비로 변경)
                    if (cHeader.OrderStatus == ItemConst.HAPPYORDER_STATUS.ORDER_REG)
                    {
                        SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.PRODUCT_READY);
                    }

                    //'상품준비' 상태이면 '픽업대기'로 상태 변경 -> 매출처리 -> KDS 전송
                    if (cHeader.OrderStatus == ItemConst.HAPPYORDER_STATUS.PRODUCT_READY)
                    {
                        //#20171019 SS해피오더 배달 start
                        //기존
                        //SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.PICKUP_WAIT);
                        //변경
                        if ((cHeader.OrderType == ItemConst.ORDER_TYPE.INNER_DELIVERY) || (cHeader.OrderType == ItemConst.ORDER_TYPE.OUTTER_DELIVERY))
                        {
                            SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.DELIVERY_REQ);
                        }
                        else
                        {
                            SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.PICKUP_WAIT);
                        }
                        //#20171019 SS해피오더 배달 end
                    }

                    //if (cHeader.OrderStatus == ItemConst.HAPPYORDER_STATUS.PICKUP_WAIT)
                    {
                        //    SSHappyOrderStatusChange(cHeader, ItemConst.HAPPYORDER_STATUS.PICKUP_COMPLETED);
                    }
                }


            }

        }

        //#20180129 SS해피오더 자동처리 DB작업 수정 start
        
        /// <summary>
        /// 해피오더 데이터 갱신
        /// </summary>
        /// <param name="aParam"></param>
        /// <returns></returns>
        public int UpdateHappyOrderData(string[] aParam)
        {
            int iRet = UserCom.NG;
            string sUpdQuery = "";

            try
            {
                sUpdQuery = " UPDATE POSMST..MST_HPORD ";
                if (aParam[0] == "PRINT")
                {
                    sUpdQuery += "SET PRT_YN = '" + aParam[1] + "' ";
                }
                else
                {
                    //sUpdQuery += "SET NUTRITION_MSG = REPLACE('" + aParam[1] + "', CHAR(10), CHAR(13) + CHAR(10))";
                    sUpdQuery += "SET NUTRITION_MSG = '" + aParam[1] + "' ";
                }
                sUpdQuery += "      , UPD_DT = '" + DateTime.Now.ToString("yyyyMMddHHmmss") + "' ";
                sUpdQuery += "  WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' ";
                sUpdQuery += "    AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' ";
                sUpdQuery += "    AND ORD_DT = '" + aParam[3] + "' ";
                sUpdQuery += "    AND ORD_NO = '" + aParam[2] + "' ";

                iRet = sqlDb.DBExecuteNonQuery(sUpdQuery, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);

            }
            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 (함수명))
                                     ex.Message);
            }

            return iRet;
        }

        /// <summary>
        /// 해피오더 데이터 삭제 MST_HPORD
        /// </summary>
        /// <param name="sOrderNum"></param>
        /// <returns></returns>
        public int DeleteSSHappyOrderData(string sOrderNum, string sOrderDt)
        {
            int iRet = UserCom.NG;
            string sQuery = "";

            try
            {
                sQuery = " DELETE FROM POSMST..MST_HPORD \n"
                           + "  WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' \n"
                           + "    AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' \n"
                           + "    AND ORD_DT = '" + sOrderDt + "' \n"
                           + "    AND ORD_NO = '" + sOrderNum + "' \n";

                iRet = sqlDb.DBExecuteNonQuery(sQuery, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                     ex.Message);
            }

            return iRet;
        }

        /// <summary>
        /// 해피오더 데이터 전체 삭제
        /// </summary>
        /// <returns></returns>
        public int DeleteHappyOrderAllData()
        {
            int iRet = UserCom.NG;
            string sQuery = "";

            try
            {
                sQuery = "TRUNCATE TABLE POSMST..MST_HPORD \n";

                iRet = sqlDb.DBExecuteNonQuery(sQuery, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                     ex.Message);
            }

            return iRet;
        }

        /// <summary>
        /// 해피오더 데이터 저장
        /// </summary>
        /// <param name="header"></param>
        /// <returns></returns>
        public int SaveHappyOrderData(Column.TR_HPORD.HPORD_HEADER header)
        {
            int iRet = UserCom.NG;
            string sQuery = "";
            string sSQL = "";

            try
            {
                sQuery = "UPDATE POSMST..MST_HPORD ";
                sQuery += "   SET ORD_STS = '{0}' ";
                sQuery += "     , UPD_DT = '" + DateTime.Now.ToString("yyyyMMddHHmmss") + "' ";
                sQuery += " WHERE CMP_CD = '{1}' ";
                sQuery += "   AND STOR_CD = '{2}' ";
                sQuery += "   AND ORD_NO = '{3}' ";
                sQuery += "IF @@ROWCOUNT = 0 ";
                sQuery += "INSERT INTO POSMST..MST_HPORD ";
                sQuery += "       ( CMP_CD, STOR_CD, ORD_DT, ORD_NO, ORD_STS ";
                sQuery += "       , PRT_YN, NUTRITION_MSG, FILLER1, FILLER2, FILLER3 ";
                sQuery += "       , FILLER4, FILLER5, UPD_DT, REG_DT ) ";
                sQuery += "VALUES ";
                sQuery += "       ( '{4}', '{5}', '{6}', '{7}', '{8}' ";
                sQuery += "       , '{9}', '{10}', '{11}', '{12}', '{13}' ";
                sQuery += "       , '{14}', '{15}' ,'{16}', '{17}' ) ";

                //17.08.22 dkshin SS 해피오더 - dailyCode값 대기번호가 TBL_NO으로 저장되므로 ORDER_NO에 대기번호 저장
                string orderNum = header.OrderNum;
                if (PosMstManager.GetPosOption(POS_OPTION.OPT048) != "0" || PosMstManager.GetPosOption(POS_OPTION.OPT049) == "1")
                {
                    orderNum = header.DailyCode;
                }
                sSQL = string.Format(sQuery,
                                     header.OrderStatus,
                                     m_cPosStatus.Base.CmpCd,
                                     m_cPosStatus.Base.StoreNo,
                    //17.08.22 dkshin SS 해피오더
                    //header.OrderNum,
                                     orderNum,

                                     m_cPosStatus.Base.CmpCd,
                                     m_cPosStatus.Base.StoreNo,
                                     header.OrderDate.Substring(0, 10).Replace("-", ""),
                    //17.08.22 dkshin SS 해피오더
                    //header.OrderNum,
                                     orderNum,

                                     header.OrderStatus,
                                     "0",
                                     "",
                                     "", "", "", "", "",
                                     DateTime.Now.ToString("yyyyMMddHHmmss"),
                                     DateTime.Now.ToString("yyyyMMddHHmmss"));

                iRet = sqlDb.DBExecuteNonQuery(sSQL, System.Data.CommandType.Text, (System.Data.SqlClient.SqlParameter[])null);
            }
            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 (함수명))
                                     ex.Message);
            }

            return iRet;
        }
        
        //#20180129 SS해피오더 자동처리 DB작업 수정 end

        #endregion
     
        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 start
        #region 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발
        /// <summary>
        /// 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발
        /// </summary>
        private void HappyOrderInventoryAlram()
        {
            Hashtable htRecvData = new Hashtable();
            Hashtable htSendData = new Hashtable();

            //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 start
            //기존
            //string sRet = UserCom.RST_ERR;
            //변경
            int iRet = 0;
            //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 end

            string sHPO_Inventory_YN = "";
            try
            {
                htSendData.Add(Column.IQ_HPO_INVENTORY_ALRAM.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.HPO_INVENTORY_ALARM);
                htSendData.Add(Column.IQ_HPO_INVENTORY_ALRAM.DATA.RES_YN, "");
                htSendData.Add(Column.IQ_HPO_INVENTORY_ALRAM.DATA.RES_CD, "");

                //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 start
                //기존
                //sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.SysInfoPort, 5000, htSendData, ref htRecvData, false);
                //변경
                iRet = IRTSendReceive(m_cPosStatus.Base.CommSvrIp, Convert.ToInt32(m_cPosStatus.Base.SysInfoPort), (int)5000, htSendData, ref htRecvData);
                //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 end

                //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 start
                //기존
                //if (sRet == UserCom.RST_OK)
                //변경
                if (iRet == BaseCom.OK)
                {
                //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 end

                    //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 start
                    if (htRecvData != null)
                    {
                    //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 end

                        if (htRecvData[Column.IQ_HPO_INVENTORY_ALRAM.DATA.RES_CD].ToString() == "00")
                        {
                            sHPO_Inventory_YN = htRecvData[Column.IQ_HPO_INVENTORY_ALRAM.DATA.RES_YN].ToString();
                        }

                    //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 start
                    }
                    //#17317 PB 안산성포 외- 포스사용중 [고객센터로 연락주세요] 팝업뜨는 증상 end
                }

                m_cPosStatus.Sale.HappyOrderInventoryYN = sHPO_Inventory_YN.Trim();
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                            System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." +
                                            System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
                                            ex.Message);
            }
        }
        #endregion
        //#15884 해피오더 실시간 추가재고 등록메뉴 및 알람기능 개발 end
    }
}
