需求描述:
一个威客系统,要针对雇主与服务商设计能力等级,具体计算等级方式如下
https://www.zzwaaa.com/article/helpCenter/94/36
总的来说就是按照公式查询出数据然后显示
为了便于管理,决定将数据存在数据库中
设计与分析
- 数据库表
有人可以是雇主也可以是服务商
所以等级数据可以是一张表
加上等级变更记录,一共两张表
等级表为表A,变更表为表B
- 注册时间处理
在等级计算中,注册时间于当前时间计算出用户能力值,那么问题来了,如何知道当天用户注册了多久呢?
目前想到2种方式,如果有想法可以在评论区补充
1.定时器:以天为单位,每天更新一遍A表中所有人的时间经验(缺点:运行量大)
2.查询时计算:在每次要拿出用户能力等级时进行计算该用户的时间经验(缺点:如你一直不查他,他就不会更新,管理不便?)
- 管理员修改
管理员为了使管理员可以修改积分而不会影响逻辑,A表添加附加经验字段
- 数据库字段设计
A表:等级表:
用户id,雇主能力等级,雇主能力经验,服务商能力等级,服务商能力经验,创建时间,修改时间,服务商_任务服务完成数,服务商_交易金额积分,服务商_好评分,服务商_差评分,雇主_充值积分,雇主_任务服务数,雇主_交易金额积分,雇主_好评分,雇主_差评分,用户_时间经验,服务商_附加经验,雇主_附加经验
B表:变更表
用户id,变更时间,变更经验,变更正负,变更字段,变更备注
码
建立数据库后,主要就是添删查改
添_改:
按领导要求,每个任务服务评价后,充值后,变动改AB表信息
后台管理员操作
删:
后台管理员操作
查:
查询时计算时间经验并更新数据库,查次数很多,为此应该添加缓存,缓存为一天左右
如果不保存到数据库中,会出现数据库中的用户等级计算为被注册时间影响的问题,如果不需要筛选等级的话,可以这样做
如果使用定时器修改时间经验,则查询时不计算更新时间经验
后记
领导觉得要做一个等级系统,但是他可能当时这样想,后来就变了,但是领导说了算
所以对于这种领导,功能尽可能的多一点,
最后将个人能力表改为了个人信息统计表,在每次需要统计的地方都添加一个方法,不只记录领导需要的信息,还将以后可能用到的数据记录