using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Collections; using Cosmos.Common; using Cosmos.CommonManager; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; namespace Cosmos.Service { class SignPadUpdate : IDeviceUpdate { private FTP m_ClsFtp; private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private DeviceStatus m_cDevStatus = new DeviceStatus(); // 디바이스 관리 private ISignPadUs m_cDeviceSignPad = null; // 서명패드 private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스 private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private Hashtable m_hFTPRecvData; // 서명패드 업데이트 FTP 서버 정보 public static string[] SignpadModel = { "OLTMS", "OLCSP", "100", "350", "150", "170" }; public static string[] Ini_SignpadModel = { "OLTMS", "OLCSP", "SSP-100", "SN-350P", "SN-150P", "SR-170P" }; public SignPadUpdate() { m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cDevStatus = (DeviceStatus)StateObject.DEVICE; m_cDeviceSignPad = (ISignPadUs)sManager.InitServiceInstance(ServiceLists.AGENT_OLEDEVICE.DLL, ServiceLists.AGENT_OLEDEVICE.DEVICE_SIGNPAD); m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON); } /// /// 서명패드 업데이트 파일 다운로드 FTP 정보 조회 /// /// public string FtpInfoIRT(string sTargetFileNm, string sTargetLocalDate, ref Hashtable m_hFTPRecvData) { Hashtable htSendData = new Hashtable(); Hashtable htRecvData = new Hashtable(); string sRet = UserCom.RST_ERR; try { // 서버 조회 htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.INQ_TYPE, ItemConst.IRT_INQ_TYPE.FTPINFO_REQ); // 서버 ftp 정보 요청 / 응답 htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.FILE_NAME, sTargetFileNm); // 대상 파일 명 htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.LOCAL_DATE, sTargetLocalDate); // 로컬 파일 일자 htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.FTP_IP, ""); // FTP_IP htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.FTP_PORT, ""); // FTP_PORT htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.FTP_ID, ""); // FTP_ID htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.FTP_PWD, ""); // FTP_PWD htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.SIGN_PAD_PATH, ""); // SIGN_PAD_PATH htSendData.Add(Column.IQ_FTPINFO_REQ.DATA.RES_CD, ""); // 응답코드 sRet = m_cDataCommon.ExecutePosIrt(ItemConst.COMM_MSG_TYPE.POSIRT, m_cPosStatus.Base.CommSvrIp, (int)m_cPosStatus.Base.BizInqPort, 10000, htSendData, ref htRecvData, false); if (sRet != UserCom.RST_OK || htRecvData[Column.IQ_FTPINFO_REQ.DATA.RES_CD].ToString() != "00") { sRet = UserCom.RST_ERR; return sRet; } else { sRet = UserCom.RST_OK; m_hFTPRecvData = htRecvData; // 업데이트 할 내역 정보 응답 //sFilesGrp = htRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_IP].ToString() + "|" + htRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_PORT].ToString() + "|" // + htRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_ID].ToString() + "|" + htRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_PWD].ToString(); return sRet; } } 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; } /// /// 서명패드 업데이트 건수 /// POS의 법인별_서명패드 모델에 대한 건수만 체크한다. /// /// public int SignPadUpdateCnt(ref string sImgFileNm, ref string sAviFileNm, ref string sFirmFileNm) { int nRet = 0; sImgFileNm = ""; //string sBrandDiv = ""; // 브랜드구분 //string sICDiv = ""; // IC구분 //string sModelDiv = ""; // 모델구분 string SIGNPAD_FIRMWARE_Path = BaseCom.NxDonglePath + @"FIRMWARE\"; string SIGNPAD_AVI_Path = BaseCom.NxDonglePath + @"AVI\"; string SIGNPAD_IMG_Path = BaseCom.NxDonglePath + @"IMG\"; try { if (System.IO.Directory.Exists(SIGNPAD_FIRMWARE_Path)) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SIGNPAD_FIRMWARE_Path); if (di.GetFiles().Count() > 0) { nRet = nRet + 1; FileInfo[] aFirm = di.GetFiles(); sFirmFileNm = aFirm[0].Name; } } if (System.IO.Directory.Exists(SIGNPAD_AVI_Path)) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SIGNPAD_AVI_Path); //nRet = nRet + di.GetFiles().Count(); if (di.GetFiles().Count() > 0) { nRet = nRet + 1; FileInfo[] aAvi = di.GetFiles(); sAviFileNm = aAvi[0].Name; } } if (System.IO.Directory.Exists(SIGNPAD_IMG_Path)) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SIGNPAD_IMG_Path); if (di.GetFiles().Count() > 0) { nRet = nRet + 1; foreach (var item in di.GetFiles()) { if (sImgFileNm == "") { sImgFileNm = item.Name; } else { sImgFileNm = sImgFileNm + "|" + item.Name; } } } } return nRet; } 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 nRet; } /// /// 서명패드 모델 체크 및 INI 파일 변경 /// /// public string SignPadModelCheck() { string retVal = string.Empty; string sModelDiv = ""; // 모델구분 DataTable dtData = new DataTable(); try { // 서명패드 스펙체크 if (m_cDeviceSignPad.GetSignPadInfo(ref retVal) != true) { return UserCom.RST_ERR; } else { sModelDiv = CmUtil.MidH(retVal, 0, 9).Trim(); } if (sModelDiv != "") { dtData = m_cDataCommon.SeletCommonCode(PosConst.COMMON_CODE_GROUP.Z0027, ""); if (dtData != null && dtData.Rows.Count > 0) { foreach (DataRow dr in dtData.Rows) { if (sModelDiv == CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CHAR_VAL_TITLE_VAL_01)) { CmMessage m_PosDevice = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + PosConst.INI_FILE_NAME.PosDevice); m_PosDevice.GetMessage("SIGNPAD").MakeMessageOverWrite("Model", Convert.ToString(CmUtil.GetDataRowStr(dr, PosMst.MST_COMMON.DATA.CMM_CD))); m_PosDevice.MakeFileFromMessage(BaseCom.NxIniPath + PosConst.INI_FILE_NAME.PosDevice); break; } } } return sModelDiv; } } 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 ""; } /// /// 서명패드 업데이트 상세 파일 명 /// /// public string SignPadUpdateFilesNm() { string sRet = ""; string sBrandDiv = ""; // 브랜드구분 string sICDiv = ""; // IC구분 string sModelDiv = ""; // 모델구분 string sSignPadUpdateFiles = ""; try { //sBrandDiv = m_cPosStatus.Base.BrandDiv; //sICDiv = m_cDevStatus.ICReader.UseYn == true ? "IC" : "MSR"; //sModelDiv = SignpadModel[Convert.ToInt16(m_cPosStatus.Base.OlePosSignPadModel) - 1]; //string sFirmWare = "TGZ_" + sICDiv + "_" + sModelDiv + ".tgz"; // 펌웨어 //string sMovie = "AVI_" + sModelDiv + ".avi"; // 동영상 //string sImage01 = "IMG01_" + sModelDiv + ".bmp"; // 이미지01 //string sImage02 = "IMG02_" + sModelDiv + ".bmp"; // 이미지02 //string sImage03 = "IMG03_" + sModelDiv + ".bmp"; // 이미지03 //string sImage04 = "IMG04_" + sModelDiv + ".bmp"; // 이미지04 //sSignPadUpdateFiles = sImage01 + "|" + sImage02 + "|" + sImage03 + "|" + sImage04 + "|" + sMovie + "|" + sFirmWare + "|"; return sSignPadUpdateFiles; } 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; } } /// /// 서명패드 업데이트 압축파일 /// /// /// public string SignPadModelFileGrp(ref string sZipFiles) { string sRet = UserCom.RST_ERR; string sBrandDiv = ""; // 브랜드구분 string sModelDiv = ""; // 모델구분 try { sBrandDiv = m_cPosStatus.Base.BrandDiv; sModelDiv = SignpadModel[Convert.ToInt16(m_cPosStatus.Base.OlePosSignPadModel) - 1].Replace("-",""); if (sBrandDiv != "" && sModelDiv != "") { string sFirmWare = sBrandDiv + "_TGZ_" + sModelDiv + ".zip"; // 펌웨어 string sMovie = sBrandDiv + "_AVI_" + sModelDiv + ".zip"; // 동영상 string sImage = sBrandDiv + "_IMG_" + sModelDiv + ".zip"; // 이미지 sZipFiles = sFirmWare + "|" + sMovie + "|" + sImage; sRet = UserCom.RST_OK; } return sRet; } 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; } } /// /// 서명패드 업데이트 서버 확인 /// /// /// public string SignPadUpdateServerCheck(ref DataTable dtFtpDataTable) { string sRet = UserCom.RST_ERR; string sFirmDate = ""; // 펌웨어 INI 일자 string sAviDate = ""; // 동영상 INI 일자 string sImgDate = ""; // 이미지 INI 일자 string sFirmNm = ""; // 펌웨어 압축파일 명 string sAviNm = ""; // 동영상 압축파일 명 string sImgNm = ""; // 이미지 압축파일 명 string[] sIniDate = null; // INI 일자 string[] sFileNm = null; // 파일 명 string sBrandDiv = ""; // 브랜드구분 string sModelDiv = ""; // 모델구분 DataTable dtData1 = new DataTable(); // 파일명 및 업데이트 일자 DataTable dtData2 = new DataTable(); // FTP 정보 try { sIniDate = new string[3]; sFileNm = new string[3]; // 업데이트 일자 가져오기 CmMessage m_PosSaleInfo = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + PosConst.INI_FILE_NAME.PosSaleInfo); //sFirmDate = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadFirmwareDate")); //sAviDate = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadAviDate")); //sImgDate = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadImgDate")); sIniDate[0] = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadFirmwareDate")); sIniDate[1] = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadAviDate")); sIniDate[2] = CmUtil.StringNullEmpty(GetConfigInfo(m_PosSaleInfo, "POSOPEN", "SignPadImgDate")); // 파일명 가져오기 sBrandDiv = m_cPosStatus.Base.BrandDiv; sModelDiv = SignpadModel[Convert.ToInt16(m_cPosStatus.Base.OlePosSignPadModel) - 1].Replace("-", ""); if (sBrandDiv != "" && sModelDiv != "") { //sFirmNm = sBrandDiv + "_TGZ_" + sModelDiv + ".zip"; // 펌웨어 //sAviNm = sBrandDiv + "_AVI_" + sModelDiv + ".zip"; // 동영상 //sImgNm = sBrandDiv + "_IMG_" + sModelDiv + ".zip"; // 이미지 sFileNm[0] = sBrandDiv + "_TGZ_" + sModelDiv + ".zip"; // 펌웨어 sFileNm[1] = sBrandDiv + "_AVI_" + sModelDiv + ".zip"; // 동영상 sFileNm[2] = sBrandDiv + "_IMG_" + sModelDiv + ".zip"; // 이미지 } // 서명패드 업데이트 일자 데이터 테이블 정보 설정 dtData1.Columns.Add(new DataColumn("UPDATE", typeof(string))); dtData1.Columns.Add(new DataColumn("ZIPNM", typeof(string))); // FTP 정보 dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.FILE_NAME, typeof(string))); dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.FTP_IP, typeof(string))); dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.FTP_PORT, typeof(string))); dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.FTP_ID, typeof(string))); dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.FTP_PWD, typeof(string))); dtData2.Columns.Add(new DataColumn(Column.IQ_FTPINFO_REQ.DATA.SIGN_PAD_PATH, typeof(string))); for (int i = 0; i < sIniDate.Length; i++) { DataRow dr = dtData1.NewRow(); dr["UPDATE"] = sIniDate[i]; dr["ZIPNM"] = sFileNm[i]; dtData1.Rows.Add(dr); } // 전문 통신 확인 후 해당 내용을 리턴한다. foreach (DataRow dataRow in dtData1.Rows) { string sUpdate = CmUtil.GetDataRowStr(dataRow, "UPDATE"); string sZipNm = CmUtil.GetDataRowStr(dataRow, "ZIPNM"); // 전문 통신 체크 if (FtpInfoIRT(sZipNm, sUpdate, ref m_hFTPRecvData) != UserCom.RST_ERR) { if (m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.RES_CD].ToString() == "00") { DataRow dr2 = dtData2.NewRow(); dr2[Column.IQ_FTPINFO_REQ.DATA.FILE_NAME] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.FILE_NAME].ToString(); dr2[Column.IQ_FTPINFO_REQ.DATA.FTP_IP] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_IP].ToString(); dr2[Column.IQ_FTPINFO_REQ.DATA.FTP_PORT] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_PORT].ToString(); dr2[Column.IQ_FTPINFO_REQ.DATA.FTP_ID] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_ID].ToString(); dr2[Column.IQ_FTPINFO_REQ.DATA.FTP_PWD] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.FTP_PWD].ToString(); dr2[Column.IQ_FTPINFO_REQ.DATA.SIGN_PAD_PATH] = m_hFTPRecvData[Column.IQ_FTPINFO_REQ.DATA.SIGN_PAD_PATH].ToString(); dtData2.Rows.Add(dr2); } } } dtFtpDataTable = dtData2; return sRet; } 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 string GetConfigInfo(CmMessage cCfgInfo, string sGroup, string sValueName) { return GetConfigInfo(cCfgInfo, sGroup, sValueName, ""); } private string GetConfigInfo(CmMessage cCfgInfo, string sGroup, string sValueName, string sDefault) { try { string sValue = cCfgInfo.GetMessage(sGroup).GetMessageValue(sValueName); if (sValue == null) return sDefault; else return sValue; } catch { } return sDefault; } } }