/// <summary> /// /// </summary> /// <returns></returns> public bool Save() { var tradeJournal = TradeJournal.FindById(this.TradeCode); if (null == tradeJournal) { return(false); } if (tradeJournal.TradeStatus >= TradeStatus.Paid) { return(true); } this.OwnerId = tradeJournal.OwnerId; this.CredentialSign = null; this.PaidTime = DateTime.Now; this.CredentialSign = GenerateSign(tradeJournal, this); using (var scope = new System.Transactions.TransactionScope()) { var repository = RepositoryManager.GetRepository <IPaymentCredentialRepository>(ModuleEnvironment.ModuleName); var saved = repository.Save(this); if (saved) { tradeJournal.PayWay = this.PaidWay; tradeJournal.TradeStatus = TradeStatus.Paid; saved = tradeJournal.Save(); scope.Complete(); } return(saved); } }
/// <summary> /// /// </summary> /// <param name="ownerId"></param> /// <param name="toTradeCode"></param> /// <returns></returns> public static PaymentResult Pay(long ownerId, string toTradeCode) { var tradeJournal = TradeJournal.FindById(toTradeCode); if (null == tradeJournal) { return(null); } if (tradeJournal.TradeMode != TradeMode.Payout) { return(null); } if (tradeJournal.TradeStatus >= TradeStatus.Paid) { return(null); } var walletType = WalletType.Privateness; if (tradeJournal.TradeType == TradeType.OrganizationToOrganization || tradeJournal.TradeType == TradeType.OrganizationToPersonal) { walletType = WalletType.Organization; } var wallet = Wallet.FindByOwnerId(walletType, tradeJournal.OwnerId); if (null == wallet || wallet.AvailableBalance < Math.Abs(tradeJournal.TotalFee)) { return(null); } if (wallet.OwnerId != ownerId) { return(null); } var result = ChangeBalance(wallet, TradeMode.Payout, tradeJournal.TotalFee, tradeJournal.TradeCode, tradeJournal.BizSource, tradeJournal.BuyerId); result.TradeCode = toTradeCode; return(result); }
/// <summary> /// /// </summary> /// <param name="walletType"></param> /// <param name="ownerId"></param> /// <param name="fromTradeCode"></param> /// <returns></returns> public static PaymentResult AddBalance(WalletType walletType, long ownerId, string fromTradeCode) { if (walletType == WalletType.All) { return(null); } var tradeJournal = TradeJournal.FindById(fromTradeCode); if (null == tradeJournal) { return(null); } if (tradeJournal.TradeMode != TradeMode.Payoff) { return(null); } if (tradeJournal.TradeStatus == TradeStatus.BizCompleted) { return(null); } if (tradeJournal.TradeStatus != TradeStatus.Paid && tradeJournal.PayWay != PayWays.System) { return(null); } Wallet wallet = Wallet.FindByOwnerId(walletType, ownerId); if (null == wallet) { wallet = new Wallet(); wallet.WalletType = walletType; wallet.OwnerId = ownerId; wallet.Save(); } var handlerId = tradeJournal.SellerId > 0 ? tradeJournal.SellerId : tradeJournal.BuyerId; return(ChangeBalance(wallet, TradeMode.Payoff, tradeJournal.TotalFee, tradeJournal.TradeCode, tradeJournal.BizSource, handlerId)); }