From 73c05102118178b8339a3002d0b21148e94eadde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Mon, 23 Dec 2024 15:09:57 +0800 Subject: [PATCH 01/33] =?UTF-8?q?=E5=88=86=E6=89=B9=E6=AC=A110=E9=9B=86?= =?UTF-8?q?=E8=B4=AD=E4=B9=B0=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/course/entity/Course.java | 5 + .../controller/app/AppOrdersController.java | 14 ++ .../com/sqx/modules/orders/entity/Orders.java | 2 + .../modules/orders/service/OrdersService.java | 29 ++-- .../service/impl/OrdersServiceImpl.java | 154 +++++++++++++++++- 5 files changed, 189 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/sqx/modules/course/entity/Course.java b/src/main/java/com/sqx/modules/course/entity/Course.java index b39f54e8..cf486c58 100644 --- a/src/main/java/com/sqx/modules/course/entity/Course.java +++ b/src/main/java/com/sqx/modules/course/entity/Course.java @@ -49,6 +49,11 @@ public class Course implements Serializable { */ private BigDecimal price; + /** + * 10集购买价格 + */ + private BigDecimal wholesalePrice; + /** * 上下架 1上架 2下架 */ diff --git a/src/main/java/com/sqx/modules/orders/controller/app/AppOrdersController.java b/src/main/java/com/sqx/modules/orders/controller/app/AppOrdersController.java index 0b45f174..915ce1f0 100644 --- a/src/main/java/com/sqx/modules/orders/controller/app/AppOrdersController.java +++ b/src/main/java/com/sqx/modules/orders/controller/app/AppOrdersController.java @@ -40,6 +40,20 @@ public class AppOrdersController extends AbstractController { return ordersService.insertCourseOrders(courseId, courseDetailsId,userId); } + /** + * 生成商品订单 + * + * @param courseId + * @param userId + * @return + */ + @Login + @GetMapping("/insertCourseOrders/limit10") + @ApiOperation("生成商品订单") + public Result insertCourseOrdersLimit10(Long courseId, @RequestAttribute("userId") Long userId) { + return ordersService.insertCourseOrdersLimit10(courseId, userId); + } + @Login @GetMapping("/insertVipOrders") @ApiOperation("生成会员订单") diff --git a/src/main/java/com/sqx/modules/orders/entity/Orders.java b/src/main/java/com/sqx/modules/orders/entity/Orders.java index 01ae1756..c11801c8 100644 --- a/src/main/java/com/sqx/modules/orders/entity/Orders.java +++ b/src/main/java/com/sqx/modules/orders/entity/Orders.java @@ -49,6 +49,8 @@ public class Orders implements Serializable { private Long courseDetailsId; + private String courseDetailsIds; + @TableField(exist = false) /** * 短剧对象 diff --git a/src/main/java/com/sqx/modules/orders/service/OrdersService.java b/src/main/java/com/sqx/modules/orders/service/OrdersService.java index 7f957e12..8a5594f5 100644 --- a/src/main/java/com/sqx/modules/orders/service/OrdersService.java +++ b/src/main/java/com/sqx/modules/orders/service/OrdersService.java @@ -15,15 +15,17 @@ public interface OrdersService extends IService { Result payMoney(Long orderId); - Result insertCourseOrders(Long courseId, Long courseDetailsId,Long userId); + Result insertCourseOrders(Long courseId, Long courseDetailsId, Long userId); + + Result insertCourseOrdersLimit10(Long courseId, Long userId); Result insertVipOrders(Long vipDetailsId, Long userId); Result refundOrder(Long ordersId, String refundContent); - Result selectOrders(Integer page, Integer limit, String ordersNo,Integer status,Long userId,Long courseId, - Integer flag,String time,String userName,Integer ordersType,String startTime,String endTime, - Long sysUserId,String qdCode,String sysUserName); + Result selectOrders(Integer page, Integer limit, String ordersNo, Integer status, Long userId, Long courseId, + Integer flag, String time, String userName, Integer ordersType, String startTime, String endTime, + Long sysUserId, String qdCode, String sysUserName); Result selectOrderByUserId(Integer page, Integer limit, Long userId); @@ -35,31 +37,32 @@ public interface OrdersService extends IService { Orders selectOrderByTradeNo(String tradeNo); - Double statisticsIncomeMoney(String time,Integer flag,Integer ordersType); + Double statisticsIncomeMoney(String time, Integer flag, Integer ordersType); - Orders selectOrdersByCourseIdAndUserId(Long userId,Long courseId); + Orders selectOrdersByCourseIdAndUserId(Long userId, Long courseId); - Result selectOrdersMoneyList(Integer page,Integer limit,Integer flag,String time); + Result selectOrdersMoneyList(Integer page, Integer limit, Integer flag, String time); - Integer selectOrdersCount(Integer status,Integer ordersType,Integer flag,String time,Long sysUserId); + Integer selectOrdersCount(Integer status, Integer ordersType, Integer flag, String time, Long sysUserId); - Double selectOrdersMoney(Integer status,Integer ordersType,Integer flag,String time,Long courseId,Long sysUserId); + Double selectOrdersMoney(Integer status, Integer ordersType, Integer flag, String time, Long courseId, Long sysUserId); - Double selectFenXiaoMoney(Integer type,Long sysUserId,Integer flag,String time); + Double selectFenXiaoMoney(Integer type, Long sysUserId, Integer flag, String time); - Integer selectOrdersCountStatisticsByYear(Integer flag,String time,Integer status); + Integer selectOrdersCountStatisticsByYear(Integer flag, String time, Integer status); - Integer selectOrdersCountStatisticsByDay(Long userId,Integer limit); + Integer selectOrdersCountStatisticsByDay(Long userId, Integer limit); Orders selectOrdersByDay(Long userId); /** * 统计 用户成功订单笔数 + * * @param userId * @param time 时间条件 不传为全部订单 格式 yyyy-MM-dd HH:mm:ss * @return */ - Integer countOrderNum(Long userId,String time); + Integer countOrderNum(Long userId, String time); } diff --git a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java index 0c50b8ed..ab2512be 100644 --- a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java @@ -1,18 +1,27 @@ package com.sqx.modules.orders.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; 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.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.PageUtils; import com.sqx.common.utils.Result; -import com.sqx.modules.app.entity.*; +import com.sqx.modules.app.entity.UserMoney; +import com.sqx.modules.app.entity.UserMoneyDetails; +import com.sqx.modules.app.entity.UserVip; +import com.sqx.modules.app.entity.VipDetails; import com.sqx.modules.app.service.*; import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.course.dao.CourseDao; +import com.sqx.modules.course.dao.CourseDetailsDao; import com.sqx.modules.course.dao.CourseUserDao; import com.sqx.modules.course.entity.Course; import com.sqx.modules.course.entity.CourseDetails; @@ -38,6 +47,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.stream.Collectors; @Service @Slf4j @@ -72,6 +82,8 @@ public class OrdersServiceImpl extends ServiceImpl implements private InviteMoneyService inviteMoneyService; @Autowired private DyService dyService; + @Autowired + private CourseDetailsDao courseDetailsDao; private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); @@ -86,6 +98,32 @@ public class OrdersServiceImpl extends ServiceImpl implements public Result insertOrders(Orders orders) { //如果订单的种类是短剧 if (orders.getOrdersType() == 1) { + if (StrUtil.isNotEmpty(orders.getCourseDetailsIds())) { + List courseDetailsIdList = JSONUtil.parseArray(orders.getCourseDetailsIds()).toList(Long.class); + List courseUserList = new ArrayList<>(); + courseDetailsIdList.parallelStream().forEach(courseDetailsId -> { + //将短剧加入到我的列表 + CourseUser courseUser = new CourseUser(); + //设置短剧id + courseUser.setCourseId(orders.getCourseId()); + courseUser.setCourseDetailsId(orders.getCourseDetailsId()); + if (courseUser.getCourseDetailsId() != null) { + courseUser.setClassify(2); + } else { + courseUser.setClassify(1); + } + //设置用户id + courseUser.setUserId(orders.getUserId()); + //设置订单id + courseUser.setOrderId(orders.getOrdersId()); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + courseUser.setCreateTime(df.format(new Date())); + courseUserList.add(courseUser); + }); + //加入我的列表 + courseUserService.saveBatch(courseUserList); + return Result.success("短剧订单处理完成!"); + } //将短剧加入到我的列表 CourseUser courseUser = new CourseUser(); //设置短剧id @@ -280,6 +318,112 @@ public class OrdersServiceImpl extends ServiceImpl implements return Result.error("系统繁忙,请稍后再试!"); } + /** + * 生成商品订单信息(购买10集) + * + * @param courseId + * @param userId + * @return + */ + @Override + public Result insertCourseOrdersLimit10(Long courseId, Long userId) { + log.info("生成商品订单信息接口入参为:{},{}", courseId, userId); + reentrantReadWriteLock.writeLock().lock(); + try { + /*CourseUser courseUser1 = courseUserDao.selectCourseUser(courseId, userId); + if(courseUser1!=null){ + return Result.error("您已经购买过了,请不要重复点击!"); + }*/ + //返回的类型 + Map result = new HashMap<>(); + //查询会员信息 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + if (courseId == null) { + return Result.error("短剧的id不能为空"); + } + + //订单模板对象 + Orders orders = new Orders(); + //根据短剧id去查询短剧相关信息 来填充订单模板 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + //短剧必须是未删除的 + queryWrapper.eq("course_id", courseId); + Course course = courseDao.selectOne(queryWrapper); + if (course == null) { + return Result.error("系统繁忙,请刷新后重试!"); + } + if (course.getWholesalePrice() == null) { + return Result.error("该剧暂不支持10集购买方式!"); + } + //是否以购买全集 + Integer isBuyAllCount = courseUserDao.selectCount(Wrappers.lambdaQuery().eq(CourseUser::getCourseId, courseId).eq(CourseUser::getCourseUserId, userId).eq(CourseUser::getClassify, 1)); + if (isBuyAllCount != null && isBuyAllCount > 0) { + return Result.error("您已经购买过全集,请不要重复购买!"); + } + List courseUserList = courseUserDao.selectList(Wrappers.lambdaQuery().select(CourseUser::getCourseDetailsId).eq(CourseUser::getCourseId, courseId).eq(CourseUser::getCourseUserId, userId)); + // 已购买剧集 + List courseDetailsIdList = courseUserList.stream().map(CourseUser::getCourseDetailsId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(CourseDetails::getCourseId, courseId); + wrapper.eq(CourseDetails::getIsPrice, 1); + wrapper.select(CourseDetails::getCourseDetailsId); + wrapper.orderByAsc(CourseDetails::getSort); + List courseDetailsList = courseDetailsDao.selectList(wrapper); + if (CollUtil.isEmpty(courseDetailsList)) { + return Result.error("该剧的视频资源不存在!"); + } + List allIds = courseDetailsList.stream().map(CourseDetails::getCourseDetailsId).distinct().collect(Collectors.toList()); + allIds.removeAll(courseDetailsIdList); + // 需要购买的剧集id集合(没有权限的10集) + List buyCourseDetailsIdList = allIds.stream().filter(Objects::nonNull).limit(10).collect(Collectors.toList()); + if (CollUtil.isEmpty(buyCourseDetailsIdList)) { + return Result.error("没有需要购买的剧集!"); + } + //设置订单编号 + orders.setOrdersNo(AliPayOrderUtil.createOrderId()); + //设置用户id + orders.setUserId(userId); + //设置短剧id + orders.setCourseId(courseId); + orders.setCourseDetailsId(null); + orders.setCourseDetailsIds(JSONUtil.parseArray(buyCourseDetailsIdList).toString()); + + // 金币和金额的比例 + String value = commonInfoService.findOne(914).getValue(); + BigDecimal v = new BigDecimal(value); + + orders.setPayMoney(course.getWholesalePrice()); + orders.setPayDiamond(course.getWholesalePrice().multiply(v)); +// BigDecimal payDiamond = orders.getPayMoney().multiply(new BigDecimal(commonInfoService.findOne(892).getValue())); +// orders.setPayDiamond(payDiamond); + //设置支付状态 + orders.setStatus(0); + //设置订单创建时间 + orders.setCreateTime(df.format(new Date())); + //设置订单种类 + orders.setOrdersType(1); + + //不是会员或会员过期直接生成订单直接生成订单 + int count = baseMapper.insert(orders); + result.put("flag", 2); + result.put("orders", orders); + if (count > 0) { + return Result.success("生成订单成功!").put("data", result); + } else { + return Result.error("生成订单失败!"); + } + + } catch (Exception e) { + e.printStackTrace(); + log.error("生成商品订单错误!!!" + e.getMessage()); + } finally { + reentrantReadWriteLock.writeLock().unlock(); + } + return Result.error("系统繁忙,请稍后再试!"); + } + /** * 生成会员订单 * @@ -330,6 +474,12 @@ public class OrdersServiceImpl extends ServiceImpl implements .eq("classify", 2) .eq("course_id", orders.getCourseId()) .eq(orders.getCourseDetailsId() != null, "course_details_id", orders.getCourseDetailsId())); + } else if (orders.getCourseDetailsIds() != null) { + List courseDetailsIds = JSONUtil.parseArray(orders.getCourseDetailsIds()).toList(Long.class); + count = courseUserDao.selectCount(new QueryWrapper() + .eq("user_id", orders.getUserId()) + .eq("course_id", orders.getCourseId()) + .in("course_details_id", courseDetailsIds)); } else { count = courseUserDao.selectCount(new QueryWrapper() .eq("user_id", orders.getUserId()) @@ -344,7 +494,7 @@ public class OrdersServiceImpl extends ServiceImpl implements if (userMoney.getMoney().doubleValue() < orders.getPayDiamond().doubleValue()) { return Result.error("账户不足,请充值!"); } - UserEntity userEntity = userService.selectUserById(orders.getUserId()); + //UserEntity userEntity = userService.selectUserById(orders.getUserId()); userMoneyService.updateMoney(2, orders.getUserId(), orders.getPayDiamond().doubleValue()); UserMoneyDetails userMoneyDetails = new UserMoneyDetails(); userMoneyDetails.setMoney(orders.getPayDiamond()); From 08dd65e7cb64983213098476380651e33dab4d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Mon, 23 Dec 2024 15:11:53 +0800 Subject: [PATCH 02/33] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../userSign/service/impl/UserSignRecordServiceImpl.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java index a20f07ac..e9ba54f7 100644 --- a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java @@ -79,8 +79,7 @@ public class UserSignRecordServiceImpl extends ServiceImpl signMap = list.stream().collect(Collectors.toMap(UserSignRecord::getSignDay, UserSignRecord::getCreateTime)); for (String day : flowDays) { @@ -115,11 +114,7 @@ public class UserSignRecordServiceImpl extends ServiceImpl= 7) { dto.setEnable(0); } return dto; From 4750dca9147abaad5cefa75df47ae86b64f5410a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Mon, 23 Dec 2024 15:26:05 +0800 Subject: [PATCH 03/33] =?UTF-8?q?=E5=88=86=E6=89=B9=E6=AC=A110=E9=9B=86?= =?UTF-8?q?=E8=B4=AD=E4=B9=B0=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/modules/orders/service/impl/OrdersServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java index ab2512be..3794fe6a 100644 --- a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java @@ -1,6 +1,7 @@ package com.sqx.modules.orders.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; @@ -287,6 +288,9 @@ public class OrdersServiceImpl extends ServiceImpl implements orders.setPayMoney(courseDetails.getPrice()); orders.setPayDiamond(courseDetails.getPrice().multiply(v)); } else { + if (course.getPrice() == null || NumberUtil.isLessOrEqual(course.getPrice(), BigDecimal.ZERO)) { + return Result.error("该剧暂不支持整剧购买方式!"); + } orders.setPayMoney(course.getPrice()); orders.setPayDiamond(course.getPrice().multiply(v)); } @@ -357,6 +361,9 @@ public class OrdersServiceImpl extends ServiceImpl implements if (course.getWholesalePrice() == null) { return Result.error("该剧暂不支持10集购买方式!"); } + if (NumberUtil.isLessOrEqual(course.getWholesalePrice(), BigDecimal.ZERO)) { + return Result.error("该剧暂不支持10集购买方式!"); + } //是否以购买全集 Integer isBuyAllCount = courseUserDao.selectCount(Wrappers.lambdaQuery().eq(CourseUser::getCourseId, courseId).eq(CourseUser::getCourseUserId, userId).eq(CourseUser::getClassify, 1)); if (isBuyAllCount != null && isBuyAllCount > 0) { From f4e93e748e2db2fc97b1921cca9a4f7b64204943 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 23 Dec 2024 16:02:44 +0800 Subject: [PATCH 04/33] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E6=8A=BD=E5=A5=96?= =?UTF-8?q?=20=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/common/utils/DateUtils.java | 14 ++ .../controller/DiscSpinningController.java | 65 +++++- .../entity/DiscSpinningRecord.java | 6 +- .../service/DiscSpinningRecordService.java | 2 + .../impl/DiscSpinningRecordServiceImpl.java | 11 + .../service/impl/DiscSpinningServiceImpl.java | 4 +- .../modules/taskCenter/dao/TaskCenterDao.java | 2 - .../taskCenter/dao/TaskCenterRewardDao.java | 6 + .../taskCenter/entity/TaskCenterRecord.java | 4 +- .../service/TaskCenterRewardService.java | 1 + .../taskCenter/service/TaskCenterService.java | 3 + .../impl/TaskCenterRewardServiceImpl.java | 4 + .../service/impl/TaskCenterServiceImpl.java | 205 ++++++++++-------- .../userSign/dao/UserSignRecordDao.java | 6 + .../service/UserSignRecordService.java | 9 + .../impl/UserSignRecordServiceImpl.java | 22 ++ .../resources/mapper/orders/OrdersDao.xml | 18 +- .../mapper/tashCenter/TaskCenterDto.xml | 9 - .../mapper/userSign/TaskCenterDto.xml | 30 +++ 19 files changed, 291 insertions(+), 130 deletions(-) create mode 100644 src/main/resources/mapper/userSign/TaskCenterDto.xml diff --git a/src/main/java/com/sqx/common/utils/DateUtils.java b/src/main/java/com/sqx/common/utils/DateUtils.java index dcfc6203..a71ea7ef 100644 --- a/src/main/java/com/sqx/common/utils/DateUtils.java +++ b/src/main/java/com/sqx/common/utils/DateUtils.java @@ -1,5 +1,6 @@ package com.sqx.common.utils; +import cn.hutool.core.date.DateUtil; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.joda.time.LocalDate; @@ -159,4 +160,17 @@ public class DateUtils { DateTime dateTime = new DateTime(date); return dateTime.plusYears(years).toDate(); } + + + //获取当日剩余秒数 + public static long todayAfterSecond() { + Date now = new Date(); + // 获取当天结束时间(即当天23:59:59对应的Date对象) + Date endOfDay = DateUtil.endOfDay(now); + // 计算时间差(单位为毫秒) + long diffMillis = endOfDay.getTime() - now.getTime(); + // 将毫秒转换为秒 + long diffSeconds = diffMillis / 1000; + return diffSeconds; + } } diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java index c9041f10..e78ea8a0 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -1,10 +1,13 @@ package com.sqx.modules.discSpinning.controller; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sqx.common.annotation.Debounce; import com.sqx.common.utils.DateUtils; +import com.sqx.common.utils.RedisKeys; +import com.sqx.common.utils.RedisUtils; import com.sqx.common.utils.Result; import com.sqx.modules.app.annotation.Login; import com.sqx.modules.app.entity.UserEntity; @@ -16,6 +19,8 @@ import com.sqx.modules.discSpinning.service.DiscSpinningRecordService; import com.sqx.modules.discSpinning.service.DiscSpinningService; import com.sqx.modules.orders.entity.Orders; import com.sqx.modules.orders.service.OrdersService; +import com.sqx.modules.taskCenter.entity.TaskCenterRecord; +import com.sqx.modules.taskCenter.service.TaskCenterRecordService; import com.sqx.modules.taskCenter.service.TaskCenterService; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; @@ -41,18 +46,23 @@ public class DiscSpinningController { private final CommonInfoService commonRepository; private final OrdersService ordersService; private final TaskCenterService taskCenterService; + private final TaskCenterRecordService taskRecordService; private final UserService userService; + private final RedisUtils redisUtils; @Autowired public DiscSpinningController(CommonInfoService commonRepository, DiscSpinningService discSpinningService, OrdersService ordersService, DiscSpinningRecordService recordService, - TaskCenterService taskCenterService, UserService userService) { + TaskCenterService taskCenterService, UserService userService, RedisUtils redisUtils, + TaskCenterRecordService taskRecordService) { this.commonRepository = commonRepository; this.discSpinningService = discSpinningService; this.ordersService = ordersService; this.recordService = recordService; this.taskCenterService = taskCenterService; this.userService = userService; + this.redisUtils = redisUtils; + this.taskRecordService = taskRecordService; } @PostMapping("/discSpinning/insertDiscSpinning") @@ -143,6 +153,7 @@ public class DiscSpinningController { //任务可抽奖次数 map.put("count", taskCenterService.countTaskDisc(userId, source.toString())); } else { + //订单可抽奖次数 int i = recordService.countDraw(userId); if (drawCount - i > 0) { map.put("count", ordersService.selectOrdersCountStatisticsByDay(userId, drawCount - i)); @@ -161,10 +172,11 @@ public class DiscSpinningController { @ApiOperation("抽取大转盘") public Result draw(@ApiIgnore @RequestAttribute("userId") Long userId, @RequestParam(required = false, defaultValue = "1") Integer source) { double amount = 0; - Long orderId = null; + Long sourceId = null; Integer i = recordService.countDraw(userId); - if (source != null && source.equals(1)) { - //任务抽奖 + if (source == null || source.equals(1)) { + source = 1; + //订单抽奖 int drawCount = Integer.parseInt(commonRepository.findOne(901).getValue()); if (i != null && i >= drawCount) { return Result.error("当日可抽奖次数已超限"); @@ -174,12 +186,41 @@ public class DiscSpinningController { return Result.error("无可抽奖机会"); } amount = orders.getPayMoney().doubleValue(); - orderId = orders.getOrdersId(); - } else if (source == null) { - source = 1; + sourceId = orders.getOrdersId(); + } else { + String redisKey = ""; + if (source.equals(2)){ + redisKey = RedisKeys.getDateKey("spinning:amount:taskW") + userId; + }else if(source.equals(3)){ + redisKey = RedisKeys.getDateKey("spinning:amount:taskM") + userId; + } + Map week = redisUtils.get(redisKey, Map.class); + for (Map.Entry entry : week.entrySet()) { + Integer value = entry.getValue(); + if (value > 1) { + value = value - 1; + week.put(entry.getKey(), value); + break; + } else { + TaskCenterRecord centerRecord = new TaskCenterRecord(); + centerRecord.setUserId(userId); + centerRecord.setTaskId(entry.getKey().longValue()); + if(source.equals(2)){ + centerRecord.setSourceId(entry.getKey().longValue()); + } + centerRecord.setName(source.equals(2) ? "周任务奖励" : "月任务奖励"); + centerRecord.setType(9); + centerRecord.setNumber(1); + centerRecord.setCreateTime(DateUtil.now()); + taskRecordService.save(centerRecord); + week.remove(entry.getKey()); + break; + } + } + redisUtils.set(redisKey,week,DateUtils.todayAfterSecond()); } return new Result().put("data", - discSpinningService.draws(i == null ? 1 : i + 1, amount, orderId, userId, source)); + discSpinningService.draws(i == null ? 1 : i + 1, amount, sourceId, userId, source)); } @ApiOperation("大转盘奖项领取") @@ -191,9 +232,11 @@ public class DiscSpinningController { discSpinningService.receiveAsync(record); }); UserEntity userInfo = userService.queryByUserId(record.getUserId()); - int res = 0; - if (StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) { - res = 1; + int res = 1; + if (receive.getType().equals(2)) { + if (StringUtils.isBlank(userInfo.getZhiFuBao()) && StringUtils.isBlank(userInfo.getZhiFuBaoName())) { + res = 0; + } } return Result.success().put("data", res); } diff --git a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java index b26d7d59..7fc6bfef 100644 --- a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java +++ b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java @@ -23,7 +23,7 @@ public class DiscSpinningRecord extends Model { //主键 private Long id; - private Long orderId; + private Long sourceId; private Long userId; //描述 @@ -46,11 +46,11 @@ public class DiscSpinningRecord extends Model { public DiscSpinningRecord() { } - public DiscSpinningRecord(String name, Long orderId, Long userId, Integer type, BigDecimal number, + public DiscSpinningRecord(String name, Long sourceId, Long userId, Integer type, BigDecimal number, String drawDay, String createTime, Integer source) { this.name = name; this.userId = userId; - this.orderId = orderId; + this.sourceId = sourceId; this.type = type; this.number = number; this.drawDay = drawDay; diff --git a/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningRecordService.java b/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningRecordService.java index 4aa53bcc..1b05bb8d 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningRecordService.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningRecordService.java @@ -8,5 +8,7 @@ import java.util.Map; public interface DiscSpinningRecordService extends IService { Integer countDraw(Long userId); + //当月的 月记录 已抽 抽奖次数 + Integer countSourceRecord(Long sourceId); } diff --git a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java index 9dfd0324..985b73c5 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java @@ -1,14 +1,17 @@ package com.sqx.modules.discSpinning.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sqx.modules.discSpinning.dao.DiscSpinningRecordDao; import com.sqx.modules.discSpinning.entity.DiscSpinningRecord; import com.sqx.modules.discSpinning.service.DiscSpinningRecordService; +import com.sqx.modules.userSign.entity.UserSignRecord; import org.springframework.stereotype.Service; import org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; +import java.util.Date; import java.util.Map; @Service @@ -21,5 +24,13 @@ public class DiscSpinningRecordServiceImpl extends ServiceImpl recordQuery = new QueryWrapper<>(); + recordQuery.eq("source_id", sourceId); + recordQuery.gt("create_time", DateUtil.beginOfMonth(new Date())); + return discSpinningRecordDao.selectCount(recordQuery); + } } diff --git a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java index 4d7256dc..434d79e0 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java @@ -168,7 +168,7 @@ public class DiscSpinningServiceImpl extends ServiceImpl prizes = baseMapper.selectList(new QueryWrapper().eq("disc_type", source).orderByAsc("odds")); @@ -221,7 +221,7 @@ public class DiscSpinningServiceImpl extends ServiceImpl { - //大转盘任务 - List queryTaskDiscCenter(); } diff --git a/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java b/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java index 1750d9d9..ac11f2e4 100644 --- a/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java +++ b/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java @@ -3,9 +3,15 @@ package com.sqx.modules.taskCenter.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sqx.modules.taskCenter.entity.TaskCenterReward; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.Map; @Mapper public interface TaskCenterRewardDao extends BaseMapper { + @Select("SELECT type,number FROM `task_center_reward` where task_id = #{taskId}") + Map getRewardMap(Long taskId); + } diff --git a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java index 2787025b..77545b82 100644 --- a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java +++ b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java @@ -25,8 +25,10 @@ public class TaskCenterRecord extends Model { private Long id; @ApiModelProperty("用户id") private Long userId; - @ApiModelProperty("任务Id") + @ApiModelProperty("任务Id 周任务转盘奖励时 该值为 user_sign_record的id") private Long taskId; + @ApiModelProperty("来源Id 目前仅周任务使用") + private Long sourceId; @ApiModelProperty("奖励名称") private String name; @ApiModelProperty("奖励类型 1 金币 2 现金 3 4 5 9转盘") diff --git a/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterRewardService.java b/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterRewardService.java index 3a62c862..467502cd 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterRewardService.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterRewardService.java @@ -7,5 +7,6 @@ import java.util.Map; public interface TaskCenterRewardService extends IService { + Map getRewardMap(Long taskId); } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterService.java b/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterService.java index 02ffda09..aa781134 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterService.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/TaskCenterService.java @@ -8,10 +8,13 @@ import java.util.Map; public interface TaskCenterService extends IService { + //查询任务中心 Result queryTaskCenter(Long userId); + //任务领取 Result taskReceive(Long userId, Long id); + //获取大转盘抽奖次数 int countTaskDisc(Long userId,String type); } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java index c86dfb89..624554a0 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java @@ -15,5 +15,9 @@ import java.util.Map; public class TaskCenterRewardServiceImpl extends ServiceImpl implements TaskCenterRewardService { + @Override + public Map getRewardMap(Long taskId) { + return baseMapper.getRewardMap(taskId); + } } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 50eb6102..72d066ca 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -1,14 +1,21 @@ package com.sqx.modules.taskCenter.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sqx.common.utils.DateUtils; +import com.sqx.common.utils.RedisKeys; +import com.sqx.common.utils.RedisUtils; import com.sqx.common.utils.Result; +import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.app.entity.UserMoneyDetails; import com.sqx.modules.app.service.UserMoneyDetailsService; import com.sqx.modules.app.service.UserMoneyService; +import com.sqx.modules.app.service.UserService; +import com.sqx.modules.discSpinning.service.DiscSpinningRecordService; import com.sqx.modules.orders.service.OrdersService; import com.sqx.modules.taskCenter.dao.TaskCenterDao; import com.sqx.modules.taskCenter.entity.TaskCenter; @@ -25,9 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; @Service public class TaskCenterServiceImpl extends ServiceImpl implements TaskCenterService { @@ -44,62 +49,89 @@ public class TaskCenterServiceImpl extends ServiceImpl taskPage = baseMapper.selectList(new QueryWrapper().eq("shows", 1).orderByAsc("sort", "type")); + List resultTask = new ArrayList<>(); boolean todaySign = true; - //月 签到记录 - QueryWrapper signWrapper = new QueryWrapper<>(); - signWrapper.eq("user_id", userId); - signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00"); - signWrapper.orderByAsc("create_time"); - int signCount = signRecordService.count(signWrapper); - TaskCenter reTaskCenter = null; + Integer signCount = null; for (TaskCenter s : taskPage) { + Map rewardMap = taskCenterRewardService.getRewardMap(s.getId()); + if (CollectionUtil.isEmpty(rewardMap)) { + continue; + } switch (s.getType()) { //签到任务 case 2: + //日任务 if (s.getNumber().equals(1)) { Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00"); if (dayOrderNum < 3) { s.setDiscNumber(dayOrderNum); s.setNumber(3); -// s.setDisabled(false); todaySign = false; } else if (recordService.countTaskNum(userId, s.getId(), DateUtil.today() + " 00:00:00") > 0) { s.setButtonTitle("已领取"); s.setNumber(null); -// s.setDisabled(false); } else { s.setDiscNumber(0); s.setNumber(null); s.setJumpType(0); } } else { - if (todaySign) { - if ((signCount < (s.getNumber().intValue() - 1))) { - s.setDiscNumber(signCount); - s.setNumber(null); - s.setDisabled(false); - } else if (recordService.countTaskNum(userId, s.getId(), DateUtil.beginOfMonth(new Date()).toString()) > 0) { - s.setButtonTitle("已领取"); - s.setDisabled(false); - s.setNumber(null); + //周任务 + if (s.getNumber() > 1 && s.getNumber() < 8) { + if (rewardMap.containsKey(9)) { + //抽奖次数 + Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); + if (CollectionUtil.isNotEmpty(taskWCount)) { + for (Integer value : taskWCount.values()) { + if (value > 0) { + break; + } + } + } } - } else { - if ((signCount < s.getNumber().intValue())) { - s.setDiscNumber(signCount); + Integer wSignCount = signRecordService.getWSignCount(userId); + if (wSignCount == null || wSignCount + (todaySign ? 1 : 0) < s.getNumber()) { + s.setDiscNumber(wSignCount == null ? 0 : wSignCount); s.setDisabled(false); - s.setNumber(null); - } else if (recordService.countTaskNum(userId, s.getId(), DateUtil.beginOfMonth(new Date()).toString()) > 0) { + } else { s.setButtonTitle("已领取"); s.setDisabled(false); s.setNumber(null); } } - + //月任务 + else if (s.getNumber() > 7 && s.getNumber() < 32) { + if (signCount == null) { + signCount = signRecordService.getUserSignCount(userId); + } + if (signCount + (todaySign ? 1 : 0) < s.getNumber()) { + s.setDiscNumber(signCount); + s.setDisabled(false); + } else { + if (rewardMap.containsKey(9)) { + Integer spinningCount = discSpinningRecordService.countSourceRecord(s.getId()); + if (spinningCount == null || spinningCount > 0) { + break; + } else { + s.setButtonTitle("已领取"); + s.setDisabled(false); + s.setNumber(null); + } + } + } + } } break; //一次性任务 @@ -110,32 +142,29 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { - reTaskCenter = s; + continue; } else { s.setDiscNumber(0); s.setNumber(null); s.setJumpType(0); } + } else if (s.getDetail().contains("绑定支付宝")) { + UserEntity userInfo = userService.queryByUserId(userId); + if (StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) { + continue; + } } break; } + resultTask.add(s); } - if (reTaskCenter != null) { - taskPage.remove(reTaskCenter); - } - return Result.success().put("data", taskPage); + return Result.success().put("data", resultTask); } @Override @Transactional public Result taskReceive(Long userId, Long id) { TaskCenter taskCenter = baseMapper.selectById(id); - //月 签到记录 - QueryWrapper signWrapper = new QueryWrapper<>(); - signWrapper.eq("user_id", userId); - signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00"); - signWrapper.orderByAsc("create_time"); - int signCount = signRecordService.count(signWrapper); if (taskCenter.getType().equals(2)) { Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00"); @@ -143,7 +172,7 @@ public class TaskCenterServiceImpl extends ServiceImpl().eq("user_id", userId).eq("sign_day", DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd"))); UserSignRecord signRecord = new UserSignRecord(); - if (yesterday != null && yesterday.getDay() != null) { + if (yesterday != null && yesterday.getDay() != null && yesterday.getDay() != 7) { signRecord.setDay(yesterday.getDay() + 1); } else { signRecord.setDay(1); @@ -158,22 +187,6 @@ public class TaskCenterServiceImpl extends ServiceImpl 2) { - if (signCount < (taskCenter.getNumber().intValue() - 1)) { - return Result.error("领取失败,未达成领取条件"); - } - if (recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") > 0) { - return Result.error("不可重复领取"); - } - } else { - if (signCount < taskCenter.getNumber().intValue()) { - return Result.error("领取失败,未达成领取条件"); - } - if (recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") > 0) { - return Result.error("不可重复领取"); - } - } } } else if (taskCenter.getType().equals(3) && taskCenter.getId().equals(1L)) { Integer sumOrderNum = ordersService.countOrderNum(userId, null); @@ -228,49 +241,59 @@ public class TaskCenterServiceImpl extends ServiceImpl signWrapper = new QueryWrapper<>(); - signWrapper.eq("user_id", userId); - signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00"); - signWrapper.orderByAsc("create_time"); - int signCount = signRecordService.count(signWrapper); - - //TaskCenter的number为大转盘次数 - List taskCenters = baseMapper.queryTaskDiscCenter(); - int countTaskDisc = 0; - Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type", 2); + if ("2".equals(type)) { + queryWrapper.gt("number", 1); + queryWrapper.lt("number", 8); + } else if ("3".equals(type)) { + queryWrapper.gt("number", 7); + queryWrapper.lt("number", 32); + } + List taskCenters = baseMapper.selectList(queryWrapper); for (TaskCenter taskCenter : taskCenters) { - if (taskCenter.getType().equals(2)) { - if (taskCenter.getNumber().equals(1)) { - if (dayOrderNum > 2 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); - } - } else { - if ("2".equals(type) && taskCenter.getNumber().intValue() > 1 && taskCenter.getNumber().intValue() < 8) { - if (dayOrderNum > 2) { - if (signCount - taskCenter.getNumber().intValue() >= -1 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); - } - } else { - if (signCount - taskCenter.getNumber().intValue() >= 0 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); - } - } - } else if ("3".equals(type) && taskCenter.getNumber().intValue() > 7 && taskCenter.getNumber().intValue() < 32) { - if (dayOrderNum > 2) { - if (signCount - taskCenter.getNumber().intValue() >= -1 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); - } - } else { - if (signCount - taskCenter.getNumber().intValue() >= 0 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); - } + Map rewardMap = taskCenterRewardService.getRewardMap(taskCenter.getId()); + if (CollectionUtil.isEmpty(rewardMap)) { + continue; + } + Map taskWRedisMap = new HashMap<>(); + if ("2".equals(type)) { + //抽奖次数 + Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); + if (CollectionUtil.isNotEmpty(taskWCount)) { + for (Map.Entry entry : taskWCount.entrySet()) { + Integer key = entry.getKey(); + Integer value = entry.getValue(); + if (value > 0) { + countTaskDisc = countTaskDisc + value; + taskWRedisMap.put(key, value); } } } + if (CollectionUtil.isNotEmpty(taskWRedisMap)) { + redisUtils.set(RedisKeys.getDateKey("spinning:amount:taskW") + userId, taskWRedisMap, DateUtils.todayAfterSecond()); + } + } else if ("3".equals(type)) { + if (signCount == null) { + signCount = signRecordService.getUserSignCount(userId); + } + if (signCount >= taskCenter.getNumber()) { + if (rewardMap.containsKey(9)) { + Integer spinningCount = discSpinningRecordService.countSourceRecord(taskCenter.getId()); + countTaskDisc = countTaskDisc + (spinningCount == null ? 0 : spinningCount); + if (countTaskDisc > 0) { + taskWRedisMap.put(taskCenter.getId().intValue(), countTaskDisc); + } + } + } + if (CollectionUtil.isNotEmpty(taskWRedisMap)) { + redisUtils.set(RedisKeys.getDateKey("spinning:amount:taskM") + userId, taskWRedisMap, DateUtils.todayAfterSecond()); + } } } return countTaskDisc; diff --git a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java index 95e0f826..878ec4f8 100644 --- a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java +++ b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java @@ -4,8 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sqx.modules.userSign.entity.UserSignRecord; import org.apache.ibatis.annotations.Mapper; +import java.util.Map; + @Mapper public interface UserSignRecordDao extends BaseMapper { + //周 抽奖次数 + Map getTaskWCount(long userId, int wCount,String time); + //周 签到 次数 连续签到 + Integer getWSignCount(long userId,String time); } diff --git a/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java b/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java index 7228f376..086f50ff 100644 --- a/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java +++ b/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java @@ -4,10 +4,19 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.sqx.modules.userSign.dto.UserSignDTO; import com.sqx.modules.userSign.entity.UserSignRecord; +import java.util.Map; + public interface UserSignRecordService extends IService { UserSignDTO getUserSignData(long userId); + //获取当月签到次数 + int getUserSignCount(long userId); + //周 剩余抽奖次数 + Map getTaskWCount(long userId, int wCount); + //周 签到 次数 + Integer getWSignCount(long userId); + String[] getUserSignAwardConfig(); } diff --git a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java index e9ba54f7..a95af798 100644 --- a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sqx.common.exception.SqxException; @@ -120,6 +121,27 @@ public class UserSignRecordServiceImpl extends ServiceImpl signWrapper = new QueryWrapper<>(); + signWrapper.eq("user_id", userId); + signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00"); + signWrapper.orderByAsc("create_time"); + int signCount = baseMapper.selectCount(signWrapper); + return signCount; + } + + @Override + public Map getTaskWCount(long userId,int wCount) { + Date thirtyDaysAgo = DateUtil.offsetDay(new Date(), -30); + return baseMapper.getTaskWCount(userId,wCount,DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd")+" 00:00:00"); + } + + @Override + public Integer getWSignCount(long userId) { + return baseMapper.getWSignCount(userId, DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd") + " 00:00:00"); + } + @Override public String[] getUserSignAwardConfig() { CommonInfo config = commonInfoDao.findOne(918); diff --git a/src/main/resources/mapper/orders/OrdersDao.xml b/src/main/resources/mapper/orders/OrdersDao.xml index e6f811ee..5cd28465 100644 --- a/src/main/resources/mapper/orders/OrdersDao.xml +++ b/src/main/resources/mapper/orders/OrdersDao.xml @@ -279,25 +279,21 @@ - SELECT task.*, - reward.number as discNumber - FROM task_center_reward reward - INNER JOIN task_center task ON reward.task_id = task.id and task.shows = 1 - where reward.type = 9 - - \ No newline at end of file diff --git a/src/main/resources/mapper/userSign/TaskCenterDto.xml b/src/main/resources/mapper/userSign/TaskCenterDto.xml new file mode 100644 index 00000000..52489664 --- /dev/null +++ b/src/main/resources/mapper/userSign/TaskCenterDto.xml @@ -0,0 +1,30 @@ + + + + + + + + + \ No newline at end of file From f11ae848b01d603f984498861b0023de710fbc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Mon, 23 Dec 2024 16:16:36 +0800 Subject: [PATCH 05/33] =?UTF-8?q?feat:=201.uni-ad=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=8E=A5=E5=85=A5=202.=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=A5=96=E5=8A=B1=E5=85=8D=E8=B4=B9=E8=A7=82=E7=9C=8B=E6=97=B6?= =?UTF-8?q?=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/common/utils/RedisKeys.java | 9 +- .../java/com/sqx/common/utils/RedisUtils.java | 45 ++++++ src/main/java/com/sqx/config/ShiroConfig.java | 1 + .../app/controller/app/AdController.java | 33 ++++ .../sqx/modules/app/service/AdService.java | 7 + .../app/service/impl/AdServiceImpl.java | 29 ++++ .../callback/UniCallBackController.java | 28 ++++ .../callback/dao/UniAdCallBackDTO.java | 16 ++ .../callback/entity/UniAdCallbackRecord.java | 141 ++++++++++++++++++ .../mapper/UniAdCallbackRecordMapper.java | 20 +++ .../service/UniAdCallbackRecordService.java | 20 +++ .../impl/UniAdCallbackRecordServiceImpl.java | 136 +++++++++++++++++ .../sqx/modules/common/dao/CommonInfoDao.java | 3 +- .../impl/CourseDetailsServiceImpl.java | 6 +- .../modules/redisService/RedisService.java | 6 +- .../redisService/impl/RedisServiceImpl.java | 97 ++++++++++-- src/main/resources/application.yml | 2 + .../callback/UniAdCallbackRecordMapper.xml | 26 ++++ 18 files changed, 607 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/sqx/modules/app/controller/app/AdController.java create mode 100644 src/main/java/com/sqx/modules/app/service/AdService.java create mode 100644 src/main/java/com/sqx/modules/app/service/impl/AdServiceImpl.java create mode 100644 src/main/java/com/sqx/modules/callback/UniCallBackController.java create mode 100644 src/main/java/com/sqx/modules/callback/dao/UniAdCallBackDTO.java create mode 100644 src/main/java/com/sqx/modules/callback/entity/UniAdCallbackRecord.java create mode 100644 src/main/java/com/sqx/modules/callback/mapper/UniAdCallbackRecordMapper.java create mode 100644 src/main/java/com/sqx/modules/callback/service/UniAdCallbackRecordService.java create mode 100644 src/main/java/com/sqx/modules/callback/service/impl/UniAdCallbackRecordServiceImpl.java create mode 100644 src/main/resources/mapper/callback/UniAdCallbackRecordMapper.xml diff --git a/src/main/java/com/sqx/common/utils/RedisKeys.java b/src/main/java/com/sqx/common/utils/RedisKeys.java index e336f71e..54ae6475 100644 --- a/src/main/java/com/sqx/common/utils/RedisKeys.java +++ b/src/main/java/com/sqx/common/utils/RedisKeys.java @@ -8,7 +8,7 @@ import cn.hutool.core.date.DateUtil; */ public class RedisKeys { - public static final String PAY_FREE_WATCH_KEY = "pay:free:watch:"; + public static final String FREE_WATCH_KEY = "free:watch:"; public static String getSysConfigKey(String key){ return "sys:config:" + key; @@ -18,8 +18,11 @@ public class RedisKeys { return "date:" + key; } - public static String getPayFreeWatchKey(Long userId) { - return PAY_FREE_WATCH_KEY + DateUtil.today() + ":" + userId; + public static String getFreeWatchKey(Long userId, boolean isPermanently) { + if (isPermanently) { + return FREE_WATCH_KEY + userId; + } + return FREE_WATCH_KEY + DateUtil.today() + ":" + userId; } public static void main(String[] args) { diff --git a/src/main/java/com/sqx/common/utils/RedisUtils.java b/src/main/java/com/sqx/common/utils/RedisUtils.java index 6761c2e6..b838cad3 100644 --- a/src/main/java/com/sqx/common/utils/RedisUtils.java +++ b/src/main/java/com/sqx/common/utils/RedisUtils.java @@ -134,6 +134,10 @@ public class RedisUtils { set(key, value, DEFAULT_EXPIRE); } + public void expire(String key, long seconds){ + redisTemplate.expire(key, seconds, TimeUnit.SECONDS); + } + public T get(String key, Class clazz, long expire) { String value = valueOperations.get(key); if (expire != NOT_EXPIRE) { @@ -142,6 +146,47 @@ public class RedisUtils { return value == null ? null : fromJson(value, clazz); } + // 判断键是否设置了过期时间 + public boolean isExpiredSet(String key) { + // 获取过期时间,单位是秒 + Long expireTime = redisTemplate.getExpire(key); + + if (expireTime == null) { + return false; // 如果返回 null,表示键不存在 + } + + return expireTime != -1; // 如果是 -1,说明没有设置过期时间 + } + + public Long getExpire(String key) { + Long currentExpireTime = redisTemplate.getExpire(key); + if (currentExpireTime == null || currentExpireTime == -2 || currentExpireTime == -1) { + return null; + } + return currentExpireTime; + } + + // 累加过期时间 + public boolean extendExpireTime(String key, long additionalTimeInSeconds) { + // 获取当前键的剩余过期时间(单位:秒) + Long currentExpireTime = redisTemplate.getExpire(key); + + if (currentExpireTime == null || currentExpireTime == -2) { + // 键不存在或已经过期,无法进行累加 + return false; + } + + if (currentExpireTime == -1) { + redisTemplate.expire(key, additionalTimeInSeconds, java.util.concurrent.TimeUnit.SECONDS); + } + + // 累加剩余过期时间和新增时间 + long newExpireTime = currentExpireTime + additionalTimeInSeconds; + + // 设置新的过期时间 + return Boolean.TRUE.equals(redisTemplate.expire(key, newExpireTime, TimeUnit.SECONDS)); + } + public T get(String key, Class clazz) { return get(key, clazz, NOT_EXPIRE); } diff --git a/src/main/java/com/sqx/config/ShiroConfig.java b/src/main/java/com/sqx/config/ShiroConfig.java index 98adf705..92ce0b02 100644 --- a/src/main/java/com/sqx/config/ShiroConfig.java +++ b/src/main/java/com/sqx/config/ShiroConfig.java @@ -41,6 +41,7 @@ public class ShiroConfig { shiroFilter.setFilters(filters); Map filterMap = new LinkedHashMap<>(); + filterMap.put("/uniCallBack/**", "anon"); filterMap.put("/course/synCourse", "anon"); filterMap.put("/webjars/**", "anon"); filterMap.put("/druid/**", "anon"); diff --git a/src/main/java/com/sqx/modules/app/controller/app/AdController.java b/src/main/java/com/sqx/modules/app/controller/app/AdController.java new file mode 100644 index 00000000..877d755e --- /dev/null +++ b/src/main/java/com/sqx/modules/app/controller/app/AdController.java @@ -0,0 +1,33 @@ +package com.sqx.modules.app.controller.app; + +import com.sqx.common.utils.Result; +import com.sqx.modules.app.annotation.Login; +import com.sqx.modules.app.service.AdService; +import com.sqx.modules.callback.service.UniAdCallbackRecordService; +import com.sqx.modules.sys.controller.AbstractController; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/app/ad") +public class AdController extends AbstractController { + + private final UniAdCallbackRecordService callbackRecordService; + private final AdService adService; + + public AdController(UniAdCallbackRecordService callbackRecordService, AdService adService) { + this.callbackRecordService = callbackRecordService; + this.adService = adService; + } + + @Login + @GetMapping("/state") + public Result getAdState(@RequestParam String extraKey, @RequestAttribute Long userId) { + return Result.success(callbackRecordService.getStateByExtraKey(userId, extraKey)); + } + + @Login + @GetMapping("/detail") + public Result getAdDetail(@RequestAttribute Long userId) { + return Result.success(adService.getDetail(userId)); + } +} diff --git a/src/main/java/com/sqx/modules/app/service/AdService.java b/src/main/java/com/sqx/modules/app/service/AdService.java new file mode 100644 index 00000000..11a61077 --- /dev/null +++ b/src/main/java/com/sqx/modules/app/service/AdService.java @@ -0,0 +1,7 @@ +package com.sqx.modules.app.service; + +import java.util.HashMap; + +public interface AdService { + HashMap getDetail(Long userId); +} diff --git a/src/main/java/com/sqx/modules/app/service/impl/AdServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/AdServiceImpl.java new file mode 100644 index 00000000..52bff4d1 --- /dev/null +++ b/src/main/java/com/sqx/modules/app/service/impl/AdServiceImpl.java @@ -0,0 +1,29 @@ +package com.sqx.modules.app.service.impl; + +import com.sqx.common.utils.RedisUtils; +import com.sqx.modules.app.service.AdService; +import com.sqx.modules.redisService.impl.RedisServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.HashMap; + +@Service +public class AdServiceImpl implements AdService { + + private final RedisServiceImpl redisServiceImpl; + + public AdServiceImpl(RedisServiceImpl redisServiceImpl) { + this.redisServiceImpl = redisServiceImpl; + } + + @Override + public HashMap getDetail(Long userId) { + Long freeWatchRemainTime = redisServiceImpl.getFreeWatchRemainTime(userId, false); + Long permanentlyFreeWatchRemainTime = redisServiceImpl.getFreeWatchRemainTime(userId, true); + return new HashMap(){{ + put("adFreeWatchTime", permanentlyFreeWatchRemainTime); + put("payFreeWatchTime", freeWatchRemainTime); + put("totalFreeWatchTime", freeWatchRemainTime + permanentlyFreeWatchRemainTime); + }}; + } +} diff --git a/src/main/java/com/sqx/modules/callback/UniCallBackController.java b/src/main/java/com/sqx/modules/callback/UniCallBackController.java new file mode 100644 index 00000000..061ea0a9 --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/UniCallBackController.java @@ -0,0 +1,28 @@ +package com.sqx.modules.callback; + +import com.sqx.common.utils.Result; +import com.sqx.modules.callback.dao.UniAdCallBackDTO; +import com.sqx.modules.callback.service.UniAdCallbackRecordService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/uniCallBack") +@Slf4j +public class UniCallBackController { + private final UniAdCallbackRecordService uniCallBackService; + + public UniCallBackController(UniAdCallbackRecordService uniCallBackService) { + this.uniCallBackService = uniCallBackService; + } + + @GetMapping("/adCallBack") + public ResponseEntity adCallBack(@RequestBody UniAdCallBackDTO callBackDTO) { + log.info("接收到uni-ad广告完播回调,回调信息: {}", callBackDTO); + return ResponseEntity.ok(uniCallBackService.adCallBack(callBackDTO)); + } +} diff --git a/src/main/java/com/sqx/modules/callback/dao/UniAdCallBackDTO.java b/src/main/java/com/sqx/modules/callback/dao/UniAdCallBackDTO.java new file mode 100644 index 00000000..7d5350c3 --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/dao/UniAdCallBackDTO.java @@ -0,0 +1,16 @@ +package com.sqx.modules.callback.dao; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class UniAdCallBackDTO { + private String adpid; + private String provider; + private String platform; + private String sign; + private String trans_id; + private String user_id; + private String extra; +} diff --git a/src/main/java/com/sqx/modules/callback/entity/UniAdCallbackRecord.java b/src/main/java/com/sqx/modules/callback/entity/UniAdCallbackRecord.java new file mode 100644 index 00000000..43ff1af6 --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/entity/UniAdCallbackRecord.java @@ -0,0 +1,141 @@ +package com.sqx.modules.callback.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * + * @TableName uni_ad_callback_record + */ +@TableName(value ="uni_ad_callback_record") +@Data +public class UniAdCallbackRecord implements Serializable { + /** + * + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 平台 + */ + private String platform; + + /** + * 交易id + */ + private String transId; + + /** + * DCloud广告位id + */ + private String adpid; + + /** + * 广告服务商 + */ + private String provider; + + /** + * + */ + private String sign; + + /** + * 调用SDK传入并透传,自定义数据 + */ + private String extra; + + /** + * 是否播放完毕 + */ + private Integer isEnded; + + /** + * 回调时间 + */ + private Date createTime; + + /** + * 错误信息 + */ + private String errMsg; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + UniAdCallbackRecord other = (UniAdCallbackRecord) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId())) + && (this.getPlatform() == null ? other.getPlatform() == null : this.getPlatform().equals(other.getPlatform())) + && (this.getTransId() == null ? other.getTransId() == null : this.getTransId().equals(other.getTransId())) + && (this.getAdpid() == null ? other.getAdpid() == null : this.getAdpid().equals(other.getAdpid())) + && (this.getProvider() == null ? other.getProvider() == null : this.getProvider().equals(other.getProvider())) + && (this.getSign() == null ? other.getSign() == null : this.getSign().equals(other.getSign())) + && (this.getExtra() == null ? other.getExtra() == null : this.getExtra().equals(other.getExtra())) + && (this.getIsEnded() == null ? other.getIsEnded() == null : this.getIsEnded().equals(other.getIsEnded())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getErrMsg() == null ? other.getErrMsg() == null : this.getErrMsg().equals(other.getErrMsg())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode()); + result = prime * result + ((getPlatform() == null) ? 0 : getPlatform().hashCode()); + result = prime * result + ((getTransId() == null) ? 0 : getTransId().hashCode()); + result = prime * result + ((getAdpid() == null) ? 0 : getAdpid().hashCode()); + result = prime * result + ((getProvider() == null) ? 0 : getProvider().hashCode()); + result = prime * result + ((getSign() == null) ? 0 : getSign().hashCode()); + result = prime * result + ((getExtra() == null) ? 0 : getExtra().hashCode()); + result = prime * result + ((getIsEnded() == null) ? 0 : getIsEnded().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getErrMsg() == null) ? 0 : getErrMsg().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", userId=").append(userId); + sb.append(", platform=").append(platform); + sb.append(", transId=").append(transId); + sb.append(", adpid=").append(adpid); + sb.append(", provider=").append(provider); + sb.append(", sign=").append(sign); + sb.append(", extra=").append(extra); + sb.append(", isEnded=").append(isEnded); + sb.append(", createTime=").append(createTime); + sb.append(", errMsg=").append(errMsg); + sb.append(", serialVersionUID=").append(serialVersionUID); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/callback/mapper/UniAdCallbackRecordMapper.java b/src/main/java/com/sqx/modules/callback/mapper/UniAdCallbackRecordMapper.java new file mode 100644 index 00000000..fd0d4405 --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/mapper/UniAdCallbackRecordMapper.java @@ -0,0 +1,20 @@ +package com.sqx.modules.callback.mapper; + +import com.sqx.modules.callback.entity.UniAdCallbackRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author Administrator +* @description 针对表【uni_ad_callback_record】的数据库操作Mapper +* @createDate 2024-12-23 10:37:52 +* @Entity com.sqx.modules.callback.entity.UniAdCallbackRecord +*/ +@Mapper +public interface UniAdCallbackRecordMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/sqx/modules/callback/service/UniAdCallbackRecordService.java b/src/main/java/com/sqx/modules/callback/service/UniAdCallbackRecordService.java new file mode 100644 index 00000000..301aabbb --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/service/UniAdCallbackRecordService.java @@ -0,0 +1,20 @@ +package com.sqx.modules.callback.service; + +import com.sqx.modules.callback.dao.UniAdCallBackDTO; +import com.sqx.modules.callback.entity.UniAdCallbackRecord; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.HashMap; +import java.util.Map; + +/** +* @author Administrator +* @description 针对表【uni_ad_callback_record】的数据库操作Service +* @createDate 2024-12-23 10:37:52 +*/ +public interface UniAdCallbackRecordService extends IService { + + Map adCallBack(UniAdCallBackDTO callBackDTO); + + HashMap getStateByExtraKey(Long userId, String extraKey); +} diff --git a/src/main/java/com/sqx/modules/callback/service/impl/UniAdCallbackRecordServiceImpl.java b/src/main/java/com/sqx/modules/callback/service/impl/UniAdCallbackRecordServiceImpl.java new file mode 100644 index 00000000..959f3c72 --- /dev/null +++ b/src/main/java/com/sqx/modules/callback/service/impl/UniAdCallbackRecordServiceImpl.java @@ -0,0 +1,136 @@ +package com.sqx.modules.callback.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sqx.modules.app.dao.UserDao; +import com.sqx.modules.app.entity.UserEntity; +import com.sqx.modules.callback.dao.UniAdCallBackDTO; +import com.sqx.modules.callback.entity.UniAdCallbackRecord; +import com.sqx.modules.callback.service.UniAdCallbackRecordService; +import com.sqx.modules.callback.mapper.UniAdCallbackRecordMapper; +import com.sqx.modules.common.dao.CommonInfoDao; +import com.sqx.modules.common.entity.CommonInfo; +import com.sqx.modules.redisService.RedisService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** +* @author Administrator +* @description 针对表【uni_ad_callback_record】的数据库操作Service实现 +* @createDate 2024-12-23 10:37:52 +*/ +@Service +@Slf4j +public class UniAdCallbackRecordServiceImpl extends ServiceImpl + implements UniAdCallbackRecordService{ + @Value("${sqx.uni.adSecret}") + private String adSecurity; + + private final UserDao userDao; + private final CommonInfoDao commonInfoDao; + + private final RedisService redisService; + + public UniAdCallbackRecordServiceImpl(UserDao userDao, CommonInfoDao commonInfoDao, RedisService redisService) { + this.userDao = userDao; + this.commonInfoDao = commonInfoDao; + this.redisService = redisService; + } + + private String getBaseErrInfo(UniAdCallbackRecord callbackRecord) { + return StrUtil.format("广告获取免费观看时长回调异常: {}, 用户id: {}, 广告播放回调trans_id: {}", + callbackRecord.getErrMsg(), callbackRecord.getUserId(), callbackRecord.getTransId()); + } + + // 生成签名 + public static String generateSign(String secret, String transId) { + // 生成待加密的字符串 + String data = secret + ":" + transId; + + // 使用SHA-256生成签名 + return DigestUtil.sha256Hex(data); + } + + // 验证签名 + public static boolean validateSign(String secret, String transId, String providedSign) { + // 生成系统计算出来的签名 + String generatedSign = generateSign(secret, transId); + + // 比较计算出来的签名和提供的签名 + return StrUtil.equalsIgnoreCase(generatedSign, providedSign); + } + + @Override + public Map adCallBack(UniAdCallBackDTO callBackDTO) { + HashMap respData = new HashMap<>(); + UniAdCallbackRecord one = getOne(new LambdaQueryWrapper() + .eq(UniAdCallbackRecord::getTransId, callBackDTO.getTrans_id())); + if (one != null) { + log.warn("回调重复, {}", one.getTransId()); + respData.put("isValid", false); + return respData; + } + UniAdCallbackRecord callbackRecord = new UniAdCallbackRecord(); + callbackRecord.setUserId(Long.valueOf(callBackDTO.getUser_id())); + callbackRecord.setPlatform(callBackDTO.getPlatform()); + callbackRecord.setTransId(callBackDTO.getTrans_id()); + callbackRecord.setAdpid(callBackDTO.getAdpid()); + callbackRecord.setProvider(callBackDTO.getProvider()); + callbackRecord.setSign(callBackDTO.getSign()); + callbackRecord.setExtra(callBackDTO.getExtra()); + callbackRecord.setCreateTime(DateUtil.date()); + callbackRecord.setIsEnded(1); + + boolean flag = validateSign(adSecurity, callBackDTO.getTrans_id(), callBackDTO.getSign()); + if (!flag) { + callbackRecord.setErrMsg("签名验证失败"); + log.warn(getBaseErrInfo(callbackRecord)); + save(callbackRecord); + respData.put("isValid", false); + return respData; + } + + UserEntity userEntity = userDao.selectById(callBackDTO.getUser_id()); + if (userEntity == null) { + callbackRecord.setErrMsg("用户不存在"); + log.warn(getBaseErrInfo(callbackRecord)); + save(callbackRecord); + respData.put("isValid", false); + return respData; + } + + CommonInfo info = commonInfoDao.findOne(921); + if (info == null || StrUtil.isBlank(info.getValue())){ + callbackRecord.setErrMsg("CommonInfo时长时间未配置"); + log.warn(getBaseErrInfo(callbackRecord)); + save(callbackRecord); + respData.put("isValid", false); + return respData; + } + + redisService.setFreeWatchTime(callbackRecord.getUserId(), Integer.valueOf(info.getValue()), true); + save(callbackRecord); + respData.put("isValid", true); + return respData; + } + + @Override + public HashMap getStateByExtraKey(Long userId, String extraKey) { + UniAdCallbackRecord one = getOne(new LambdaQueryWrapper().eq(UniAdCallbackRecord::getUserId, userId) + .eq(UniAdCallbackRecord::getExtra, extraKey)); + return new HashMap(){{ + put("isEnded", one == null ? 0 : 1); + }}; + } +} + + + + diff --git a/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java b/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java index 558bf5e8..1712de10 100644 --- a/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java +++ b/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java @@ -20,5 +20,4 @@ public interface CommonInfoDao extends BaseMapper { CommonInfo findOne(@Param("type") int type); - -} \ No newline at end of file +} 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 3ae16729..409e06f2 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 @@ -98,7 +98,7 @@ public class CourseDetailsServiceImpl extends ServiceImpl() @@ -113,7 +113,9 @@ public class CourseDetailsServiceImpl extends ServiceImpl= Integer.parseInt(needCountCommonInfo.getValue())) { - redisServiceImpl.setPayFreeWatchTime(userId, Integer.parseInt(freeTimeCommonInfo.getValue())); + redisServiceImpl.setFreeWatchTime(userId, Integer.parseInt(freeTimeCommonInfo.getValue()), false); + // 触发计时 + redisServiceImpl.getFreeWatchTimeIsExpire(userId); isExpire = false; }else { isExpire = true; diff --git a/src/main/java/com/sqx/modules/redisService/RedisService.java b/src/main/java/com/sqx/modules/redisService/RedisService.java index 9652816b..09eff649 100644 --- a/src/main/java/com/sqx/modules/redisService/RedisService.java +++ b/src/main/java/com/sqx/modules/redisService/RedisService.java @@ -9,7 +9,9 @@ public interface RedisService { void setDiscSpinningAmounts(String key); - void setPayFreeWatchTime(Long userId, Integer time); + void setFreeWatchTime(Long userId, Integer time, boolean isPermanently); - Boolean getPayFreeWatchTimeIsExpire(Long userId); + Boolean getFreeWatchTimeIsExpire(Long userId); + + Long getFreeWatchRemainTime(Long userId, boolean isPermanently); } 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 c25b7b8f..351ac5fe 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -2,6 +2,8 @@ package com.sqx.modules.redisService.impl; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +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; @@ -17,6 +19,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.Map; + @Service public class RedisServiceImpl implements RedisService { @Lazy @@ -36,21 +40,96 @@ public class RedisServiceImpl implements RedisService { } @Override - public void setPayFreeWatchTime(Long userId, Integer minute) { + public void setFreeWatchTime(Long userId, Integer second, boolean isPermanently) { 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); + String freeWatchKey = RedisKeys.getFreeWatchKey(userId, isPermanently); + if (isPermanently) { + String data = redisUtils.get(freeWatchKey); + if (StrUtil.isBlank(data)) { + redisUtils.set(freeWatchKey, second, -1); + }else { + Long expire = redisUtils.getExpire(freeWatchKey); + if (expire == null) { + expire = Long.valueOf(second); + }else { + expire += Long.valueOf(second); + } + redisUtils.set(freeWatchKey, second + Long.parseLong(data), expire); + + } + }else { + long expire = DateUtil.between(now, tomorrow, DateUnit.SECOND); +// redisUtils.setIfAbsent(freeWatchKey, DateUtil.offsetSecond(now, second).getTime(), seconds); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("expireTime", -1); + jsonObject.put("second", second); + redisUtils.setIfAbsent(freeWatchKey, jsonObject.toJSONString(), expire); + } } @Override - public Boolean getPayFreeWatchTimeIsExpire(Long userId) { - String data = redisUtils.get(RedisKeys.getPayFreeWatchKey(userId)); - if (data == null) { - return null; + public Boolean getFreeWatchTimeIsExpire(Long userId) { + String freeWatchKey = RedisKeys.getFreeWatchKey(userId, true); + String permanentlyFreeWatch = redisUtils.get(freeWatchKey); + + String watchKey = RedisKeys.getFreeWatchKey(userId, false); + String payFreeWatchInfo = redisUtils.get(watchKey); + Integer expireTime = -1; + JSONObject jsonObject = null; + if (StrUtil.isNotBlank(payFreeWatchInfo)) { + jsonObject = JSONObject.parseObject(payFreeWatchInfo); + expireTime = jsonObject.getInteger("expireTime"); } - long expireTime = Long.parseLong(data); - return DateUtil.current() > expireTime; + if ((StrUtil.isNotBlank(permanentlyFreeWatch) && redisUtils.isExpiredSet(freeWatchKey)) || (StrUtil.isNotBlank(permanentlyFreeWatch) && DateUtil.current() >= expireTime)) { + if (StrUtil.isBlank(permanentlyFreeWatch)) { + return null; + } + + if (!redisUtils.isExpiredSet(freeWatchKey)) { + redisUtils.expire(freeWatchKey, Long.parseLong(permanentlyFreeWatch)); + } + return false; + }else { + if (StrUtil.isBlank(payFreeWatchInfo)) { + return null; + } + + Integer second = jsonObject.getInteger("second"); + if (expireTime == -1) { + jsonObject.put("expireTime", DateUtil.offsetSecond(DateUtil.date(), second).getTime()); + redisUtils.set(watchKey, jsonObject.toJSONString()); + return false; + }else { + return DateUtil.current() > expireTime; + } + } + } + + @Override + public Long getFreeWatchRemainTime(Long userId, boolean isPermanently) { + String key = RedisKeys.getFreeWatchKey(userId, isPermanently); + if (isPermanently) { + String permanentlyFreeInfo = redisUtils.get(key); + if (StrUtil.isBlank(permanentlyFreeInfo)) { + return 0L; + } + + Long expire = redisUtils.getExpire(key); + return expire == null ? Long.valueOf(permanentlyFreeInfo) : expire; + } + + + String payFreeInfo = redisUtils.get(RedisKeys.getFreeWatchKey(userId, false)); + if (StrUtil.isBlank(payFreeInfo)) { + return 0L; + } + + JSONObject jsonObject = JSONObject.parseObject(payFreeInfo); + Integer expireTime = jsonObject.getInteger("expireTime"); + Long second = jsonObject.getLong("second"); + + return expireTime == -1 ? second : expireTime > DateUtil.current() ? expireTime - DateUtil.current() : 0L; } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1248147b..83db9176 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -81,3 +81,5 @@ sqx: # token有效时长,7天,单位秒 expire: 604800 header: token + uni: + adSecret: 122e4ff1edc66dcf8761f7f7ffc81e0f8773cbfafb58aed29c72fbd092c77315 diff --git a/src/main/resources/mapper/callback/UniAdCallbackRecordMapper.xml b/src/main/resources/mapper/callback/UniAdCallbackRecordMapper.xml new file mode 100644 index 00000000..a0ad2181 --- /dev/null +++ b/src/main/resources/mapper/callback/UniAdCallbackRecordMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + id,user_id,platform, + trans_id,adpid,provider, + sign,extra,is_ended, + create_time + + From e738d989480c01b2c2b061c7cef5deac4861771b Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 23 Dec 2024 16:30:21 +0800 Subject: [PATCH 06/33] =?UTF-8?q?=E7=94=9F=E6=88=90=E8=AE=A2=E5=8D=95=20?= =?UTF-8?q?=E5=B7=B2=E5=AD=98=E5=9C=A8=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OrdersServiceImpl.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java index 3794fe6a..53e19d27 100644 --- a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java @@ -37,6 +37,7 @@ import com.sqx.modules.orders.service.OrdersService; import com.sqx.modules.pay.controller.app.AliPayController; import com.sqx.modules.pay.service.DyService; import com.sqx.modules.pay.service.WxService; +import com.sqx.modules.sdk.entity.SdkInfo; import com.sqx.modules.utils.AliPayOrderUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; @@ -248,10 +249,20 @@ public class OrdersServiceImpl extends ServiceImpl implements log.info("生成商品订单信息接口入参为:{},{}", courseId, userId); reentrantReadWriteLock.writeLock().lock(); try { - /*CourseUser courseUser1 = courseUserDao.selectCourseUser(courseId, userId); - if(courseUser1!=null){ - return Result.error("您已经购买过了,请不要重复点击!"); - }*/ + CourseUser courseUser1 = courseUserDao.selectCourseUser(courseId, userId); + if (courseUser1 != null) { + return Result.success().put("status", 1); + } + QueryWrapper courseUserQueryWrapper = new QueryWrapper<>(); + courseUserQueryWrapper.eq("user_id", userId); + courseUserQueryWrapper.eq("course_id", courseId); + courseUserQueryWrapper.eq("course_details_id", courseDetailsId); + courseUserQueryWrapper.eq("classify", 2); + //加入我的列表 + int count1 = courseUserService.count(courseUserQueryWrapper); + if (count1 > 0) { + return Result.success().put("status", 1); + } //返回的类型 Map result = new HashMap<>(); //查询会员信息 @@ -314,7 +325,6 @@ public class OrdersServiceImpl extends ServiceImpl implements } } catch (Exception e) { - e.printStackTrace(); log.error("生成商品订单错误!!!" + e.getMessage()); } finally { reentrantReadWriteLock.writeLock().unlock(); From 45a7224b9966e0700d87b5ab97153973a4529def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Mon, 23 Dec 2024 17:07:03 +0800 Subject: [PATCH 07/33] =?UTF-8?q?feat:=201.uni-ad=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=8E=A5=E5=85=A5=202.=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=A5=96=E5=8A=B1=E5=85=8D=E8=B4=B9=E8=A7=82=E7=9C=8B=E6=97=B6?= =?UTF-8?q?=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/redisService/impl/RedisServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 351ac5fe..1a9b3ef2 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -99,7 +99,7 @@ public class RedisServiceImpl implements RedisService { Integer second = jsonObject.getInteger("second"); if (expireTime == -1) { jsonObject.put("expireTime", DateUtil.offsetSecond(DateUtil.date(), second).getTime()); - redisUtils.set(watchKey, jsonObject.toJSONString()); + redisUtils.set(watchKey, jsonObject.toJSONString(), -1); return false; }else { return DateUtil.current() > expireTime; From 81da6fa6a39a2c0edb0d0368e1f7599b05f88497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Mon, 23 Dec 2024 17:12:38 +0800 Subject: [PATCH 08/33] =?UTF-8?q?feat:=201.uni-ad=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=8E=A5=E5=85=A5=202.=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E5=A5=96=E5=8A=B1=E5=85=8D=E8=B4=B9=E8=A7=82=E7=9C=8B=E6=97=B6?= =?UTF-8?q?=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/redisService/impl/RedisServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 1a9b3ef2..33a9f5d3 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -1,5 +1,6 @@ package com.sqx.modules.redisService.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -68,6 +69,7 @@ public class RedisServiceImpl implements RedisService { } } + @Override public Boolean getFreeWatchTimeIsExpire(Long userId) { String freeWatchKey = RedisKeys.getFreeWatchKey(userId, true); @@ -98,8 +100,12 @@ public class RedisServiceImpl implements RedisService { Integer second = jsonObject.getInteger("second"); if (expireTime == -1) { - jsonObject.put("expireTime", DateUtil.offsetSecond(DateUtil.date(), second).getTime()); - redisUtils.set(watchKey, jsonObject.toJSONString(), -1); + DateTime now = DateUtil.date(); + jsonObject.put("expireTime", DateUtil.offsetSecond(now, second).getTime()); + Date tomorrow = DateUtil.beginOfDay(DateUtil.offsetDay(now, 1)); + long expire = DateUtil.between(now, tomorrow, DateUnit.SECOND); + + redisUtils.set(watchKey, jsonObject.toJSONString(), expire); return false; }else { return DateUtil.current() > expireTime; From ed21f915550c268e984fa17c3fbbe8eeb528027e Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 23 Dec 2024 17:17:09 +0800 Subject: [PATCH 09/33] =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/sqx/SqxApplication.java | 2 ++ src/main/java/com/sqx/config/RedisConfig.java | 19 +++++++++++++++++++ .../service/impl/CommonInfoServiceImpl.java | 9 +++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sqx/SqxApplication.java b/src/main/java/com/sqx/SqxApplication.java index 07ef054f..a3c22cfd 100644 --- a/src/main/java/com/sqx/SqxApplication.java +++ b/src/main/java/com/sqx/SqxApplication.java @@ -3,6 +3,7 @@ package com.sqx; import com.sqx.modules.pay.wuyou.WuyouPay; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.scheduling.annotation.EnableScheduling; @@ -11,6 +12,7 @@ import java.util.Map; /** * @author GYJ */ +@EnableCaching @EnableScheduling @SpringBootApplication public class SqxApplication { diff --git a/src/main/java/com/sqx/config/RedisConfig.java b/src/main/java/com/sqx/config/RedisConfig.java index deb93e23..6fddb78c 100644 --- a/src/main/java/com/sqx/config/RedisConfig.java +++ b/src/main/java/com/sqx/config/RedisConfig.java @@ -1,12 +1,19 @@ package com.sqx.config; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.CacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.*; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; +import java.time.Duration; + /** * Redis配置 * @@ -16,6 +23,18 @@ public class RedisConfig { @Autowired private RedisConnectionFactory factory; + @Bean + public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { + RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)) + // 设置缓存过期时间为30分钟 + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) + .disableCachingNullValues(); + + return RedisCacheManager.builder(redisConnectionFactory) + .cacheDefaults(cacheConfiguration) + .build(); + } @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate<>(); diff --git a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java index 38318d04..8d8806a1 100644 --- a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java +++ b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java @@ -7,6 +7,9 @@ import com.sqx.modules.common.entity.CommonInfo; import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.course.service.CourseService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.CachePut; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; @@ -16,6 +19,7 @@ import java.util.Date; * @author fang * @date 2020/7/8 */ +@CacheConfig(cacheNames = "common") @Service public class CommonInfoServiceImpl extends ServiceImpl implements CommonInfoService { @@ -43,19 +47,20 @@ public class CommonInfoServiceImpl extends ServiceImpl Date: Mon, 23 Dec 2024 17:27:14 +0800 Subject: [PATCH 10/33] =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/modules/common/service/impl/CommonInfoServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java index 8d8806a1..a30cd484 100644 --- a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java +++ b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; @@ -47,7 +48,7 @@ public class CommonInfoServiceImpl extends ServiceImpl Date: Mon, 23 Dec 2024 17:33:56 +0800 Subject: [PATCH 11/33] =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=99=A83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/modules/common/dao/CommonInfoDao.java | 5 ++++- .../modules/common/service/impl/CommonInfoServiceImpl.java | 7 +++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java b/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java index 1712de10..83cc466a 100644 --- a/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java +++ b/src/main/java/com/sqx/modules/common/dao/CommonInfoDao.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sqx.modules.common.entity.CommonInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.Cacheable; import java.util.List; @@ -13,10 +15,11 @@ import java.util.List; * @date 2020/7/8 */ @Mapper +@CacheConfig(cacheNames = "common") public interface CommonInfoDao extends BaseMapper { List findByCondition(@Param("condition") String condition); - + @Cacheable(key = "#type") CommonInfo findOne(@Param("type") int type); diff --git a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java index a30cd484..c6729987 100644 --- a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java +++ b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java @@ -30,7 +30,7 @@ public class CommonInfoServiceImpl extends ServiceImpl Date: Tue, 24 Dec 2024 09:29:33 +0800 Subject: [PATCH 12/33] =?UTF-8?q?=E6=8A=BD=E5=A5=96=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../userSign/dao/UserSignRecordDao.java | 4 ++- .../impl/UserSignRecordServiceImpl.java | 3 +- .../resources/mapper/orders/OrdersDao.xml | 4 +-- .../mapper/userSign/TaskCenterDto.xml | 31 +++++++++++++++---- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java index 878ec4f8..44ccb713 100644 --- a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java +++ b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sqx.modules.userSign.entity.UserSignRecord; import org.apache.ibatis.annotations.Mapper; +import java.util.List; import java.util.Map; @Mapper public interface UserSignRecordDao extends BaseMapper { //周 抽奖次数 - Map getTaskWCount(long userId, int wCount,String time); + Map getTaskWCount(long userId, int wCount,String time,List ids); + List getNoRecordTask(long userId, String time); //周 签到 次数 连续签到 Integer getWSignCount(long userId,String time); diff --git a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java index a95af798..698bf03b 100644 --- a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java @@ -134,7 +134,8 @@ public class UserSignRecordServiceImpl extends ServiceImpl getTaskWCount(long userId,int wCount) { Date thirtyDaysAgo = DateUtil.offsetDay(new Date(), -30); - return baseMapper.getTaskWCount(userId,wCount,DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd")+" 00:00:00"); + List noRecordTasks = baseMapper.getNoRecordTask(userId, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00"); + return baseMapper.getTaskWCount(userId, wCount, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00", noRecordTasks); } @Override diff --git a/src/main/resources/mapper/orders/OrdersDao.xml b/src/main/resources/mapper/orders/OrdersDao.xml index 5cd28465..79ba95f7 100644 --- a/src/main/resources/mapper/orders/OrdersDao.xml +++ b/src/main/resources/mapper/orders/OrdersDao.xml @@ -286,7 +286,7 @@ AND orders.`status` = 1 AND orders.`pay_way` = 9 AND orders.create_time > DATE_FORMAT(CURDATE(), '%Y-%m-%d 00:00:00') - AND record.order_id IS NULL + AND record.source_id IS NULL ORDER BY orders.create_time @@ -298,7 +298,7 @@ AND orders.`status` = 1 AND orders.`pay_way` = 9 AND orders.create_time > DATE_FORMAT(CURDATE(), '%Y-%m-%d 00:00:00') - AND record.order_id IS NULL + AND record.source_id IS NULL ORDER BY orders.create_time LIMIT 1 diff --git a/src/main/resources/mapper/userSign/TaskCenterDto.xml b/src/main/resources/mapper/userSign/TaskCenterDto.xml index 52489664..389a2cc3 100644 --- a/src/main/resources/mapper/userSign/TaskCenterDto.xml +++ b/src/main/resources/mapper/userSign/TaskCenterDto.xml @@ -2,19 +2,38 @@ + + From 8ffb5bb32928274011588d65767192646bb722b4 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 10:39:11 +0800 Subject: [PATCH 13/33] =?UTF-8?q?=E6=8A=BD=E5=A5=96=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taskCenter/dao/TaskCenterRewardDao.java | 3 ++- .../service/impl/TaskCenterRewardServiceImpl.java | 12 +++++++++++- .../service/impl/TaskCenterServiceImpl.java | 15 ++++++++++----- .../modules/userSign/dao/UserSignRecordDao.java | 5 +++-- .../userSign/service/UserSignRecordService.java | 2 +- .../service/impl/UserSignRecordServiceImpl.java | 13 ++++++++++--- .../resources/mapper/userSign/TaskCenterDto.xml | 8 ++++---- 7 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java b/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java index ac11f2e4..127187d0 100644 --- a/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java +++ b/src/main/java/com/sqx/modules/taskCenter/dao/TaskCenterRewardDao.java @@ -5,13 +5,14 @@ import com.sqx.modules.taskCenter.entity.TaskCenterReward; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import java.util.List; import java.util.Map; @Mapper public interface TaskCenterRewardDao extends BaseMapper { @Select("SELECT type,number FROM `task_center_reward` where task_id = #{taskId}") - Map getRewardMap(Long taskId); + List getRewardMap(Long taskId); } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java index 624554a0..1a09030f 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterRewardServiceImpl.java @@ -9,7 +9,10 @@ import org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; +import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service public class TaskCenterRewardServiceImpl extends ServiceImpl implements TaskCenterRewardService { @@ -17,7 +20,14 @@ public class TaskCenterRewardServiceImpl extends ServiceImpl getRewardMap(Long taskId) { - return baseMapper.getRewardMap(taskId); + List rewards = baseMapper.getRewardMap(taskId); + + Map map = rewards.stream() + .collect(Collectors.groupingBy( + TaskCenterReward::getType, + Collectors.summingInt(TaskCenterReward::getNumber) + )); + return map; } } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 72d066ca..94b19e45 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -91,14 +91,19 @@ public class TaskCenterServiceImpl extends ServiceImpl 1 && s.getNumber() < 8) { if (rewardMap.containsKey(9)) { + boolean isBreak = false; //抽奖次数 - Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); + Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); if (CollectionUtil.isNotEmpty(taskWCount)) { for (Integer value : taskWCount.values()) { if (value > 0) { + isBreak=true; break; } } + if (isBreak){ + break; + } } } Integer wSignCount = signRecordService.getWSignCount(userId); @@ -264,14 +269,14 @@ public class TaskCenterServiceImpl extends ServiceImpl taskWRedisMap = new HashMap<>(); if ("2".equals(type)) { //抽奖次数 - Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); + Map taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9)); if (CollectionUtil.isNotEmpty(taskWCount)) { - for (Map.Entry entry : taskWCount.entrySet()) { - Integer key = entry.getKey(); + for (Map.Entry entry : taskWCount.entrySet()) { + Long key = entry.getKey(); Integer value = entry.getValue(); if (value > 0) { countTaskDisc = countTaskDisc + value; - taskWRedisMap.put(key, value); + taskWRedisMap.put(key.intValue(), value); } } } diff --git a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java index 44ccb713..f99936eb 100644 --- a/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java +++ b/src/main/java/com/sqx/modules/userSign/dao/UserSignRecordDao.java @@ -10,8 +10,9 @@ import java.util.Map; @Mapper public interface UserSignRecordDao extends BaseMapper { //周 抽奖次数 - Map getTaskWCount(long userId, int wCount,String time,List ids); - List getNoRecordTask(long userId, String time); + List getTaskWCount(long userId, int wCount,String time,List ids); + + List getNoRecordTask(long userId, String time); //周 签到 次数 连续签到 Integer getWSignCount(long userId,String time); diff --git a/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java b/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java index 086f50ff..5d3a1e96 100644 --- a/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java +++ b/src/main/java/com/sqx/modules/userSign/service/UserSignRecordService.java @@ -13,7 +13,7 @@ public interface UserSignRecordService extends IService { //获取当月签到次数 int getUserSignCount(long userId); //周 剩余抽奖次数 - Map getTaskWCount(long userId, int wCount); + Map getTaskWCount(long userId, int wCount); //周 签到 次数 Integer getWSignCount(long userId); diff --git a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java index 698bf03b..847e9f5f 100644 --- a/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/userSign/service/impl/UserSignRecordServiceImpl.java @@ -12,6 +12,7 @@ import com.sqx.modules.app.dao.UserDao; import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.common.dao.CommonInfoDao; import com.sqx.modules.common.entity.CommonInfo; +import com.sqx.modules.taskCenter.entity.TaskCenterReward; import com.sqx.modules.userSign.dao.UserSignRecordDao; import com.sqx.modules.userSign.dto.UserSignDTO; import com.sqx.modules.userSign.dto.UserSignRecordDTO; @@ -132,10 +133,16 @@ public class UserSignRecordServiceImpl extends ServiceImpl getTaskWCount(long userId,int wCount) { + public Map getTaskWCount(long userId,int wCount) { Date thirtyDaysAgo = DateUtil.offsetDay(new Date(), -30); - List noRecordTasks = baseMapper.getNoRecordTask(userId, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00"); - return baseMapper.getTaskWCount(userId, wCount, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00", noRecordTasks); + List noRecordTasks = baseMapper.getNoRecordTask(userId, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00"); + List taskWCount = baseMapper.getTaskWCount(userId, wCount, DateUtil.format(thirtyDaysAgo, "yyyy-MM-dd") + " 00:00:00", noRecordTasks); + Map map = taskWCount.stream() + .collect(Collectors.groupingBy( + UserSignRecord::getId, + Collectors.summingInt(UserSignRecord::getDay) + )); + return map; } @Override diff --git a/src/main/resources/mapper/userSign/TaskCenterDto.xml b/src/main/resources/mapper/userSign/TaskCenterDto.xml index 389a2cc3..f77487a2 100644 --- a/src/main/resources/mapper/userSign/TaskCenterDto.xml +++ b/src/main/resources/mapper/userSign/TaskCenterDto.xml @@ -2,7 +2,7 @@ - SELECT sign.id FROM @@ -16,10 +16,10 @@ order by sign.create_time asc - SELECT - sign.id, - #{wCount} - COUNT(CASE WHEN spRecord.source_id IS NOT NULL THEN 1 END) AS record_count + sign.id as id, + #{wCount} - COUNT(CASE WHEN spRecord.source_id IS NOT NULL THEN 1 END) AS `day` FROM user_sign_record sign LEFT JOIN disc_spinning_record spRecord ON sign.id = spRecord.source_id From 920d19f8a227ee10a27df14e3db2ebe067aeede5 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 10:46:44 +0800 Subject: [PATCH 14/33] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E6=9C=89=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E6=97=B6=20=E4=B8=8D=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/taskCenter/service/impl/TaskCenterServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 94b19e45..c42ddfa1 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -102,6 +102,7 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { + s.setDiscNumber(null); break; } else { s.setButtonTitle("已领取"); From 062067d4c3071c7bb9cfd815ddbfb525f5e835ad Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 10:52:46 +0800 Subject: [PATCH 15/33] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E6=9C=89=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E6=97=B6=20=E4=B8=8D=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/taskCenter/service/impl/TaskCenterServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index c42ddfa1..0093a154 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -103,6 +103,7 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { s.setDiscNumber(null); + s.setNumber(null); break; } else { s.setButtonTitle("已领取"); From 9e923b5d1c16b1b52b15946f7cb7b4d66c465909 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 11:33:16 +0800 Subject: [PATCH 16/33] =?UTF-8?q?=E6=8A=BD=E5=A5=96=20=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discSpinning/controller/DiscSpinningController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java index e78ea8a0..96171613 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -194,9 +194,9 @@ public class DiscSpinningController { }else if(source.equals(3)){ redisKey = RedisKeys.getDateKey("spinning:amount:taskM") + userId; } - Map week = redisUtils.get(redisKey, Map.class); - for (Map.Entry entry : week.entrySet()) { - Integer value = entry.getValue(); + Map week = redisUtils.get(redisKey, Map.class); + for (Map.Entry entry : week.entrySet()) { + int value = new BigDecimal(entry.getValue().toString()).intValue(); if (value > 1) { value = value - 1; week.put(entry.getKey(), value); From 2c8721e2e8503d88d23dc0fd29139538c1e704d8 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 11:44:57 +0800 Subject: [PATCH 17/33] =?UTF-8?q?=E6=8A=BD=E5=A5=96=20=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DiscSpinningController.java | 11 +++++++---- src/main/resources/mapper/orders/OrdersDao.xml | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java index 96171613..a1233e60 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -194,24 +194,27 @@ public class DiscSpinningController { }else if(source.equals(3)){ redisKey = RedisKeys.getDateKey("spinning:amount:taskM") + userId; } - Map week = redisUtils.get(redisKey, Map.class); - for (Map.Entry entry : week.entrySet()) { + Map week = redisUtils.get(redisKey, Map.class); + for (Map.Entry entry : week.entrySet()) { int value = new BigDecimal(entry.getValue().toString()).intValue(); if (value > 1) { value = value - 1; week.put(entry.getKey(), value); + sourceId = Long.valueOf(entry.getKey()); break; } else { TaskCenterRecord centerRecord = new TaskCenterRecord(); centerRecord.setUserId(userId); - centerRecord.setTaskId(entry.getKey().longValue()); + centerRecord.setTaskId(Long.valueOf(entry.getKey())); if(source.equals(2)){ - centerRecord.setSourceId(entry.getKey().longValue()); + sourceId = Long.valueOf(entry.getKey()); + centerRecord.setSourceId(Long.getLong(entry.getKey())); } centerRecord.setName(source.equals(2) ? "周任务奖励" : "月任务奖励"); centerRecord.setType(9); centerRecord.setNumber(1); centerRecord.setCreateTime(DateUtil.now()); + centerRecord.setUpdateTime(DateUtil.now()); taskRecordService.save(centerRecord); week.remove(entry.getKey()); break; diff --git a/src/main/resources/mapper/orders/OrdersDao.xml b/src/main/resources/mapper/orders/OrdersDao.xml index 79ba95f7..eaae0119 100644 --- a/src/main/resources/mapper/orders/OrdersDao.xml +++ b/src/main/resources/mapper/orders/OrdersDao.xml @@ -281,7 +281,7 @@ - select sum(money) from user_money_details where user_id=#{userId} and classify in (1,6,7) and type=1 and state=2 and money_type=1 + select sum(money) from user_money_details where user_id=#{userId} and classify in (1,6,7,8) and type=1 and state=2 and money_type=1 From cb20edf09757a5bc082098577eb9f0a5b9e2f1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 24 Dec 2024 16:59:55 +0800 Subject: [PATCH 28/33] =?UTF-8?q?fix:=20=E6=97=B6=E9=97=B4=E6=88=B3?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E5=AF=BC=E8=87=B4=E6=97=B6=E9=97=B4=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/redisService/impl/RedisServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 87737b49..7c45e604 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -77,11 +77,11 @@ public class RedisServiceImpl implements RedisService { String watchKey = RedisKeys.getFreeWatchKey(userId, false); String payFreeWatchInfo = redisUtils.get(watchKey); - Integer expireTime = -1; + Long expireTime = -1L; JSONObject jsonObject = null; if (StrUtil.isNotBlank(payFreeWatchInfo)) { jsonObject = JSONObject.parseObject(payFreeWatchInfo); - expireTime = jsonObject.getInteger("expireTime"); + expireTime = jsonObject.getLong("expireTime"); } if ((StrUtil.isNotBlank(permanentlyFreeWatch) && redisUtils.isExpiredSet(freeWatchKey)) || (StrUtil.isNotBlank(permanentlyFreeWatch) && DateUtil.current() >= expireTime)) { From 75a4c5e4fc1e7316bec3d9b7422a8ecab9fa1429 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 17:31:26 +0800 Subject: [PATCH 29/33] =?UTF-8?q?=E6=9C=88=E6=8A=BD=E5=A5=96=20=E6=8A=BD?= =?UTF-8?q?=E5=A5=96=E8=AE=B0=E5=BD=95=20=E5=A2=9E=E5=8A=A0=20=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DiscSpinningController.java | 10 +++++----- .../discSpinning/entity/DiscSpinningRecord.java | 4 +++- .../service/impl/DiscSpinningRecordServiceImpl.java | 1 + .../service/impl/DiscSpinningServiceImpl.java | 3 ++- .../service/impl/TaskCenterRewardServiceImpl.java | 2 +- .../taskCenter/service/impl/TaskCenterServiceImpl.java | 6 +++--- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java index a1233e60..6a4e550e 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -187,11 +187,11 @@ public class DiscSpinningController { } amount = orders.getPayMoney().doubleValue(); sourceId = orders.getOrdersId(); - } else { + } else { String redisKey = ""; - if (source.equals(2)){ + if (source.equals(2)) { redisKey = RedisKeys.getDateKey("spinning:amount:taskW") + userId; - }else if(source.equals(3)){ + } else if (source.equals(3)) { redisKey = RedisKeys.getDateKey("spinning:amount:taskM") + userId; } Map week = redisUtils.get(redisKey, Map.class); @@ -206,7 +206,7 @@ public class DiscSpinningController { TaskCenterRecord centerRecord = new TaskCenterRecord(); centerRecord.setUserId(userId); centerRecord.setTaskId(Long.valueOf(entry.getKey())); - if(source.equals(2)){ + if (source.equals(2)) { sourceId = Long.valueOf(entry.getKey()); centerRecord.setSourceId(Long.getLong(entry.getKey())); } @@ -220,7 +220,7 @@ public class DiscSpinningController { break; } } - redisUtils.set(redisKey,week,DateUtils.todayAfterSecond()); + redisUtils.set(redisKey, week, DateUtils.todayAfterSecond()); } return new Result().put("data", discSpinningService.draws(i == null ? 1 : i + 1, amount, sourceId, userId, source)); diff --git a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java index 7fc6bfef..f5974d49 100644 --- a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java +++ b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java @@ -26,6 +26,7 @@ public class DiscSpinningRecord extends Model { private Long sourceId; private Long userId; + private String imgUrl; //描述 private String name; //类型 1谢谢惠顾 2 红包 9 其它 @@ -46,11 +47,12 @@ public class DiscSpinningRecord extends Model { public DiscSpinningRecord() { } - public DiscSpinningRecord(String name, Long sourceId, Long userId, Integer type, BigDecimal number, + public DiscSpinningRecord(String name, Long sourceId, Long userId,String imgUrl, Integer type, BigDecimal number, String drawDay, String createTime, Integer source) { this.name = name; this.userId = userId; this.sourceId = sourceId; + this.imgUrl = imgUrl; this.type = type; this.number = number; this.drawDay = drawDay; diff --git a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java index 985b73c5..0d1503e4 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningRecordServiceImpl.java @@ -29,6 +29,7 @@ public class DiscSpinningRecordServiceImpl extends ServiceImpl recordQuery = new QueryWrapper<>(); recordQuery.eq("source_id", sourceId); + recordQuery.eq("source", "taskM"); recordQuery.gt("create_time", DateUtil.beginOfMonth(new Date())); return discSpinningRecordDao.selectCount(recordQuery); } diff --git a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java index 434d79e0..98a96d08 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java @@ -216,12 +216,13 @@ public class DiscSpinningServiceImpl extends ServiceImpl getRewardMap(Long taskId) { + public Map getRewardMap(Long taskId) { List rewards = baseMapper.getRewardMap(taskId); Map map = rewards.stream() diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 0093a154..510f468b 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -97,11 +97,11 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { - isBreak=true; + isBreak = true; break; } } - if (isBreak){ + if (isBreak) { s.setDiscNumber(null); s.setNumber(null); break; @@ -129,7 +129,7 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { + if (spinningCount == null || rewardMap.get(9) - spinningCount > 0) { s.setDiscNumber(null); s.setNumber(null); break; From 66ab8a66c59080d3ee27012931710521cbd0ab05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Tue, 24 Dec 2024 17:37:52 +0800 Subject: [PATCH 30/33] =?UTF-8?q?=E5=A5=96=E5=93=81=E5=85=91=E6=8D=A2?= =?UTF-8?q?=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/UserPrizeExchangeServiceImpl.java | 5 +++++ .../discSpinning/entity/DiscSpinningRecord.java | 13 ++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java index d133090d..231526da 100644 --- a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java +++ b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java @@ -22,6 +22,7 @@ import com.sqx.modules.discSpinning.dao.DiscSpinningRecordDao; import com.sqx.modules.discSpinning.entity.DiscSpinningRecord; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; @@ -75,6 +76,7 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl { private Integer type; //金额 private BigDecimal number; - //流向 1 提现 2 存入余额 + //流向 1 提现 2 存入余额 3 兑换 private String target; private Long targetId; From 3957ed8c34b70b2b591367fc3f25519889a914a7 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 17:51:38 +0800 Subject: [PATCH 31/33] =?UTF-8?q?=E6=8A=BD=E5=A5=96=E7=BB=A7=E7=BB=AD=20?= =?UTF-8?q?=E5=80=92=E5=8F=99=20=E6=9C=88=E6=8A=BD=E5=A5=96=20=E6=AC=A1?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discSpinning/controller/DiscSpinningRecordController.java | 2 +- .../modules/taskCenter/service/impl/TaskCenterServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningRecordController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningRecordController.java index c1778cd5..a311cfa7 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningRecordController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningRecordController.java @@ -34,7 +34,7 @@ public class DiscSpinningRecordController { @GetMapping("/selectDiscSpinningRecord") @ApiOperation("查询大转盘抽奖记录") public Result selectDiscSpinningRecord(Integer page, Integer limit,@RequestAttribute("userId") Long userId) { - return Result.success().put("data", discSpinningRecordService.page(new Page<>(page, limit), new QueryWrapper().eq("user_id",userId).orderByAsc("create_time"))); + return Result.success().put("data", discSpinningRecordService.page(new Page<>(page, limit), new QueryWrapper().eq("user_id",userId).orderByDesc("create_time"))); } } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 510f468b..441c72e7 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -294,7 +294,7 @@ public class TaskCenterServiceImpl extends ServiceImpl= taskCenter.getNumber()) { if (rewardMap.containsKey(9)) { Integer spinningCount = discSpinningRecordService.countSourceRecord(taskCenter.getId()); - countTaskDisc = countTaskDisc + (spinningCount == null ? 0 : spinningCount); + countTaskDisc = rewardMap.get(9) + (spinningCount == null ? 0 : spinningCount); if (countTaskDisc > 0) { taskWRedisMap.put(taskCenter.getId().intValue(), countTaskDisc); } From f642cbe20f637cb15297eadd7178ef7e2e034423 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 24 Dec 2024 18:03:47 +0800 Subject: [PATCH 32/33] =?UTF-8?q?=E6=9C=88=E4=BB=BB=E5=8A=A12=20=E6=BB=A1?= =?UTF-8?q?=E8=B6=B3=E6=97=B6=20=E4=B8=8D=E5=B1=95=E7=A4=BA=E5=87=A0/?= =?UTF-8?q?=E5=87=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/taskCenter/service/impl/TaskCenterServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 441c72e7..086d6724 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -138,6 +138,9 @@ public class TaskCenterServiceImpl extends ServiceImpl Date: Tue, 24 Dec 2024 18:04:50 +0800 Subject: [PATCH 33/33] =?UTF-8?q?=E5=A5=96=E5=93=81=E5=85=91=E6=8D=A2?= =?UTF-8?q?=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/modules/app/entity/UserPrizeExchange.java | 5 +++++ .../app/service/impl/UserPrizeExchangeServiceImpl.java | 1 + 2 files changed, 6 insertions(+) diff --git a/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java b/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java index 5b6d7efa..bf29d0f4 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java +++ b/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java @@ -10,6 +10,7 @@ import java.util.Date; /** * 用户奖品兑换 + * * @author tankaikai * @since 2024-12-20 17:52 */ @@ -33,6 +34,10 @@ public class UserPrizeExchange implements Serializable { * 奖品名称 */ private String prizeName; + /** + * 奖品图片地址 + */ + private String imgUrl; /** * 用户id */ diff --git a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java index 231526da..2ae329dd 100644 --- a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java +++ b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java @@ -121,6 +121,7 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl