最近做票據系統,在此做一個總結。下面從幾個關鍵點逐一來闡述。
1. 庫存
通俗地講,票據系統的主要功能是出票、買票、賣票。買賣雙方之間的交易就形成了票據的流轉。這個過程中,票是最關鍵的元素。票據庫存是整個票據系統的核心,所有業務最終都是對庫存進行操作。對應有出庫、入庫操作。
交易類的庫存操作是在結算完成後進行處理的,結算完成後通知交易雙方然後各自處理自己的庫存;
非交易業務的庫存是在對方應答成功後進行的,首先是對方應答同意後處理,然後是本方收到對方應答同意後處理;
針對庫存有幾張關鍵的表設計:
(1)票據主表:主要是儲存票據中不變的一些資訊,比如票號、票據型別、出票日期、承兌日期、到期日、出票人、承兌人、收票人等等
(2)票據子表:儲存變化的部分,比如票號、子票區間、票據金額、持票人、票據狀態、流通狀態、庫存狀態、拆分狀態等等
(3)票據交易表:記錄所有對票據的的操作行為
(4)應收/應付表:這個主要是挑票用的,維護著誰持有哪些票據,因為有類似質押的行為存在,所以不能跟票據子表合併。這個表相當於是企業的個人記賬本。主要欄位有票號、子票區間、票據金額、可用餘額、本方企業資訊、對方企業資訊、前手人資訊、票據狀態等等
(5)票據背面表:主要用於展示票據背面資訊
(6)加鎖表:用於業務操作期間對票據加鎖
2. 拆票
電票是可以拆分的,持票人在辦理票據背書、貼現、保證、質押等業務時,可依實際業務需要,將持有票據包按實際支付金額分包流轉使用。
在傳送請求後,收到確認報文後進行拆分。拆票就是把一張票變成兩張票。
反映到表上就是原來票據字表中的一條未拆分的記錄,拆分後新增了兩條,總共變成三條記錄
假設原票據金額是10元,子票區間是0.01~10,再假設交易金額是2元,那麼首先將這個2元的拆出來,即它的子票區間是0.01~2
應收表中相應票據也需要做同樣的拆分
以上拆票邏輯同意適用於其它類似的憑證拆分流轉
3. 服務劃分
主要微服務:
下面以質押為例描述整個過程中庫存是如何變化的
1、A(出質人)申請將票據質押給B(質權人),首先儲存申請資訊,並提交審批,並對被質押的票據加鎖
2、審批通過後,傳送質押申請報文
3、收到確認報文後,更新票據狀態,檢查是否需要拆票,如有完成拆票動作
4、B應答同意,收到確認報文後,更新庫存。首先,修改票據狀態已收票,然後生成入庫交易記錄,進行入庫操作(即向自己的應收表中新增一條票據記錄)
5、A收到B應答同意報文後,更新自己的庫存。首先,票據解鎖,然後更新票據狀態已質押,生成交易,更新自己的應收票據表
6、以上在庫存操作時還會生成統計資料,並更新票據背面