java 实现签到功能及数据库表设计

前言:公司积分商城增加签到功能,如下:

每次签到+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方法
	........
}
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
针对电商平台的用户签到积分系统,可以设计以下的数据库结构: 1. 用户(user):记录用户的基本信息,如用户ID、用户名、手机号码等。 | 字段名称 | 类型 | 主键/外键 | 描述 | | ------------- | ------------- | --------- | ---------------------- | | user_id | int | 主键 | 用户ID | | username | varchar(50) | | 用户名 | | phone_number | varchar(20) | | 手机号码 | 2. 签到记录(checkin_record):记录用户每次签到的时间和签到积分数。 | 字段名称 | 类型 | 主键/外键 | 描述 | | --------------- | ------------- | --------- | ---------------------- | | record_id | int | 主键 | 签到记录ID | | user_id | int | 外键 | 用户ID | | checkin_time | datetime | | 签到时间 | | checkin_points | int | | 签到获得的积分数 | 3. 连续签到记录(continuous_checkin):记录用户的连续签到情况,包括当前连续签到天数和最长连续签到天数。 | 字段名称 | 类型 | 主键/外键 | 描述 | | ---------------------- | ------------- | --------- | ---------------------- | | continuous_checkin_id | int | 主键 | 连续签到记录ID | | user_id | int | 外键 | 用户ID | | current_days | int | | 当前连续签到天数 | | longest_days | int | | 最长连续签到天数 | 在这里,我们可以通过触发器(trigger)来自动更新用户的连续签到记录。当用户签到时,我们可以在签到记录插入一条新的记录,并且根据用户的签到时间和上一次签到时间,来判断是否是连续签到。如果是连续签到,则更新用户的连续签到记录;否则,重置用户的连续签到记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值