[从零开始的账本项目05] 账单模块

532 阅读2分钟

前情提要: 之前已经完成了用户模块、账户模块、账本模块, 本次需要完成的账单模块算是整个账本的最后一块拼图.

贴上之前画好的数据库关系图:

image.png

完成了对应的UserBookAccount, 假定本次完成了Bill. 那么账本的核心使用逻辑就算是初步打通了:

用户创建账本/账户, 在某一个账本中创建对应的账单, 同时这个账单可以同时绑定所存在的账本和账户(账户可以为NULL).

对于Bill数据类:

  • id: 账单的id. 作为主键.
  • type: 账单的类型, 如"饮食","日用品"等, 可以由前端进行相应的指定
  • balance: 账单的金额, 与图片中稍有出入, 数据库中设置的是两位小数.
  • accountId: 账单所绑定的账户ID
  • bookId: 账单所绑定的账本ID
  • tags: 账单的标签, 如在type为"饮食"时, 就可以指定tags为"早餐 食堂", 通过空格进行多个tag的分隔.
  • createTime: 账单创建的时间. 目前默认使用SQL中的now()进行指定. 但是考虑到可能会漏记之后补充账单, 可以通过创建账单时传入createTime属性进行指定.
  • io: 收支类型, 根据形似程度, 使用1作为收入(in), 使用0作为支出(out)

在确定了数据类之后. 就是简单的增删改查SQL语句的注入. 也就是BillDao的编写.

@Mapper
public interface BillDao {

    Integer saveBill(@Param("bill") Bill bill);

    Integer deleteBillById(@Param("id") Long id);

    Integer updateBillById(@Param("bill") Bill bill);

    Bill getBillById(@Param("id") Long id);

    List<Bill> getBillsByBookId(@Param("bookId") Long bookId);

    List<Bill> getBillsByAccountId(@Param("accountId") Long accountId);
}

由于账单模块作为整个账本中算是最基本的一个模块. 因此可以通过多种方式进行账单查询.
例如此处的getBillsByBookId以及getBillsByAccountId.通过账户以及账本的ID对账单进行一个集合的查询返回.
那可能就注意到为什么没有通过用户的ID进行查询. 因为在数据库中, 账单只绑定了对应的账户与账本的ID, 而如果需要查询用户的所有账单, 则需要通过整合用户的所有账本/账户中的账单进行返回. 那就不应该在账单模块进行处理了(我是这么觉得的).
因此. 不能够越过账本与账户的数据, 直接使用用户ID进行相应账单的查询返回.

相应的mapper与之后的servicecontroller.
与之前的模块别无二致. 也就不再赘述了.

至此. 账本的四个主要模块就算是完成了. UserAccountBookBill.
之后便是对几个模块进行分布式的整合. 算是练习一下对应的框架.


欢迎各位来对我的小项目提出各种宝贵的意见, 这对我的进步非常重要, 谢谢大家.
GitHub地址: Bngel/bngelbook