Exemple #1
0
 public Autoshow(GWRequest req)
     : base(req)
 {
     this.account = req.Account;
     this.phone   = req.Phone;
     this.amount  = req.Amount;
 }
Exemple #2
0
 public RTClass16(GWRequest src)
     : base(src)
 {
 }
Exemple #3
0
 public Smtp(GWRequest req)
     : base(req)
 {
 }
Exemple #4
0
 public GWMtsRequest(GWRequest src) :
     base(src)
 {
 }
Exemple #5
0
 public RTRequest09(GWRequest src)
     : base(src)
 {
 }
Exemple #6
0
 public GWCyberRequest(GWRequest gw)
     : base(gw)
 {
 }
Exemple #7
0
 public GWEktRequest(GWRequest src)
     : base(src)
 {
     // Номер кассы / ПА
     terminal = src.Terminal;
 }
Exemple #8
0
 public CheckInfo(GWRequest gw /*, ManualResetEvent CancelEvent*/)
 {
     // this.gw = new GWRequest(gw);
     this.gw = gw;
     // this.CancelEvent = CancelEvent;
 }
Exemple #9
0
        /// <summary>
        /// Процесс обработки платежа
        /// </summary>
        public void CheckState(Object stateInfo)
        {
            if (Canceling)
            {
                return;                        // Запущен процесс остановки службы
            }
            GWRequest gw = ((CheckInfo)stateInfo).gw;

            try
            {
                // Увеличим счетчик процессов
                RegisterBackgroundProcess();

                // Если отладка не производится...
                if (gw.Provider == Settings.Cyber.Name)
                {
                    gw = new GWCyberRequest(gw);
                }
                // else if (gw.Provider == Settings.Mts.Name)
                //	gw = new GWMtsRequest(gw);
                else if (gw.Provider == Settings.Ekt.Name)
                {
                    gw = new GWEktRequest(gw);
                }
                else if (gw.Provider == "boriska")
                {
                    gw = new ServerGate(gw);
                }
                else if (gw.Provider == Settings.Rt.Name)
                {
                    gw = new RT.RTClass16(gw);
                }
                else if (gw.Provider == Settings.Rapida.Name)
                {
                    gw = new GWRapidaRequest(gw);
                }
                else if (gw.Provider == Settings.Xsolla.Name)
                {
                    gw = new GWXsolllaRequest(gw);
                }

                if (gw != null)
                {
                    gw.SetLock(1);
                    gw.ReportRequest("REDO - strt");

                    // Синхронизация с БД Город
                    gw.Sync(false);

                    // Выполнение допроведения
                    if (gw.State < 6)
                    {
                        gw.Processing(false);
                    }

                    gw.ReportRequest("REDO");
                }
            }
            catch (Exception ex)
            {
                Log(ex.ToString());
                gw.ReportRequest("REDO");
            }
            finally
            {
                if (gw != null)
                {
                    gw.SetLock(0);
                }
                // Уменьшим счетчик процессов
                UnregisterBackgroundProcess();
            }
        }
Exemple #10
0
        /// <summary>
        /// Допроведение платежей
        /// </summary>
        private void DoRedo()
        {
            GWRequest req = null;

            /*
             * using (Oldigw db = new Oldigw())
             *      {
             *      }
             */

            int SafeInterval = Config.AppSettings["Safe-Interval"].ToInt();

            // Удалим из очереди платежи старше 1 минуты
            foreach (long key in RedoDict.Keys)
            {
                DateTime d;
                RedoDict.TryGetValue(key, out d);
                if (d < DateTime.Now.AddMinutes(-SafeInterval))
                {
                    RedoDict.TryRemove(key, out d);
                    Log("{0} [DoREDO] Элемент старше {1} минут - удаляем из фильтра", key, SafeInterval);
                }
            }

            using (SqlParamCommand cmd = new SqlParamCommand(Settings.ConnectionString, "OldiGW.ver3_ReadHolded"))
            {
                cmd.ConnectionOpen();
                using (SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
                    while (dr.Read())
                    {
                        // Прочитаем отложенный платеж

                        req = new GWRequest();
                        if (req.ReadAll(dr) == 0)
                        {
                            // Проверим наличие платежа в очереди
                            DateTime d;
                            if (RedoDict.TryGetValue(req.Tid, out d))
                            {
                                Log("{0} [REDO] Найден в фильтре. Перепроведение откладывается: {1}", req.Tid, Oldi.Utility.XConvert.AsDate2(d));
                            }
                            else
                            {
                                // Добавим платёж в фильтр
                                RedoDict.TryAdd(req.Tid, DateTime.Now);

                                if (req.State < 6)                                 // Только новые платежи допроводим
                                {
                                    req.SetLock(1);                                // Заблокировать ещё до постановки в очередь
                                    if (string.IsNullOrEmpty(req.Account) && string.IsNullOrEmpty(req.Phone) && string.IsNullOrEmpty(req.Number))
                                    {
                                        Log("{0} [REDO] Ошибка. Не задан ни один из параметров счёта!", req.Tid);
                                    }
                                    // Допровести платежи с нефинальными статусами
                                    CheckInfo checkinfo = new CheckInfo(req);
                                    if (!ThreadPool.QueueUserWorkItem(new WaitCallback(CheckState), checkinfo))
                                    {
                                        req.SetLock(0);                                         // Не удалось поставить в очередь - разблокировать
                                        Log("Redo: Не удалось запустить процесс допроведения для tid={0}, state={1}", req.Tid, req.State);
                                    }
                                }
                                else
                                {
                                    Log("DoRedo: Ошибка чтения БД");
                                }
                            }
                        }
                    }
            }
        }