Пример #1
0
        /// <summary>
        /// 提交提现申请
        /// </summary>
        /// <param name="withdrawApplyId"></param>
        /// <param name="info"></param>
        public void ApplyWithdraw(Guid withdrawApplyId, WithdrawApplyInfo info)
        {
            info.CheckNotNull(nameof(info));

            var withdrawStatisticInfo = _withdrawStatisticInfo;

            if (_withdrawStatisticInfo.LastWithdrawTime.Date.Equals(DateTime.Now.Date))
            {
                //今日提现
                withdrawStatisticInfo.TodayWithdrawAmount += info.Amount;
            }
            else
            {
                withdrawStatisticInfo.TodayWithdrawAmount = info.Amount;
            }
            withdrawStatisticInfo.WithdrawTotalAmount += info.Amount;
            withdrawStatisticInfo.LastWithdrawTime     = DateTime.Now;

            //业务逻辑判断
            if (withdrawStatisticInfo.TodayWithdrawAmount > ConfigSettings.OneDayWithdrawLimit)
            {
                throw new Exception("今日提现超出限额");
            }
            if (withdrawStatisticInfo.WeekWithdrawAmount > ConfigSettings.OneWeekWithdrawLimit)
            {
                throw new Exception("本周提现超出限额");
            }
            ApplyEvent(new WithdrawStatisticInfoChangedEvent(withdrawStatisticInfo));

            //判断提现金额
            if (_cash < info.Amount)
            {
                throw new Exception("余额不足无法提现");
            }
            var finalCash = _cash;

            finalCash -= info.Amount;
            var finalLockedCash = _lockedCash;

            finalLockedCash += info.Amount;

            ApplyEvent(new WithdrawApplyCreatedEvent(withdrawApplyId, finalCash, finalLockedCash, info));
        }