public Result <UserWithdrawResultModel> Withdraw(UserWithdrawModel model)
 {
     try
     {
         var result = this.AccountService.Withdraw(model);
         return(GetSuccessResult(result));
     }
     catch (Exception ex)
     {
         return(GetExceptionResult <UserWithdrawResultModel>(null, ex));
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 会员取现
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public UserWithdrawResultModel Withdraw(UserWithdrawModel model)
        {
            using (var dbContext = new TicketEntities())
            {
                if (string.IsNullOrEmpty(model.MerchantId) && string.IsNullOrEmpty(model.UserName) && string.IsNullOrEmpty(model.SignKey))
                {
                    throw new InvalidOperationException("无效的用户登录信息");
                }

                if (model.Amount <= 0)
                {
                    throw new InvalidOperationException("无效的取现金额");
                }

                //1, 判断用户是否存在
                var merchantEntity = dbContext.N_Merchant.FirstOrDefault(it => (it.MerchantId.Equals(model.MerchantId, StringComparison.OrdinalIgnoreCase)));

                if (merchantEntity == null)
                {
                    Log.Error("商户不存在");
                    throw new InvalidOperationException("商户不存在");
                }

                if (string.IsNullOrEmpty(merchantEntity.Code))
                {
                    Log.Error("无效的商户信息");
                    throw new InvalidOperationException("无效的商户信息");
                }

                //2,验证用户
                var userEntity = dbContext.N_User.FirstOrDefault(it => it.UserName.Equals(model.UserName, StringComparison.OrdinalIgnoreCase));

                if (userEntity == null)
                {
                    Log.Error("用户不存在");
                    throw new InvalidOperationException("用户不存在");
                }

                //3, 验证加密串
                //按顺序(商户Id&会员用户名&商户安全码)MD5加密串
                var signKey = MD5Cryptology.GetMD5(string.Format("{0}&{1}&{2}&{3}&{4}", model.OrderId, model.MerchantId, model.UserName, model.Amount.ToString("f4"), merchantEntity.Code), "gb2312");
                if (string.Compare(signKey, model.SignKey, true) != 0)
                {
                    Log.Error("无效的商户安全码");
                    throw new InvalidOperationException("无效的商户安全码");
                }

                //4, 取现
                string orderId = SsId.GetCash;
                UserWithdrawResultModel result = new UserWithdrawResultModel()
                {
                    SsId        = orderId,
                    OrderId     = model.OrderId,
                    MerchantId  = model.MerchantId,
                    UserName    = model.UserName,
                    Money       = (userEntity.Money - model.Amount) ?? 0M,
                    BeforeMoney = userEntity.Money ?? 0M
                };

                // 获取user bank id
                var userBank = dbContext.N_UserBank.FirstOrDefault(it => it.PayAccount.Equals(userEntity.PayAccount, StringComparison.OrdinalIgnoreCase));
                if (userBank == null)
                {
                    Log.Error("无效的银行账号");
                    throw new InvalidOperationException("无效的银行账号");
                }

                int num = (new UserGetCashDAL()).Save3Withdraw(orderId, userEntity.Id.ToString(), model.OrderId, userBank.Id.ToString(), userEntity.PayBank, userEntity.PayAccount, userEntity.PayName, model.Amount);

                if (num == 0)
                {
                    Log.ErrorFormat("取现失败,订单号: {0}", orderId);
                    throw new InvalidOperationException("取现失败");
                }
                else
                {
                    new LogSysDAL().Save("会员管理", "Id为" + userEntity.Id.ToString() + "的会员申请提现!");
                    Log.InfoFormat("取现成功,订单号: {0}", orderId);
                }
                return(result);
            }
        }