Java实现查询账户项目方案

项目背景

在金融行业,账户查询是一个非常常见的需求。用户需要通过系统查询自己的账户余额、交易记录、账单等信息。因此,我们需要开发一个账户查询系统,以方便用户查询相关信息。

项目需求

  1. 用户可以通过系统查询自己的账户余额。
  2. 用户可以查看最近的交易记录。
  3. 用户可以查询自己的账单。
  4. 系统需要对用户的查询进行权限验证,确保只有合法的用户才能访问账户信息。

技术选型

  1. 后端开发语言: Java
  2. 后端框架:Spring Boot
  3. 数据库:MySQL
  4. 前端开发语言:HTML、CSS、JavaScript
  5. 前端框架:Vue.js

系统设计

后端设计

数据库设计

在MySQL中创建账户表(account)、交易记录表(transaction)和账单表(bill)。

CREATE TABLE account (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  balance DECIMAL(10, 2) NOT NULL,
  user_id INT NOT NULL
);

CREATE TABLE transaction (
  id INT PRIMARY KEY AUTO_INCREMENT,
  account_id INT NOT NULL,
  amount DECIMAL(10, 2) NOT NULL,
  transaction_date DATE NOT NULL,
  FOREIGN KEY (account_id) REFERENCES account(id)
);

CREATE TABLE bill (
  id INT PRIMARY KEY AUTO_INCREMENT,
  account_id INT NOT NULL,
  amount DECIMAL(10, 2) NOT NULL,
  bill_date DATE NOT NULL,
  FOREIGN KEY (account_id) REFERENCES account(id)
);
后端接口设计

使用Spring Boot创建RESTful接口,提供查询账户余额、最近交易记录和账单的功能。

@RestController
@RequestMapping("/api/accounts")
public class AccountController {

  private final AccountService accountService;

  public AccountController(AccountService accountService) {
    this.accountService = accountService;
  }

  @GetMapping("/{userId}")
  public Account getAccount(@PathVariable("userId") int userId) {
    return accountService.getAccount(userId);
  }

  @GetMapping("/{userId}/transactions")
  public List<Transaction> getTransactions(@PathVariable("userId") int userId) {
    return accountService.getTransactions(userId);
  }

  @GetMapping("/{userId}/bills")
  public List<Bill> getBills(@PathVariable("userId") int userId) {
    return accountService.getBills(userId);
  }
}
后端服务逻辑

实现账户查询的业务逻辑。

@Service
public class AccountService {

  private final AccountRepository accountRepository;
  private final TransactionRepository transactionRepository;
  private final BillRepository billRepository;

  public AccountService(AccountRepository accountRepository, TransactionRepository transactionRepository,
                        BillRepository billRepository) {
    this.accountRepository = accountRepository;
    this.transactionRepository = transactionRepository;
    this.billRepository = billRepository;
  }

  public Account getAccount(int userId) {
    return accountRepository.findAccountByUserId(userId);
  }

  public List<Transaction> getTransactions(int userId) {
    return transactionRepository.findTransactionsByUserId(userId);
  }

  public List<Bill> getBills(int userId) {
    return billRepository.findBillsByUserId(userId);
  }
}

前端设计

页面设计

使用HTML、CSS和JavaScript开发前端页面,使用Vue.js框架进行数据绑定和展示。

<template>
  <div>
    账户余额:{{ account.balance }}
    <h2>最近交易记录:</h2>
    <ul>
      <li v-for="transaction in transactions" :key="transaction.id">
        {{ transaction.amount }} - {{ transaction.transactionDate }}
      </li>
    </ul>
    <h2>账单:</h2>
    <ul>
      <li v-for="bill in bills" :key="bill.id">
        {{ bill.amount }} - {{ bill.billDate }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      account: {},
      transactions: [],
      bills: []
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      const userId = 1; // 用户ID,根据实际情况传入当前用户的ID
      // 调用后端接口获取数据
      axios.get(`/api/accounts/${userId}`).then(response => {
        this.account = response.data;
      });
      axios.get(`/api/accounts/${userId}/transactions`).then(response => {
        this.transactions = response.data;
      });
      axios.get(`/api/accounts/${userId}/