From f26537e926d7ad2d725e059700142ba14c0c2b1f Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期三, 12 七月 2023 21:04:27 +0800 Subject: [PATCH] 定时任务延时任务 --- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 115 insertions(+), 0 deletions(-) diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java index ac9260d..77d46a1 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java @@ -1,11 +1,14 @@ package com.ruoyi.goods.service.impl.activity; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.goods.domain.dto.MgtActivityEditDto; import com.ruoyi.goods.domain.dto.MgtActivityGoodsEditDto; import com.ruoyi.goods.domain.dto.MgtActivityPageDto; @@ -19,15 +22,19 @@ import com.ruoyi.goods.service.activity.ActivityService; import com.ruoyi.goods.service.activity.ActivityTotalService; import com.ruoyi.system.api.constant.AppErrorConstant; +import com.ruoyi.system.api.constant.DelayTaskEnum; +import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; +import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtSimpleMemberVo; import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; import com.ruoyi.system.api.domain.vo.MgtUserIdByKeywordVo; +import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.service.RemoteShopService; import org.springframework.stereotype.Service; @@ -38,6 +45,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -69,6 +77,13 @@ @Resource private RemoteMemberService remoteMemberService; + + @Resource + private RemoteConfigService remoteConfigService; + + @Resource + private RedisService redisService; + /** * @param mgtActivityEditDto @@ -354,4 +369,104 @@ activityGoodsGetVo.setAvailableBuyNum(availableBuyNum); return activityGoodsGetVo; } + + /** + * @description 活动定时开始 + * @author jqs + * @date 2023/7/12 19:44 + * @param + * @return void + */ + @Override + public void timingStartActivity(){ + // 创建LambdaQueryWrapper对象 + LambdaQueryWrapper<Activity> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Activity::getDelFlag, 0); + queryWrapper.eq(Activity::getActivityStatus, 0); + // 计算时间差 + Date checkTime = DateUtils.addMinutes(new Date(), 61); + queryWrapper.lt(Activity::getActivityStartTime, checkTime); + // 查询符合条件的活动列表 + List<Activity> activityList = activityMapper.selectList(queryWrapper); + // 如果活动列表不为空 + if (activityList != null && !activityList.isEmpty()) { + // 遍历活动列表 + for (Activity activity : activityList) { + String activityId = activity.getActivityId(); + Date activityStartTime = activity.getActivityStartTime(); + Date activityEndTime = activity.getActivityEndTime(); + long currentTimeMillis = System.currentTimeMillis(); + long startTimeDifference = currentTimeMillis - activityStartTime.getTime(); + long endTimeDifference = currentTimeMillis - activityEndTime.getTime(); + // 查询延时任务 + DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); + // 如果延时任务为空,创建延时任务控制活动定时开始和结束 + if (startDelayTask == null) { + redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS); + startDelayTask = new DelayTask(); + startDelayTask.setDelFlag(0); + startDelayTask.setCreateTime(new Date()); + startDelayTask.setEndTime(activityStartTime); + startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId); + remoteConfigService.addDelayTask(startDelayTask); + } + // 查询延时任务 + DelayTask endDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); + // 如果延时任务为空,创建延时任务控制活动定时开始和结束 + if (endDelayTask == null) { + redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS); + endDelayTask = new DelayTask(); + endDelayTask.setDelFlag(0); + endDelayTask.setCreateTime(new Date()); + endDelayTask.setEndTime(activityEndTime); + endDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId); + remoteConfigService.addDelayTask(endDelayTask); + } + } + } + } + + /** + * @description 开始活动 + * @author jqs + * @date 2023/7/12 20:31 + * @param activityId + * @return void + */ + @Override + public void startActivity(String activityId){ + Activity activity = this.getById(activityId); + if(activity!=null&&activity.getActivityStatus()==0){ + activity.setActivityStatus(1); + List<ActivityGoods> activityGoodsList = activityGoodsService.listByActivityId(activityId); + if(activityGoodsList!=null&&!activityGoodsList.isEmpty()){ + for(ActivityGoods activityGoods : activityGoodsList){ + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+activityGoods.getGoodsId(),activityGoods.getActivityNumber()); + } + } + this.saveOrUpdate(activity); + } + } + + /** + * @description 结束活动 + * @author jqs + * @date 2023/7/12 20:31 + * @param activityId + * @return void + */ + @Override + public void endActivity(String activityId){ + Activity activity = this.getById(activityId); + if(activity!=null&&activity.getActivityStatus()==1){ + activity.setActivityStatus(2); + List<ActivityGoods> activityGoodsList = activityGoodsService.listByActivityId(activityId); + if(activityGoodsList!=null&&!activityGoodsList.isEmpty()){ + for(ActivityGoods activityGoods : activityGoodsList){ + redisService.deleteObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+activityGoods.getGoodsId()); + } + } + this.saveOrUpdate(activity); + } + } } -- Gitblit v1.7.1