Ejemplo n.º 1
0
        public bool Thaw(string memberId, WalletType walletType, decimal money, string remark, out string error)
        {
            error = string.Empty;
            if (money == 0)
            {
                return(true);
            }
            using (var dbContext = new WalletDbContext())
            {
                var wallet =
                    dbContext.Set <Models.Wallet>()
                    .FirstOrDefault(w => w.WalletType == walletType && w.MemberId.Equals(memberId, StringComparison.OrdinalIgnoreCase));
                if (wallet == null)
                {
                    error = "冻结金额不足";
                    return(false);
                }
                else
                {
                    if (wallet.Frozen < money)
                    {
                        error = "冻结金额不足";
                        return(false);
                    }
                    wallet.Available += money;
                    wallet.Frozen    -= money;
                    dbContext.Set <Models.Wallet>().Attach(wallet);
                    dbContext.Entry(wallet).State = EntityState.Modified;
                }

                dbContext.SaveChanges();
                return(true);
            }
        }
Ejemplo n.º 2
0
        public bool Draw(string memberId, WalletType walletType, decimal money, string remark, out string error, string tag = null, string toMemberId = null, bool drawFrozen = false)
        {
            error = string.Empty;
            if (money == 0)
            {
                return(true);
            }

            using (var dbContext = new WalletDbContext())
            {
                var wallet =
                    dbContext.Set <Models.Wallet>()
                    .FirstOrDefault(w => w.WalletType == walletType && w.MemberId == memberId);

                if (drawFrozen)
                {
                    if (wallet == null || wallet.Frozen < money)
                    {
                        error = "冻结余额不足";
                        return(false);
                    }

                    wallet.Frozen -= money;
                }
                else
                {
                    if (wallet == null || wallet.Available < money)
                    {
                        error = "余额不足";
                        return(false);
                    }

                    wallet.Available -= money;
                }
                dbContext.Set <Models.Wallet>().Attach(wallet);
                dbContext.Entry(wallet).State = EntityState.Modified;

                WalletBill walletBill = new WalletBill();
                walletBill.Id           = KeyGenerator.GetGuidKey();
                walletBill.MemberId     = memberId;
                walletBill.BillType     = BillType.TakeOut;
                walletBill.WalletType   = walletType;
                walletBill.Money        = money;
                walletBill.Remark       = remark;
                walletBill.BillTag      = tag;
                walletBill.CreateTime   = DateTime.Now;
                walletBill.FromMemberId = toMemberId;
                dbContext.WalletBills.Add(walletBill);
                dbContext.SaveChanges();
                return(true);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 提现申请
        /// </summary>
        /// <returns></returns>
        public bool AuditApply(Guid id)
        {
            using (var dbContext = new WalletDbContext())
            {
                CrashApply crashApply = dbContext.CrashApplys.FirstOrDefault(c => c.Id == id);
                if (crashApply == null)
                {
                    throw new Exception("找不到提现的记录");
                }
                crashApply.ApplyState = ApplyState.ApplyPassed;
                crashApply.AuditTime  = DateTime.Now;
                dbContext.Set <CrashApply>().Attach(crashApply);
                dbContext.Entry(crashApply).State = EntityState.Modified;

                Models.Wallet wallet = GetWalletByMemberId(crashApply.MemberId);
                if (wallet == null)
                {
                    throw new Exception("钱包是空的");
                }
                else if (crashApply.Money > wallet.Frozen)
                {
                    throw new Exception("提现的金额不能大于冻结的金额");
                }

                return(dbContext.SaveChanges() > 0);
            }
        }
Ejemplo n.º 4
0
        public bool Deposit(string memberId, WalletType walletType, decimal money, string remark, out string error, string tag = null, string fromMemberId = null)
        {
            error = string.Empty;
            if (money == 0)
            {
                return(true);
            }
            using (var dbContext = new WalletDbContext())
            {
                var wallet =
                    dbContext.Set <Models.Wallet>()
                    .FirstOrDefault(w => w.WalletType == walletType && w.MemberId.Equals(memberId, StringComparison.OrdinalIgnoreCase));
                if (wallet == null)
                {
                    wallet            = new Models.Wallet();
                    wallet.Id         = KeyGenerator.GetGuidKey();
                    wallet.MemberId   = memberId;
                    wallet.WalletType = walletType;
                    wallet.Frozen     = 0;
                    wallet.Available  = money;
                    dbContext.Wallets.Add(wallet);
                }
                else
                {
                    wallet.Available += money;
                    dbContext.Set <Models.Wallet>().Attach(wallet);
                    dbContext.Entry(wallet).State = EntityState.Modified;
                }

                WalletBill walletBill = new WalletBill();
                walletBill.Id           = KeyGenerator.GetGuidKey();
                walletBill.MemberId     = memberId;
                walletBill.BillType     = BillType.TakeIn;
                walletBill.WalletType   = walletType;
                walletBill.Money        = money;
                walletBill.Remark       = remark;
                walletBill.BillTag      = tag;
                walletBill.CreateTime   = DateTime.Now;
                walletBill.FromMemberId = fromMemberId;
                dbContext.WalletBills.Add(walletBill);
                dbContext.SaveChanges();
                return(true);
            }
        }
Ejemplo n.º 5
0
        private WalletDbContext AddToContext <T>(WalletDbContext context,
                                                 T entity, int count, int commitCount, bool recreateContext) where T : class
        {
            context.Set <T>().Add(entity);

            if (count % commitCount == 0)
            {
                context.SaveChanges();
                if (recreateContext)
                {
                    context.Dispose();
                    context = new WalletDbContext(DbContextOptionsFactory.DbContextOptions());
                    context.ChangeTracker.AutoDetectChangesEnabled = false;
                }
            }

            return(context);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 申请提现
        /// </summary>
        public bool ApplyCrash(string memberId, string account, decimal money, PaymentType paymentType, string name)
        {
            using (var dbContext = new WalletDbContext())
            {
                CrashApply crashApply = new CrashApply();
                crashApply.Id            = KeyGenerator.GetGuidKey();
                crashApply.MemberId      = memberId;
                crashApply.Account       = account;
                crashApply.TransactionNo = KeyGenerator.GetOrderNumber();
                crashApply.RealName      = name;
                crashApply.Money         = money;
                crashApply.PaymentType   = paymentType;
                crashApply.ApplyState    = ApplyState.Applying;
                crashApply.CreateTime    = DateTime.Now;
                dbContext.CrashApplys.Add(crashApply);

                if (paymentType == PaymentType.WeiXin)
                {
                    //判断是否绑定了微信
                }

                Models.Wallet wallet = GetWalletByMemberId(memberId);
                if (wallet == null)
                {
                    throw new WebApiInnerException("0003", "钱包没有可以提现的余额");
                }
                else
                {
                    if (money > wallet.Available)
                    {
                        throw new WebApiInnerException("0004", "提现的金额不能大于钱包的余额");
                    }
                    wallet.Frozen    += money;
                    wallet.Available -= money;
                }
                dbContext.Set <Models.Wallet>().Attach(wallet);
                dbContext.Entry(wallet).State = EntityState.Modified;

                return(dbContext.SaveChanges() > 0);
            }
        }
Ejemplo n.º 7
0
 public EntityRepositoryBase(WalletDbContext dbContext)
 {
     DbContext = dbContext;
     DbSet     = dbContext.Set <TEntity>();
 }
Ejemplo n.º 8
0
 public GenericRepository(WalletDbContext db)
 {
     Db    = db;
     DbSet = Db.Set <TEntity>();
 }