using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Cosmos.Common; using Cosmos.UserFrame; using Cosmos.CommonManager; using Cosmos.ServiceProvider; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : 직원방문등록 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Service { class EtcInEmp : IDataServiceUs { private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private PosStatus m_cPosStatus = new PosStatus(); //기본정보 참조 private DeviceStatus m_cDevStatus = new DeviceStatus(); // 디바이스 관리 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private ISvr2Tran m_cSvr2Tran = null; // 서버시간 동기화 private IDatabaseSQL m_cSqlDbService = null; // 데이터베이스 관리 public EtcInEmp() { m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 //m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보 m_cDevStatus = (DeviceStatus)StateObject.DEVICE; m_cSqlDbService = (IDatabaseSQL)sManager.InitServiceInstance(ServiceLists.AGENT_DATABASE.DLL, ServiceLists.AGENT_DATABASE.DATABASE_MSSQL); m_cSvr2Tran = (ISvr2Tran)sManager.InitServiceInstance(ServiceLists.BSV_SALE.DLL, ServiceLists.BSV_SALE.SVR2TRAN); } /// /// 직원방문등록 조회 /// /// public object GetData(string[] aParam) { string sQuery = ""; DataTable dt = null; try { if (aParam[0] == "List") { sQuery += " SELECT "; sQuery += " MNG_CARD_NO"; sQuery += " , SUBSTRING(VISIT_START_HOUR,9,2) +':'+SUBSTRING(VISIT_START_HOUR,11,2) +':'+SUBSTRING(VISIT_START_HOUR,13,2) "; sQuery += " , SUBSTRING(VISIT_FNSH_HOUR,9,2) +':'+SUBSTRING(VISIT_FNSH_HOUR,11,2) +':'+SUBSTRING(VISIT_FNSH_HOUR,13,2) "; //#20170828 직원방문등록 시 고객센터전화요망 팝업 쿼리문에 VISIT_DT 필드가 없음 start //#20170829 직원방문등록에 방문시간 표시 날짜로 되어 쿼리 순서 변경 sQuery += " , VISIT_DT"; //#20170828 직원방문등록 시 고객센터전화요망 팝업 쿼리문에 VISIT_DT 필드가 없음 end sQuery += " FROM POSLOG..TR_STORE_VISIT "; sQuery += " WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'"; sQuery += " AND VISIT_DT = '" + aParam[1] + "'"; sQuery += " AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'"; sQuery += " AND POS_NO = '" + m_cPosStatus.Base.PosNo + "'"; if (aParam[2] != "") { sQuery += " AND MNG_CARD_NO = '" + aParam[2] + "'"; } sQuery += " ORDER BY UPD_DATE DESC "; } else if (aParam[0] == "Time") { sQuery = string.Format(" SELECT DATEDIFF(SECOND,CONVERT(DATETIME,'{0}'),GETDATE()) AS IGAP", aParam[1]); } if (sQuery != "") { int iRet = m_cSqlDbService.DBSelect(sQuery, out dt); if (iRet == 1) return dt; } } 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) { throw new NotImplementedException(); } /// /// 직원 방문 및 제조기사 등록 저장 /// /// /// public string Execute(string[] aParam) { string sQuery = ""; string sRet = UserCom.RST_ERR; string sVisitDate = ""; string sCardNo = ""; string sInputData = ""; try { aParam[0] = aParam[0].Replace("\n", ""); if (InputDataCheck(aParam[0], ref sCardNo, ref aParam[3]) == true) { if (sCardNo != "") aParam[0] = sCardNo; if (aParam[0].Length > 16) aParam[0] = CmUtil.MidH(aParam[0], 0, 16); } else { return sRet; } //#20171103 제조기사 출/퇴근조건 수정 start,phj //기존 /* //DateTime.Now.ToString("yyyyMMdd") //00 ~ 05시 사이면 이전 일자 체크 int iTime = CmUtil.IntParse(DateTime.Now.ToString("HHmm")); if (iTime >= 0 && iTime <= 500) { //이전일자 DataTable dt = (DataTable)GetData(new string[] { "List", DateTime.Now.AddDays(-1).ToString("yyyyMMdd"), aParam[0] }); if (dt == null || dt.Rows.Count == 0) { sVisitDate = DateTime.Now.ToString("yyyyMMdd"); } else { sVisitDate = dt.Rows[0]["VISIT_DT"].ToString(); } } else { sVisitDate = DateTime.Now.ToString("yyyyMMdd"); } */ //변경 //출근찍고, 퇴근안찍고, 다음 날 출근 시 퇴근처리 됨. //날짜가 다르면 출근 처리하도록 수정. sVisitDate = DateTime.Now.ToString("yyyyMMdd"); //#20171103 제조기사 출/퇴근조건 수정 end,phj //0:관리 카드 번호, 1:방문시간, 2:종료시간, 3:MSR구분, 4: 원바코드 번호 string sRegDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); sQuery = " UPDATE POSLOG.dbo.TR_STORE_VISIT SET "; sQuery += " VISIT_FNSH_HOUR = '{6}' , SEND_YN = '0', UPD_DATE = '{13}' "; sQuery += " WHERE CMP_CD = '{0}'"; sQuery += " AND STOR_CD = '{1}'"; sQuery += " AND VISIT_DT = '{2}'"; sQuery += " AND POS_NO = '{3}'"; sQuery += " AND MNG_CARD_NO = '{4}'"; sQuery += " AND VISIT_FNSH_HOUR = '' "; sQuery += " IF @@ROWCOUNT = 0 "; sQuery += " BEGIN "; sQuery += " INSERT INTO POSLOG.dbo.TR_STORE_VISIT( "; sQuery += " CMP_CD ,STOR_CD ,VISIT_DT ,POS_NO ,MNG_CARD_NO ,VISIT_START_HOUR ,VISIT_FNSH_HOUR ,VISIT_USER_ID ,JOB_TYPE ,PCSMM_SEND_YN "; sQuery += " ,MSR_DIV ,ORG_BAR_CD_NO ,SEND_YN ,REG_DATE ,UPD_DATE "; sQuery += " ) VALUES ( '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '', '{7}', '{8}' , '{9}', "; sQuery += " '{10}','{11}', '{12}', '{13}', '{14}' )"; sQuery += " END "; sQuery = string.Format(sQuery , m_cPosStatus.Base.CmpCd // CMP_CD , m_cPosStatus.Base.StoreNo // STOR_CD // Mod, 2017.08.30, VISIT_DT 조회오류 수정 //, DateTime.Now.ToString("yyyyMMdd") // SALE_DT , sVisitDate // SALE_DT , m_cPosStatus.Base.PosNo // POS_NO , aParam[0] // MNG_CARD_NO , aParam[1] // VISIT_START_HOUR , aParam[2] // VISIT_FNSH_HOUR , "" // VISIT_USER_ID , "" // JOB_TYPE , "0" // PCSMM_SEND_YN , aParam[3] // MSR_DIV , aParam[4] // ORG_BAR_CD_NO , "0" // SEND_YN , sRegDateTime // REG_DATE , sRegDateTime // UPD_DATE ); if (m_cSqlDbService.DBExecuteNonQuery(new string[] { sQuery }) == UserCom.OK) return 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; } /// /// 입력 번호 체크 /// /// /// /// /// private bool InputDataCheck(string sInData, ref string sCard, ref string sInType) { bool bRet = false; int iDefualtLen = 0; int iDefualtGap = 0; string sAddNum = ""; try { SetServerSysDateTime(); if (m_cDevStatus.Msr.STX != "" && sInData.StartsWith(m_cDevStatus.Msr.STX)) sInData = sInData.Substring(1); int iLastEtx = sInData.LastIndexOf(m_cDevStatus.Msr.ETX); if (m_cDevStatus.Msr.ETX != "" && iLastEtx > 0) sInData = CmUtil.MidH(sInData, 0, iLastEtx); if (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC && (m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR || m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.CN || m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.US || m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.VN) //PC(한국, 중국, 미국, 베트남) ) { if (m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR) //한국 { iDefualtLen = 22; iDefualtGap = 30; } else { iDefualtLen = 19; iDefualtGap = 60; } if (sInData.Length == iDefualtLen) { sAddNum = CmUtil.MidH(sInData, 19, 3).Replace("A", " ").Trim(); //#20170803 제조기사 바코드에 'ㅁ' 들어오는 경우 공백 처리 start sAddNum = sAddNum.Replace("ㅁ", " ").Trim(); //#20170803 제조기사 바코드에 'ㅁ' 들어오는 경우 공백 처리 end char[] uchars = sInData.ToCharArray(); sCard = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}" , uchars[0], uchars[3], uchars[6], uchars[9], uchars[12], uchars[15], uchars[18], m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.KR ? sAddNum : ""); string sTimeCheck = string.Format("20{0}{1}-{2}{3}-{4}{5} {6}{7}:{8}{9}:{10}{11}" , uchars[1], uchars[2], uchars[4], uchars[5], uchars[7], uchars[8], uchars[10], uchars[11] , uchars[13], uchars[14], uchars[16], uchars[17]); DataTable dt = null; DateTime tmpDt; bool bDateFlag = DateTime.TryParse(sTimeCheck, out tmpDt); if (bDateFlag == true) { dt = (DataTable)GetData(new string[] { "Time", sTimeCheck }); } int iGap = 0; if (dt == null || dt.Rows.Count == 0) { // 유효하지 않은 바코드 WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0328)); // Add, 2017.08.30 return bRet = false; } else { iGap = CmUtil.IntParse(dt.Rows[0]["IGAP"].ToString()); } if (iGap > iDefualtGap) { //유효기간이 만료 되었습니다. WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0329)); } else if (iGap < 0) { // 유효하지 않은 바코드 WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0328)); } else { //정상! sInType = ItemConst.EMP_VISIT_DIV.MOBILE; bRet = true; } } else { ////국내일땐 에러! //if (m_cPosStatus.Base.CmpCd == "PCKR") //{ // WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0328)); //} //else //{ // 입력 데이터 그대로 입력! sCard = sInData; sInType = ItemConst.EMP_VISIT_DIV.MSR; bRet = true; //} } } else if (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.BR) //BRK { if (sInData.Contains("=") == true) { bRet = sInData.StartsWith("8231"); if (bRet == true) { sCard = sInData; sInType = ItemConst.EMP_VISIT_DIV.MSR; } else { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0330)); } } else { if (sInData.Length != 17) { //에러 WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0328)); } else { bRet = CmUtil.CheckHappyMobileCard(sInData); if (bRet == false) { WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0328)); } else { sCard = sInData; sInType = ItemConst.EMP_VISIT_DIV.MOBILE; } } } } else if (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.SL || (m_cPosStatus.Mst.CorpDiv == ItemConst.CORP_DIV.PC && (m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.SG || m_cPosStatus.Mst.CntryDiv == ItemConst.CNTRY_DIV.FR)) ) //삼립, PC싱가포르, PC프랑스 { if (sInData.Length == 7 || sInData.Length == 16) { //정상! sInType = ItemConst.EMP_VISIT_DIV.MSR; bRet = true; } else { //정확한 직원카드를 입력하세요. WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0330)); } } else { //해당 없음! WinManager.ErrorMessage(MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0331)); } } 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; } /// /// 서버 시간 동기화 /// private void SetServerSysDateTime() { try { // 서버 시간 동기화 string sRet = m_cSvr2Tran.ServerSysDateTime(); } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } } }