Пример #1
0
        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);
        }
Пример #2
0
        // 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();
        }