예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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));
        }