統計系統
標簽(空格分隔):NNK商戶開放平臺
目錄
- 1.統計系統設計
- 1.1 模塊功能圖
- 1.2 統計數據模型(訂單狀態變動模型)
- 2.數據庫設計
- 2.1 統計模塊(statistics.sql)
- 3.模塊接口設計
- 3.1 統計任務管理
- 3.2 交易統計
- 3.4 上游統計
- 3.5 資金統計
1. 統計系統設計
1.1 模塊功能圖
系統模塊.png
1.2 統計數據模型(訂單狀態變動模型)
狀態變動圖.png
統計日期 | 變動狀態 | 數量 |
---|---|---|
2016-01-01 | 訂單不存在 | 0 |
2016-01-02 | 1.NULL->3.中間狀態 | 1 |
2016-01-03 | 3.中間狀態->5.中間狀態 | 1 |
2016-01-04 | 5.中間狀態->6.當前狀態 | 1 |
【1.NULL】:訂單未創建之前的狀態描述
【2.初始狀態】:剛創建時的訂單狀態,此狀態為固定狀態,可看作是邏輯狀態,以訂單表-創建時間為操作時間;
【3.4.5.中間狀態】:中間變化的訂單狀態,記錄在訂單快照表上,以快照表-訂單更新時間為操作時間,快照記錄的情況有:后臺修改已完成訂單的狀態時會記錄、統計到處于處理中的訂單會被記錄,中間狀態不一定存在;
【6.當前狀態】:訂單表當前的記錄狀態,以訂單表-更新時間為操作時間
說明:以上表示一筆訂單的狀態變化流程,下面利用【訂單狀態變動模型】模擬一筆訂單統計的結果
統計日期 | 變動狀態 | 數量 |
---|---|---|
2016-01-01 | 訂單不存在 | 0 |
2016-01-02 | 1.NULL->3.中間狀態 | 1 |
2016-01-03 | 3.中間狀態->5.中間狀態 | 1 |
2016-01-04 | 5.中間狀態->6.當前狀態 | 1 |
2. 數據庫設計
2.1 統計模塊(statistics.sql)
- 統計數據項表:ecsys_statistics_itemInfo
- 交易統計維度表:ecsys_statistics_tradeDimensionInfo
- 交易統計快照表:ecsys_statistics_tradeSnapshotInfo
說明:統計時記錄未處理完成的訂單,業務系統針對處理完成訂單修改時記錄快照
針對交易訂單表:更新任何字段都需要更新updateTime,針對已處理完成的訂單更新時需記錄快照
- 上游統計維度表:ecsys_statistics_externDimensionInfo
- 上游統計快照表:ecsys_statistics_externSnapshotInfo
- 資金統計表:ecsys_statistics_balanceInfo
- 對賬單記錄表:ecsys_statistics_StatementInfo
3. 模塊接口設計
3.1 統計任務管理
- 執行統計任務
說明:可調用此接口執行統計任務,如交易統計,上游統計,資金統計等,可指定一些通用的任務參數,如統計時段,數據查詢頻率時長等。
交易統計流程:
【環節1-統計時段內創建的訂單】
(1)以ecsys_tradeOrder_orderInfo.nnkOrderCreateTime為條件查詢時段內訂單,進入步驟-2
(2)判斷ecsys_tradeOrder_orderInfo.updateTime是否在時段內
如果是,則進入【環節4:建立訂單狀態變動模型】
如果否,則進入步驟-3
(3)根據ecsys_tradeOrder_orderInfo.nnkOrderId查詢ecsys_statistics_tradeSnapshotInfo快照記錄,得到交易訂單和快照記錄集合,進入【環節4:建立訂單狀態變動模型】
【環節2-統計時段內ecsys_tradeOrder_orderInfo變動的訂單】
(1)在ecsys_tradeOrder_orderInfo中,查詢條件:updateTime在時段內,nnkOrderCreateTime不在時段內的訂單,進步步驟-2
(2)根據ecsys_tradeOrder_orderInfo.nnkOrderId查詢ecsys_statistics_tradeSnapshotInfo快照記錄,得到交易訂單和快照記錄集合,進入【環節4:建立訂單狀態變動模型】
(3)把nnkOrderId記錄緩存標記已處理
【環節3-統計時段內ecsys_statistics_tradeSnapshotInfo變動的訂單】
(1)在ecsys_statistics_tradeSnapshotInfo中,查詢條件:snapshotCreateTime在時段內,nnkOrderCreateTime不在時段內的快照訂單,進入步驟-2
(2)根據【環節2-3緩存】查詢訂單是否已處理,
如果已處理,則結束
如果未處理,則進入步驟-3
(3)根據nnkOrderId在ecsys_statistics_tradeSnapshotInfo中查詢其他快照記錄,在ecsys_tradeOrder_orderInfo中查詢交易記錄,得到交易訂單和其快照記錄集合,進入【環節4:建立訂單狀態變動模型】
(4)把nnkOrderId記錄緩存標記已處理
【環節4-建立訂單狀態變動模型】
(1)根據接受交易訂單或快照記錄建立【訂單狀態變動模型】,進入步驟-2
(2)根據【訂單狀態變動模型】得到時段內最初的記錄,取時段之前最近的記錄,如果不存在則取NULL,進入步驟-3
(3)根據【訂單狀態變動模型】得到時段內最后的記錄,取時段內最后一條記錄,如果不存在則取NULL,進入步驟-4
(4)根據以上處理得到了時段內,最初以及最后的記錄,判斷最初與最后記錄狀態不同相同 且 最后記錄不為NULL
如果條件成立,則按【統計條件】分類統計:【最初記錄狀態-> 最后記錄狀態 +1】,并把統計結果記錄緩存,進入步驟-5
如果條件不成立,則進入步驟-5
(5)判斷訂單是否處理完成,如果未處理完成,則記錄到ecsys_statistics_tradeSnapshotInfo快照表中
【環節5-統計最后處理】
(1)把緩存內的統計結果,存儲到交易統計維度表(ecsys_statistics_tradeDimensionInfo)與統計數據項表(ecsys_statistics_itemInfo),如果交易統計維度表存在對應的【統計條件】記錄則使用現有的,如不存在則新增;
上游統計流程:同【交易統計】流程類似
資金統計流程:根據任務條件:(統計時段、數據查詢頻率時長),在資金流水表(ecsys_account_balanceSubLog),按統計條件(交易日期、賬戶ID、渠道ID、資金流水類型)分類統計變化的資金,變化凍結的資金,然后把統計結果存儲到資金統計表(ecsys_statistics_balanceInfo)上 - 取消統計任務
說明:可調用此接口取消正在執行的統計任務,需要調用正在執行此任務的APP的接口(調用執行統計任務的時候需要記錄APP_ID),并指明統計任務ID。
3.2 交易統計
- 查詢交易統計記錄
說明:
根據統計條件:渠道ID、業務類型、產品類型、產品單位數量、產品供應商、產品省份、產品區號、統計日期范圍(可選擇合計或不合計)
得到統計結果數據:(接單訂單統計項、成功訂單統計項、部分成功訂單統計項、超額成功訂單統計項、失敗訂單統計項、待定訂單統計項),其中每個統計項都包括:(訂單筆數總計、產品單位數量總計、已支付金額總計)。
流程:
(1)交易統計維度表(ecsys_statistics_tradeDimensionInfo)與統計數據項表(ecsys_statistics_itemInfo)連表查詢,根據【統計條件】查詢出對應記錄,由于可能查詢的記錄數很多,所以請考慮分段查詢;
(2)根據以上統計記錄,計算每筆統計記錄的【統計結果數據】,此處需判斷訂單是否接單成功,是否處理成功等,請按【交易統計維度表】的原始狀態和當前狀態來判斷,其中根據原始狀態得到的【統計結果數據】為負數(狀態為NULL不計入),根據當前狀態得到的【統計結果數據】為正數,兩者都需要判斷統計;
(3)根據以上得到的【統計結果數據】,按【統計條件】再分類統計,得到最終統計結果后返回。
- 查詢交易快照記錄
3.3 上游統計
- 查詢上游統計記錄
說明:同【查詢交易統計記錄】流程類似 - 查詢上游快照記錄
3.4 資金統計
- 查詢資金統計記錄
說明:在資金統計表(ecsys_statistics_balanceInfo)中,根據查詢條件:賬戶ID、渠道ID、資金流水類型、統計日期范圍(可選擇合計或不合計),統計總資金流水、總凍結資金流水,總流水次數