public void Withdraw() { Console.WriteLine("Vui lòng nhập số tiền cần rút:"); var amount = Utility.GetDecimalNumber(); Console.WriteLine("Vui lòng nhập nội dung:"); var content = Console.ReadLine(); YYTransaction historyTransaction = new YYTransaction { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.WITHDRAW, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Giao dịch thành công!"); } else { Console.WriteLine("Giao dịch thất bại, vui lòng kiểm tra lại.!"); } Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Số dư hiện tại: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("nhấn Enter để tiếp tục!"); Console.ReadLine(); }
public void Transfer() { Console.WriteLine("Vui lòng nhập số tài khoản người nhận."); var receiverAccountNumber = Console.ReadLine(); var checkAc = model.GetByAccountNumber(receiverAccountNumber); Console.WriteLine("Full Name: " + checkAc.FullName); Console.WriteLine("Vui lòng nhập số tiền cần chuyển: "); var amount = Utility.GetDecimalNumber(); Console.WriteLine("Vui lòng nhập nội dung tin nhắn: "); var content = Console.ReadLine(); var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.TRANSFER, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = receiverAccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateTranfers(Program.currentLoggedInYyAccount.AccountNumber, receiverAccountNumber, historyTransaction)) { Console.WriteLine("Giao dịch thành công!"); } else { Console.WriteLine("Giao dịch thất bại, vui lòng kiểm tra lại.!"); } }
public void Withdraw() { Console.WriteLine("Withdraw."); Console.WriteLine("---------------------------------"); Console.WriteLine("Please enter amount to withdraw: "); var amount = Utility.GetDecimalNumber(); Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.WITHDRAW, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); }
public bool TransferAmount(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction) { bool account = null; DbConnection.Instance().OpenConnection(); var queryString = "select * from `accounts` where username = @accountnumber and status = 1"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountnumber", accountNumber); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (isExist) { account = new YYAccount { AccountNumber = reader.GetString("accountNumber"), Username = reader.GetString("username"), Password = reader.GetString("password"), Salt = reader.GetString("salt"), FullName = reader.GetString("fullName"), Balance = reader.GetInt32("balance") }; } DbConnection.Instance().CloseConnection(); return(account); }
public List <YYTransaction> TransactionHistory(string accountNumber) { DbConnection.Instance().OpenConnection(); var list = new List <YYTransaction>(); var sqlQuery = "select * from `transactions` where receiverAccountNumber = @accountnumber or senderAccountNumber = @accountnumber"; var cmd = new MySqlCommand(sqlQuery, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountnumber", accountNumber); var transactionReader = cmd.ExecuteReader(); while (transactionReader.Read()) { YYTransaction transaction = new YYTransaction() { Amount = transactionReader.GetDecimal("amount"), Content = transactionReader.GetString("content"), Id = transactionReader.GetString("id"), Type = (YYTransaction.TransactionType)transactionReader.GetInt32("type"), SenderAccountNumber = transactionReader.GetString("senderAccountNumber"), ReceiverAccountNumber = transactionReader.GetString("receiverAccountNumber"), Status = (YYTransaction.ActiveStatus)transactionReader.GetInt32("status"), CreatedAt = transactionReader.GetMySqlDateTime("createdAt").ToString() }; list.Add(transaction); } DbConnection.Instance().CloseConnection(); return(list); }
public List <YYTransaction> getTransactionByAccountNumber(string accountNumber) { YYTransaction transaction = null; var lisTransaction = new List <YYTransaction>(); var queryString = "select * from `accounts` where senderAccountNumber = @accountnumber or receiverAccountNumber = @accountnumber"; MySqlCommand cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountnumber", accountNumber); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { transaction = new YYTransaction() { Id = reader.GetString("id"), CreatedAt = reader.GetString("createAt"), UpdatedAt = reader.GetString("updateAt"), Amount = reader.GetDecimal("amount"), Content = reader.GetString("content"), SenderAccountNumber = reader.GetString("senderAccountNumber"), ReceiverAccountNumber = reader.GetString("receiverAccountNumber"), Type = (YYTransaction.TransactionType)reader.GetInt32("type"), Status = (YYTransaction.ActiveStatus)reader.GetInt32("status") }; lisTransaction.Add(transaction); } return(lisTransaction); }
public void Deposit() { Console.WriteLine("Deposit."); Console.WriteLine("---------------------------------"); Console.WriteLine("Please enter amount to deposit: "); var amount = Utility.GetUnsignDecimalNumber(); Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); // Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username); var historyTransaction = new YYTransaction { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.WITHDRAW, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }
public List <YYTransaction> GetTransactionByAccountNumber(string accountnumber) { List <YYTransaction> list = new List <YYTransaction>(); DbConnection.Instance().OpenConnection(); string queryString = "select * from `transactions` where senderAccountNumber = @accountnumber or receiverAccountNumber = @accountnumber"; MySqlCommand command = new MySqlCommand(queryString, DbConnection.Instance().Connection); command.Parameters.AddWithValue("@accountnumber", accountnumber); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { YYTransaction transaction = new YYTransaction() { Id = reader.GetString("id"), Amount = reader.GetDecimal("amount"), Content = reader.GetString("content"), Type = (YYTransaction.TransactionType)reader.GetInt64("type"), ReceiverAccountNumber = reader.GetString("receiverAccountNumber"), SenderAccountNumber = reader.GetString("senderAccountNumber"), Status = (YYTransaction.ActiveStatus)reader.GetInt64("status") }; list.Add(transaction); } DbConnection.Instance().CloseConnection(); return(list); }
public void Transfer() { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. Console.WriteLine("Transfer."); Console.WriteLine("---------------------------------"); Console.WriteLine("Please enter ReceiverAccountNumber: "); var accountNumber = Console.ReadLine(); // 1. Lấy thông tin số dư mới nhất của tài khoản. DbConnection.Instance().OpenConnection(); var queryString = "select * from `account` where accountNumber = @accountNumber"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountNumber", accountNumber); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (!isExist) { throw new SpringHeroTransactionException("Invalid accountNumber"); } DbConnection.Instance().CloseConnection(); Console.WriteLine("Please enter amount to transfer: "); var amount = Utility.GetUnsignDecimalNumber(); Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); var historyTransaction = new YYTransaction { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.TRANSFER, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = accountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.YTransaction(accountNumber, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }
// Giao dịch với public Boolean SaveTransaction(YYTransaction tr) { DbConnection.Instance().OpenConnection(); string queryTransaction = "insert into `transaction`(amount,content,senderAccountNumber," + "receiverAccountNumber,type,status) " + "values(@val1,@val2,@val3,@val4,@val5,@val6)"; MySqlCommand cmd = new MySqlCommand(queryTransaction, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@val1", tr.Amount); cmd.Parameters.AddWithValue("@val2", tr.Content); cmd.Parameters.AddWithValue("@val3", tr.SenderAccountNumber); cmd.Parameters.AddWithValue("@val4", tr.ReceiverAccountNumber); cmd.Parameters.AddWithValue("@val5", tr.Type); cmd.Parameters.AddWithValue("@val6", tr.Status); cmd.ExecuteNonQuery(); DbConnection.Instance().CloseConnection(); return(true); }
public void Transfer() { Console.WriteLine("Transfer."); Console.WriteLine("---------------------------------"); Console.WriteLine("Please enter recever account number."); var receiverAccountNumber = Console.ReadLine(); var checkAc = model.GetByAccountNumber(receiverAccountNumber); if (checkAc == null) { Console.WriteLine("Account does not exist"); } Console.WriteLine("Full Name: " + checkAc.FullName); Console.WriteLine("Please enter amount to transfer: "); var amount = Utility.GetDecimalNumber(); if (amount > Program.currentLoggedInYyAccount.Balance) { Console.WriteLine("Input balances can not be executed. Please retype."); } Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.TRANSFER, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = receiverAccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateTranfers(Program.currentLoggedInYyAccount.AccountNumber, receiverAccountNumber, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); }
public void Withdraw() { Console.WriteLine("Withdraw."); Console.WriteLine("---------------------------------"); Console.WriteLine("Please enter amount to transfer: "); var amount = Utility.GetUnsignDecimalNumber(); var currentBlance = Program.currentLoggedInYyAccount.Balance; // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw. if (amount > currentBlance) { throw new SpringHeroTransactionException("Not enough money!"); } Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); // Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username); var historyTransaction = new YYTransaction { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.DEPOSIT, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }
public void Trasaction(String anumber) { YYTransaction tr = new YYTransaction(); YYTransactionHistory th1 = new YYTransactionHistory(); YYTransactionHistory th2 = new YYTransactionHistory(); Console.WriteLine("Please enter import amount to transfer: "); tr.Amount = Decimal.Parse(Console.ReadLine()); Console.WriteLine("Please enter content: "); tr.Content = Console.ReadLine(); tr.SenderAccountNumber = anumber; Console.WriteLine("Please enter receiver account number"); tr.ReceiverAccountNumber = Console.ReadLine(); var checkAc = _model.GetByAccountNumber(tr.ReceiverAccountNumber); String rac = checkAc.AccountNumber; if (rac.Equals(tr.ReceiverAccountNumber)) { Console.WriteLine("Please enter type: "); tr.Type = Int32.Parse(Console.ReadLine()); Console.WriteLine("Please enter status: "); tr.Status = Int32.Parse(Console.ReadLine()); _tras.SaveTransaction(tr); _model.WithdrawalBalance(tr.Amount, anumber); _model.DepositBalance(tr.Amount, tr.ReceiverAccountNumber); th1.AccountNumber = anumber; th1.Type = 3; th1.Amount = tr.Amount; th1.TradingAcountNumber = tr.ReceiverAccountNumber; th2.AccountNumber = tr.ReceiverAccountNumber; th2.Type = 3; th2.Amount = tr.Amount; th2.TradingAcountNumber = anumber; _history.HinsertBalance(th1); _history.HinsertBalance(th2); } else { Console.WriteLine("This account does not exist."); } }
/* * Tiến hành chuyển khoản, mặc định là trong ngân hàng. * 1. Yêu cầu nhập số tài khoản cần chuyển.(số tài khoản của người nhận.) * 1.1. Xác minh thông tin tài khoản và hiển thị tên người cần chuyển. * 2. Nhập số tiền cần chuyển. * 2.1. Kiểm tra số dư tài khoản. * 3. Nhập nội dung chuyển tiền. * 3.1 Xác nhận nội dung chuyển tiền. * 4. Thực hiện chuyển tiền. * 4.1. Mở transaction. Mở block try catch. * 4.2. Trừ tiền người gửi. * 4.2.1. Lấy thông tin tài khoản gửi tiền một lần nữa. Đảm bảo thông tin là mới nhất. * 4.2.2. Kiểm tra lại một lần nữa số dư xem có đủ tiền để chuyển không. * 4.2.2.1. Nếu không đủ thì rollback. * 4.2.2.2. Nếu đủ thì trừ tiền và update vào bảng `accounts`. * 4.3. Cộng tiền người nhận. * 4.3.1. Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive. * 4.3.1.1. Nếu ok thì update số tiền cho người nhận. * 4.3.1.2. Nếu không ok thì rollback. * 4.4. Lưu lịch sử giao dịch. * 4.5. Kiểm tra lại trạng thái của 3 câu lệnh trên. * 4.5.1. Nếu cả 3 cùng thành công thì commit transaction. * 4.5.2. Nếu bất kỳ một câu lệnh nào bị lỗi thì rollback. * 4.x. Đóng, commit transaction. */ public void Transfer() { Console.WriteLine("Enter the account number to transfer: "); var accountNumber = Console.ReadLine(); var receiverAccount = model.GetByAccountNumber(accountNumber); if (receiverAccount == null) { Console.WriteLine("Invalid account information"); return; } Console.WriteLine("Name of person to transfer: " + receiverAccount.Name); Console.WriteLine("Enter amount to transfer: "); var amount = Utillty.GetDecimalNumber(); Console.WriteLine("Please enter message content: "); var content = Console.ReadLine(); // Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username); var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = YYTransaction.TransactionType.TRANSFER, Amount = amount, Content = content, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = accountNumber, Status = YYTransaction.ActiveStatus.DONE }; if (model.Transfer(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); }
public List <YYTransaction> GetTransactionsByDate(string fromDate, string toDate) { List <YYTransaction> list = new List <YYTransaction>(); YYTransaction yyTransaction = null; DbConnection.Instance().OpenConnection(); var queryString = "select * from `transactions` where created_date < @toDate and created_date > @fromDate"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@fromDate", fromDate); cmd.Parameters.AddWithValue("@toDate", toDate); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (!isExist) { Console.WriteLine("Not record is finded"); } while (reader.Read()) { yyTransaction = new YYTransaction(); yyTransaction.Id = reader.GetString("id"); yyTransaction.Type = (YYTransaction.TransactionType)reader.GetInt32("type"); yyTransaction.Amount = reader.GetDecimal("amount"); yyTransaction.Content = reader.GetString("content"); yyTransaction.ReceiverAccountNumber = reader.GetString("receiverAccountNumber"); yyTransaction.SenderAccountNumber = reader.GetString("senderAccountNumber"); DateTime time = reader.GetDateTime("created_date"); string date = time.ToLongDateString(); yyTransaction.CreatedAt = date; list.Add(yyTransaction); } DbConnection.Instance().CloseConnection(); return(list); }
public bool UpdateTranfers(string senderAccountNumber, string receiverAccountNumber, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); var transaction = DbConnection.Instance().Connection.BeginTransaction(); try { // 1. Lấy thông tin số dư mới nhất của tài khoản gửi. var queryBalance = "select balance from `accounts` where accountNumber = @senderAccountNumber and status = 1"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@senderAccountNumber", senderAccountNumber); var balanceReader = queryBalanceCommand.ExecuteReader(); var isExist = balanceReader.Read(); if (!isExist) { throw new SpringHeroTransactionException("Invalid accountNumber"); } var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); if (historyTransaction.Type != YYTransaction.TransactionType.TRANSFER) { throw new SpringHeroTransactionException("Invalid transaction type!"); } if (historyTransaction.Type == YYTransaction.TransactionType.TRANSFER && historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } //1. Lấy thông tin số dư mới nhất của tài khoản người nhận var queryBalanceReceiver = "select balance from `accounts` where accountNumber = @receiverAccountNumber and status = 1"; MySqlCommand queryBalanceCommandReceiver = new MySqlCommand(queryBalanceReceiver, DbConnection.Instance().Connection); queryBalanceCommandReceiver.Parameters.AddWithValue("@receiverAccountNumber", receiverAccountNumber); var balanceReaderReceiver = queryBalanceCommandReceiver.ExecuteReader(); var isExistReceiver = balanceReaderReceiver.Read(); if (!isExistReceiver) { throw new SpringHeroTransactionException("Invalid accountNumber"); } var currentBalanceReceiver = balanceReaderReceiver.GetDecimal("balance"); balanceReaderReceiver.Close(); if (historyTransaction.Type != YYTransaction.TransactionType.TRANSFER) { throw new SpringHeroTransactionException("Invalid transaction type!"); } //2. Tính toán lại số tiền tài khoản người gửi và người nhận. if (historyTransaction.Type == YYTransaction.TransactionType.TRANSFER) { currentBalance -= historyTransaction.Amount; currentBalanceReceiver += historyTransaction.Amount; } // 3. Update số dư vào dat1abase tài khoản người gửi. var updateAccountsender = 0; var queryUpdateAccountsender = "update `accounts` set balance = @balance where accountNumber = @senderAccountNumber and status = 1"; var cmdUpdateAccountsender = new MySqlCommand(queryUpdateAccountsender, DbConnection.Instance().Connection); cmdUpdateAccountsender.Parameters.AddWithValue("@senderAccountNumber", senderAccountNumber); cmdUpdateAccountsender.Parameters.AddWithValue("@balance", currentBalance); updateAccountsender = cmdUpdateAccountsender.ExecuteNonQuery(); // 4. Update số dư vào dat1abase tài khoản người nhận. var updateAccountreceiver = 0; var queryUpdateAccountreceiver = "update `accounts` set balance = @balance where accountNumber = @receiverAccountNumber and status = 1"; var cmdUpdateAccountreceiver = new MySqlCommand(queryUpdateAccountreceiver, DbConnection.Instance().Connection); cmdUpdateAccountreceiver.Parameters.AddWithValue("@receiverAccountNumber", receiverAccountNumber); cmdUpdateAccountreceiver.Parameters.AddWithValue("@balance", currentBalanceReceiver); updateAccountreceiver = cmdUpdateAccountreceiver.ExecuteNonQuery(); // 5. Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountsender == 1 && updateAccountreceiver == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (SpringHeroTransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }
public bool Tranfer(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. var transaction = DbConnection.Instance().Connection.BeginTransaction(); try { // 1. Lấy thông tin số dư mới nhất của tài khoản. var queryBalance = "select balance from `accounts` where accountnumber = @accountnumber and status = @status"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@accountnumber", currentLoggedInYyAccount.AccountNumber); queryBalanceCommand.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); if (historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } currentBalance -= historyTransaction.Amount; var updateAccountResult = 0; var queryUpdateAccountBalance = "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@accountnumber", currentLoggedInYyAccount.AccountNumber); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); var queryBalanceRecever = "select balance from `accounts` where accountnumber = @accountnumber and status = @status"; MySqlCommand queryBalanceCommandRecever = new MySqlCommand(queryBalanceRecever, DbConnection.Instance().Connection); queryBalanceCommandRecever.Parameters.AddWithValue("@accountnumber", historyTransaction.ReceiverAccountNumber); queryBalanceCommandRecever.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status); var balanceReaderRecever = queryBalanceCommandRecever.ExecuteReader(); if (!balanceReaderRecever.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalanceRecever = balanceReaderRecever.GetDecimal("balance"); balanceReaderRecever.Close(); if (historyTransaction.Amount > currentBalanceRecever) { throw new SpringHeroTransactionException("Not enough money!"); } currentBalanceRecever += historyTransaction.Amount; var updateAccountResultRecever = 0; var queryUpdateAccountBalanceRecever = "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1"; var cmdUpdateAccountBalanceRecever = new MySqlCommand(queryUpdateAccountBalanceRecever, DbConnection.Instance().Connection); cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@accountnumber", historyTransaction.ReceiverAccountNumber); cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@balance", currentBalanceRecever); updateAccountResultRecever = cmdUpdateAccountBalanceRecever.ExecuteNonQuery(); // 4. Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountResult == 1 && insertTransactionResult == 1 && updateAccountResultRecever == 1) { transaction.Commit(); return(true); } } catch (Exception e) { Console.WriteLine(e); throw; } return(true); }
public bool UpdateBalance(YYAccount account, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. var transaction = DbConnection.Instance().Connection.BeginTransaction(); // Khởi tạo transaction. try { /** * 1. Lấy thông tin số dư mới nhất của tài khoản. * 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw. * 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw. * 3. Update số dư vào tài khoản. * 3.1. Tính toán lại số tiền trong tài khoản. * 3.2. Update số tiền vào database. * 4. Lưu thông tin transaction vào bảng transaction. */ // 1. Lấy thông tin số dư mới nhất của tài khoản. var queryBalance = "select balance from `accounts` where username = @username and status = @status"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@username", account.Username); queryBalanceCommand.Parameters.AddWithValue("@status", account.Status); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); // 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw. if (historyTransaction.Type != YYTransaction.TransactionType.DEPOSIT && historyTransaction.Type != YYTransaction.TransactionType.WITHDRAW) { throw new SpringHeroTransactionException("Invalid transaction type!"); } // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw. if (historyTransaction.Type == YYTransaction.TransactionType.WITHDRAW && historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } // 3. Update số dư vào tài khoản. // 3.1. Tính toán lại số tiền trong tài khoản. if (historyTransaction.Type == YYTransaction.TransactionType.DEPOSIT) { currentBalance -= historyTransaction.Amount; } else { currentBalance += historyTransaction.Amount; } // 3.2. Update số dư vào database. var updateAccountResult = 0; var queryUpdateAccountBalance = "update `accounts` set balance = @balance where username = @username and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); // 4. Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountResult == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (SpringHeroTransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }
public bool TransferAmount(YYAccount account, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); var transaction = DbConnection.Instance().Connection.BeginTransaction(); try { // Kiểm tra số tài khoản mới nhất var queryBalance = "select `balance` from `account` where username = @username and status = 1"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@username", account.Username); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { throw new TransactionException("Invalid username"); } var currentBalance = balanceReader.GetDecimal("balance"); currentBalance -= historyTransaction.Amount; balanceReader.Close(); // Update số dư vào database. var updateAccountResult = 0; var queryUpdateAccountBalance = "update `account` set balance = @balance where username = @username and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); // Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transaction` " + "(id, fromAccountNumber, amount, content, toAccountNumber, type, status) " + "values (@id, @fromAccountNumber, @amount, @content, @toAccountNumber, @type, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@fromAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@toAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); // Kiểm tra lại câu lệnh if (updateAccountResult == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (TransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }
/* * Tiến hành chuyển khoản, mặc định là trong ngân hàng. * 1. Yêu cầu nhập số tài khoản cần chuyển. * 1.1. Xác minh thông tin tài khoản và hiển thị tên người cần chuyển. * 2. Nhập số tiền cần chuyển. * 2.1. Kiểm tra số dư tài khoản. * 3. Nhập nội dung chuyển tiền. * 3.1 Xác nhận nội dung chuyển tiền. * 4. Thực hiện chuyển tiền. * 4.1. Mở transaction. Mở block try catch. * 4.2. Trừ tiền người gửi. * 4.2.1. Lấy thông tin tài khoản gửi tiền một lần nữa. Đảm bảo thông tin là mới nhất. * 4.2.2. Kiểm tra lại một lần nữa số dư xem có đủ tiền để chuyển không. * 4.2.2.1. Nếu không đủ thì rollback. * 4.2.2.2. Nếu đủ thì trừ tiền và update vào bảng `accounts`. * 4.3. Cộng tiền người nhận. * 4.3.1. Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive. * 4.3.1.1. Nếu ok thì update số tiền cho người nhận. * 4.3.1.2. Nếu không ok thì rollback. * 4.4. Lưu lịch sử giao dịch. * 4.5. Kiểm tra lại trạng thái của 3 câu lệnh trên. * 4.5.1. Nếu cả 3 cùng thành công thì commit transaction. * 4.5.2. Nếu bất kỳ một câu lệnh nào bị lỗi thì rollback. * 4.x. Đóng, commit transaction. */ public void Transfer() { Console.WriteLine("------------------Transerf Information-------------------"); var accountNumber = "8ae77d16-4ef7-4e3b-8620-89a794030923"; var account = model.GetByAccountNumber(accountNumber); if (account == null) { Console.WriteLine("Invalid account info "); return; } Console.WriteLine("You are doing transaction with account :" + account.FullName); Console.WriteLine("enter amout to transfer"); var amount = Utility.GetDecimalNumber(); if (amount > account.Balance) { Console.WriteLine("Amout not enough to perfom transaction:"); return; } amount += account.Balance; Console.WriteLine("Please enter message conten:"); var content = Console.ReadLine(); Console.WriteLine("Are you sure you want to make a transaction with your account ? (y/n)"); var choice = Console.ReadLine(); if (choice.Equals("n")) { return; } var historyTransaction = new YYTransaction() { Id = Guid.NewGuid().ToString(), Type = 4, Content = content, Amount = amount, SenderAccountNumber = Program.currentLoggedInYyAccount.AccountNumber, ReceiverAccountNumber = account.AccountNumber, Status = 2, }; if (model.TransferAmount(Program.currentLoggedInYyAccount, historyTransaction)) { Console.WriteLine("Transaction success!"); } else { Console.WriteLine("Transaction fails, please try again!"); } Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }
public bool YTransaction(String trecieverAccount, YYTransaction historyTransaction) { DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công. var transaction = DbConnection.Instance().Connection.BeginTransaction(); // Khởi tạo transaction. try { //4.2 Trừ tiền người gửi. //4.2.1. Lấy thông tin số dư mới nhất của tài khoản. var queryBalance = "select balance from `account` where accountNumber = @accountNumber and status = 1"; MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection); queryBalanceCommand.Parameters.AddWithValue("@accountNumber", Program.currentLoggedInYyAccount.AccountNumber); var balanceReader = queryBalanceCommand.ExecuteReader(); // Không tìm thấy tài khoản tương ứng, throw lỗi. if (!balanceReader.Read()) { // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false. // Hàm dừng tại đây. throw new SpringHeroTransactionException("Invalid username"); } // Đảm bảo sẽ có bản ghi. var currentBalance = balanceReader.GetDecimal("balance"); balanceReader.Close(); //4.2.2 Kiểm tra số tiền chuyen di. if (historyTransaction.Amount > currentBalance) { throw new SpringHeroTransactionException("Not enough money!"); } //4.3. Update số dư vào tài khoản. //4.3.1. Tính toán lại số tiền trong tài khoản. currentBalance -= historyTransaction.Amount; //4.3.2. Update số dư vào database. var updateAccountResult = 0; var queryUpdateAccountBalance = "update `account` set balance = @balance where accountNumber = @accountNumber and status = 1"; var cmdUpdateAccountBalance = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@accountNumber", Program.currentLoggedInYyAccount.AccountNumber); cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance); updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery(); //4.4 Cong tien nguoi nhan //4.4.1 Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive. var queryString = "select * from `account` where accountNumber = @accountNumberR"; var cmd = new MySqlCommand(queryString, DbConnection.Instance().Connection); cmd.Parameters.AddWithValue("@accountNumberR", trecieverAccount); var reader = cmd.ExecuteReader(); var isExist = reader.Read(); if (!isExist) { throw new SpringHeroTransactionException("Invalid username"); } var fullname = reader.GetString("fullName"); Console.WriteLine(fullname); var accountReciverBalance = reader.GetDecimal("balance"); accountReciverBalance += historyTransaction.Amount; reader.Close(); //4.4.2 Update số dư vào database. var updateAccountReciver = 0; var queryUpdateAccountBalancReciveiver = "update `account` set balance = @balanceR where accountNumber = @accountR and status = 1"; var cmdUpdateAccountBalanceRecieve = new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection); cmdUpdateAccountBalance.Parameters.AddWithValue("@accountR", trecieverAccount); cmdUpdateAccountBalance.Parameters.AddWithValue("@balanceR", accountReciverBalance); updateAccountReciver = cmdUpdateAccountBalanceRecieve.ExecuteNonQuery(); // 4.5 Lưu thông tin transaction vào bảng transaction. var insertTransactionResult = 0; var queryInsertTransaction = "insert into `transactions` " + "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " + "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)"; var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection); cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id); cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type); cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount); cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content); cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber", historyTransaction.SenderAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber", historyTransaction.ReceiverAccountNumber); cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status); insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery(); if (updateAccountResult == 1 && updateAccountReciver == 1 && insertTransactionResult == 1) { transaction.Commit(); return(true); } } catch (SpringHeroTransactionException e) { transaction.Rollback(); return(false); } DbConnection.Instance().CloseConnection(); return(false); }