0
点赞
收藏
分享

微信扫一扫

P2P网络借贷系统-核心功能-用户投标-业务讲解


用户投标是P2P网络借贷系统的核心功能,相对比较复杂,为了更好地梳理业务和技术实现思路,特地详细总结分析下。

输入:用户id-uid,标的id-lid,投标金额-amount

1.根据lid,获得贷款标的信息(优先从Cache中取),不能为null,状态status应该“合法”。

  如果贷款标不存在,或者状态不对,立即返回到前端,不再继续后面的处理。

2.根据uid,查询用户的信息。

  贷款标的和用户信息是投标逻辑需要的。

3.投标检查。

  用户的账户是否存在、账户余额是否超过了投标金额amount。

  

4.根据uid、lid、amount等参数,构造投标tender对象,包含了投标需要的所有信息。

5.获得投标状态信息(事务锁住抢标状态,防止多个用户同时投标;使用数据库行级锁,分布式情况下也可以使用)。

  使用select ... for update 语句

6.累计投标金额,即把当前的投标总额加上当前投标用户的“金额”。

  这里面存在一个“争议”,假设标的总额2000,已经投了1800,用户投了300,这个时候300>200,理论上不能成功。

  如果不成功,用户抢到标却无法投,可能很伤心;如果让用户投,有的用户想“整投”,不想把钱“打散”,也可能很伤心。

  为了简化处理,一种方式是,把用户投标的钱算成200,即最大可投资金额。

  

7.更新投标状态。

8.保存投标信息tender对象。

9.扣除用户的账户钱,减去刚刚投资的金额,实际操作为把用户账户的钱转到平台账户下。

  存在一个问题,一次标,把所有用户的钱,转到平台账户,会需要很多次转账。

  因此,设立一个比较特殊的“中间账户”,所有用户的钱都转到“中间账户”,等标满了,一次性把中间账户的钱转到平台账户下。

  

10.返回投标信息,是否成功,投标金额等。

 

投标过程中的注意事项:

1.开启事务。

2.数据库行级锁,锁住投标状态。

3.检查用户的可投资金额等前提条件检查。

4.平台设立中间账户,减少转账产生的流水记录。

举报

相关推荐

0 条评论