zoukankan      html  css  js  c++  java
  • 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.平台设立中间账户,降低转账产生的流水记录。
  • 相关阅读:
    git ssh keys
    git 修改 email
    git 撤销commit
    企微调试模式
    ORACLE 根据某个字段固定值进行分区
    Apache FtpClient login失败
    Oracle序列
    Oracle merage into
    Oracle all_tables 以及常用sql
    性能优化-使用高性能的库fastutil
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6775470.html
Copyright © 2011-2022 走看看