Example #1
0
 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);
                    }
                }
            }
        }
Example #3
0
        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);
            }
        }