統(tǒng)計(jì)系統(tǒng)
標(biāo)簽(空格分隔):NNK商戶開放平臺
目錄
- 1.統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)
- 1.1 模塊功能圖
- 1.2 統(tǒng)計(jì)數(shù)據(jù)模型(訂單狀態(tài)變動(dòng)模型)
- 2.數(shù)據(jù)庫設(shè)計(jì)
- 2.1 統(tǒng)計(jì)模塊(statistics.sql)
- 3.模塊接口設(shè)計(jì)
- 3.1 統(tǒng)計(jì)任務(wù)管理
- 3.2 交易統(tǒng)計(jì)
- 3.4 上游統(tǒng)計(jì)
- 3.5 資金統(tǒng)計(jì)
1. 統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)
1.1 模塊功能圖

1.2 統(tǒng)計(jì)數(shù)據(jù)模型(訂單狀態(tài)變動(dòng)模型)

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