/** Copyright (c) 2020. zhanghan_java@163.com All Rights Reserved.* 项目名称:Spring Boot实战:签到奖励实现方案* 类名称:SignInServiceImpl.java* 创建人:张晗* 联系方式:zhanghan_java@163.com* 开源地址: https://github.com/dangnianchuntian/springboot* 博客地址: https://zhanghan.blog.csdn.net*/package com.zhanghan.zhsignin.service.impl;import cn.hutool.core.util.IdUtil;import com.zhanghan.zhsignin.config.SignInRewardMoneyListConfig;import com.zhanghan.zhsignin.constant.SignInConstant;import com.zhanghan.zhsignin.controller.request.ListSignInDetailRequest;import com.zhanghan.zhsignin.controller.request.PostSignInRequest;import com.zhanghan.zhsignin.controller.response.ListSignInDetailResponse;import com.zhanghan.zhsignin.mybatis.entity.XZhSignInEntity;import com.zhanghan.zhsignin.mybatis.entity.XZhSignInHistEntity;import com.zhanghan.zhsignin.mybatis.mapper.XZhSignInHistMapper;import com.zhanghan.zhsignin.mybatis.mapper.XZhSignInMapper;import com.zhanghan.zhsignin.service.SignInService;import com.zhanghan.zhsignin.util.DateUtils;import com.zhanghan.zhsignin.util.wrapper.WrapMapper;import org.springframework.beans.BeanUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import org.springframework.util.CollectionUtils;import java.util.Date;import java.util.List;import java.util.stream.Collectors;import static com.zhanghan.zhsignin.constant.SignInConstant.*;@Servicepublic class SignInServiceImpl implements SignInService{@Autowiredprivate XZhSignInMapper xZhSignInMapper;@Autowiredprivate XZhSignInHistMapper xZhSignInHistMapper;//校验连续天数是否为7@Value("#{T(java.lang.Integer).parseInt('${zh.sign.in.continuite.day.threshold:7}')}")public Integer continuiteDayThreshold;//签到奖励金币集合配置@Autowiredpublic SignInRewardMoneyListConfig signInRewardMoneyListConfig;/*** 查询用户签到记录*/@Overridepublic Object listSignInDetail(ListSignInDetailRequest listSignInDetailRequest){//若配置文件中未配置签到奖励则不展示签到记录List signInRewardMoneyListConfigList = signInRewardMoneyListConfig.getList();if (CollectionUtils.isEmpty(signInRewardMoneyListConfigList)) {return WrapMapper.ok(new ListSignInDetailResponse(false));}String customerId = listSignInDetailRequest.getCustomerId();XZhSignInEntity xZhSignInEntity = xZhSignInMapper.findByCustomerId(customerId);List signInDetailList = signInRewardMoneyListConfigList.stream().map(aa -> new ListSignInDetailResponse.SignInDetail(0, aa)).collect(Collectors.toList());//该用户之前未签到过if (null == xZhSignInEntity) {return WrapMapper.ok(new ListSignInDetailResponse(TODAY_NOT_SIGN_IN, SignInConstant.CONTINUITE_DAY_ZERO, signInDetailList));}long signInDateTime = xZhSignInEntity.getSignInDate().getTime();//最近一次签到是否为昨日之前if (signInDateTime < DateUtils.getYesterdayDateTime()) {return WrapMapper.ok(new ListSignInDetailResponse(TODAY_NOT_SIGN_IN, SignInConstant.CONTINUITE_DAY_ZERO, signInDetailList));}//最近一次签到是否为昨日Integer todaySignStatus = TODAY_YES_SIGN_IN;Integer continuiteDay = xZhSignInEntity.getContinuiteDay();if (signInDateTime < DateUtils.getTodayDateTime()) {//最近一次签到是昨日且之前已连续签到7日if (continuiteDay >= continuiteDayThreshold) {return WrapMapper.ok(new ListSignInDetailResponse(TODAY_NOT_SIGN_IN, SignInConstant.CONTINUITE_DAY_ZERO, signInDetailList));}//最近一次签到是昨日且之前连续未超7日todaySignStatus = TODAY_NOT_SIGN_IN;}//查询用户签到历史记录List xZhSignInHistEntitieList = xZhSignInHistMapper.listByCustomerIdAndLimit(customerId, continuiteDay);for (XZhSignInHistEntity xZhSignInHistEntity : xZhSignInHistEntitieList) {ListSignInDetailResponse.SignInDetail signInDetail = new ListSignInDetailResponse.SignInDetail(TODAY_YES_SIGN_IN, xZhSignInHistEntity.getRewardMoney());signInDetailList.remove(xZhSignInHistEntity.getContinuiteDay() - 1);signInDetailList.add(xZhSignInHistEntity.getContinuiteDay() - 1, signInDetail);}return WrapMapper.ok(new ListSignInDetailResponse(todaySignStatus, continuiteDay, signInDetailList));}/*** 进行签到*/@Overridepublic Object postSignIn(PostSignInRequest postSignInRequest){//若配置文件中未配置签到奖励则不展示签到记录List signInRewardMoneyListConfigList = signInRewardMoneyListConfig.getList();if (CollectionUtils.isEmpty(signInRewardMoneyListConfigList)) {return WrapMapper.ok();}//获取session用户对象String customerId = postSignInRequest.getCustomerId();//根据customerId查询用户签到记录XZhSignInEntity xZhSignInEntityByCustomerId = xZhSignInMapper.findByCustomerId(customerId);//签到记录是否为空if (null == xZhSignInEntityByCustomerId) {XZhSignInEntity xZhSignInEntity = new XZhSignInEntity();xZhSignInEntity.setBuNo(IdUtil.simpleUUID());xZhSignInEntity.setCustomerId(customerId);xZhSignInEntity.setContinuiteDay(CONTINUITE_DAY_ONE);xZhSignInEntity.setRewardMoney(signInRewardMoneyListConfigList.get(0));xZhSignInEntity.setSignInDate(DateUtils.getTodayDate());insertSigninAndHist(xZhSignInEntity);return WrapMapper.ok();}long signInDateTime = xZhSignInEntityByCustomerId.getSignInDate().getTime();if (signInDateTime == DateUtils.getTodayDateTime()) {return WrapMapper.error("今天已经签到");}//获取连续签到天数Integer continuiteDay = continuiteDay(xZhSignInEntityByCustomerId.getContinuiteDay(), signInDateTime);xZhSignInEntityByCustomerId.setSignInDate(DateUtils.getTodayDate());xZhSignInEntityByCustomerId.setContinuiteDay(continuiteDay);xZhSignInEntityByCustomerId.setRewardMoney(signInRewardMoneyListConfigList.get(continuiteDay - 1));xZhSignInEntityByCustomerId.setUpdateTime(new Date());xZhSignInEntityByCustomerId.setBuNo(IdUtil.simpleUUID());updateSignInAndInsertHist(xZhSignInEntityByCustomerId);return WrapMapper.ok();}private Integer continuiteDay(Integer continuiteDay, Long signInDateTime){if (signInDateTime < DateUtils.getYesterdayDateTime()) {return CONTINUITE_DAY_ONE;}if (continuiteDay >= continuiteDayThreshold) {return CONTINUITE_DAY_ONE;}return continuiteDay + 1;}private void insertSigninAndHist(XZhSignInEntity xZhSignInEntity){xZhSignInMapper.insertSelective(xZhSignInEntity);XZhSignInHistEntity xZhSignInHistEntity = new XZhSignInHistEntity();BeanUtils.copyProperties(xZhSignInEntity, xZhSignInHistEntity);xZhSignInHistEntity.setId(null);xZhSignInHistMapper.insertSelective(xZhSignInHistEntity);}private void updateSignInAndInsertHist(XZhSignInEntity xZhSignInEntity){xZhSignInMapper.updateByPrimaryKeySelective(xZhSignInEntity);XZhSignInHistEntity xZhSignInHistEntity = new XZhSignInHistEntity();BeanUtils.copyProperties(xZhSignInEntity, xZhSignInHistEntity);xZhSignInHistEntity.setId(null);xZhSignInHistMapper.insertSelective(xZhSignInHistEntity);}}

springboot 打卡功能_实战:如果让你用SpringBoot实现签到奖励的功能,你会怎么做?...相关推荐

  1. java签到_实战:如果让你用SpringBoot实现签到奖励的功能,你会怎么做?

    阅读本文大概需要 6 分钟. 来自:网络 前言 最近在做社交业务,用户进入APP后有签到功能,签到成功后获取相应的奖励:项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即 ...

  2. android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...

    想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...

  3. python京东自动签到_利用python Selenium实现自动登陆京东签到领金币功能

    如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个.密码的形 ...

  4. Qt利用avilib实现录屏功能_利用“别名”实现Sendmail的邮件群发和邮件备份功能...

    前序 Sendmail服务器是一款经典的邮件发送软件,利用SMTP协议,实现邮件的发送,在CentOS7 邮件服务器部署(sendmail)中,我们学习了sendmail的基础配置,今天我们通过Lin ...

  5. ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能

    ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...

  6. excel查找功能_如何使用VBA代码实现Excel的查找和替换功能?

    每天一篇Excel技术图文微信公众号:Excel星球NO.145-I Find You作者:看见星光微博:EXCELers / 知识星球:Excel HI,大家好,我是星光.这章继续给大家分享VBA常 ...

  7. js购物车功能php,实战项目:用原生JS实现一个购物车的功能

    实战:购物车功能 一.两个实用的数组函数 1.1 Array.every() every()方法传入回调函数,这个回调函数有三个参数,分别是: item:用于测试的当前值: index:当前测试值的索 ...

  8. vivov3隐藏功能_用vivo手机玩游戏,打开3个隐藏功能,流畅度媲美游戏手机!

    用vivo手机玩游戏,打开3个隐藏功能,流畅度媲美游戏手机! 自从智能机出现之后,对我们的生活改变非常大,不仅方便了我们的生活,而且还为我们带来了一些娱乐的项目,现在的年轻人就非常喜欢用手机来打游戏, ...

  9. alert()的功能_前端实现简单的图片上传小图预览功能

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

最新文章

  1. Linux rm 命令
  2. boost::hana::back用法的测试程序
  3. Angular浅入深出系列 - 写在前面
  4. url参数 转java对象_如何让Spring MVC接收的参数可以转换为java对象
  5. 比较好用的python编译器_比酷传播
  6. PHP面向对象:instanceof 运算符 (备忘)
  7. 二维傅里叶变换深度研究-图像与其频域关系
  8. 3dMax 闪退未保存的解决方案
  9. 华为网络设备——单臂路由的配置示例
  10. 第一款在太空中使用的芯片
  11. KU-600变电站综合自动化系统
  12. 如何免费设置QQ空间背景音乐
  13. 关于VSCode编码:自动猜测编码字符集
  14. 用html制作一个影厅位置图,screenx影厅是什么
  15. PHP 对接美团大众点评团购券(门票)
  16. python tutorial json_Python Tutorial - Parse JSON Objects with Python
  17. javaWeb开发的放推特项目之推特发布
  18. python应聘项目经历怎么写_简历中怎么写「项目经历」最好?为什么?
  19. Python环境配置和安装包总结
  20. VGG(visual geometry group,超分辨率测试序列)

热门文章

  1. 002_JSONObject、JSONArray和JsonConfig对象简单使用
  2. 017_html图像
  3. debian linux u盘安装,使用U盘安装Debian系统图文教程
  4. Xml转换成view的原理
  5. requestWindowFeature()的应用
  6. com.facebook.imagepipeline.bitmaps.TooManyBitmapsException Fresco使用过程中遇到的坑
  7. response.setcharacterencoding 报错是缺哪个包_出街,你缺的是这一款包包...
  8. 如何做出受欢迎的字体排版风格?
  9. python ui框架_PyQt5GUI项目程序框架
  10. 苹果手机微信声音小怎么调大声_成都市苹果手机维修服务网点查询