背景

签到功能相信大家都很熟悉了,功能就是用户每天可以签到一次,连续签到固定天数可以获得奖励。这里我把功能简单化:

“每个用户一天只能签到一次;连续签到7天送优惠券;”

界面是这样的:

签到

签到对于引流是一个不错的小工具,下面来看看我是如何做的(这里为了讲解,逻辑变简单了。实际可能要更复杂)。

我的设计

首先需要一个签到表sign,用于记录签到时间。

CREATE TABLE `sign` (
  `id` varchar(255) CHARACTER SET utf8mb4 NOT NULL COMMENT '主键id',
  `user_id` varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '用户id',
  `sign_date` datetime DEFAULT NULL COMMENT '签到时间',
  KEY `idx_id` (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到';

还需要一个统计连续签到的表continue_sign。用于统计连续签到次数。

CREATE TABLE `continue_sign` (
  `id` varchar(255) CHARACTER SET utf8mb4 NOT NULL COMMENT '主键id',
  `user_id` varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '用户id',
  `continue_counts` int(11) DEFAULT NULL COMMENT '连续签到次数',
  KEY `idx_id` (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='连续签到统计';

我们来看看Java代码:

首先用户签到,插入数据到签到表,同一天一个用户只能签到一次。如果已经签到,用户当天再签到,会有如下提示。

签到表插入数据后,连续签到表进行统计。

addSignCountsById()方法代码: