예제 #1
0
 private string _GetLimit()
 {
     string[] items = Util.INI["SYS"]["AUTOLIMITAMOUNT"].Split(';');
     foreach (var item in items)
     {
         AmountLimit limit = new AmountLimit(item);
         if (limit.isEqual(m_Tick.Account.TraderAccount, m_Tick.ProductInfo.Exch, m_Tick.ProductInfo.Commodity))
         {
             return(limit.Amount.ToString());
         }
     }
     return("0");
 }
예제 #2
0
        /// <summary>
        /// Финансовы контроль
        /// </summary>
        protected virtual bool FinancialCheck(bool newPay)
        {
            string x = null;

            // Если тип терминала не определён: считаем терминал и включаем финюконтроль
            // if (State == 0 && (tt == 1 || tt == 3)) // Если только новый платёж
            if (State == 0)
            {
                if (!string.IsNullOrEmpty(Phone))
                {
                    x = Phone;
                }
                else if (!string.IsNullOrEmpty(Account) && string.IsNullOrEmpty(Number) && string.IsNullOrEmpty(Card)) // Если задан Number, то используется он
                {
                    x = Account;
                }
                else if (!string.IsNullOrEmpty(Number) && string.IsNullOrEmpty(Card)) // Если только не задан Card
                {
                    x = Number;
                }
                else if (!string.IsNullOrEmpty(Card))
                {
                    x = Card;
                }
                else
                {
                    RootLog($"{Tid} [FCHK] {Provider} {Service}/{Gateway} Не задан номер счёта");
                    return(false);
                }

                // Проверим в чёрном списке (не важно, хоть с сайта)
                if (FindInBlackList(x))
                {
                    return(true);
                }

                // Если номер телефона в списке исключаемых завершить финансовый контроль
                if (FindInLists(Settings.Lists, x, 1) == 1) // Найден в белом списке
                {
                    RootLog($"{Tid} [FCHK] Provider={Provider} {Service}/{Gateway} Num=\"{x}\" найден в белом списке, завершение проверки");
                    return(false);
                }

                // Получаем тип терминала из БД Город
                // 1 - Терминал
                // 2 - Рабочее место
                // 3 - Сайт
                List <CheckedProvider> ProviderList = LoadProviderList();

                int tt = Terminal == 281 ? 3 : TerminalType;

                string trm = Terminal != int.MinValue ? Terminal.ToString() : "NOREG";

                // Ищем переопределение для агента.
                GetAgentFromList();
                RootLog($"{Tid} [FCHK] Для агента AgentID=\"{AgentId}\" заданы параметры: Limit={AmountLimit.AsCurrency()} Delay={AmountDelay} часов Notify={Notify}");

                foreach (var item in ProviderList)
                {
                    string _provider = string.IsNullOrEmpty(Provider) ? "": Provider.ToLower();
                    string _service  = string.IsNullOrEmpty(Service) ? "" : Service.ToLower();
                    string _gateway  = string.IsNullOrEmpty(Gateway) ? "" : Gateway.ToLower();

                    if (_provider == item.Name.ToLower() && _service == item.Service.ToLower() && _gateway == item.Gateway.ToLower() && item.TerminalType == tt)
                    {
                        // Переопределяем правило лимитов для провайдера
                        amountLimit = item.Limit > amountLimit? item.Limit: AmountLimit;
                        // check = true;
                        RootLog($"{Tid} [FCHK] Переопределение для {Provider} {Service}/{Gateway} Type={tt}: AmountLimit={AmountLimit.AsCF()}");
                        break;
                    }
                }

                // Строго больше!
                if (AmountAll > AmountLimit && Pcdate.AddHours(AmountDelay) >= DateTime.Now) // Проверка отправки СМС
                {
                    // RootLog($"{Tid} [FCHK] {Provider} {Service}/{Gateway} Trm={Terminal} Limit={AmountLimit.AsCF()} Amount{AmountAll.AsCF()}");
                    // RootLog($"{Tid} [FCHK] {Provider} {Service}/{Gateway} Pcdate+delay={Pcdate.AddHours(AmountDelay).AsCF()} Limit={AmountLimit.AsCF()} Amount{AmountAll.AsCF()}");

                    state   = 0;
                    errCode = 11;
                    errDesc = $"[Фин.кон-ль] Отложен до {Pcdate.AddHours(AmountDelay)}";
                    UpdateState(Tid, state: State, errCode: ErrCode, errDesc: ErrDesc, locked: 0);
                    RootLog($"{Tid} [FCHK] {Provider} {Service}/{Gateway} Trm={Terminal} Acc={x} A={Amount.AsCF()} S={AmountAll.AsCF()} Limit={AmountLimit.AsCF()} - Отложен до {Pcdate.AddHours(AmountDelay).AsCF()}");

                    // Отправить СМС-уведомление, усли список уведомлений не пуст
                    // Отправлять СМС только для терминалов
                    if (newPay && !string.IsNullOrEmpty(Notify) && TerminalType == 1)
                    {
                        SendNotification(Notify, $"Num={x} S={AmountAll.AsCF()} Trm={Terminal} блок до {Pcdate.AddHours(AmountDelay).AsCF()}");
                    }

                    // Не найден  в белом списке - на контроль!
                    return(true);
                }

                // Если меньше допустимого лимита, не ставить на контроль
                RootLog($"{Tid} [FCHK - stop] {Service}/{Gateway} Num=\"{x}\" сумма платежа {AmountAll.AsCurrency()} меньше общего лимита {AmountLimit.AsCurrency()}, завершение проверки");
            }

            return(false);
        }