private void RaiseDataSucessEvent(suSender sender, DataRow r) { if (this.SucessEvent != null) { SucessEvent(sender, r); } }
private void Hodoo_SIP30C(DataTable dt, string BizCode, bool IsNewData) { DataTable mdt = dt.Copy(); for (int i = 0; i < mdt.Rows.Count; i++) { #region 카드발급프린터 대기열 작업완료시까지 기다림 using (LocalPrintServer localPrinterServer = new LocalPrintServer()) { PrintQueue printQueue = localPrinterServer.GetPrintQueue(PrintName); if (printQueue.NumberOfJobs > 0) { MessageBox.Show("인쇄 대기인 문서가 있습니다."); return; } localPrinterServer.Dispose(); } #endregion rPrintData = null; rPrintData = mdt.Rows[i]; //일반(사진) info.xpos = Convert.ToInt32(rPrintData["X_POS"].ToString().Trim()); info.ypos = Convert.ToInt32(rPrintData["Y_POS"].ToString().Trim()); info.xsize = Convert.ToInt32(rPrintData["X_SIZE"].ToString().Trim()); info.ysize = Convert.ToInt32(rPrintData["Y_SIZE"].ToString().Trim()); //일반(승산)-카드프린터 클래스 생성 info.bizcode = BizCode; info.membername = rPrintData["MEMBER_NAME_KOR"].ToString().Trim(); info.memberno = rPrintData["MEMBER_NO"].ToString().Trim(); info.memberphoto = rPrintData["PHOTO"] == DBNull.Value ? null : (Byte[])rPrintData["PHOTO"]; info.cardissueno = rPrintData["CARD_ISSUE_NO"].ToString().Trim(); //예외(승산)-카드프린터 클래스 생성 if (info.bizcode == "23") { info.commodity_accountcode = rPrintData["COMMODITY_ACCOUNT_CODE"].ToString().Trim(); info.gccode = rPrintData["GC_CODE"].ToString().Trim(); info.memberno = string.Format("{0}-{1}{2}", info.memberno.Trim().Substring(2, 6) , info.memberno.Trim().Substring(8, 2) , info.commodity_accountcode.Trim()); if (info.membername.Length == 3) { info.membername = String.Format("{0} {1} {2}", info.membername.Substring(0, 1), info.membername.Substring(1, 1), info.membername.Substring(2, 1)); } } //예외(대천)-카드프린터 클래스 생성 if (info.bizcode == "22") { info.registercode = rPrintData["REGISTER_CODE"].ToString().Trim(); info.printdate = DateTime.Today.ToString("yyyy.MM.dd"); if (info.memberno.Length == 10) { info.memberno = String.Format("{0}-{1}-{2}-{3}", info.memberno.Substring(0, 2), info.memberno.Substring(2, 2), info.memberno.Substring(4, 4), info.memberno.Substring(8, 2)); } //기명=N if (info.membername.Length == 3 && info.registercode == "N") { info.membername = String.Format("{0} {1} {2}", info.membername.Substring(0, 1), info.membername.Substring(1, 1), info.membername.Substring(2, 1)); } //무기명=U else { string strmemberName = info.membername; if (info.membername.Length > 11) { strmemberName = info.membername.Substring(0, 11); } info.printdate = info.printdate + (info.membername.Equals("") ? "" : " " + strmemberName); } } //예외(엘도라도)-카드프린터 클래스 생성 if (info.bizcode == "51") { info.membername = rPrintData["MEMBER_NAME_ENG"].ToString().Trim(); } //일반(대천) - 마그네틱엔코딩 info.mstrack1 = ""; info.mstrack2 = String.Format("{0}={1}", rPrintData["CARD_ISSUE_NO"].ToString().Trim(), rPrintData["MEMBER_NO"].ToString().Trim()); info.mstrack3 = ""; //예외(승산) - 마그네틱엔코딩 /*설명 : 1.승산 임시회원카드 = track1=골프혜택, track2=회원번호(8), track3="" * 2.승산 임시회원카드 = track1=회원번호(8)골프혜택, track2="", track3="" * 승산 임시회원카드는 정식카드 사용전까지 사용하며, * 정식 마그네틱 저장형식은 추후 협의후 결정(기본 = track2사용, 카드번호(10자리)=회원번호(10자리)) */ if (info.bizcode == "23") { info.mstrack1 = String.Format("{0}{1}", rPrintData["MEMBER_NO"].ToString().Trim().Substring(2, 8), rPrintData["GC_CODE"].ToString().Trim()); //rPrintData["GC_CODE"].ToString().Trim(); info.mstrack2 = ""; //rPrintData["CARD_ISSUE_NO"].ToString().Trim();//"";//String.Format("{0}", rPrintData["MEMBER_NO"].ToString().Trim().Substring(2, 8)); info.mstrack3 = ""; } if (!WriteMagnetic(IsNewData, info.mstrack1, info.mstrack2, info.mstrack3)) { return; } if (IsNewData) { Drawprint(PrintName); } suSender sender = new suSender { BizCode = BizCode, sucMode = IsNewData ? SucessMode.NewData : SucessMode.Magstripe }; bool IsSucess = true; using (LocalPrintServer localPrinterServer1 = new LocalPrintServer()) { PrintQueue printQueue = localPrinterServer1.GetPrintQueue(PrintName); int startTick = Environment.TickCount; bool isTimeOut = false; while (printQueue.NumberOfJobs > 0 & !(isTimeOut)) { printQueue.Refresh(); int currentTick = Environment.TickCount; if (currentTick - startTick > 60000) { isTimeOut = true; } System.Threading.Thread.Sleep(10); Application.DoEvents(); } if (isTimeOut) { PrintJobInfoCollection jobs = printQueue.GetPrintJobInfoCollection(); foreach (PrintSystemJobInfo job in jobs) { job.Cancel(); } int deleteStateTime = System.Environment.TickCount; string strmsg = "제한시간초과 - 인쇄가 완료되지 못했습니다. "; while ((System.Environment.TickCount - deleteStateTime) < 1000) { printQueue.Refresh(); } if (printQueue.NumberOfJobs > 0) { strmsg += "\n\r인쇄문서가 대기 중 입니다 . \n\r\n\r취소 후 다시 시도 하세요!"; } IsSucess = false; RaiseErrorEvent(new Exception(strmsg)); return; } if (IsSucess) { RaiseDataSucessEvent(sender, rPrintData); } } } }
private void DataCard_SP75S(DataTable dt, string BizCode, bool IsNewData) { try { //SP75S.ClearAllCardErrors(PrintName); DataCard_SP75_IsNewData = IsNewData; DbStatus = DataBaseStatus.LOOP; DataTable mdt = dt.Copy(); for (int i = 0; i < mdt.Rows.Count; i++) { rPrintData = null; rPrintData = mdt.Rows[i]; ReTry: using (PrintDocument pd = new PrintDocument()) { pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); pd.PrinterSettings.PrinterName = PrintName; pd.DefaultPageSettings.Landscape = true; pd.PrinterSettings.Duplex = Duplex.Simplex; pd.Print(); pd.Dispose(); } int Wait = 0; while (true) { if (DataCard_SP75_hDC != 0 || Wait > 6) { break; } Application.DoEvents(); System.Threading.Thread.Sleep(500); Wait++; } string Messages = ""; if (!SP75S.WaitForCardCompletion(DataCard_SP75_lpCardIDy, PrintName, ref Messages)) { this.RaiseErrorEvent(new Exception("카드를 출력하는 동안 다음 카드를 기다릴 수 없습니다.")); return; break; } if (Messages != "") { string str = "위와 같은 오류로 인해 카드가 발급되지 않았습니다." + System.Environment.NewLine + System.Environment.NewLine + "카드번호 = {0} \n\r\n\r회원번호 = {1} \n\r\n\r회원이름 = {2} \n\r\n\r해당 데이터를 다시 출력 하시겠숩니까?\n\r\r\n\r\n프린터를 중단 하시려면 [취소]를 \r\n\r\n다시 출력 하시려면 [예]를\n\n\r\r다음데이터를 출력하시려면 [아니오]를 \n\r\n\r눌러주세요 "; str = string.Format(str, rPrintData["CARD_ISSUE_NO"].ToString(), rPrintData["MEMBER_NO"].ToString(), rPrintData["MEMBER_NAME_KOR"].ToString()); DialogResult dr = MessageBox.Show(Messages += str, "확인", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (dr == DialogResult.Yes) { goto ReTry; } else if (dr == DialogResult.Cancel) { break; } } else // 성공했을 경우 { DbStatus = DataBaseStatus.LOOP; suSender sender = new suSender(); sender.BizCode = BizCode; sender.sucMode = IsNewData ? SucessMode.NewData : SucessMode.Magstripe; this.RaiseDataSucessEvent(sender, rPrintData); lblWait: int start = System.Environment.TickCount; bool IsLoops = true; //DB처리를 하는 동안 기다린다. 10초 셋트 .... while (DbStatus == DataBaseStatus.LOOP && IsLoops) { int end = System.Environment.TickCount; if (end - start > 10000) { IsLoops = false; } System.Threading.Thread.Sleep(10); Application.DoEvents(); } //timeout때문에 빠져나갔다. 다시 물어본다. if (DbStatus == DataBaseStatus.LOOP) { if (MessageBox.Show("DB 처리에 대한 응답이 없어 대기를 종료하고 다음 데이터를 출력합니다. \n\rDB 관련 응답이 올때까지 계속 기다리겠습니까?", "확인", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { goto lblWait; } } else if (DbStatus == DataBaseStatus.FALSE) { if (MessageBox.Show("DB 처리시 에러가 있었습니다. \n\r카드출력을 중지 하시겠습니까?", "확인", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { break; return; } } } } } catch (Exception ex) { this.RaiseErrorEvent(ex); } }