spc-kiosk-pb/Service/BsvBasic/SignPadUpdate.cs
2019-06-16 14:12:09 +09:00

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;
}
}
}