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

来源:互联网 发布:淘宝古文观止 中华书局 编辑:程序博客网 时间:2024/04/28 03:32
用户投标是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.数据库行级锁,锁住投标状态(暂时使用hibernate悲观锁)。
3.检查用户的可投资金额等前提条件检查。
(参考小雷并修改)

鲁承星/Luke
P2P负责人/Leader
-----------------------------------------------------

微信 : 935042862
电话:13717825876
邮箱:lcxingperfect@163.com
地址: 北京市朝阳区望京金隅大厦A座(邮编:100102)

0 0
原创粉丝点击