导读:本文将通过一个交易平台的案例来简析财务系统的设计。通过为什么要设计财务系统、财务系统需求分析、设计方案以及如何保证账务信息一致性四大节进行分析。
1.为什么要设计财务系统?
为了提供给用户一个更加便利的交易体验,交易系统需要添加线上交易的功能,让会员用户可以直接在线上完成货款支付、手续费扣款等操作,从而代替旧有的线下交易模式。为了实现让用户在线上直接完成银行账户间的资金划转等操作,则需要系统与银行系统进行对接。通过与多家银行取得联系和探讨后发现不同银行之间交互方式差异明显,如果把交易系统和银行系统硬编码直接关联则会变得复杂和难以维护。所以决定设计一个模块用于处理不同银行间调用问题和银行系统与交易系统间的协调处理,同时这个模块还需要考虑系统性能、操作安全等问题,让交易代码与银行解耦,实现业务分离,这个模块就是财务系统。
2.财务系统需求分析:
对于财务系统的需求主要为以下三点:
2.1.需要记录各个账户的资金状况并且提供实时的查询接口
由于系统要求实时反映会员的资金情况,这样会员才可以根据自己的资金状况计划交易活动。但是系统不能每次在会员查询资金状况时都与银行系统交互。第一,与银行交互采用的是socket专线报文接收发送的方式,如果网络问题波动没有接收或响应则会降低了服务的稳定性。其次,会员查询资金信息需要通过财务模块调用银行后再逐步返回结果,过程中花费的时间也比较多,大量的操作会给财务模块带来压力。
解决方案:财务系统内也维护一套账户数据,会员查询信息则查询本地即可,不需要与银行交互。账务规定在每天约定时间与银行进行对账,保持账户数据信息的一致性。
2.2.需要为资金流转提供担保服务
买卖经常会出现些问题如:买方先付款还是卖方先发货、在交易的过程中如果卖方货已发出但是买方违约该如何处理等。
解决方案:在交易开始前将买方要支付的资金冻结起来,在交易成功之后支付费用或者失败之后解冻金额。
2.3.需要记录系统上所有资金变动,并提供查询接口
会员需要查询自己做过什么操作如什么时候转了钱、数额多少、接受方是谁等。
解决方案:与上述一样直接通过查询财务系统内部记的一套账户数据,而不需要直接调用银行。
3.如何设计财务系统
通过对以上的需求进行分析后可归纳需要定制以下四个方案,下面逐一细讲
3.1提供担保方案
经过讨论后有两种担保方案,方案一:是将货款先冻结到平台中,这时候便是归平台所有,平台则需要有一个担保户临时存放货款。方案二:将货款冻结到会员自己账户下,这时候依然归属于会员,但是直到交易结束钱这笔钱将处于冻结状态不能被使用。
3.2提供银行服务方案
财务系统和银行系统选择通过socket向银行服务发送报文,银行返回响应报文。为了各个系统之间服务调用的安全性,用户发起的资金操作需要通过中盾密钥安全校验模块来防止冒充用户进行非法操作等情况。而且与不同银行数据交互有不同的方案,主要包括报文加密等。另外与银行交互都是在专线上进行,进一步提高了数据传输的安全性。
3.3实时记录所有账户资金状况的方案
其实不妨想一想,平时去银行存钱的时候,银行是怎么记录每个人存了多少钱,银行给每个来存钱的人都开了一个账户,然后将存进去的钱记在这个账户下,其实这些概念都是相似的。那么在平台上我可以给每个实体都设置一个户。经过讨论分析后设计出以下这些户:
3.4记录资金变动方案
对于每一个户的资金变动,都用一份账来保存资金操作的信息,称为流水账。用一份账来保存资金变动信息,称为明细账。两份账的记录通过流水号进行关联,流水账记录下请求数据、响应数据,向银行发送的请求数据,以及银行返回给我们的数据。明细账记录着资金操作的金额,操作之后受影响的各个账户的余额,还有借贷标记以及记账日期等。
3.5 财务资金流图
这里为了让大家更好的了解户与户之间的关系以及资金流动的方式,则以图的形式展示了资金的流动。首先我们先来熟悉几个名词:
财务资金流图解析
图的基础解析
图的资金操作解析
4.如何保证账户信息一致性
对于每一笔资金操作都会调用银行接口,银行端对每一笔资金也操作也需要记账。也就是说同一套数据,银行端和财务端本地各自记各自的账。那么就会出现两边账户信息一致性问题:如错账要如何及时发现和处理等
解决方案:通过对账和预对账来解决。在指定的时间点检查自身账是否有错账以及跟银行进行对账就是对账模块的主要功能。一旦发现错账就需要人工介入进行分析和处理,出现错账的原因有很多,需要谨慎处理。常见的处理方式有冲账、抹账等。
留言与评论(共有 0 条评论) |