add sign
parent
575fcaba2d
commit
c8cd2aeaa7
|
@ -0,0 +1,35 @@
|
|||
package com.health.system.common.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author 冯凯
|
||||
* @version 1.0
|
||||
* @description: 用户签到实体类
|
||||
* @date 2023/11/5 9:08
|
||||
*/
|
||||
@Data
|
||||
public class Sign {
|
||||
|
||||
/*
|
||||
签到id
|
||||
*/
|
||||
private Integer signId;
|
||||
|
||||
/*
|
||||
签到人id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/*
|
||||
签到时间
|
||||
*/
|
||||
private Date signTime;
|
||||
|
||||
/*
|
||||
签到次数
|
||||
*/
|
||||
private Integer signAmount;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package com.health.system.server.controller;
|
||||
|
||||
import com.health.common.core.domain.Result;
|
||||
import com.health.common.security.utils.SecurityUtils;
|
||||
import com.health.system.common.domain.Sign;
|
||||
import com.health.system.server.service.SysSignService;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* @author 冯凯
|
||||
* @version 1.0
|
||||
* @description: 用户签到控制层
|
||||
* @date 2023/11/5 9:01
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sign")
|
||||
public class SysSignController {
|
||||
|
||||
@Autowired
|
||||
private SysSignService sysSignService;
|
||||
|
||||
|
||||
@GetMapping("/search/sign")
|
||||
public Result searchSignByUserId(){
|
||||
//获取当前登录人userId
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
Sign sign= sysSignService.searchSignByUserId(userId);
|
||||
return Result.success(sign);
|
||||
}
|
||||
|
||||
@PostMapping("/sign/byUserId")
|
||||
public Result signByUserId(){
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
sysSignService.signByUserId(userId);
|
||||
return Result.success("","签到成功");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.health.system.server.mapper;
|
||||
|
||||
import com.health.system.common.domain.Sign;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* @author 冯凯
|
||||
* @version 1.0
|
||||
* @description:
|
||||
* @date 2023/11/5 9:03
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysSignMapper {
|
||||
Sign searchSignByUserId(@Param("userId") Long userId);
|
||||
|
||||
void updateSingAmountByUserId(Sign sign);
|
||||
|
||||
void signByUserId(Sign sign);
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package com.health.system.server.service;
|
||||
|
||||
import com.health.system.common.domain.Sign;
|
||||
|
||||
/**
|
||||
* @author 冯凯
|
||||
* @version 1.0
|
||||
* @description:
|
||||
* @date 2023/11/5 9:02
|
||||
*/
|
||||
public interface SysSignService {
|
||||
Sign searchSignByUserId(Long userId);
|
||||
|
||||
void signByUserId(Long userId);
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package com.health.system.server.service.impl;
|
||||
|
||||
import com.health.common.redis.service.RedisService;
|
||||
import com.health.system.common.domain.Sign;
|
||||
import com.health.system.server.mapper.SysSignMapper;
|
||||
import com.health.system.server.service.SysSignService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.annotation.CreatedDate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author 冯凯
|
||||
* @version 1.0
|
||||
* @description:
|
||||
* @date 2023/11/5 9:02
|
||||
*/
|
||||
@Service
|
||||
public class SysSignServiceImpl implements SysSignService {
|
||||
|
||||
@Autowired
|
||||
private SysSignMapper sysSignMapper;
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Override
|
||||
public Sign searchSignByUserId(Long userId) {
|
||||
//先从redis中获取连续签到次数
|
||||
if (redisService.hasKey("sign:"+userId)){
|
||||
Sign redisSign = redisService.getCacheObject("sign:" + userId);
|
||||
return redisSign;
|
||||
}
|
||||
//redis没有从数据库中获取
|
||||
//查询出当前登录人的最近一条的签到记录
|
||||
Sign sign = sysSignMapper.searchSignByUserId(userId);
|
||||
//获取当天的日期 是第几日
|
||||
int today = new Date().getDay();
|
||||
//获取最近一次签到的日期 是第几日
|
||||
int recentDay = sign.getSignTime().getDay();
|
||||
//判断是否已经断签了
|
||||
if (today-recentDay>1){
|
||||
sign.setSignAmount(0);
|
||||
//其次将签到次数signAmount改为0
|
||||
sysSignMapper.updateSingAmountByUserId(sign);
|
||||
redisService.deleteObject("sign:"+userId);
|
||||
redisService.setCacheObject("sign:"+userId,sign);
|
||||
return sign;
|
||||
}
|
||||
//没有断签 直接返回当前查询出来的签到记录
|
||||
return sign;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void signByUserId(Long userId) {
|
||||
Sign sign = this.searchSignByUserId(userId);
|
||||
sign.setSignAmount(sign.getSignAmount()+1);
|
||||
sysSignMapper.signByUserId(sign);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.health.system.server.mapper.SysSignMapper">
|
||||
<insert id="signByUserId">
|
||||
insert into tb_sign
|
||||
(user_id,sign_time,sign_amount)
|
||||
values
|
||||
(#{userId},now(),#{signAmount})
|
||||
</insert>
|
||||
<update id="updateSingAmountByUserId">
|
||||
update tb_sign set sing_amount=0 where user_id=#{userId} and sign_time=#{signTime}
|
||||
</update>
|
||||
|
||||
|
||||
<select id="searchSignByUserId" resultType="com.health.system.common.domain.Sign">
|
||||
SELECT * from tb_sign where user_id=#{userId} ORDER BY sign_time DESC LIMIT 1
|
||||
</select>
|
||||
</mapper>
|
Loading…
Reference in New Issue