简介
1. 用户签到, 可以补签
2. 用户当前签到情况
3. 用户当月签到情况
SignController
import com.example.signdemo.service.SignService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController @RequestMapping("sign") public class SignController { @Autowired private SignService signService; /*** * 用户签到, 可以补签 */ @PostMapping public Map doSign(Integer userId, string dateStr){ return signService.doSign(userId, dateStr); } /** * 获取用户当前签到情况 * * @param userId * @param dateStr * @return */ @GetMapping("/today") public Map today(Integer userId, String dateStr){ return signService.today(userId, dateStr); } /** * 获取用户当月签到情况 * * @param userId * @param dateStr * @return */ @GetMapping("/getSignInfo") public Map getSignInfo(Integer userId, String dateStr){ return signService.getSignInfo(userId, dateStr); } }
import cn.hutool.core.date.DateUtil; import com.example.signdemo.utils.SignUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @Service public class SignService { @Autowired private RedisTemplate redisTemplate; @Autowired private SignUtils signUtils; public Map doSign(Integer userId, String dateStr) { Map result = new HashMap(); //获取日期 Date date = signUtils.getDate(dateStr); // 获取日期对应的天数, 多少号 int day = DateUtil.dayOfMonth(date) - 1; // 构建redis ke String signKey = signUtils.buildSignKey(userId, date); // 获取对应的日期是否已签到 Boolean isSigned = redisTemplate.opsForValue().getBit(signKey, day); if (isSigned) { result.put("code", 400); result.put("message", "用户该日期已签到, 无需再签"); return result; } // 签到 redisTemplate.opsForValue().setBit(signKey, day, true); // 根据当前日期统计签到次数 Date todate = new Date(); // 统计连续签到 int contniuousSignCount = signUtils.getContniuousSignCount(userId, todate); // 统计总签到数 long sumSignCount = signUtils.getSumSignCount(userId, todate); result.put("code", 200); result.put("message", "签到成功"); result.put("contniuousSignCount", contniuousSignCount); result.put("sumSignCount", sumSignCount); return result; } /** * 获取用户当前签到情况 * * @param userId * @param dateStr * @return */ public Map today(Integer userId, String dateStr) { Map result = new HashMap(); // TODO return result; } /** * 获取用户当月签到情况 * * @param userId * @param dateStr * @return */ public Map getSignInfo(Integer userId, String dateStr) { Map signInfo = new TreeMap(); // TODO return signInfo; } }
发送内容: "签到功能", 获取提取码