public bool TransferAmount(YYaccountnumber 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 `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(); // 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 và hiển thị tên người 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. //4. Thực hiện chuyển tiền. // 4.1 Mở transaction. // 4.2 Trừ tiền người gủi /*4.2.1 Lấy thông tin tài khoản tiền mooitj 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.3 Lưu lịch sử giao dịch // 4.x .Đóng , comit transaction. public void Transfer() { Console.WriteLine("------------------Transerf Information-------------------"); var accountNumber = "3bbfb97d-6296-45fd-8835-8b7815f5d6dc"; 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.getUsername(Program.currentLoggedInYyAccount.Username); Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance); Console.WriteLine("Press enter to continue!"); Console.ReadLine(); }