464 lines
20 KiB
C#
464 lines
20 KiB
C#
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 업데이트 파일 다운로드 FTP 정보 조회
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 업데이트 건수
|
|
/// POS의 법인별_서명패드 모델에 대한 건수만 체크한다.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 모델 체크 및 INI 파일 변경
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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 "";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 업데이트 상세 파일 명
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 업데이트 압축파일
|
|
/// </summary>
|
|
/// <param name="sZipFiles"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 서명패드 업데이트 서버 확인
|
|
/// </summary>
|
|
/// <param name="dtFtpDataTable"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 설정 파일 읽기
|
|
/// </summary>
|
|
/// <param name="cCfgInfo"></param>
|
|
/// <param name="sGroup"></param>
|
|
/// <param name="sValueName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
}
|