发表于: 2018-03-06 21:38:22

1 598


今日完成

1.剩余方案的设计与讨论

所有数据使用jsontaglib构成json格式数据返回,具体数据字段因接口功能而异,构成详见接口文档。

后台:

用户管理

1、作为管理员,希望有一个用户列表,可以浏览所有用户

     方案:调用查询用户列表接口(user),不带参数,排序方式按注册时间(由新到旧),根据page,size参数查询出相应数据。

2、作为管理员,希望能搜索用户信息,可以精确定位具体用户

     方案:调用查询用户列表接口(user),带筛选参数,排序方式按注册时间(由新到旧),根据page,size参数查询出相应数据。

3、作为管理员,希望能冻结/解冻用户,可以防控用户作弊或减少账号被盗损失

     方案:调用更新单个用户信息表接口(user),accounts_status参数表示账户状态(0代表正常,1代表冻结), 将user表中得该字段设置为1 。

4、作为管理员,希望能查看用户详细信息,可以浏览用户交易记录、投资记录,进入用户投资记录列表,点击出借合同编号或债权协议编号可查看相应合同协议

     方案: (1)调用单个用户查询详情接口(tbl_user),带用户id参数,查询出用户详细信息 。

               (2)根据用户ID在user_bank表中查出该用户的银行卡信息,再根据bank_list_id查询出银行信息,返回银行名称。

            浏览用户交易记录:调用查看用户交易记录接口(接口中查询交易记录表trading_record中user_id = 用户id),带用户id参数,排序方式按交易时间由新到旧排序。

            浏览用户投资记录:调用查询用户投资记录接口(接口中查询用户产品关联表invest_record),带用户id参数,排序方式按投资起息日期。

            查看相应合同:调用查询合同接口(接口中查询投资记录表(tbl_investment)),带user_product_id参数,查询出合同相关信息,将数据传入到合同jsp页面中返回

5、作为管理员,希望能修改用户手机号,可以帮助用户修改手机号

     方案:调用更新单个用户信息表接口(user),带用户手机号参数。 

6、作为管理员,希望能修改理财经理工号,可以帮组用户更换理财经理 

     方案:调用更新单个用户信息表接口(user),带理财经理工号参数。 

7、作为管理员,希望能解绑银行卡,可以帮助用户解绑/更换银行卡 

     方案:调用更新单个银行卡信息表(user_bank)接口,

                调用删除单个用户银行卡信息表(user_bank)接口,调用更新单个用户信息接口(user),更新user_bank_id字段,带参数用户id,user_bank_id。  

8、作为管理员,希望能够查看用户实名审核记录 

     方案:调用查询用户表接口(user), 返回用户列表,带筛选参数,或者不带参数, 按照用户实名申请时间排序。 

9、作为管理员,希望能够审核和取消实名,可以帮助用户审核并反馈审核结果或者取消实名操作。 

     方案: 

     审核实名功能 

     调用更新单个用户信息表接口(tbl_user),更新实名状态,identity_status 字段,带参数user_id 。

     如果审核拒绝:更新被拒绝状态refuse_status,更新拒绝理由。

     审核通过:实名状态是审核通过identity_status 字段,理由为空。 

     取消实名功能

     调用更新单个用户信息表接口。

     实现逻辑:更改user表中用户实名状态字段、默认银行卡字段、身份证字段、身份证正反面图片字段,删除user_bank表中该用户的相关记录。


内容管理

1、作为管理者,希望有个内容列表,可以浏览所有运营内容

方案:调用查询内容接口(content)取出所有内容记录,根据page,size参数取出响应数据,排序方式为按level字段(由大到小)

2、作为管理者,希望能搜索内容信息,可以精确查找运营内容

方案:调用查询内容接口(content),根据筛选参数获取相应内容数据。

3、作为管理者,希望能上下线内容,可以控制运营内容在线与否

方案:调用更新内容接口(content),根据内容id、类型和是否上架参数(status),更新内容表(content)对应记录的上下架字段,同时要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功(推荐banner除外)。

实现逻辑:首先根据内容类型参数判断要上线的内容是哪一种。如果是推荐banner,则直接更新上下架字段。如果不是,则首先在tbl_content表中找到该类型正在线上的那条记录,然后将该条记录的status字段置为草稿,最后将当前这条记录的status字段置为上线.最后两个操作为一个原子性操作,一个失败则整体操作都失败。

4、作为管理者,希望能新增/编辑运营内容,可以创建/编辑新旧运营内容

新增内容 

方案:调用新增内容接口(content),根据内容对象参数在内容表里生成一条记录,如果要立即上线,则要要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功(推荐banner除外)。 

编辑内容 

方案:调用更新内容接口(content),根据内容对象参数更新内容表中对应记录,如果要立即上线,则要要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功(推荐banner除外)。 

推荐banner部分

注:每组banner包含一张封面小图和若干内容大图,前台app展示所有组的封面,点击封面可查看具体内容大图详情。后端表中存储则是一张图一条记录。

编辑banner时,修改标题则属于该标题的一组记录中的标题字段都会改变。实现时,用户点击编辑,则根据前端传入的banner记录标题,在tbl_content表中找出此标题的所有banner记录返回。前端编辑完成后点击提交,首先根据前端传入的内容对象参数id数组和标题,先去tbl_content表中查找是否存在已有标题的banner记录,如果记录存在,判断该记录id数组是否与内容对象参数id数组相同,如果相同,则说明当前编辑操作的目标是唯一的,否则说明当前传入的内容对象参数的标题与表中记录重复,当前编辑操作失败。如果记录不存在,则直接按照id更改表中记录。 

新增banner时,根据前端传入的内容对象参数标题,去tbl_content表中查找是否存在已有标题的banner记录,如果记录不存在,则在表中新增记录,否则当前新增操作失败。 

5、作为管理者,希望能删除运营内容,可以清理错误或不再使用的运营内容 

方案:调用删除内容接口(tbl_content),根据内容id参数删除内容表中对应记录 

逻辑实现:在对表进行删除操作之前先判断,如果该条记录的状态为线上,那么就不能执行删除sql语句,否则就删除.对于banner图类型,即使状态是草稿,如果该条记录是封面,

那么也不能删除,必须先将其type字段变为1之后(编辑操作中更换封面),才能删除.删除记录同时删除第三方云存储中的图片url.

Banner拖动排序 

方案:先调用查询内容接口,只带一个类型参数,查找所有banner类型的记录.然后再调用更新内容接口(tbl_content),参数为标题名称以及记录id数组 

关于banner图的拖动排序实现方案:从表中取出初始banner组记录返回给前端,前端完成拖动排序操作后,会返回排序后的记录id数组(比如[5,2,4,3,1]),后端根据此数组修改表中每张图片记录的order字段值 


销量统计 

1、作为管理者,希望能统计销量情况,可以实时了解产品总体运营状况 

方案一:调用查询产品销量统计接口,统计tbl_sales表中每种产品的销量,然后再统计当天截止目前的销量,最后根据不同产品构建一个list返回给前端。 

关于产品购买人数的统计规则:当天除重,隔天计数,总数除重 

实现逻辑: 

每天定时跑批时计算每一个产品的当天的销量情况,在sales表中生成一条记录

先查询出所有产品ID,再根据产品ID到sales表中将每个产品对应的购买人数,购买次数,购买金额累加后返回,再统计出当天投资的总投资记录。

接着,将该投资记录通过产品ID划分为几个小List,最后,分别对这些List统计购买人数(去重),购买次数,购买金额。

两类数据相加即为该产品的实时销量


2、作为管理者,希望能搜索产品名称或代号,可以精确查找产品对应销量

方案:调用查询产品销量统计接口(tbl_sales),根据筛选参数查询对应产品的销量数据并统计,最后构建一条数据返回给前端。实现逻辑同上。 

3、作为管理者,希望能查看每种产品的详细销量情况,可以帮助分析用户行为和产品之间的关系 

方案:调用查询产品销量统计接口(tbl_sales),带产品ID参数,在tbl_sales表中查出该产品的销量统计,然后再统计当天截止目前的销量,最后构建一个list返回给前端。 


后台管理

希望能对后台进行相关账号系统管理,可以对后台策略进行调整

有账户管理,修改密码,角色管理,模块管理四个模块,通过对这几个模块的操作,可以对后台管理人员进行调整

方案:通过四个表(tbl_manager, tbl_role, tbl_rol_module,tbl_module)的增删改查对后台进行管理.需要注意的是role的authority字段是一个数组,存放的是模块的id.


产品管理

1、作为管理者,希望有个产品列表,可以浏览所有产品

方案:调用查询产品列表接口(tbl_product),从tbl_product表中取出所有产品数据。精品推荐的产品在最前(推荐顺序order字段),默认按最新编辑时间倒序排序。

2、作为管理者,希望能搜索产品信息,可以精确查找产品

方案:调用查询产品列表接口(tbl_product),根据筛选参数从tbl_product表中取出对应产品数据,按order字段和最新编辑时间倒序排序。

3、作为管理者,希望能上下架产品,可以控制产品在售停售

方案:调用产品信息更新接口(tbl_product),根据产品id和上下架参数更新表中对应数据字段值。

4、作为管理者,希望能新增产品,可以创建出售新产品

方案:调用产品新增接口(tbl_product),根据产品对象参数,在tbl_product表中生成一条记录。

逻辑实现:新增保存后,默认产品状态为停售, 新增时根据是否为精品推荐字段判断是否要加入order值,如果order字段有值,它的值为表中存在的最大的order的值+1。

5、作为管理者,希望能编辑产品,可以更改老产品的部分属性

方案:调用产品信息更新接口(tbl_product),根据产品对象参数更新tbl_product表中对应数据。

6、作为管理者,希望能调整推荐产品排序,可以使前台精品推荐页的推荐产品按指定顺序切换

方案:调用产品信息更新接口(tbl_product),更改tbl_product表中推荐产品数据的order字段值。具体实现逻辑与内容管理拖拽排序相同。order字段只用于精品推荐产品的排序,产品没有删除操作,因此order字段值一定是连续的,前端无论如何拖拽(比如将普通产品拖拽到推荐产品之间),最终只传递推荐产品的顺序数组,第二次刷新页面查看时,精品推荐产品仍在最前。

7、作为管理者,希望能对新手产品进行限购,可以使用户(真实身份)仅能购买一次新手产品

方案:产品有限购字段值,新增或编辑产品时可以设置相应产品是否限购,调用接口时更改limited字段的值,如果有限制金额,则同时更改limited_capital_amount字段.

****下架的产品不影响已经购买的产品,但不可续投

方案:首先,用户点击续投之后,在用户产品关联表中记录一条记录(记录状态为续投),在产品点击下架后,同时根据用户id和产品id以及状态为已续投的参数,找到用户续投记录。

           接着,根据续投记录ID,找到续投记录对应的原投资记录,更改available字段为无效,更改again_investment_id字段为-1。

           最后,删除续投记录


债权管理

1、作为管理者,希望有个债权列表,可以浏览所有债权

方案:调用查询债权列表接口(tbl_credit),带page,size参数,从tbl_credit中取出所有债权数据,默认按创建时间排序。

2、作为管理者,希望能搜索债权信息,可以精确查找债权

方案:调用查询债权列表接口(tbl_credit),带page,size参数,根据筛选参数取出对应数据,默认按创建时间排序。点击查看调用单个债权查询接口,根据债权id取出对应债权记录。

3、作为管理者,希望能新增债权,可以创建新债权

方案:调用新增债权接口,根据债权对象,在tbl_credit表中生成一条记录。

4、作为管理者,希望能对债权匹配投资生成列表,可以记录投资与债权的对应关系(债权转让协议编号)

方案:点击”匹配未全”之后,调用单个债权匹配详情列表接口(matched=1),接口中根据债权id查询tbl_investment表,找出所有和该债权已经匹配的投资记录,然后再根据投资记录中的ubr_id查询到该条记录对应的用户购买的产品信息。

点击”匹配”,调用单个债权匹配详情列表接口(matched=0),根据债权id查询tbl_investment表,查询出该债权的详细信息。同时,查询未匹配的用户信息(债权id=-1)(只返回产品名称,到期时间,用户姓名,投资金额),组成一个list,然后调用功能类,对该list按照匹配规则排序,最后将排序后的list返回。



对于前端:预计剩余待匹配金额为负,则不允许保存

点击保存,则调用单个债权匹配操作接口,接口中更新tbl_investment表和tbl_credit表,修改债权记录,修改已匹配金额字段。

5、作为管理者,希望能变更匹配方案,可以手动调整更适配的方案

方案:前端选择匹配方案,选择确定后,调用单个债权匹配操作接口,带投资记录id、债权id参数、投资金额、投资合同编号(contract_serial_number_A),债权转让协议匹配成功后自动生成。


意见反馈

1、作为管理者,希望有个意见列表,可以浏览所有客户意见

方案:调用意见反馈接口,在tbl_suggestion表中获取所有意见数据,带page、size参数,默认按创建时间排序,生成list返回。

2、作为管理者,希望能搜索意见,可以精确查找意见

方案:调用意见反馈接口,带page、size参数,根据前端传入的筛选参数(手机号,邮箱,姓名,提交时间(区间)等),在tbl_suggestion表中获取对应意见数据,默认按创建时间排序,生成list返回。

3、作为管理者,希望能查看意见详情,可以详细了解客户的想法

方案:调用查询意见详情接口,根据路径参数(意见id),在tbl_suggestion表中取出对应意见数据返回。

4、作为管理者,希望能删除意见,可以清理无用的意见

方案:调用删除意见接口,根据路径参数(意见id),在tbl_suggetsion表中删除对应意见数据。


精品推荐页

1、作为用户,希望有个banner,可以轮播、点击查看详情获得相关活动信息

方案:前台调用查询内容接口(查询banner路径参数为1),在tbl_content表中取出类型为推荐banner、状态为上线的多组记录,构成list返回给前台。

2、作为用户,希望有推荐的产品,可以切换查看、快捷购买推荐产品

方案:前台调用产品查询接口,带推荐参数,在tbl_product表中取出推荐的产品数据(默认按创建时间排序),返回给前台。

用户点击产品时调用查看产品详情接口,入参是产品表id,返回产品详细信息给前端。

用户点击查看合同,调用查看合同接口,将该产品的合同的模版返回前端展示。

3、作为用户,希望有个消息按钮,可以快捷进入消息中心

方案:用户登录后返回的用户信息中有是否有未读消息字段,前端根据此字段值来设置快捷消息按钮是否携带红色标记。

进入消息中心后,调用查询消息接口,根据用户id参数查询tbl_message表,根据前端传入设定的page、size参数,返回消息记录列表,按创建时间排序。

如果点击的是公告消息,则调用查询消息接口,根据消息id查询到具体的公告消息后返回。

如果点击的是系统消息,如果该消息类型为投资失败,则不可点。如果是其他类型的消息则调用用户投资产品详情接口,带用户产品关联表id,通过该id在用户产品关联表(tbl_user_product)和投资记录表(tbl_investment)中查询出具体的记录返回。

用户点击完所有消息后(或一键标记全部已读),前端调用更新用户信息接口,更改tbl_user表中的是否有已读消息字段为已读状态。


理财产品列表

1、作为用户,希望有个产品列表,可以浏览所有理财产品简略信息

方案:前台调用产品查询接口,带page,size参数,在tbl_product表中取出所有在售产品的数据(推荐产品在最前按level顺序排序,其他按创建时间排序),返回给前台。

2、作为用户,希望可以点开列表项查看产品详情,可以了解更多产品基本信息

方案:前台调用产品详情接口,根据路径参数产品id,在tbl_product表中获取对应产品数据返回。前台点击进入产品详情,点击查看合同,调用查看合同接口,返回相应合同数据。

合同的模版是七份JSP页面,合同本身共有五种,出借咨询与服务协议,授权委托书-出借确认和债权转让,授权委托书-催收及诉讼,出借本金确认书,债券转让协议,但是出借咨询与服务协议是每一类产品各一种模版(新手计划,按月付息,到期换本,到期一次性还本付息),所以有七个合同模板。

调用查看合同接口时,根据不同的参数,返回不同的jsp页面,同时根据不同的参数决定是否返回用户签订的合同的相关数据,这些数据从tbl_investment表中获取.


产品续投:

1、 理财列表新增产品续投标签页

2、 投资中的非限购产品,在投资即将到期时(依后台参数设置定),如到期前5天,将展示在产品续投页

方案:

逻辑实现:先根据用户id以及投资状态(已投资)在用户产品关联表(tbl_user_product_relation)中查询出该用户的所有正在投资中并且available字段为-1的产品,然后根据该组记录中的产品id或产品编号查询产品表(tbl_product)中相关产品的状态,剔除限购或者停售的产品,最后再根据当前时间以及数据中的到期时间的差值判断该产品是否是投资即将到期,如果产品即将到期,则将最后筛选出的产品按编辑时间排序(由新到旧)返回给前端。

3、 进入详情页进行确认等额续投签字后,详情页显示已续投

方案:点击进入投资详情页,调用用户投资产品的详情接口,带用户id和产品id参数,查询tbl_user_product_relation和tbl_investment表,返回用户投资该产品的详细信息。点击确认后,调用投资接口,带用户id,产品id,投资金额,回款银行,还款方式等参数,接口中在(tbl_user_product_relation)表中新增一条记录,投资状态为已续投,并修改原投资产品的available和again_investment_id字段的值。同时在tbl_message表中新增一条记录,并修改tbl_user表中的相应字段,使用户有未读消息。

4.投资到期当天,回款只回利息,本金直接作为续投本金重新投资,并产生新的记录(交易记录、投资记录、系统消息推送、合同、匹配);产品续投页对应续投项完成并消失

方案:在每日跑批中实现。

备注:要在一进入web主页时就获取用户信息和用户实名信息,通过调用tbl_user表和tbl_verification表相关信息获得,前端根据返回的数据跳转到不同的页面。


投资列表页

1、作为用户,希望有个列表展示所有投资,可以方便大致浏览投资基本信息

方案:已登录用户进入投资栏,调用用户投资产品列表接口,根据用户id,在tbl_user_product_relation表中查询用户投资产品的所有记录(除了投资状态为空和续投中),返回给前端。

2、作为用户,希望能查看订单详情,可以更多的了解该笔投资的信息

方案:前台在投资页点击一款产品,调用投资产品详情接口,根据用户id和产品id,在tbl_user_product_relation表和tbl_investment表中查询对应的记录数据返回给前端。

3、作为用户,希望投资到期后投资本息自动回款,可以不用操心提现

方案:用户投资成功后,立刻根据用户投资的起息时间,期限,金额,年化收益率,计算出用户的还款计划,添加到repayment表中。

          跑批时查询repayment表中当前是否有到期的记录,根据相应记录的金额和用户以及产品信息调用支付接口打款。


我的页面

1、作为用户,希望有个账号设置,可以对个人信息(修改)进行查看、编辑

方案:

前台用户点击我的,调用查询用户信息接口,根据路径参数用户id,在tbl_user表中查询用户信息数据,返回相应字段数据给前端。

前台点击账户设置,调用查询用户信息接口,根据用户id在tbl_user表和tbl_user_bank_relation表中取出完整数据,返回给前端。

前台点击“保存”,调用更新用户信息接口,带电子邮箱,详细地址,默认银行卡号参数,在接口中通过用户id,更新tbl_user表,并同时更新tbl_user_bank_relation表。

前台进行实名认证,上传身份证正反面图片,调用图片上传接口,上传成功后,返回身份证正反面图片的url,然后调用更新用户信息接口,根据传入的用户姓名、身份证号码和身份证正反面图片url更新tbl_user表中的对应字段,同时在tbl_verification表中生成一条记录。

前台进行密码修改,调用修改密码接口,传入用户id,原密码和新密码,后台在tbl_user表中进行比对,如果原密码相同则将密码字段值置为新密码,修改成功。否则返回信息提示密码不正确。


3、作为用户,希望有个银行卡管理,可以添加银行卡

方案:

前台点击进入银行卡管理,调用查询用户详细信息接口,根据用户id在tbl_user_bank_relation表中查询用户绑定的银行卡信息,然后根据开户银行id在tbl_bank表中查询银行每日限额等信息,最后构建json数据返回给前端。

用户绑定银行卡,调用新增用户银行卡接口,传入用户姓名,身份证号,开户行所在城市,开户行名称,银行卡号,银行预留手机号参数,在tbl_user_bank_relation表中新增一条记录。

用户进行添加银行卡操作,点击“开户行”时,调用查询平台可用银行列表接口,查询tbl_bank表中的所有数据返回。

4、作为用户,希望有个交易流水,可以记录自己的收支情况

方案:用户点击交易流水,调用查询用户交易流水接口,带用户id参数以及page,size参数,根据用户id查询tbl_trade表,查询出的数据根据编辑时间排序后返回。

用户点击交易流水详情时,调用查询用户交易流水详情接口,根据交易类型和id查询出该条交易记录的详细信息返回。

备注:用户进行的每项投资,都会在后台相关表(tbl_user_product_relation,tbl_investment,tbl_trade,tbl_message)中记录信息,并且在投资成功(失败)、即将到期、回款成功(失败)时,会产生即时记录并发送消息给用户。

5、作为用户,希望那个有个消息中心,可以查看发送的消息

方案:用户进入消息中心查看,会调用查询消息接口,具体方案见“精品推荐”story中第3条。

6、作为用户,希望有个更多设置,可以查看帮助、意见反馈、安全登出

方案:更多设置

1)查看帮助:调用内容中的帮助中心接口(路径参数为2),查询tbl_content表中唯一上线的数据返回。

2)意见反馈:用户输入意见完成提交后,调用意见反馈接口,根据传入的用户名、手机号、邮箱和意见内容参数,在tbl_suggestion表中生成一条记录

3)安全登出:用户点击安全登出,调用登出接口,根据传入的用户id参数,删除用户的cookie,将操作结果(成功或失败)返回给前端。


购买理财产品

1、作为用户,希望能支付相应的金额,可以购买理财产品获得相应投资收益

方案:点击立即投资后,调用查询用户银行卡信息接口,带用户id参数,查询tbl_user_bank_relation表和tbl_bank表,返回用户的银行卡信息。

调用查询合同记录接口,不带参数,返回不同的合同模板jsp页面

用户投资产品操作(期间会调用图片上传接口)完成后,调用用户投资接口,首先进行支付操作,若支付成功,则根据传入的投资产品相关必填参数先修改tbl_user表中的账户总额字段,接着在tbl_user_product_relation表中生成一条记录,并生成用户的还款计划,在tbl_repayment表中新增记录。最后在tbl_trade表中生成一条记录,在tbl_investment表中生成一条记录,并在tbl_message表中生成一条记录同时发送消息给用户。

若支付失败,则不会操作tbl_user_product_relation表和tbl_contract表,会在tbl_trade表和tbl_message表中各生成一条记录同时发送消息给用户。

2、作为用户,希望购买时可以签署合同,可以获得一定法律保障

方案:上面方案已包含。

3、作为用户,希望有个理财计算器,可以模拟计算预期收益

方案:前台点击预期收益时,调用查看还款计划接口,传入相关信息,返回还款计划


登录 / 注册 / 忘记密码 / 理财经理

1、作为用户,希望能注册登录个人账号

方案:调用用户注册接口和用户登录接口,(注册期间会调用短信验证接口)传入注册和登录必须的参数,在tbl_user表中生成记录。

           登录注册成功后,生成token保存在cookie中,用于用户自动登录。

2、作为用户,希望能找回密码,可以避免账号损失

方案:调用找回密码接口,(期间会调用短信验证接口)传入用户手机号、短信验证码和新密码,后端比对正确后,在tbl_user表中更新该用户的密码字段值。


消息列表

1、作为管理者,希望有个消息列表,可以浏览所有消息

方案:调用查询公告消息接口,不带筛选参数,带page,size参数,查询tbl_message表,按编辑时间排序。

2、作为管理者,希望能搜索消息信息,可以精确查找消息

方案:调用查询公告消息接口,带筛选参数,带page,size参数,查询tbl_message表,按编辑时间排序。

3、作为管理者,希望能上下线消息,可以控制消息展示与否

方案:后台调用更新公告消息接口,根据消息id和上下架参数,在tbl_message表中更改对应数据的上下架字段值,同时更新tbl_user表的所有记录的是否有新消息字段。

4、作为管理者,希望能新增消息,可以创建上线新消息

方案:后台调用新增公告消息接口,根据传入的消息对象参数,在tbl_message表中生成一条记录(如果管理点推送,则设置推送消息字段为相应字段,发送同上,带定时则保存转换后的时间)。

5、作为管理者,希望能推送消息,可以使用户及时收到消息

方案:后台编辑消息完成后可选择即时发送或定时发送,提交后,后端会根据传入的参数类型设定即时任务或者定时任务,发送给所有用户。

定时发送逻辑:后台管理员点击保存后,先在表中生成记录,然后根据前端传入的时间参数调用定时任务,定时任务执行后更新tbl_message表中相应记录的消息状态字段,接着修改tbl_user表中所有用户的是否有未读消息字段。使用Timer、TimerTask功能类,实现实时任务。

6、作为管理者,希望能定时发送消息,可以使用户在预定的时间收到消息

方案:同上

7、作为管理者,希望能删除消息,可以清理错误或不再有时效的消息

方案:后台调用删除公告消息接口,传入消息id,在tbl_message表中删除对应记录。


银行限额管理

1、作为管理者,希望有个银行限额列表,可以浏览所有第三方支持银行

方案:后台调用查询银行列表接口,带page,size参数,查询tbl_bank表,取出所有银行数据返回,按编辑时间排序。

2、作为管理者,希望能搜索银行限额信息,可以精确查找银行限额

方案::后台调用查询银行列表接口,带page,size参数以及筛选参数,查询tbl_bank表,取出所有银行数据返回,按编辑时间排序。

3、作为管理者,希望能新增/编辑银行限额,可以输入新/老的银行限额

方案:后台调用新增/编辑银行接口,根据传入的银行对象参数,在tbl_bank中新增/更新相应的数据。


参数设置

1、作为管理者,希望能上传公章,可以方便管理公司公章供前台调用

方案:调用图片上传接口,上传公章图片,将第三方返回的电子签章url用于更新tbl_constant表字段。

2、作为管理者,希望能设置提前提醒天数,可以发送消息(推送)提醒用户投资到期

3、作为管理者,希望能设置提前提醒天数,可以发短信提醒后台管理人员债权到期

4、作为管理者,希望能设置总债权警戒线,可以发短信提醒后台管理人员总债权即将投满

方案:

管理员点参数设置时,调用查询常量表接口,查询tbl_constant表,返回该表中status字段为使用中的一条数据。

如果点保存,则调用新增常量表接口,带常量对象参数。在tbl_constant表中新增一条记录,设置该记录的status字段为正在使用,设置其他记录的status字段为未使用,同时查看该表的长度,如果有三条记录,则删除最旧的那条记录如果有两条,则什么也不做。

如果点还原,则调用更新常量表接口,不带参数,将tbl_constant表中的两条记录的status字段的值互换。


交易明细:

点击交易记录任一项,可打开交易明细,查看相应信息

方案:在之前的方案中已经有所提及,具体见”我的页面”第4条。


几大问题说明:

1:产品续投问题

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


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


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




2 : 推荐页banner图问题

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


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

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

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


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


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

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

用一个sql语句在tbl_user_product_relation表中查询出投资状态为投资中以及到期时间在该区间中的所有记录,形成一个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表中所有产品,根据产品代号和交易状态(付款成功)以及创建时间(为前一天的0点到24点之间,因为定时任务一般在凌晨执行,所以统计出的销量都是前一天的)去tbl_trade表中查询付款交易记录。查出的记录数量即为当天总购买次数,所有记录的购买金额累加即为当天总购买金额。使用distinct()函数可统计出除重后的当天总购买人数。最后,将结果存储在tbl_sales表中,新增一条记录。


4. 债权匹配规则实现

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


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

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

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


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

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

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


明日计划

1.讨论难点方案

遇到问题

1.限购续投问题,匹配问题,还款任务问题。

收获

1.熟悉项目细节


返回列表 返回列表
评论

    分享到