From 5a10f03a4ab7954d6b95d46bb6a320ddee6ea2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 18 Dec 2024 17:07:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E5=85=85=E5=80=BC=E5=8F=AF=E5=BE=97=E5=85=8D=E8=B4=B9=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E5=85=A8=E9=9B=86=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/common/utils/RedisKeys.java | 12 +++++ .../java/com/sqx/common/utils/RedisUtils.java | 14 ++++++ .../impl/CourseDetailsServiceImpl.java | 50 ++++++++++++++++++- .../com/sqx/modules/orders/dao/OrdersDao.java | 2 + .../modules/redisService/RedisService.java | 4 ++ .../redisService/impl/RedisServiceImpl.java | 25 ++++++++++ .../resources/mapper/orders/OrdersDao.xml | 8 +++ 7 files changed, 114 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sqx/common/utils/RedisKeys.java b/src/main/java/com/sqx/common/utils/RedisKeys.java index 6d568f41..e336f71e 100644 --- a/src/main/java/com/sqx/common/utils/RedisKeys.java +++ b/src/main/java/com/sqx/common/utils/RedisKeys.java @@ -1,11 +1,15 @@ package com.sqx.common.utils; +import cn.hutool.core.date.DateUtil; + /** * Redis所有Keys * */ public class RedisKeys { + public static final String PAY_FREE_WATCH_KEY = "pay:free:watch:"; + public static String getSysConfigKey(String key){ return "sys:config:" + key; } @@ -13,4 +17,12 @@ public class RedisKeys { public static String getDateKey(String key){ return "date:" + key; } + + public static String getPayFreeWatchKey(Long userId) { + return PAY_FREE_WATCH_KEY + DateUtil.today() + ":" + userId; + } + + public static void main(String[] args) { + System.out.println(DateUtil.today()); + } } diff --git a/src/main/java/com/sqx/common/utils/RedisUtils.java b/src/main/java/com/sqx/common/utils/RedisUtils.java index 3b90d246..6a7914c1 100644 --- a/src/main/java/com/sqx/common/utils/RedisUtils.java +++ b/src/main/java/com/sqx/common/utils/RedisUtils.java @@ -98,6 +98,20 @@ public class RedisUtils { if(expire != NOT_EXPIRE){ redisTemplate.expire(key, expire, TimeUnit.SECONDS); } + + } + + public boolean setIfAbsent(String key, Object value, long expire){ + Boolean absent = valueOperations.setIfAbsent(key, toJson(value)); + if (Boolean.FALSE.equals(absent)) { + return false; + } + if(expire != NOT_EXPIRE){ + redisTemplate.expire(key, expire, TimeUnit.SECONDS); + } + + return true; + } public void set(String key, Object value){ diff --git a/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java b/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java index 08dff28b..3ae16729 100644 --- a/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java +++ b/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java @@ -1,6 +1,8 @@ package com.sqx.modules.course.service.impl; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -12,6 +14,8 @@ import com.sqx.common.utils.Result; import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.app.service.UserService; import com.sqx.modules.app.utils.JwtUtils; +import com.sqx.modules.common.dao.CommonInfoDao; +import com.sqx.modules.common.entity.CommonInfo; import com.sqx.modules.course.dao.CourseCollectDao; import com.sqx.modules.course.dao.CourseDao; import com.sqx.modules.course.dao.CourseDetailsDao; @@ -22,11 +26,15 @@ import com.sqx.modules.course.entity.CourseDetails; import com.sqx.modules.course.entity.CourseUser; import com.sqx.modules.course.service.CourseDetailsService; import com.sqx.modules.course.vo.CourseDetailsIn; +import com.sqx.modules.orders.dao.OrdersDao; +import com.sqx.modules.orders.entity.Orders; import com.sqx.modules.orders.service.OrdersService; +import com.sqx.modules.redisService.impl.RedisServiceImpl; import com.sqx.modules.utils.EasyPoi.ExcelUtils; import com.sqx.modules.utils.HttpClientUtil; import com.sqx.modules.utils.SenInfoCheckUtil; import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +47,7 @@ import java.util.Date; import java.util.List; @Service +@Slf4j public class CourseDetailsServiceImpl extends ServiceImpl implements CourseDetailsService { @Autowired @@ -53,6 +62,12 @@ public class CourseDetailsServiceImpl extends ServiceImpl() + .eq(CommonInfo::getType, 916)); + CommonInfo freeTimeCommonInfo = commonInfoDao.selectOne(new LambdaQueryWrapper() + .eq(CommonInfo::getType, 917)); + if (needCountCommonInfo == null || freeTimeCommonInfo == null + || StrUtil.isBlank(needCountCommonInfo.getValue()) || StrUtil.isBlank(freeTimeCommonInfo.getValue())) { + log.warn("系统未配置全免次数或时间"); + return false; + } + + // 购买次数超过,设置redis标识 + if (count >= Integer.parseInt(needCountCommonInfo.getValue())) { + redisServiceImpl.setPayFreeWatchTime(userId, Integer.parseInt(freeTimeCommonInfo.getValue())); + isExpire = false; + }else { + isExpire = true; + } + } + return !isExpire; + + } + @Override public Result selectCourseDetailsById(Long id, String token, String courseDetailsId) { Course bean = courseDao.selectById(id); @@ -99,7 +145,9 @@ public class CourseDetailsServiceImpl extends ServiceImpl { Integer selectOrdersCountStatisticsByDay(Long userId); Orders selectOrdersByDay(Long userId); + Integer countPayOrderByDay(Long userId); + Integer countOrderNum(Long userId, String time); diff --git a/src/main/java/com/sqx/modules/redisService/RedisService.java b/src/main/java/com/sqx/modules/redisService/RedisService.java index a7f27e9f..9652816b 100644 --- a/src/main/java/com/sqx/modules/redisService/RedisService.java +++ b/src/main/java/com/sqx/modules/redisService/RedisService.java @@ -8,4 +8,8 @@ public interface RedisService { void setDiscSpinningAmounts(String key); + + void setPayFreeWatchTime(Long userId, Integer time); + + Boolean getPayFreeWatchTimeIsExpire(Long userId); } diff --git a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java index 69b0e7b2..44cbc099 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -1,6 +1,10 @@ package com.sqx.modules.redisService.impl; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sqx.common.utils.RedisKeys; import com.sqx.common.utils.RedisUtils; import com.sqx.modules.discSpinning.entity.DiscSpinningAmount; import com.sqx.modules.discSpinning.service.DiscSpinningAmountService; @@ -9,6 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.HashMap; import java.util.List; @Service public class RedisServiceImpl implements RedisService { @@ -23,4 +29,23 @@ public class RedisServiceImpl implements RedisService { List amounts = amountService.list(new QueryWrapper().eq("status", 1).orderByAsc("max_amount")); redisUtils.set(key, amounts); } + + @Override + public void setPayFreeWatchTime(Long userId, Integer minute) { + Date now = DateUtil.date(); + Date tomorrow = DateUtil.beginOfDay(DateUtil.offsetDay(now, 1)); + long seconds = DateUtil.between(now, tomorrow, DateUnit.SECOND); + redisUtils.setIfAbsent(RedisKeys.getPayFreeWatchKey(userId), DateUtil.offsetMinute(now, minute).getTime(), seconds + 300); + } + + @Override + public Boolean getPayFreeWatchTimeIsExpire(Long userId) { + String data = redisUtils.get(RedisKeys.getPayFreeWatchKey(userId)); + if (data == null) { + return null; + } + + long expireTime = Long.parseLong(data); + return DateUtil.current() > expireTime; + } } diff --git a/src/main/resources/mapper/orders/OrdersDao.xml b/src/main/resources/mapper/orders/OrdersDao.xml index ebbebcbb..e6f811ee 100644 --- a/src/main/resources/mapper/orders/OrdersDao.xml +++ b/src/main/resources/mapper/orders/OrdersDao.xml @@ -319,4 +319,12 @@ and create_time > #{time} +