Esempio n. 1
0
        /// <summary>
        /// 接受新的现金记录   更新统计信息
        /// </summary>
        /// <param name="reply"></param>
        public void AcceptNewCashTransfer(CashTransfer cashTransfer)
        {
            var finallyValue = _cash;
            //业务逻辑判断
            CashTransferInfo cashTransferInfo = cashTransfer.GetInfo();
            //统计信息
            var walletStatisticInfo = _walletStatisticInfo;

            if (cashTransferInfo.Direction == WalletDirection.Out)
            {
                if (_isFreeze)
                {
                    throw new Exception("钱包冻结,无法出账");
                }
                //如果是出账 判断账号余额是否够
                if (_cash < cashTransferInfo.Amount)
                {
                    throw new Exception("账户余额不足");
                }
                finallyValue -= cashTransferInfo.Amount;
            }
            else
            {
                //进账 判断收益
                if (cashTransfer.GetTransferType() == CashTransferType.Incentive)
                {
                    //善心激励
                    if (_walletStatisticInfo.UpdatedOn.Date.Equals(DateTime.Now.Date))
                    {
                        //非第一个
                        walletStatisticInfo.YesterdayEarnings += cashTransferInfo.Amount;
                    }
                    else
                    {
                        //今日第一个
                        walletStatisticInfo.YesterdayEarnings = cashTransferInfo.Amount;
                    }
                    walletStatisticInfo.Earnings += cashTransferInfo.Amount;
                    walletStatisticInfo.UpdatedOn = DateTime.Now;
                }
                finallyValue += cashTransferInfo.Amount;
            }
            finallyValue = Math.Round(finallyValue, 2);
            //新的记录接受后,发出新记录接受的事件
            ApplyEvent(new NewCashTransferAcceptedEvent(_userId, cashTransfer.Id, finallyValue, walletStatisticInfo));
        }
Esempio n. 2
0
 public CashTransferCreatedEvent(Guid walletId, string number, CashTransferInfo info, CashTransferType type, CashTransferStatus status) : base(walletId, number)
 {
     Info   = info;
     Type   = type;
     Status = status;
 }