using System; using System.Collections.Generic; using System.Linq; using System.Text; using Cosmos.Common; using Cosmos.CommonManager; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using System.Data; namespace Cosmos.Service { class ResendTranToOutside : IDataServiceUs { #region 변수 선언 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private PosStatus m_cPosStatus = new PosStatus(); // POS 기본정보 참조 private IDatabaseSQL m_cSqlDbService = null; private ICalDataIF m_cCalDataIf = null; #endregion 변수 선언 #region 생성자 public ResendTranToOutside() { m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cSqlDbService = (IDatabaseSQL)sManager.InitServiceInstance(ServiceLists.AGENT_DATABASE.DLL, ServiceLists.AGENT_DATABASE.DATABASE_MSSQL); m_cCalDataIf = (ICalDataIF)sManager.InitServiceInstance(ServiceLists.BSV_OPEN_CLOSE.DLL, ServiceLists.BSV_OPEN_CLOSE.CAL_DATA_IF); } #endregion 생성자 public string Execute(string[] aParam) { string sRet = UserCom.RST_ERR; try { string sType = aParam[0].Equals(PosKey.MENU_KEY.EX_RESEND_SALE) == true ? "EX" : "KAC"; string sStDt = aParam[1]; string sEndDt = aParam[2]; //#20180322 휴게소pos매출연동 start,phj if (sType.Equals("EX") == true) { // 관리메뉴에서 기존 도로공사 재전송 기능을 같이 쓰므로 분기하기 위해서 if (m_cPosStatus.Mst.ETC_IF_DIV == ItemConst.TranInterfaceOutside.IF_KOR_03) { sType = "EX2018"; } } //#20180322 휴게소pos매출연동 end,phj // SendFlag Reset //#20180322 휴게소pos매출연동 start,phj //기존 //int iRet = ResetSendFlag(sStDt, sEndDt); //변경 int iRet = ResetSendFlag(sStDt, sEndDt, sType); //#20180322 휴게소pos매출연동 end,phj if (iRet != UserCom.OK) { return UserCom.RST_ERR; } // 지정 일자 마감 재전송 DateTime dtTarget; string sTarget = sStDt; while (true) { // sTarget 일자로 도로공사 정산데이터 생성 sRet = m_cCalDataIf.Execute(new string[] { sType, sTarget }); if (sRet != UserCom.RST_OK) { break; } // 정산데이터 생성 일자 + 1 일자가 재전송 종료 일자 보다 크면 종료 //#20180322 휴게소pos매출연동 start,phj //기존 //DateTime.TryParse(sTarget, out dtTarget); //변경 dtTarget = DateTime.ParseExact(sTarget, "yyyyMMdd", null); //#20180322 휴게소pos매출연동 end,phj sTarget = dtTarget.AddDays(1).ToString(); if (sTarget.CompareTo(sEndDt) > 0) break; } sRet = UserCom.RST_OK; } catch(Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) ex.Message); } return sRet; } /// /// 데이터 조회 /// /// /// public object GetData(string[] aParam) { string sQuery = ""; try { //#20180322 휴게소pos매출연동 start,phj //기존 /* sQuery = " SELECT COUNT(1) AS TOTAL_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '1' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS OK_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '9' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS FAIL_CNT \n" + " FROM POSLOG..TR_SALE_HEADER \n" + " WHERE CMP_CD = '" + aParam[0] + "' \n" + " AND SALE_DT BETWEEN '" + aParam[1] + "' AND '" + aParam[2] + "' \n" + " AND STOR_CD = '" + aParam[3] + "' \n"; */ //변경 if (m_cPosStatus.Mst.ETC_IF_DIV == ItemConst.TranInterfaceOutside.IF_KOR_01) { sQuery = " SELECT COUNT(1) AS TOTAL_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '1' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS OK_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '9' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS FAIL_CNT \n" + " FROM POSLOG..TR_SALE_HEADER \n" + " WHERE CMP_CD = '" + aParam[0] + "' \n" + " AND SALE_DT BETWEEN '" + aParam[1] + "' AND '" + aParam[2] + "' \n" + " AND STOR_CD = '" + aParam[3] + "' \n"; } else if (m_cPosStatus.Mst.ETC_IF_DIV == ItemConst.TranInterfaceOutside.IF_KOR_03) { sQuery = " SELECT COUNT(1) AS TOTAL_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '8' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS OK_CNT \n" + " , SUM(CASE WHEN OUT_SEND_YN = '9' \n" + " THEN 1 \n" + " ELSE 0 \n" + " END) AS FAIL_CNT \n" + " FROM POSLOG..TR_SALE_HEADER \n" + " WHERE CMP_CD = '" + aParam[0] + "' \n" + " AND SALE_DT BETWEEN '" + aParam[1] + "' AND '" + aParam[2] + "' \n" + " AND STOR_CD = '" + aParam[3] + "' \n"; } //#20180322 휴게소pos매출연동 end,phj m_cSqlDbService.SetDBConnectionString(m_cPosStatus.Base.LocalDbSource, m_cPosStatus.Base.LocalDbCatalog, m_cPosStatus.Base.LocalDbUserID, m_cPosStatus.Base.LocalDbPassword); DataTable dtDataInfo = null; m_cSqlDbService.DBSelect(sQuery, out dtDataInfo); m_cSqlDbService.Close(); return dtDataInfo; } 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 null; } public string SetData(object oParam) { return UserCom.RST_ERR; } /// /// 도로공사 매출재전송 위한 전송 Flag Reset /// /// /// /// //#20180322 휴게소pos매출연동 start,phj //기존 //private int ResetSendFlag(string sStartDt, string sEndDt) //변경 private int ResetSendFlag(string sStartDt, string sEndDt, string sType) //#20180322 휴게소pos매출연동 end,phj { int iRet = UserCom.NG; string sQuery = ""; try { //#20180322 휴게소pos매출연동 start,phj //기존 /* sQuery = " UPDATE POSLOG..TR_SALE_HEADER \n" + " SET OUT_SEND_YN = '0' \n" + " WHERE SALE_DT BETWEEN '" + sStartDt + "' AND '" + sEndDt + "' \n" + " AND TRAIN_MODE_YN = '0' \n" + " AND TRADE_KINDPER = '00' \n"; */ //변경 sQuery = " UPDATE POSLOG..TR_SALE_HEADER \n" //20180404 도로공사 재전송 기능을 제외한 기본 스레드 동작에서는 영업일자 기준으로 동작하지 않도록 수정 start, phj //기존 //+ " SET OUT_SEND_YN = '0' \n" //변경 + " SET OUT_SEND_YN = 'R' \n" //20180404 도로공사 재전송 기능을 제외한 기본 스레드 동작에서는 영업일자 기준으로 동작하지 않도록 수정 end, phj + " WHERE SALE_DT BETWEEN '" + sStartDt + "' AND '" + sEndDt + "' \n" + " AND TRAIN_MODE_YN = '0' \n"; if (sType == "EX2018") { sQuery = sQuery + " AND TRADE_KINDPER IN ('00','20','21','42') \n"; } else { sQuery = sQuery + " AND TRADE_KINDPER = '00' \n"; } //#20180322 휴게소pos매출연동 end,phj m_cSqlDbService.SetDBConnectionString(m_cPosStatus.Base.LocalDbSource, m_cPosStatus.Base.LocalDbCatalog, m_cPosStatus.Base.LocalDbUserID, m_cPosStatus.Base.LocalDbPassword); iRet = m_cSqlDbService.DBExecuteNonQuery(sQuery); m_cSqlDbService.Close(); } 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; } } }