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.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; 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 { @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") public void DealSendMessageInfoBySupplier() { log.info("供应商下单供货提示开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); log.info("供应商下单供货提示结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } // vip过期时间校验,每隔1个小时执行一次 @Scheduled(cron = "0 0 1 * * ?") public void checkVipExpireTime() { customerService.checkVipExpireTime(); } //降低置顶权重。每天晚上11点执行一次 @Scheduled(cron = "0 0 23 * * ?") public void downFilmWorksStickyWeight() { // 每日减少10点权重,最低不低于0 filmWorksMapper.update(null, new LambdaUpdateWrapper().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 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().eq(FilmWorks::getId, work.getId()).setSql("sticky_weight = sticky_weight + " + increment)); } }); log.info("每日互动权重加成完成"); } }