前言:公司积分商城增加签到功能,如下:
每次签到+1分,连续签到7天,第7天多+1分。第8天+1,连续签到7天后,再多+1分。
若每个用户每天签到数据直接累计,数据库数据将成倍增加,故每个用户只维持一条签到数据。
判断是否是连续签到的话,根据continue_sign,连续签到最大值为6,第七天重置为0。
根据userId查询,判断是否是首次签到
select * from t_sign where user_id=’1111’;
若用户首次签到,直接插入数据,
insert into t_sign(id,user_id,mark,create_time,update_time,continue_sign,count) values (‘1’,’111’,’生日快乐’,’2018-09-10 10:20:41’,’2018-09-10 10:20:41’,1,1);
若非首次签到,每次签到更新签到时间(update_time字段)
update t_sign set update_time=’2018-09-10 10:20:41’ where id=’111’;
若不是第一次签到,还需判断签到时间是否间隔大于一天
若是连续签到,判断是否为连续七天签到,且将连续签到置为0。若不是连续签到,更新签到时间,将连续签到+1
public class Sign implements Serializable {
private static final long serialVersionUID = 1L;
//主键
private String id;
//用户id
private String userId;
//签到信息
private String mark;
//总签到数
private int count;
//七天连续签到
private int continueSign;
//创建时间
private Date createTime;
//更新时间
private Date updateTime;
//set/get方法
........
}