Exemple #1
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);
            }
        }
Exemple #2
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);
            }
        }
Exemple #3
0
        public async Task <PaymentMethod> Handle(UpdatePaymentMethodCommand request, CancellationToken cancellationToken)
        {
            var entity = _context.PaymentMethods.SingleOrDefault(b => b.ID == request.ID);

            if (entity == null)
            {
                return(new PaymentMethod {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (entity.Name != request.Name)
            {
                entity.Name = request.Name;
            }
            if (entity.Icon != request.Icon)
            {
                entity.Icon = request.Icon;
            }
            if (request.ExternalCharges != null)
            {
                entity.ExternalCharges = request.ExternalCharges;
            }
            if (request.InternalCharges != null)
            {
                entity.InternalCharges = request.InternalCharges;
            }
            if (request.AllowDeposit != null)
            {
                entity.AllowDeposit = request.AllowDeposit;
            }
            if (request.AllowTransfer != null)
            {
                entity.AllowTransfer = request.AllowTransfer;
            }
            if (request.AllowWithdrawal != null)
            {
                entity.AllowWithdrawal = request.AllowWithdrawal;
            }

            if (!_context.Entry(entity).Context.ChangeTracker.HasChanges())
            {
                entity.statusCode = SharedStatusCodes.Unchanged;
                return(entity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                entity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                entity.statusCode = SharedStatusCodes.Failed;
            }

            return(entity);
        }
Exemple #4
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);
            }
        }
Exemple #5
0
        public async Task <Currency> Handle(UpdateCurrencyCommand request, CancellationToken cancellationToken)
        {
            var currencyEntity = _context.Currencies.SingleOrDefault(b => b.ID == request.ID);

            if (currencyEntity == null)
            {
                return(new Currency {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (request.Name != null)
            {
                currencyEntity.Name = request.Name;
            }
            if (request.Code != null)
            {
                currencyEntity.Code = request.Code;
            }
            if (request.Symbol != null)
            {
                currencyEntity.Symbol = request.Symbol;
            }

            if (request.AddOnRegistration != null && request.AddOnRegistration == true)
            {
                foreach (var crr in _context.Currencies.Where(x => x.AddOnRegistration == true).ToList())
                {
                    crr.AddOnRegistration = false;
                }

                currencyEntity.AddOnRegistration = request.AddOnRegistration;
            }

            if (!_context.Entry(currencyEntity).Context.ChangeTracker.HasChanges())
            {
                currencyEntity.statusCode = SharedStatusCodes.Unchanged;
                return(currencyEntity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                currencyEntity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                currencyEntity.statusCode = SharedStatusCodes.Failed;
            }

            return(currencyEntity);
        }
Exemple #6
0
        public async Task <CategoryModel> UpdateCategory(int id, CategoryDto category)
        {
            var categoryModel = await context.Category.Where(c => c.id == id).FirstOrDefaultAsync();

            if (categoryModel == null)
            {
                throw new Exception("Nie ma kategorii o tym ID");
            }

            context.Entry(categoryModel).CurrentValues.SetValues(category);
            await context.SaveChangesAsync();

            return(categoryModel);
        }
        public async Task <Recipient> Handle(UpdateRecipientCommand request, CancellationToken cancellationToken)
        {
            var recipientEntity = _context.Recipients.SingleOrDefault(b => b.ID == request.ID);

            if (recipientEntity == null)
            {
                return(new Recipient {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (recipientEntity.FirstName != request.FirstName)
            {
                recipientEntity.FirstName = request.FirstName;
            }
            if (recipientEntity.LastName != request.LastName)
            {
                recipientEntity.LastName = request.LastName;
            }
            if (request.Email != null)
            {
                recipientEntity.Email = request.Email;
            }
            if (request.Phone != null)
            {
                recipientEntity.Phone = request.Phone;
            }



            if (!_context.Entry(recipientEntity).Context.ChangeTracker.HasChanges())
            {
                recipientEntity.statusCode = SharedStatusCodes.Unchanged;
                return(recipientEntity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                recipientEntity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                recipientEntity.statusCode = SharedStatusCodes.Failed;
            }

            return(recipientEntity);
        }
        public async Task <Country> Handle(UpdateCountryCommand request, CancellationToken cancellationToken)
        {
            var entity = _context.Countries.SingleOrDefault(b => b.ID == request.ID);

            if (entity == null)
            {
                return(new Country {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (request.DefaultCurrencyID != null)
            {
                entity.DefaultCurrencyID = request.DefaultCurrencyID;
            }
            if (request.Name != null)
            {
                entity.Name = request.Name;
            }
            if (request.Code != null)
            {
                entity.Code = request.Code;
            }
            if (request.PhoneCode != null)
            {
                entity.PhoneCode = request.PhoneCode;
            }

            if (!_context.Entry(entity).Context.ChangeTracker.HasChanges())
            {
                entity.statusCode = SharedStatusCodes.Unchanged;
                return(entity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                entity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                entity.statusCode = SharedStatusCodes.Failed;
            }

            return(entity);
        }
Exemple #9
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);
            }
        }
Exemple #10
0
        public async Task <SavedCard> Handle(UpdateSavedCardCommand request, CancellationToken cancellationToken)
        {
            var cardEntity = _context.SavedCards.SingleOrDefault(b => b.ID == request.ID);

            if (cardEntity == null)
            {
                return(new SavedCard {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (cardEntity.MaskedNumber != request.MaskedNumber)
            {
                cardEntity.MaskedNumber = request.MaskedNumber;
            }
            if (cardEntity.CardType != request.CardType)
            {
                cardEntity.CardType = request.CardType;
            }
            if (cardEntity.ExpiryDate != request.ExpiryDate)
            {
                cardEntity.ExpiryDate = request.ExpiryDate;
            }



            if (!_context.Entry(cardEntity).Context.ChangeTracker.HasChanges())
            {
                cardEntity.statusCode = SharedStatusCodes.Unchanged;
                return(cardEntity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                cardEntity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                cardEntity.statusCode = SharedStatusCodes.Failed;
            }

            return(cardEntity);
        }
Exemple #11
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);
            }
        }
        public async Task <TransactionModel> UpdateTransaction(int id, TransactionDto transaction)
        {
            TransactionModel transactionModel = await context.Transaction.Where(t => t.id == id).FirstOrDefaultAsync();

            CategoryModel category = await context.Category.Where(c => c.id == transaction.categoryId).FirstOrDefaultAsync();

            if (category == null)
            {
                throw new Exception("Brak kategorii transakcji");
            }

            if (transactionModel == null)
            {
                throw new Exception("Brak transakcji o tym ID");
            }

            context.Entry(transactionModel).CurrentValues.SetValues(transaction);
            await context.SaveChangesAsync();

            return(transactionModel);
        }
Exemple #13
0
        public async Task <WalletAccount> Handle(UpdateWalletAccountCommand request, CancellationToken cancellationToken)
        {
            var walletAccountEntity = _context.WalletAccounts.SingleOrDefault(b => b.ID == request.ID);

            if (walletAccountEntity == null)
            {
                return(new WalletAccount {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (walletAccountEntity.Name != request.Name)
            {
                walletAccountEntity.Name = request.Name;
            }
            if (request.WalletAccountCategoryID != null)
            {
                walletAccountEntity.WalletAccountCategoryID = request.WalletAccountCategoryID;
            }


            if (!_context.Entry(walletAccountEntity).Context.ChangeTracker.HasChanges())
            {
                walletAccountEntity.statusCode = SharedStatusCodes.Unchanged;
                return(walletAccountEntity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                walletAccountEntity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                walletAccountEntity.statusCode = SharedStatusCodes.Failed;
            }

            return(walletAccountEntity);
        }
        public async Task <User> Handle(RegisterUserCommand request, CancellationToken cancellationToken)
        {
            var entity = _context.Users.SingleOrDefault(b => b.Email == request.Email);

            if (entity != null)
            {
                entity.statusCode = SharedStatusCodes.Exists;
                return(entity);
            }

            // Create User Entity
            User user_entity = new User
            {
                CountryID    = request.CountryID,
                FirstName    = request.FirstName,
                LastName     = request.LastName,
                Email        = request.Email,
                Phone        = request.Phone,
                Password     = request.Password,
                DateOfBirth  = request.DateOfBirth,
                AddressLine1 = request.AddressLine1,
                AddressLine2 = request.AddressLine2,
                IsActive     = false
            };

            _context.Users.Add(user_entity);

            try
            {
                if (await _context.SaveChangesAsync(cancellationToken) > 0)
                {
                    try
                    {
                        _context.Entry(user_entity).GetDatabaseValues();

                        // Create WalletAccount Entity
                        var defaultWalletCategory = new WalletAccountCategory().GetWalletAccountCategory(_context);

                        WalletAccount wallet_account_entity = new WalletAccount
                        {
                            UserID     = user_entity.ID,
                            CurrencyID = request.CurrencyID,
                            WalletAccountCategoryID = defaultWalletCategory.ID,
                            WalletAccountCode       = WalletAccount.generateWalletAccountCode(user_entity.ID),
                            Name      = defaultWalletCategory.Name,
                            Balance   = 0,
                            IsDefault = true
                        };

                        _context.WalletAccounts.Add(wallet_account_entity);

                        if (await _context.SaveChangesAsync(cancellationToken) > 0)
                        {
                            user_entity.statusCode = SharedStatusCodes.Created;
                        }
                        else
                        {
                            _context.Users.Remove(user_entity);
                            await _context.SaveChangesAsync(cancellationToken);

                            user_entity.statusCode = SharedStatusCodes.Failed;
                        }
                    }
                    catch (Exception)
                    {
                        _context.Users.Remove(user_entity);
                        await _context.SaveChangesAsync(cancellationToken);

                        user_entity.statusCode = SharedStatusCodes.Failed;
                    }
                }
            }
            catch (Exception)
            {
                user_entity.statusCode = SharedStatusCodes.Failed;
            }

            return(user_entity);
        }
        public async Task <BankAccount> Handle(UpdateBankAccountCommand request, CancellationToken cancellationToken)
        {
            var entity = _context.BankAccounts.SingleOrDefault(b => b.ID == request.ID);

            if (entity == null)
            {
                return(new BankAccount {
                    ID = 0, statusCode = SharedStatusCodes.NotFound
                });
            }

            if (!string.IsNullOrEmpty(request.Beneficiary))
            {
                entity.Beneficiary = request.Beneficiary;
            }
            if (!string.IsNullOrEmpty(request.Name))
            {
                entity.Name = request.Name;
            }
            if (!string.IsNullOrEmpty(request.Number))
            {
                entity.Number = request.Number;
            }
            if (!string.IsNullOrEmpty(request.IBANumber))
            {
                entity.IBANumber = request.IBANumber;
            }
            if (!string.IsNullOrEmpty(request.SwiftCode))
            {
                entity.SwiftCode = request.SwiftCode;
            }
            if (!string.IsNullOrEmpty(request.Currency))
            {
                entity.Currency = request.Currency;
            }
            if (!string.IsNullOrEmpty(request.AddressLine1))
            {
                entity.AddressLine1 = request.AddressLine1;
            }
            if (!string.IsNullOrEmpty(request.AddressLine2))
            {
                entity.AddressLine2 = request.AddressLine2;
            }
            if (!string.IsNullOrEmpty(request.City))
            {
                entity.City = request.City;
            }
            if (!string.IsNullOrEmpty(request.Country))
            {
                entity.Country = request.Country;
            }

            if (request.IsDefault)
            {
                foreach (var crr in _context.BankAccounts.Where(x => x.UserID == request.UserID).ToList())
                {
                    crr.IsDefault = false;
                }
            }

            entity.IsDefault = request.IsDefault;

            if (!_context.Entry(entity).Context.ChangeTracker.HasChanges())
            {
                entity.statusCode = SharedStatusCodes.Unchanged;
                return(entity);
            }

            if (await _context.SaveChangesAsync(cancellationToken) > 0)
            {
                entity.statusCode = SharedStatusCodes.Updated;
            }
            else
            {
                entity.statusCode = SharedStatusCodes.Failed;
            }

            return(entity);
        }