发表于: 2018-03-09 17:29:47
1 731
今日完成
1.项目方案已经完成,下午队友请假。所以周一评审。
一、架构图和说明
web
1.前台polyFinance-GirlsDream-home-web:
登录注册,银行卡管理,消息中心,查看交易流水,查看产品列表,查看产品详情,产品投资,产品续投
2.后台polyFinance-GirlsDream-admin-web:
用户管理,实名认证,产品管理,债权管理, 内容管理,消息管理, 银行管理,参数设置,意见反馈,版本管理,销量统计,后台管理
service
1.polyFinance-common-service:
短信模块,第三方存储模块,内容管理,版本管理,意见反馈
2.polyFinance-public-service:
登录注册,实名认证,银行卡管理,后台管理
3.polyFinance-business-service:
查看产品列表,查看产品详情,产品投资,产品续投,查看交易流水,消息中心, 产品管理,债权管理, 银行管理,销量统计,参数设置
4.polyFinance-etl-service
主要执行定时任务
core
polyFinance-GirlsDream-home-core:
实体类对应的model,工具类(排序、编号转换等)
cache
使用redis缓存
DB
关系型数据库mysql
------------------------------------------------------------------------------我是靓丽的分割线-----------------------------------------------------------------------------------------------------
二、表格的简单说明
(1)user表
存用户用信息
COLUMN | COMMENT |
id | 自增长ID |
phone_num | 手机号码 |
pswd | 密码 |
salt | 盐值 |
manager_num | 理财经理工号 |
name | 真实姓名 |
total_property | 总资产 |
accounts_status | 帐户状态 |
address | 详情地址 |
电子邮箱 | |
IDCard_fornt | 身份证正面 |
IDCard_back | 身份证反面 |
IDCard | 身份证号码 |
identity_status | 实名状态 |
refuse_reason | 拒绝理由 |
refuse_status | 被拒绝状态(1代表非第一次) |
identity_time | 申请实名时间 |
user_bank_id | 默认银行卡(关联user_bank_id) |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人id |
update_by | 更新人id |
(2)user_bank表
存用户的银行卡表
COLUMN | COMMENT |
id | 自增长ID |
city | 城市 |
bank_list_id | 关联bank_list表id |
Card_no | 银行卡号 |
bank_phone | 预留手机号 |
user_id | 关联user表id |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(3)user_message
用户信息表,存用户得回款信息,付款信息
COLUMN | COMMENT |
id | 自增长ID |
user_id | 关联user表id |
message_type | 消息类型 |
message_read_status | 消息阅读状态 |
content | 消息内容 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(4)invest_record
投资记录表,存用户对应得投资记录
COLUMN | COMMENT |
id | 自增长ID |
user_id | 关联user表id |
product_name | 产品名称 |
product_interest_rate | 收益率(无%) |
product_payment_method | 还款方式 |
product_interest_amount_line | 起投金额 |
repayment_card | 回款银行卡号 |
repayment_bank_name | 回款银行名称 |
invest_amount | 投资金额 |
comodato_num | 出借合同编号 |
intercreditor_agreement | 债权协议编号 |
invest_status | 投资状态 |
matched | 匹配状态 |
undistributed_income | 未分配收益 |
distribution_income | 分配收益 |
value_start_day | 起息日 |
value_end_day | 到息日 |
create_at | 注册时间 |
create_by | 创建人id |
(5)trading_record
用户交易记录表,存用户得交易记录
COLUMN | COMMENT |
id | 自增长ID |
user_id | 关联user表的id |
trading_num | 交易流水号 |
product_name | 产品名称 |
trading_amount | 交易金额 |
trading_type | 交易类型 |
trading_status | 交易状态 |
trading_mode | 交易方式(银行,尾号) |
trading_time | 交易时间 |
create_by | 创建人id |
(6)debtor
债务人表,记录债务人得信息
COLUMN | COMMENT |
id | 自增长ID |
debtor_mark | 债务人编号 |
debtor_name | 姓名 |
debtor_phone | 手机号 |
debtor_IDcard | 债务人身份证号码 |
expires | 出借期限 |
debt_start_time | 出借日期 |
debt_end_time | 到期日期 |
amount | 出借金额 |
status | 状态 |
remark | 备注 |
nature | 债权性质 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(7)product
产品表,记录所有产品得信息
COLUMN | COMMENT |
id | 自增长ID |
product_mark | 产品代号 |
name | 产品名称 |
interest_rate | 收益率(无%) |
financial_period_day | 投资期限(天) |
financial_period_month | 投资期限(月) |
payment_method | 还款方式 |
interest_delayed | 起息日期(延后多少天算利息) |
product_status | 产品状态 |
interest_amount_line | 起投金额 |
remark | 备注 |
details_pic | 更多详情 |
hot_corner_mark | 热门产品 |
new_corner_mark | 新近产品 |
recommended | 精品推荐 |
limited | 限购 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(8)content
内容表,记录banner,推荐页,等消息
COLUMN | COMMENT |
id | 自增长ID |
title | 标题 |
type | 类型 |
status | 状态 |
content_pic | 内容时间 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(9)sys_message
系统消息表
COLUMN | COMMENT |
id | 自增长ID |
title | 标题 |
type | 类型 |
status | 状态(上线,草稿) |
resume | 摘要 |
message_pic | 图片 |
message_type | 消息类型 |
send_to | 发送人群 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(10)suggestion
意见反馈表
COLUMN | COMMENT |
id | 自增长ID |
phone | 手机号 |
name | 姓名 |
suggestion_detail | 内容 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(11)bank_list
记录银行信息
COLUMN | COMMENT |
id | 自增长ID |
name | 银行名称 |
payment_agency_number | 支付机构号 |
withdraw_agency_number | 提现机构号 |
single_transaction_limit | 单笔限额 |
daily_limit | 日累计限额 |
logo_pic | ICON |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(12)admin
后台用户表
COLUMN | COMMENT |
id | 自增长ID |
login_name | 登录名 |
role_id | 关联admin_roleb表角色id |
pswd | 密码 |
salt | 盐值 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(13)admin_role
后台用户角色表
COLUMN | COMMENT |
id | 自增长ID |
name | 角色名 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(14)settings
后台设置参数表
COLUMN | COMMENT |
id | 自增长ID |
company_chop | 公章 |
invset_expire_warn | 投资到期消息提前天数 |
days_before_maturity | 债权到期提前天数 |
invest_full_line | 总债权投满警戒线 |
status | 设置状态 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(15)count
销量统计表
COLUMN | COMMENT |
id | 自增长ID |
product_id | 关联product表id |
date | 统计日期 |
purchase_times | 购买次数 |
purchase_amount | 购买金额 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更新人 |
(16)
module
模块表,记录所有后台模块
COLUMN | COMMENT |
id | 自增长ID |
module_name | 模块名字 |
url | 模块对应url地址 |
parent_module_id | 父模块ID |
module_type | 模块类型 |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人id |
update_by | 更新人id |
(17)authority
权限表,记录用户角色的权限
COLUMN | COMMENT |
id | 自增长ID |
role_id | 关联role表id |
module_id | 关联module表id |
create_at | 注册时间 |
update_at | 更新时间 |
create_by | 创建人 |
update_by | 更人 |
(18)debtor_invsetment
债务人_投资匹配表
COLUMN | COMMENT |
id | 自增长ID |
debtor_id | 债务人id |
invest_record_id | 关联invest_record表id |
(19)repayment
还款计划表
COLUMN | COMMENT |
id | 自增长ID |
user_id | 关联user表id |
invest_record_id | 关联invest_record表id |
repayment_date | 还款时间 |
repayment_amount | 还款金额 |
money_type | 金额属性(利息,本金) |
repayment_status | 还款状态(未还款,已还款,已续投) |
create_at | 创建时间 |
update_at | 更新时间 |
create_by | 创建人id |
update_by | 更新人id |
------------------------------------------------------------------------------我是靓丽的分割线-----------------------------------------------------------------------------------------------------
三、具体的方案
所有数据使用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,则直接更新上下架字段。如果不是,则首先在content表中找到该类型正在线上的那条记录,然后将该条记录的status字段置为草稿,最后将当前这条记录的status字段置为上线.最后两个操作为一个原子性操作,一个失败则整体操作都失败。
4、作为管理者,希望能新增/编辑运营内容,可以创建/编辑新旧运营内容
新增内容
方案:调用新增内容接口(content),根据内容对象参数在内容表里生成一条记录,如果要立即上线,则要要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功(推荐banner除外)。
编辑内容
方案:调用更新内容接口(content),根据内容对象参数更新内容表中对应记录,如果要立即上线,则要要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功(推荐banner除外)。
推荐banner部分
注:每组banner包含一张封面小图和内容大图,前台app展示所有组的封面,点击封面可查看具体内容大图详情。
方案:调用插入内容接口(content) , 根据内容对象参数在内容表里生成一条记录,如果要立即上线,则要要检查内容表中是否已有上架的内容记录,若有,先将其下架,否则当前记录不能上架成功.
5、作为管理者,希望能删除运营内容,可以清理错误或不再使用的运营内容
方案:调用删除内容接口(tbl_content),根据内容id参数删除内容表中对应记录
逻辑实现:在对表进行删除操作之前先判断,如果该条记录的状态为线上,那么就不能执行删除sql语句,否则就删除.对于banner图类型,即使状态是草稿,如果该条记录是封面,
那么也不能删除,必须先将其type字段变为1之后(编辑操作中更换封面),才能删除.删除记录同时删除第三方云存储中的图片url.
销量统计
1、作为管理者,希望能统计销量情况,可以实时了解产品总体运营状况
方案一:调用查询产品销量统计接口,统计count表中每种产品的销量,然后再统计当天截止目前的销量,最后根据不同产品构建一个list返回给前端。
关于产品购买人数的统计规则:当天除重,隔天计数,总数除重
实现逻辑:
每天定时,计算每一个产品的当天的销量情况,在COUNT表中生成一条记录
先查询出所有产品ID,再根据产品ID到count表中将每个产品对应的购买人数,购买次数,购买金额累加后返回,再统计出当天投资的总投资记录。
接着,将该投资记录通过产品ID划分为几个小List,最后,分别对这些List统计购买人数(去重),购买次数,购买金额。
两类数据相加即为该产品的实时销量
2、作为管理者,希望能搜索产品名称或代号,可以精确查找产品对应销量
方案:调用查询产品销量统计接口(count),根据筛选参数查询对应产品的销量数据并统计,最后构建一条数据返回给前端。实现逻辑同上。
3、作为管理者,希望能查看每种产品的详细销量情况,可以帮助分析用户行为和产品之间的关系
方案:调用查询产品销量统计接口(count),带产品ID参数,在count表中查出该产品的销量统计,然后再统计当天截止目前的销量,最后构建一个list返回给前端。
后台管理
希望能对后台进行相关账号系统管理,可以对后台策略进行调整
有账户管理,修改密码,角色管理,模块管理四个模块,通过对这几个模块的操作,可以对后台管理人员进行调整
方案:通过四个表(admin, role,module,role_authority)的增删改查对后台进行管理.需要注意的是role的authority字段是一个数组,存放的是模块的id.
产品管理
1、作为管理者,希望有个产品列表,可以浏览所有产品
方案:调用查询产品列表接口(product),从product表中取出所有产品数据。精品推荐的产品在最前(推荐顺序order字段),默认按
.最新编辑时间倒序排序。
2、作为管理者,希望能搜索产品信息,可以精确查找产品
方案:调用查询产品列表接口(product),根据筛选参数从product表中取出对应产品数据,按order字段和最新编辑时间倒序排序。
3、作为管理者,希望能上下架产品,可以控制产品在售停售
方案:调用产品信息更新接口(product),根据产品id和上下架参数更新表中对应数据字段值。
4、作为管理者,希望能新增产品,可以创建出售新产品
方案:调用产品新增接口(product),根据产品对象参数,在product表中生成一条记录。
逻辑实现:新增保存后,默认产品状态为停售。
5、作为管理者,希望能编辑产品,可以更改老产品的部分属性
方案:调用产品信息更新接口(product),根据产品对象参数更新product表中对应数据。
6、作为管理者,希望能调整推荐产品排序,可以使前台精品推荐页的推荐产品按指定顺序切换
方案:调用产品信息更新接口(product),更改product表中推荐产品数据的order字段值。具体实现逻辑与内容管理拖拽排序相同。order字段只用于精品推荐产品的排序,产品没有删除操作,因此order字段值一定是连续的,前端无论如何拖拽(比如将普通产品拖拽到推荐产品之间),最终只传递推荐产品的顺序数组,第二次刷新页面查看时,精品推荐产品仍在最前。
7、作为管理者,希望能对新手产品进行限购,可以使用户(真实身份)仅能购买一次新手产品
方案:在点击新手计划得产品时, 校验该用户的noob_status字段,如果为1 , 允许该用户购买. 购买产品时判断产品的是否为新手产品,如果是将用户的新手状态noob_status字段更新为1.
****下架的产品不影响已经购买的产品,但不可续投
方案:首先,用户点击续投之后,在用户产品关联表中记录一条记录(记录状态为续投),在产品点击下架后,同时根据用户id和产品id以及状态为已续投的参数,找到用户续投记录。
接着,根据续投记录ID,找到续投记录对应的原投资记录,更改available字段为无效,更改again_investment_id字段为-1。
最后,删除续投记录
债权管理
1、作为管理者,希望有个债权列表,可以浏览所有债权
方案:调用查询债权列表接口(debtor),带page,size参数,从debtor中取出所有债权数据,默认按创建时间排序。
2、作为管理者,希望能搜索债权信息,可以精确查找债权
方案:调用查询债权列表接口(debtor),带page,size参数,根据筛选参数取出对应数据,默认按创建时间排序。点击查看调用单个债权查询接口,根据债权id取出对应债权记录。
3、作为管理者,希望能新增债权,可以创建新债权
方案:调用新增债权接口,根据债权对象,在debtor表中生成一条记录。
4、作为管理者,希望能对债权匹配投资生成列表,可以记录投资与债权的对应关系(债权转让协议编号)
方案:点击”匹配未全”之后,调用单个债权匹配详情列表接口(matched=1),接口中根据债权id查询invest_record表,找出所有和该债权已经匹配的投资记录,然后再根据投资记录中的user_id查询到该条记录对应的用户购买的产品信息。
点击”匹配”,调用单个债权匹配详情列表接口(matched=0),根据债权id查询invest_record表,查询出该债权的详细信息。同时,查询未匹配的用户信息(债权id=-1)(只返回产品名称,到期时间,用户姓名,投资金额),组成一个list,然后调用功能类,对该list按照匹配规则排序,最后将排序后的list返回。
对于前端:预计剩余待匹配金额为负,则不允许保存
点击保存,则调用单个债权匹配操作接口,接口中更新invest_record表和debtor表,修改债权记录,修改已匹配金额字段。
5、作为管理者,希望能变更匹配方案,可以手动调整更适配的方案
方案:前端选择匹配方案,选择确定后,调用单个债权匹配操作接口,带投资记录id、债权id参数、投资金额、投资合同编号,债权转让协议匹配成功后自动生成。
前台方案
意见反馈
1、作为管理者,希望有个意见列表,可以浏览所有客户意见
方案:调用意见反馈接口,在suggestion表中获取所有意见数据,带page、size参数,默认按创建时间排序,生成list返回。
2、作为管理者,希望能搜索意见,可以精确查找意见
方案:调用意见反馈接口,带page、size参数,根据前端传入的筛选参数(手机号,邮箱,姓名,提交时间(区间)等),在tbl_suggestion表中获取对应意见数据,默认按创建时间排序,生成list返回。
3、作为管理者,希望能查看意见详情,可以详细了解客户的想法
方案:调用查询意见详情接口,根据路径参数(意见id),在suggestion表中取出对应意见数据返回。
4、作为管理者,希望能删除意见,可以清理无用的意见
方案:调用删除意见接口,根据路径参数(意见id),在suggetsion表中删除对应意见数据。
精品推荐页
1、作为用户,希望有个banner,可以轮播、点击查看详情获得相关活动信息
方案:前台调用查询内容(content)接口(查询banner路径参数为1),在content表中取出类型为推荐banner、状态为上线的多组记录,构成list返回给前台。
2、作为用户,希望有推荐的产品,可以切换查看、快捷购买推荐产品
方案:前台调用产品查询接口,带推荐参数,在tbl_product表中取出推荐的产品数据(默认按创建时间排序),返回给前台。
用户点击产品时调用查看产品详情接口,入参是产品表id,返回产品详细信息给前端。
用户点击查看合同,调用查看合同接口,将该产品的合同的模版返回前端展示。
3、作为用户,希望有个消息按钮,可以快捷进入消息中心
方案:用户登录后返回的用户信息中有是否有未读消息字段,前端根据此字段值来设置快捷消息按钮是否携带红色标记。
进入消息中心后,调用查询消息接口,根据用户id参数查询user_message表; 调用系统消息查询接口 (message) 根据前端传入设定的page、size参数,返回消息记录列表,按创建时间排序。
如果点击的是公告消息,则调用查询消息接口,根据消息id查询到具体的公告消息后返回。
如果点击的是系统消息,如果该消息类型为投资失败,则不可点。如果是其他类型的消息则调用用户投资产品详情接口,带用户产品关联表id,投资记录表(tbl_investment)中查询出具体的记录返回。
// 阅读状态,用户点击完所有消息后(或一键标记全部已读),前端调用更新用户信息接口,更改tbl_user表中的是否有已读消息字段为已读状态。
理财产品列表
1、作为用户,希望有个产品列表,可以浏览所有理财产品简略信息
方案:前台调用产品查询接口,带page,size参数,在product表中取出所有在售产品的数据(推荐产品在最前按level顺序排序,其他按创建时间排序),返回给前台。
2、作为用户,希望可以点开列表项查看产品详情,可以了解更多产品基本信息
方案:前台调用产品详情接口,根据路径参数产品id,在product表中获取对应产品数据返回。前台点击进入产品详情,点击查看合同,调用查看合同接口,返回相应合同数据。
产品续投
1、 理财列表新增产品续投标签页
2、 投资中的非限购产品,在投资即将到期时(依后台参数设置定),如到期前5天,将展示在产品续投页
方案:
逻辑实现:先根据用户id以及投资状态(已投资)在用户投资表(invest_record)中查询出该用户的所有正在投资中并且invest_status字段为正在理财的产品,然后根据该组记录中的产品id或产品编号查询产品表(tbl_product)中相关产品的状态,剔除限购或者停售的产品,最后再根据当前时间以及数据中的到期时间的差值判断该产品是否是投资即将到期,如果产品即将到期,则将最后筛选出的产品按编辑时间排序(由新到旧)返回给前端。
3、 进入详情页进行确认等额续投签字后,详情页显示已续投
方案:点击进入投资详情页,调用用户投资产品的详情接口,带用户id和产品id参数,查询investment_record表,返回用户投资该产品的详细信息。点击确认后,调用投资接口,带用户id,产品id,投资金额,回款银行,还款方式等参数,接口中在(investment_record)表中新增一条记录,投资状态为已续投。同时在user_message表中新增一条记录,并修改tbl_user表中的相应字段,使用户有未读消息。
4.投资到期当天,回款只回利息,本金直接作为续投本金重新投资,并产生新的记录(交易记录、投资记录、系统消息推送、合同、匹配);产品续投页对应续投项完成并消失~ ~ ~ ~ ~ ~ ~ ~ ~
方案:在每日跑批中实现。
备注:要在一进入web主页时就获取用户信息和用户实名信息,通过调用tbl_user表和tbl_verification表相关信息获得,前端根据返回的数据跳转到不同的页面。
投资列表页
1、作为用户,希望有个列表展示所有投资,可以方便大致浏览投资基本信息
方案:已登录用户进入投资栏,调用用户投资产品列表接口,根据用户id,在invest_record表中查询用户投资产品的所有记录(除了投资状态为空和续投中),返回给前端。
2、作为用户,希望能查看订单详情,可以更多的了解该笔投资的信息
方案:前台在投资页点击一款产品,调用投资产品详情接口,根据用户id和产品id,在invest_record中获取数据
3、作为用户,希望投资到期后投资本息自动回款,可以不用操心提现
方案:用户投资成功后,立刻根据用户投资的起息时间,期限,金额,年化收益率,计算出用户的还款计划,添加到repayment表中。
跑批时查询repayment表中当前是否有到期的记录,根据相应记录的金额和用户以及产品信息调用支付接口打款。打款完成后调用投资记录invest_record接口,调用新增交易记录接口. 调用新增用户消息接口.并更新该条还款计划.
我的页面
1、作为用户,希望有个账号设置,可以对个人信息(修改)进行查看、编辑
方案:
前台用户点击我的,调用查询用户信息接口,根据路径参数用户id,在user表中查询用户信息数据,返回相应字段数据给前端。
前台点击账户设置,调用查询用户信息接口,根据用户id在user表和user_bank表中取出完整数据,返回给前端。
前台点击“保存”,调用更新用户信息接口,带电子邮箱,详细地址,默认银行卡号参数,在接口中通过用户id,更新tbl_user表,并同时更新user_bank表。
前台进行实名认证,上传身份证正反面图片,调用图片上传接口,上传成功后,返回身份证正反面图片的url,然后调用更新用户信息接口,根据传入的用户姓名、身份证号码和身份证正反面图片url更新user表中的对应字段。
前台进行密码修改,调用修改密码接口,传入用户id,原密码和新密码,后台在user表中进行比对,如果原密码相同则将密码字段值置为新密码,修改成功。否则返回信息提示密码不正确。
3、作为用户,希望有个银行卡管理,可以添加银行卡
方案:
前台点击进入银行卡管理,调用查询用户详细信息接口,根据用户id在user_bank表中查询用户绑定的银行卡信息,然后根据开户银行id在bank_list表中查询银行每日限额等信息,最后构建json数据返回给前端。
用户绑定银行卡,调用新增用户银行卡接口,传入用户姓名,身份证号,开户行所在城市,开户行名称,银行卡号,银行预留手机号参数,在user_bank表中新增一条记录。
用户进行添加银行卡操作,点击“开户行”时,调用查询平台可用银行列表接口,查询bank_list表中的所有数据返回。
4、作为用户,希望有个交易流水,可以记录自己的收支情况
方案:用户点击交易流水,调用查询用户交易流水接口,带用户id参数以及page,size参数,根据用户id查询trading_record表,查询出的数据根据编辑时间排序后返回。
用户点击交易流水详情时,调用查询用户交易流水详情接口,根据交易类型和id查询出该条交易记录的详细信息返回。
备注:用户进行的每项投资,都会在后台相关表(invest_record,trading_record,user_message)中记录信息,并且在投资成功(失败)、即将到期、回款成功(失败)时,会产生即时记录并发送消息给用户。
5、作为用户,希望那个有个消息中心,可以查看发送的消息
方案:用户进入消息中心查看,会调用查询消息接口,具体方案见“精品推荐”story中第3条。
6、作为用户,希望有个更多设置,可以查看帮助、意见反馈、安全登出
方案:更多设置
1)查看帮助:调用内容中的帮助中心接口(路径参数为2),查询tbl_content表中唯一上线的数据返回。
2)意见反馈:用户输入意见完成提交后,调用意见反馈接口,根据传入的用户名、手机号、邮箱和意见内容参数,在tbl_suggestion表中生成一条记录
3)安全登出:用户点击安全登出,调用登出接口,根据传入的用户id参数,删除用户的cookie,将操作结果(成功或失败)返回给前端。
购买理财产品
1、作为用户,希望能支付相应的金额,可以购买理财产品获得相应投资收益
方案:点击立即投资后,调用查询用户银行卡信息接口,带用户id参数,查询user_bank表和bank_list表,返回用户的银行卡信息。
用户投资产品操作(期间会调用图片上传接口)完成后,调用用户投资接口,首先进行支付操作,若支付成功,则根据传入的投资产品相关必填参数先修改tbl_user表中的账户总额字段,接着在user_product_relation表中生成一条记录,并生成用户的还款计划,在user_payment表中新增记录。最后在trading_record表中生成一条记录,在invest_record表中生成一条记录,并在user_message表中生成一条记录同时发送消息给用户。
若支付失败,则不会操作其他的表,会在invest_record表和user_message表中各生成一条记录同时发送消息给用户。
2、作为用户,希望购买时可以签署合同,可以获得一定法律保障
方案:上面方案已包含。
3、作为用户,希望有个理财计算器,可以模拟计算预期收益
方案:前台点击预期收益时,调用查看还款计划接口,传入相关信息,返回还款计划
登录 / 注册 / 忘记密码 / 理财经理
1、作为用户,希望能注册登录个人账号
方案:调用用户注册接口和用户登录接口,(注册期间会调用短信验证接口)传入注册和登录必须的参数,在tbl_user表中生成记录。
登录注册成功后,生成token保存在cookie中,用于用户自动登录。
2、作为用户,希望能找回密码,可以避免账号损失
方案:调用找回密码接口,(期间会调用短信验证接口)传入用户手机号、短信验证码和新密码,后端比对正确后,在user表中更新该用户的密码字段值。
消息列表
1、作为管理者,希望有个消息列表,可以浏览所有消息
方案:调用查询公告消息接口,不带筛选参数,带page,size参数,查询user_message表,按编辑时间排序。
2、作为管理者,希望能搜索消息信息,可以精确查找消息
方案:调用查询公告消息接口,带筛选参数,带page,size参数,查询user_message表,按编辑时间排序。
3、作为管理者,希望能上下线消息,可以控制消息展示与否
方案:后台调用更新公告消息接口,根据消息id和上下架参数,在message表中更改对应数据的上下架字段值,同时更新tbl_user表的所有记录的是否有新消息字段。
4、作为管理者,希望能新增消息,可以创建上线新消息
方案:后台调用新增公告消息接口,根据传入的消息对象参数,在sys_message表中生成一条记录(如果管理点推送,则设置推送消息字段为相应字段,发送同上,带定时则保存转换后的时间)。
5、作为管理者,希望能推送消息,可以使用户及时收到消息
方案:后台编辑消息完成后可选择即时发送或定时发送,提交后,后端会根据传入的参数类型设定即时任务或者定时任务,发送给所有用户。
定时发送逻辑:后台管理员点击保存后,先在表中生成记录,然后根据前端传入的时间参数调用定时任务,定时任务执行后更新sys_message表中相应记录的消息状态字段。
6、作为管理者,希望能定时发送消息,可以使用户在预定的时间收到消息
方案:同上
7、作为管理者,希望能删除消息,可以清理错误或不再有时效的消息
方案:后台调用删除公告消息接口,传入消息id,在sys_message表中删除对应记录。
银行限额管理
1、作为管理者,希望有个银行限额列表,可以浏览所有第三方支持银行
方案:后台调用查询银行列表接口,带page,size参数,查询bank_list表,取出所有银行数据返回,按编辑时间排序。
2、作为管理者,希望能搜索银行限额信息,可以精确查找银行限额
方案::后台调用查询银行列表接口,带page,size参数以及筛选参数,查询bank_list表,取出所有银行数据返回,按编辑时间排序。
3、作为管理者,希望能新增/编辑银行限额,可以输入新/老的银行限额
方案:后台调用新增/编辑银行接口,根据传入的银行对象参数,在bank_list中新增/更新相应的数据。
参数设置
1、作为管理者,希望能上传公章,可以方便管理公司公章供前台调用
方案:调用图片上传接口,上传公章图片,将第三方返回的电子签章url用于更新setting表字段。
2、作为管理者,希望能设置提前提醒天数,可以发送消息(推送)提醒用户投资到期
3、作为管理者,希望能设置提前提醒天数,可以发短信提醒后台管理人员债权到期
4、作为管理者,希望能设置总债权警戒线,可以发短信提醒后台管理人员总债权即将投满
方案:
管理员点参数设置时,调用查询常量表接口,查询setting表,返回该表中status字段为使用中的一条数据。
如果点保存,则调用新增常量表接口,带常量对象参数。在setting表中新增一条记录,设置该记录的status字段为正在使用,设置其他记录的status字段为未使用,同时查看该表的长度,如果有三条记录,则删除最旧的那条记录如果有两条,则什么也不做。
如果点还原,则调用更新常量表接口,不带参数,将setting表中的两条记录的status字段的值互换。
交易明细:
点击交易记录任一项,可打开交易明细,查看相应信息
方案:在之前的方案中已经有所提及,具体见”我的页面”第4条。
几大问题说明:
1:产品续投问题
当用户投资产品之后,在产品到期前几日(根据后台参数设置而定)再次选择续投该产品,确定续投成功后,会在invest_record表中新生成一条记录。同时根据用id和原投资产品ID,在repayment表中找出还款计划,更改本金得还款状态。生成新的还款计划,并向用户发送消息,续投成功.
2 : 推荐页banner图问题
前端前台看到的banner实际上是5组,每组有一张封面图和若干张内容图。前端后台新增/编辑banner内容时,操作目标是一组banner的内容(封面、内容)。后台上线时,可以不用下线已经上线的banner,直接上线一组轮播图即可(包括封面,内容)。
3. 跑批任务中要完成的功能和具体实现
功能1: 计算当前是否有用户需要付息(按月付息,到期一次性还本付息),是否有用户投资到期,需要还款,或者续投产品
实现方案:查询repayment表中还款日期为当天的记录,根据记录中的用户,产品信息和还款金额调用支付接口还款。还款成功,更改用户状态,在user_message表中新增一条记录,在trading_record表中新增一条记录。
功能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点之间,因为定时任务一般在凌晨执行,所以统计出的销量都是前一天的)去trading_record表中查询付款交易记录。查出的记录数量即为当天总购买次数,所有记录的购买金额累加即为当天总购买金额。使用distinct()函数可统计出除重后的当天总购买人数。最后,将结果存储在count表中,新增一条记录。
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.完成了项目方案
评论