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"); }
/// <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); }