统计系统
标签(空格分隔):NNK商户开放平台
目录
- 1.统计系统设计
- 1.1 模块功能图
- 1.2 统计数据模型(订单状态变动模型)
- 2.数据库设计
- 2.1 统计模块(statistics.sql)
- 3.模块接口设计
- 3.1 统计任务管理
- 3.2 交易统计
- 3.4 上游统计
- 3.5 资金统计
1. 统计系统设计
1.1 模块功能图
系统模块.png1.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、资金流水类型、统计日期范围(可选择合计或不合计),统计总资金流水、总冻结资金流水,总流水次数
网友评论