发表于: 2017-10-04 20:48:02

1 790


一.今天完成的主要事情

修改数据表,并修改好了实现方案

这里贴出来的是方案中比较复杂问题的实现部分

几大问题说明:

1:产品续投问题

   当用户投资产品之后,在产品到期前几日(根据后台参数设置而定)再次选择续投该产品,确定续投成功后,会在tbl_user_product表中新生成一条记录,该记录与表中对应的正在投资的记录相关联(通过将各自的again_investment_id字段设置为对方的id),将续投记录和原投资记录中的available字段置为有效。同时根据用id和原投资产品ID,在tbl_repayment表中找出还款计划,更改还款金额。还款金额为(原还款金额-投资本金)并向用户发送消息,续投成功。

 

   ***如果用户续投后,原投资产品到期前产品下线,首先根据产品id在tbl_product表中将该产品下线,然后在通过产品ID,投资状态在tbl_user_product表中找到该产品的续投记录,通过续投记录中的again_investment_id字段找到原投资记录,更改原投资记录的available字段为无效,删除该条续投记录,同时根据用id和原投资产品ID,在tbl_repayment表中找出还款计划,更改还款金额。还款金额为(原还款金额+投资本金)并向用户发送消息:续投失败,并说明原因(产品已下架)。

 

   如果在原投资产品到期前该产品又重复上线,则根据产品id在tbl_product表中将该产品上线,然后在tbl_user_product表中根据产品Id,投资状态以及available=0找到原投资产品,更改available字段为1,同时在tbl_user_product表中新增一条记录,投资状态为已续投。将原投资产品中的again_investment_id更改为续投记录Id。同时根据用id和原投资产品ID,在tbl_repayment表中找出还款计划,更改还款金额。还款金额为(原还款金额-投资本金)并向用户发送消息:续投成功

 

 

 

2 : 推荐页banner图问题

前端前台看到的banner实际上是5组,每组有一张封面图和若干张内容图。前端后台新增/编辑banner内容时,操作目标是一组banner的内容(封面、内容)。后台上线时,可以不用下线已经上线的banner,直接上线一组轮播图即可(包括封面,内容)。

 

3.  跑批任务中要完成的功能和具体实现

功能1: 计算当前是否有用户需要付息(按月付息,到期一次性还本付息),是否有用户投资到期,需要还款,或者续投产品

实现方案:查询repayment表中还款日期为当天的记录,根据记录中的用户,产品信息和还款金额调用支付接口还款。还款成功,更改用户状态,更改tbl_user_product表中相应记录,在tbl_message表中新增一条记录,在tbl_trade表中新增一条记录。

 

查询tbl_user_product表中投资状态为已续投并且available=1的产品是否到期,如果到期,计算起息日期,更改投资状态为投资中,并在repayment表中生成相应还款记录。同时,更改用户状态,在tbl_message表中新增一条记录,在tbl_trade表中新增一条记录。

 

功能2:计算当前是否有用户投资快到期,决定是否向用户发送提醒消息

实现方案:首先,根据当前时间戳得出当天0点和24点的时间戳。再在这两个时间戳的基础上+(1000*3600*24*tbl_constant表中的invest_remind_days字段的值)得到两个新的时间戳构成一个区间。

用一个sql语句在tbl_user_product表中查询出投资状态为投资中以及到期时间在该区间中的所有记录,形成一个list。

对该list中的每个用户,在tbl_message表中新增记录,记录内容为:投资即将到期,并更改tbl_user表中相应记录的已读消息字段。

 

功能3:计算当前是否有债务人债务快到期,及时提醒管理人员

实现方案:首先,根据当前时间戳得出当天0点和24点的时间戳。再在这两个时间戳的基础上+(1000*3600*24*tbl_constant表中的invest_remind_days字段的值)得到两个新的时间戳构成一个区间。

用一个sql语句在tbl_credit表中查询出到期时间在该区间中的所有记录,形成一个list。统计该list的条目数量,编辑成短信,发送给后台管理人员(默认发给管理员)。

 

功能4:计算当前债权匹配额度和总债权额度之比是否到达警戒线.

实现方案:

方案:用sql语句(selectsum语句)在tbl_credit表中查询出所有的已匹配金额和总金额的累加之和。然后两个之比如果大于或等于tbl_constant表中的total_credit_cordon字段,则发送给后台管理人员(默认发给管理员)。

 

功能5:计算统计当天所有产品的销量。

实现方案:先查询tbl_product表中所有在售产品以及在24小时之内停售的产品,根据产品代号和交易状态(付款成功)以及创建时间(为前一天的0点到24点之间,因为定时任务一般在凌晨执行,所以统计出的销量都是前一天的)去tbl_trade表中查询付款交易记录。查出的记录数量即为当天总购买次数,所有记录的购买金额累加即为当天总购买金额。使用distinct()函数可统计出除重后的当天总购买人数。最后,将结果存储在tbl_sales表中,新增一条记录。

 

4. 债权匹配规则实现

1)根据金额在表中查出三个list(金额超出,金额相等,金额小于)。
2)再根据时间将每个list划分为3个list,这样一共有9个list。
3)对每个list按照规则排序,然后将9个list按照顺序组合起来,形成最终的排序好的数据。

 

5. 关于高并发时在表中新增记录的问题(购买产品)

问题描述:假如某时刻大量用户同时投资产品,需要在同一时刻在tbl_user_product,tbl_trade,tbl_message表中新增大量记录,有可能造成自增ID产生时报错的问题。

实现方案:使用IDcentor提前生成一定数量的Id作为缓存。


6.关于实时销量统计的问题

问题描述:假如大量用户同一时间投资产品,那么需要频繁更新某产品销量记录,由于mysql更新使用了排他锁,同一时间只能有一个线程对记录进行操作,有可能导致后续请求因等待时间过长而失败。

实现方案:将销量分为过去产品的销量和今天该产品的销量两部分,过去销量直接从销量统计表中查询计算后得出,当天销量通过查询实时购买记录后得出,这样即避免对某条记录频繁更新的问题。



二.明天的计划

1.约老大找时间继续评审

2.如果约不上时间就刷基础

三.遇到的问题

暂无

四.收获

以上

五.项目进度情况

有限期风险


返回列表 返回列表
评论

    分享到