发表于: 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. 债权匹配规则实现
5. 关于高并发时在表中新增记录的问题(购买产品)
问题描述:假如某时刻大量用户同时投资产品,需要在同一时刻在tbl_user_product,tbl_trade,tbl_message表中新增大量记录,有可能造成自增ID产生时报错的问题。
实现方案:使用IDcentor提前生成一定数量的Id作为缓存。
6.关于实时销量统计的问题
问题描述:假如大量用户同一时间投资产品,那么需要频繁更新某产品销量记录,由于mysql更新使用了排他锁,同一时间只能有一个线程对记录进行操作,有可能导致后续请求因等待时间过长而失败。
实现方案:将销量分为过去产品的销量和今天该产品的销量两部分,过去销量直接从销量统计表中查询计算后得出,当天销量通过查询实时购买记录后得出,这样即避免对某条记录频繁更新的问题。
二.明天的计划
1.约老大找时间继续评审
2.如果约不上时间就刷基础
三.遇到的问题
暂无
四.收获
以上
五.项目进度情况
有限期风险
评论