SysFuncTimingShelfServiceImpl.java 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.cyksj.service.sys.impl;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.util.RandomUtil;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
  7. import com.cyksj.mapper.sys.SysFuncTimingShelfMapper;
  8. import com.cyksj.model.entity.SysFuncTimingShelf;
  9. import com.cyksj.redis.RedisService;
  10. import com.cyksj.service.sys.SysFuncTimingShelfService;
  11. import com.cyksj.task.JobManager;
  12. import lombok.RequiredArgsConstructor;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import javax.annotation.PostConstruct;
  17. import java.util.List;
  18. import java.util.Optional;
  19. import java.util.Set;
  20. /**
  21. * 项目名: yhlxj2
  22. * 文件名: SysFuncTimingShelfServiceImpl
  23. * 创建者: JavaZou
  24. * 创建时间:2023/12/28 11:03
  25. */
  26. @Service
  27. @RequiredArgsConstructor
  28. @Slf4j
  29. public class SysFuncTimingShelfServiceImpl extends ServiceImpl<SysFuncTimingShelfMapper, SysFuncTimingShelf> implements SysFuncTimingShelfService {
  30. private final JobManager jobManager;
  31. private final HomeManagementConfigMapper homeManagementConfigMapper;
  32. private final RedisService redisService;
  33. @PostConstruct
  34. public void initShelfTimingJob() {
  35. List<SysFuncTimingShelf> list = this.list(Wrappers.lambdaQuery(SysFuncTimingShelf.class).eq(SysFuncTimingShelf::getDeleted, 1));
  36. long nowMills = System.currentTimeMillis();
  37. log.info("初始化添加定时上下架任务数量:{}", list.size());
  38. list.forEach(sysFuncTimingShelf -> {
  39. addTimingJob(sysFuncTimingShelf.getType(), sysFuncTimingShelf.getFuncId(), sysFuncTimingShelf.getPreStatus(), sysFuncTimingShelf.getTime(), nowMills);
  40. });
  41. }
  42. @Override
  43. public void addTimingJob(String type, Long funcId, Boolean preStatus, Long time, Long nowMills) {
  44. Runnable task = null;
  45. if (SysFuncTimingShelf.Type.valueOf(type) == SysFuncTimingShelf.Type.hc) {
  46. log.info("添加首页配置id:{},time{},状态为:{}定时任务-------------->", funcId, DateTime.of(time), preStatus);
  47. task = () -> addHomeConfigTimingJob(funcId);
  48. }
  49. if (task != null) {
  50. Long startTime = time - nowMills;
  51. if (startTime < 0) {
  52. //随机一个2s
  53. startTime = RandomUtil.randomLong(2000);
  54. }
  55. jobManager.addJob(startTime, task);
  56. }
  57. }
  58. @Transactional(rollbackFor = Throwable.class)
  59. public void addHomeConfigTimingJob(Long funcId) {
  60. Optional.ofNullable(this.getOne(Wrappers.lambdaQuery(SysFuncTimingShelf.class)
  61. .eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
  62. .eq(SysFuncTimingShelf::getFuncId, funcId)
  63. .le(SysFuncTimingShelf::getTime, System.currentTimeMillis())
  64. .eq(SysFuncTimingShelf::getDeleted, 1)
  65. .last("limit 1"))).ifPresent(timingShelf -> {
  66. timingShelf.setDeleted(false);
  67. this.updateById(timingShelf);
  68. Optional.ofNullable(homeManagementConfigMapper.selectById(funcId)).ifPresent(homeManagementConfig -> {
  69. if (!timingShelf.getPreStatus()) {
  70. homeManagementConfig.setTime(null);
  71. homeManagementConfig.setEndTime(null);
  72. }
  73. homeManagementConfig.setPreStatus(null);
  74. homeManagementConfig.setStatus(timingShelf.getPreStatus());
  75. homeManagementConfigMapper.updateById(homeManagementConfig);
  76. log.info("将首页配置:{}的状态置为:{}状态", funcId, timingShelf.getPreStatus());
  77. Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "*");
  78. redisService.del(keys.toArray(String[]::new));
  79. });
  80. });
  81. }
  82. }