HomeManagementConfigServiceImpl.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.cyksj.service.home.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.date.DateTime;
  5. import cn.hutool.core.lang.Assert;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.cyksj.common.exception.BusinessRuntimeException;
  9. import com.cyksj.mapper.GoodsDonMapper;
  10. import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
  11. import com.cyksj.model.entity.GoodsDon;
  12. import com.cyksj.model.entity.HomeManagementConfig;
  13. import com.cyksj.model.entity.SysFuncTimingShelf;
  14. import com.cyksj.model.request.HomeConfigTimingReq;
  15. import com.cyksj.model.request.HomeManageConfigReq;
  16. import com.cyksj.service.home.HomeManagementConfigService;
  17. import com.cyksj.service.sys.SysFuncTimingShelfService;
  18. import com.cyksj.task.JobManager;
  19. import lombok.RequiredArgsConstructor;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import java.util.List;
  24. import java.util.Optional;
  25. /*
  26. *项目名: netflix
  27. *文件名: HomeManagementConfigServiceImpl
  28. *创建者: JavaZou
  29. *创建时间:2023/8/17 16:48
  30. */
  31. @Service
  32. @RequiredArgsConstructor
  33. @Slf4j
  34. public class HomeManagementConfigServiceImpl extends ServiceImpl<HomeManagementConfigMapper, HomeManagementConfig> implements HomeManagementConfigService {
  35. private final GoodsDonMapper goodsDonMapper;
  36. private final SysFuncTimingShelfService sysFuncTimingShelfService;
  37. private final JobManager jobManager;
  38. @Override
  39. public void saveOrUpdateConfig(HomeManageConfigReq config) {
  40. if (isSpecialType(config.getType())) {
  41. Assert.notEmpty(config.getTitle(), "标题不为空");
  42. HomeManagementConfig homeManagementConfig = new HomeManagementConfig();
  43. BeanUtil.copyProperties(config, homeManagementConfig);
  44. if (config.getType() == HomeManagementConfig.Type.ad) {
  45. if (config.getAdType() == null) {
  46. throw BusinessRuntimeException.getInstance("请选择对应的广告配置类型");
  47. }
  48. }else if (config.getType() == HomeManagementConfig.Type.rg) {
  49. if (config.getRgType() == null) {
  50. throw BusinessRuntimeException.getInstance("请选择对应的实物配置类型");
  51. }
  52. }
  53. this.saveOrUpdate(homeManagementConfig);
  54. return;
  55. }
  56. //首页平台推荐、首页精彩推荐
  57. List<Long> goodsIds = config.getGoodsIds();
  58. if (CollUtil.isEmpty(goodsIds)) {
  59. throw BusinessRuntimeException.getInstance("请选择对应的平台");
  60. }
  61. goodsIds.forEach(goodsId -> {
  62. GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
  63. if (goodsDon == null || !goodsDon.getStatus()) {
  64. return;
  65. }
  66. HomeManagementConfig homeManagementConfig = this.getOne(Wrappers.lambdaQuery(HomeManagementConfig.class)
  67. .ne(config.getId() != null, HomeManagementConfig::getId, config.getId())
  68. .eq(HomeManagementConfig::getGoodsId, goodsId)
  69. .eq(HomeManagementConfig::getType, config.getType())
  70. .eq(HomeManagementConfig::getDeleted, true).last("limit 1"));
  71. if (homeManagementConfig != null) {
  72. return;
  73. }
  74. homeManagementConfig = new HomeManagementConfig();
  75. BeanUtil.copyProperties(config, homeManagementConfig);
  76. homeManagementConfig.setGoodsId(goodsId);
  77. homeManagementConfig.setType(config.getType());
  78. this.saveOrUpdate(homeManagementConfig);
  79. });
  80. }
  81. public Boolean isSpecialType(HomeManagementConfig.Type type) {
  82. if (type == HomeManagementConfig.Type.rg || type == HomeManagementConfig.Type.ad) {
  83. return true;
  84. }
  85. return false;
  86. }
  87. @Override
  88. @Transactional(rollbackFor = Throwable.class)
  89. public void timingUpdateStatus(HomeConfigTimingReq req) {
  90. Long id = req.getId();
  91. HomeManagementConfig config = this.getById(id);
  92. if (config == null || !config.getDeleted()) {
  93. throw BusinessRuntimeException.getInstance("对应配置不存在..");
  94. }
  95. Boolean preStatus = Optional.ofNullable(req.getPreStatus()).orElse(false);
  96. //上架状态
  97. if (config.getStatus() && preStatus) {
  98. throw BusinessRuntimeException.getInstance("该首页配置已上架,只能定时下架..");
  99. }
  100. if (!config.getStatus() && !preStatus) {
  101. throw BusinessRuntimeException.getInstance("该首页配置已下架,只能定时上架..");
  102. }
  103. Long time = req.getTime();
  104. Long nowMills = System.currentTimeMillis();
  105. //直接将配置改为对应 定时上下架状态
  106. Boolean timingJob = true;
  107. if (time <= nowMills) {
  108. config.setStatus(preStatus);
  109. config.setTime(null);
  110. config.setPreStatus(null);
  111. timingJob = false;
  112. } else {
  113. config.setTime(time);
  114. config.setPreStatus(preStatus);
  115. }
  116. this.updateById(config);
  117. //删除之前设置的定时任务
  118. cancelTimingJob(List.of(id));
  119. if (timingJob) {
  120. SysFuncTimingShelf timingShelf = new SysFuncTimingShelf();
  121. timingShelf.setTime(time);
  122. timingShelf.setTimeStr(DateTime.of(time).toString());
  123. timingShelf.setPreStatus(preStatus);
  124. timingShelf.setFuncId(id);
  125. timingShelf.setType(SysFuncTimingShelf.Type.hc.name());
  126. sysFuncTimingShelfService.save(timingShelf);
  127. sysFuncTimingShelfService.addTimingJob(SysFuncTimingShelf.Type.hc.name(), id, timingShelf.getPreStatus(), time, nowMills);
  128. }
  129. }
  130. @Override
  131. @Transactional(rollbackFor = Throwable.class)
  132. public void timingCancel(Long id) {
  133. HomeManagementConfig config = this.getById(id);
  134. if (config == null || !config.getDeleted()) {
  135. throw BusinessRuntimeException.getInstance("对应配置不存在..");
  136. }
  137. //删除之前设置的定时任务
  138. cancelTimingJob(List.of(id));
  139. if (config.getTime() != null) {
  140. config.setTime(null);
  141. config.setPreStatus(null);
  142. this.updateById(config);
  143. }
  144. }
  145. @Override
  146. @Transactional(rollbackFor = Throwable.class)
  147. public void batchCancelTimingStatus(List<Long> ids) {
  148. cancelTimingJob(ids);
  149. }
  150. public void cancelTimingJob(List<Long> ids) {
  151. Integer count = sysFuncTimingShelfService.count(Wrappers.lambdaQuery(SysFuncTimingShelf.class)
  152. .eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
  153. .in(SysFuncTimingShelf::getFuncId, ids)
  154. .eq(SysFuncTimingShelf::getDeleted, 1));
  155. if (count > 0) {
  156. sysFuncTimingShelfService.update(null, Wrappers.lambdaUpdate(SysFuncTimingShelf.class)
  157. .set(SysFuncTimingShelf::getDeleted, 0)
  158. .eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
  159. .in(SysFuncTimingShelf::getFuncId, ids)
  160. .eq(SysFuncTimingShelf::getDeleted, 1));
  161. log.info("将之前设置的同配置下{},ids:{}的定时上下架删除", SysFuncTimingShelf.Type.hc.getDesc(), ids.toString());
  162. }
  163. }
  164. }