/// <summary> /// Зачисление средств в T# кошелёк пользователя /// </summary> /// <param name="walletId">всегда должен быть только один, иначе один платёж в платёжной системе увеличит средства нескольких пользователей</param> /// <param name="currency"></param> /// <param name="amount"></param> /// <param name="data"></param> public bool DepositOnWallet(int walletId, string currency, decimal amount, DateTime data) { try { var userPaymentSysId = DbProcessing.GetUserPaymentSysId(walletId); if (!userPaymentSysId.HasValue) { return(false); } var wallet = DbProcessing.GetWalletById(walletId); if (wallet == null) { return(false); } var additionalAmount = amount; if (wallet.Currency != currency) // Нужно конвертировать средства в валюту T# кошелька { var convertAmount = PaymentProcessor.ConvertPaySysCurrencyToWalletCurrency(wallet.Currency, currency, (double)amount); if (!convertAmount.HasValue) { var message = string.Format( "Не удалось произвести зачисление на TradeSharp кошелёк {0} средств в размере {1} {2}. \r\n" + "Причина: не удалось сконвертировать валюту перевода {2} в валюту целевого TradeSharp кошелька {3}. \r\n" + "Будет произведена попытка провести платёж как 'Неопознанный'. Администратор базы данных должен вручную зачислить \r\n" + "средства на этот кошелёк, внеся изменения в таблицы WALLET и PAYMENT_SYSTEM_TRANSFER.", wallet.User, amount.ToStringUniformMoneyFormat(), currency, wallet.Currency); Logger.Error(message); return(false); } additionalAmount = convertAmount.Value; } // Сохраняем всё в базу данных return(DbProcessing.DepositOnWallet(wallet, additionalAmount, data, userPaymentSysId.Value)); } catch (Exception ex) { Logger.Error("DepositOnWallet - ошибка при зачислении средств на кошелёк", ex); return(false); } }
public Wallet ChangeCurrency(int walletId, string walletCurrency, bool recalculationBalance, out WalletError error) { try { using (var ctx = DatabaseContext.Instance.Make()) { var wallet = ctx.WALLET.FirstOrDefault(x => x.User == walletId); if (wallet == null) { Logger.InfoFormat("не найден кошек для пользователя с Id = {0}", walletId); error = WalletError.InvalidData; return(null); } var oldWalletCurrency = wallet.Currency; if (oldWalletCurrency != walletCurrency) { wallet.Currency = walletCurrency; Logger.InfoFormat("валюта кошека {0} изменена с {1} на {2}", walletId, oldWalletCurrency, walletCurrency); } if (recalculationBalance) { #region Logger.InfoFormat("пересчёт баланса кошелька {0} {1} в новую валюту {2}...", walletId, oldWalletCurrency, walletCurrency); var oldBalans = wallet.Balance; var newValue = PaymentProcessor.ConvertPaySysCurrencyToWalletCurrency(walletCurrency, oldWalletCurrency, (double)oldBalans); if (newValue != null) { newValue = Math.Round(newValue.Value, 2); wallet.Balance = (decimal)newValue; Logger.InfoFormat("баланса кошелька {0} изменён с {1} на {2}", walletId, oldBalans, wallet.Balance); } else { Logger.ErrorFormat("не удалось пересчитать балланс кошелька {0} в новой валюте {1}", walletId, walletCurrency); error = WalletError.CurrencyExchangeFailed; return(LinqToEntity.DecorateWallet(wallet)); } #endregion } Logger.Info("Сохраняем изменения..."); ctx.SaveChanges(); error = WalletError.OK; Logger.Info("изменения сохранены"); return(LinqToEntity.DecorateWallet(wallet)); } } catch (Exception ex) { Logger.Error("ChangeCurrency()", ex); error = WalletError.CommonError; return(null); } }