From c8cd2aeaa708d8d3c7785021f0fb42181ce6dfe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=87=AF?= <371894675@qq.com> Date: Sun, 5 Nov 2023 09:46:53 +0800 Subject: [PATCH] add sign --- .../com/health/system/common/domain/Sign.java | 35 +++++++++++ .../server/controller/SysSignController.java | 42 +++++++++++++ .../system/server/mapper/SysSignMapper.java | 20 ++++++ .../system/server/service/SysSignService.java | 15 +++++ .../service/impl/SysSignServiceImpl.java | 61 +++++++++++++++++++ .../resources/mapper/system/SysSignMapper.xml | 18 ++++++ 6 files changed, 191 insertions(+) create mode 100644 base-system-common/src/main/java/com/health/system/common/domain/Sign.java create mode 100644 base-system-server/src/main/java/com/health/system/server/controller/SysSignController.java create mode 100644 base-system-server/src/main/java/com/health/system/server/mapper/SysSignMapper.java create mode 100644 base-system-server/src/main/java/com/health/system/server/service/SysSignService.java create mode 100644 base-system-server/src/main/java/com/health/system/server/service/impl/SysSignServiceImpl.java create mode 100644 base-system-server/src/main/resources/mapper/system/SysSignMapper.xml diff --git a/base-system-common/src/main/java/com/health/system/common/domain/Sign.java b/base-system-common/src/main/java/com/health/system/common/domain/Sign.java new file mode 100644 index 0000000..76205f4 --- /dev/null +++ b/base-system-common/src/main/java/com/health/system/common/domain/Sign.java @@ -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; +} diff --git a/base-system-server/src/main/java/com/health/system/server/controller/SysSignController.java b/base-system-server/src/main/java/com/health/system/server/controller/SysSignController.java new file mode 100644 index 0000000..28e3575 --- /dev/null +++ b/base-system-server/src/main/java/com/health/system/server/controller/SysSignController.java @@ -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("","签到成功"); + } +} diff --git a/base-system-server/src/main/java/com/health/system/server/mapper/SysSignMapper.java b/base-system-server/src/main/java/com/health/system/server/mapper/SysSignMapper.java new file mode 100644 index 0000000..c8ab50d --- /dev/null +++ b/base-system-server/src/main/java/com/health/system/server/mapper/SysSignMapper.java @@ -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); +} diff --git a/base-system-server/src/main/java/com/health/system/server/service/SysSignService.java b/base-system-server/src/main/java/com/health/system/server/service/SysSignService.java new file mode 100644 index 0000000..16ffdd5 --- /dev/null +++ b/base-system-server/src/main/java/com/health/system/server/service/SysSignService.java @@ -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); +} diff --git a/base-system-server/src/main/java/com/health/system/server/service/impl/SysSignServiceImpl.java b/base-system-server/src/main/java/com/health/system/server/service/impl/SysSignServiceImpl.java new file mode 100644 index 0000000..dc99579 --- /dev/null +++ b/base-system-server/src/main/java/com/health/system/server/service/impl/SysSignServiceImpl.java @@ -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); + } +} diff --git a/base-system-server/src/main/resources/mapper/system/SysSignMapper.xml b/base-system-server/src/main/resources/mapper/system/SysSignMapper.xml new file mode 100644 index 0000000..c2881da --- /dev/null +++ b/base-system-server/src/main/resources/mapper/system/SysSignMapper.xml @@ -0,0 +1,18 @@ + + + + + insert into tb_sign + (user_id,sign_time,sign_amount) + values + (#{userId},now(),#{signAmount}) + + + update tb_sign set sing_amount=0 where user_id=#{userId} and sign_time=#{signTime} + + + + +