| | |
| | | package com.mzl.flower.schedule; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.mzl.flower.entity.film.FilmWorks; |
| | | import com.mzl.flower.mapper.film.CommentPoMapper; |
| | | import com.mzl.flower.mapper.film.FilmCollectsMapper; |
| | | import com.mzl.flower.mapper.film.FilmLikesMapper; |
| | | import com.mzl.flower.mapper.film.FilmWorksMapper; |
| | | import com.mzl.flower.service.customer.CustomerService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | @Slf4j |
| | | public class ScheduleService { |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private CustomerService customerService; |
| | | @Resource |
| | | private FilmWorksMapper filmWorksMapper; |
| | | @Resource |
| | | private FilmLikesMapper filmLikesMapper; |
| | | @Resource |
| | | private FilmCollectsMapper filmCollectsMapper; |
| | | @Resource |
| | | private CommentPoMapper commentPoMapper; |
| | | |
| | | @Scheduled(cron = "0 15 17 * * ?") |
| | | @Profile("prod") |
| | |
| | | customerService.checkVipExpireTime(); |
| | | } |
| | | |
| | | |
| | | //降低置顶权重。每天晚上11点执行一次 |
| | | @Scheduled(cron = "0 0 23 * * ?") |
| | | public void downFilmWorksStickyWeight() { |
| | | // 每日减少10点权重,最低不低于0 |
| | | filmWorksMapper.update(null, new LambdaUpdateWrapper<FilmWorks>().setSql("sticky_weight = GREATEST(sticky_weight - 10, 0)")); |
| | | log.info("每日置顶权重降低完成"); |
| | | } |
| | | |
| | | //提高置顶权重。每天早上6点执行一次(设计当天点赞+5,评论+10,收藏+10) |
| | | @Scheduled(cron = "0 0 6 * * ?") |
| | | public void upFilmWorksStickyWeight() { |
| | | // 获取昨天(当天)的互动数据 |
| | | LocalDate yesterday = LocalDate.now().minusDays(1); |
| | | |
| | | // 获取所有需要更新的作品 |
| | | List<FilmWorks> worksList = filmWorksMapper.selectList(null); |
| | | |
| | | worksList.forEach(work -> { |
| | | // 获取点赞数(需要实现统计方法) |
| | | int likes = filmLikesMapper.countByFilmIdAndDate(work.getId(), yesterday); |
| | | // 获取评论数(需要实现统计方法) |
| | | int comments = filmCollectsMapper.countByFilmIdAndDate(work.getId(), yesterday); |
| | | // 获取收藏数(需要实现统计方法) |
| | | int collects = commentPoMapper.countByFilmIdAndDate(work.getId(), yesterday); |
| | | // 计算权重增量 |
| | | int increment = likes * 5 + comments * 10 + collects * 10; |
| | | |
| | | if (increment > 0) { |
| | | filmWorksMapper.update(null, new LambdaUpdateWrapper<FilmWorks>().eq(FilmWorks::getId, work.getId()).setSql("sticky_weight = sticky_weight + " + increment)); |
| | | } |
| | | }); |
| | | log.info("每日互动权重加成完成"); |
| | | } |
| | | |
| | | |
| | | } |