Преглед изворни кода

去掉系统邮箱初始化;首页配置定时上下架功能

zoujiajian пре 2 година
родитељ
комит
5069e528e9
24 измењених фајлова са 360 додато и 25 уклоњено
  1. 1 1
      netflix-dao/src/main/java/com/cyksj/mapper/sys/SysConfigChangeRecordMapper.java
  2. 1 1
      netflix-dao/src/main/java/com/cyksj/mapper/sys/SysConfigMapper.java
  3. 1 1
      netflix-dao/src/main/java/com/cyksj/mapper/sys/SysEmailMapper.java
  4. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/sys/SysFuncTimingShelfMapper.java
  5. 14 0
      netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfig.java
  6. 44 0
      netflix-dao/src/main/java/com/cyksj/model/entity/SysFuncTimingShelf.java
  7. 27 0
      netflix-dao/src/main/java/com/cyksj/model/request/HomeConfigTimingReq.java
  8. 19 12
      netflix-dao/src/main/resources/mapper/OrderDonMapper.xml
  9. 1 1
      netflix-dao/src/main/resources/mapper/SysEmailMapper.xml
  10. 1 1
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpFollowDynamicConfigServiceImpl.java
  11. 5 0
      netflix-service/src/main/java/com/cyksj/service/home/HomeManagementConfigService.java
  12. 95 0
      netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java
  13. 1 2
      netflix-service/src/main/java/com/cyksj/service/mail/impl/MailServiceImpl.java
  14. 1 1
      netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java
  15. 1 1
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonPostServiceImpl.java
  16. 1 0
      netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java
  17. 1 1
      netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopServiceImpl.java
  18. 14 0
      netflix-service/src/main/java/com/cyksj/service/sys/SysFuncTimingShelfService.java
  19. 1 1
      netflix-service/src/main/java/com/cyksj/service/sys/impl/SysConfigChangeRecordServiceImpl.java
  20. 1 1
      netflix-service/src/main/java/com/cyksj/service/sys/impl/SysConfigServiceImpl.java
  21. 91 0
      netflix-service/src/main/java/com/cyksj/service/sys/impl/SysFuncTimingShelfServiceImpl.java
  22. 1 1
      netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
  23. 1 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java
  24. 24 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/mapper/SysConfigChangeRecordMapper.java → netflix-dao/src/main/java/com/cyksj/mapper/sys/SysConfigChangeRecordMapper.java

@@ -1,4 +1,4 @@
-package com.cyksj.mapper;
+package com.cyksj.mapper.sys;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.SysConfigChangeRecord;

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/mapper/SysConfigMapper.java → netflix-dao/src/main/java/com/cyksj/mapper/sys/SysConfigMapper.java

@@ -1,4 +1,4 @@
-package com.cyksj.mapper;
+package com.cyksj.mapper.sys;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.SysConfig;

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/mapper/SysEmailMapper.java → netflix-dao/src/main/java/com/cyksj/mapper/sys/SysEmailMapper.java

@@ -1,4 +1,4 @@
-package com.cyksj.mapper;
+package com.cyksj.mapper.sys;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.SysEmail;

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/sys/SysFuncTimingShelfMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.sys;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SysFuncTimingShelf;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: SysFuncTimingShelfMapper
+ * 创建者: JavaZou
+ * 创建时间:2023/12/28 10:27
+ */
+public interface SysFuncTimingShelfMapper extends BaseMapper<SysFuncTimingShelf> {
+}

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfig.java

@@ -1,5 +1,7 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -28,6 +30,18 @@ public class HomeManagementConfig extends BaseEntity{
 
 	private Boolean status;
 
+	/**
+	 * 定时上下架状态 默认null
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Boolean preStatus;
+
+	/**
+	 * 定时上下架时间
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Long time;
+
 	private Boolean deleted;
 
 	@Getter

+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SysFuncTimingShelf.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: SysFuncTimingShelf
+ * 创建者: JavaZou
+ * 创建时间:2023/12/28 10:25
+ */
+@Getter
+@Setter
+public class SysFuncTimingShelf extends BaseEntity {
+
+	private String type;
+
+	private Long funcId;
+
+	/**
+	 * 定时上下架状态
+	 */
+	private Boolean preStatus;
+
+	/**
+	 * 定时上下架时间
+	 */
+	private Long time;
+
+	private String timeStr;
+
+	private Boolean deleted;
+
+
+	@Getter
+	@AllArgsConstructor
+	public enum Type {
+		hc("首页配置"),
+		;
+		String desc;
+	}
+
+}

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/request/HomeConfigTimingReq.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: HomeConfigTimingReq
+ * 创建者: JavaZou
+ * 创建时间:2023/12/27 14:46
+ */
+@Getter
+@Setter
+public class HomeConfigTimingReq {
+	@NotNull(message = "请选择对应配置")
+	private Long id;
+
+	/**
+	 * 预上架状态 true预上架 false预下架
+	 */
+	private Boolean preStatus;
+
+	@NotNull(message = "定时上下架时间不为空")
+	private Long time;
+}

+ 19 - 12
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -314,34 +314,41 @@
     </select>
 
     <select id="getTagUserData" resultType="com.cyksj.model.views.UserOrderDetailView">
-        select count(if(status != 'refund', 1, NULL)) as numOfOrder, (sum(money) - sum(ifnull(refund_money, 0))) / 100 as orderMoney
+        select count(if(status != 'refund', 1, NULL)) as numOfOrder, (sum(money) - sum(ifnull(refund_money, 0))) / 100
+        as orderMoney
         from `order_don` o
         where exists (select cu.user_id
         from (select relation_id
-        from `corp_user_tag`
-        where tag_name = #{tagName}) s
+        from `corp_user_tag` ct
+        where tag_name = #{tagName}
+        <if test="startTime != null">
+            and ct.created_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and ct.created_time &lt; #{endTime}
+        </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
         left join corp_user cu on cu.id = ca.corp_user_id
         where cu.user_id != 0 and cu.user_id = o.user_id )
         and status not in ('close', 'noPayment')
-        <if test="startTime != null">
-            and o.created_time >= #{startTime}
-        </if>
-        <if test="endTime != null">
-            and o.created_time &lt; #{endTime}
-        </if>
         and money > 0
     </select>
 
     <select id="getTagUserDataPage" resultType="com.cyksj.model.views.UserOrderDetailView">
         select count(if(status != 'refund', 1, NULL)) as numOfOrder, (sum(money) - sum(ifnull(refund_money, 0))) / 100
-        as orderMoney,date_format(o.created_time,'%Y-%m-%d')  as date
+        as orderMoney,date_format(o.created_time,'%Y-%m-%d') as date
         from `order_don` o
         where exists (select cu.user_id
         from (select relation_id
-        from `corp_user_tag`
-        where tag_name = #{tagName}) s
+        from `corp_user_tag` ct
+        where tag_name = #{tagName}
+        <if test="startTime != null">
+            and ct.created_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and ct.created_time &lt; #{endTime}
+        </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
         left join corp_user cu on cu.id = ca.corp_user_id

+ 1 - 1
netflix-dao/src/main/resources/mapper/SysEmailMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.cyksj.mapper.SysEmailMapper">
+<mapper namespace="com.cyksj.mapper.sys.SysEmailMapper">
 
     <insert id="batchInsert">
         insert ignore into sys_email(`email`,`password`,`created_time`,`update_time`)

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpFollowDynamicConfigServiceImpl.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
-import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.mapper.corp.CorpFollowConfigMapper;
 import com.cyksj.mapper.corp.CorpTagMapper;
 import com.cyksj.model.dto.CorpFollowActiveCodeDto;

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/home/HomeManagementConfigService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.home;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.HomeManagementConfig;
+import com.cyksj.model.request.HomeConfigTimingReq;
 import com.cyksj.model.request.HomeManageConfigReq;
 
 /*
@@ -12,4 +13,8 @@ import com.cyksj.model.request.HomeManageConfigReq;
  */
 public interface HomeManagementConfigService extends IService<HomeManagementConfig> {
 	void saveOrUpdateConfig(HomeManageConfigReq config);
+
+	void timingUpdateStatus(HomeConfigTimingReq req);
+
+	void timingCancel(Long id);
 }

+ 95 - 0
netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java

@@ -2,6 +2,7 @@ package com.cyksj.service.home.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,13 +11,19 @@ import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
 import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.HomeManagementConfig;
+import com.cyksj.model.entity.SysFuncTimingShelf;
+import com.cyksj.model.request.HomeConfigTimingReq;
 import com.cyksj.model.request.HomeManageConfigReq;
 import com.cyksj.service.home.HomeManagementConfigService;
+import com.cyksj.service.sys.SysFuncTimingShelfService;
+import com.cyksj.task.JobManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Optional;
 
 /*
  *项目名: netflix
@@ -30,6 +37,10 @@ import java.util.List;
 public class HomeManagementConfigServiceImpl extends ServiceImpl<HomeManagementConfigMapper, HomeManagementConfig> implements HomeManagementConfigService {
 	private final GoodsDonMapper goodsDonMapper;
 
+	private final SysFuncTimingShelfService sysFuncTimingShelfService;
+
+	private final JobManager jobManager;
+
 	@Override
 	public void saveOrUpdateConfig(HomeManageConfigReq config) {
 		if (isSpecialType(config.getType())) {
@@ -73,4 +84,88 @@ public class HomeManagementConfigServiceImpl extends ServiceImpl<HomeManagementC
 		}
 		return false;
 	}
+
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void timingUpdateStatus(HomeConfigTimingReq req) {
+		Long id = req.getId();
+		HomeManagementConfig config = this.getById(id);
+		if (config == null || !config.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("对应配置不存在..");
+		}
+		Boolean preStatus = Optional.ofNullable(req.getPreStatus()).orElse(false);
+		//上架状态
+		if (config.getStatus() && preStatus) {
+			throw BusinessRuntimeException.getInstance("该首页配置已上架,只能定时下架..");
+		}
+
+		if (!config.getStatus() && !preStatus) {
+			throw BusinessRuntimeException.getInstance("该首页配置已下架,只能定时上架..");
+		}
+
+		Long time = req.getTime();
+		Long nowMills = System.currentTimeMillis();
+
+		//直接将配置改为对应 定时上下架状态
+		Boolean timingJob = true;
+		if (time <= nowMills) {
+			config.setStatus(preStatus);
+			config.setTime(null);
+			config.setPreStatus(null);
+			timingJob = false;
+		} else {
+			config.setTime(time);
+			config.setPreStatus(preStatus);
+		}
+		this.updateById(config);
+
+		//删除之前设置的定时任务
+		cancelTimingJob(id);
+
+		if (timingJob) {
+			SysFuncTimingShelf timingShelf = new SysFuncTimingShelf();
+
+			timingShelf.setTime(time);
+			timingShelf.setTimeStr(DateTime.of(time).toString());
+			timingShelf.setPreStatus(preStatus);
+			timingShelf.setFuncId(id);
+			timingShelf.setType(SysFuncTimingShelf.Type.hc.name());
+			sysFuncTimingShelfService.save(timingShelf);
+
+			sysFuncTimingShelfService.addTimingJob(SysFuncTimingShelf.Type.hc.name(), id, timingShelf.getPreStatus(), time, nowMills);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void timingCancel(Long id) {
+		HomeManagementConfig config = this.getById(id);
+		if (config == null || !config.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("对应配置不存在..");
+		}
+		//删除之前设置的定时任务
+		cancelTimingJob(id);
+
+		if (config.getTime() != null) {
+			config.setTime(null);
+			config.setPreStatus(null);
+			this.updateById(config);
+		}
+	}
+
+	public void cancelTimingJob(Long id) {
+		Integer count = sysFuncTimingShelfService.count(Wrappers.lambdaQuery(SysFuncTimingShelf.class)
+				.eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
+				.eq(SysFuncTimingShelf::getFuncId, id)
+				.eq(SysFuncTimingShelf::getDeleted, 1));
+		if (count > 0) {
+			sysFuncTimingShelfService.update(null, Wrappers.lambdaUpdate(SysFuncTimingShelf.class)
+					.set(SysFuncTimingShelf::getDeleted, 0)
+					.eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
+					.eq(SysFuncTimingShelf::getFuncId, id)
+					.eq(SysFuncTimingShelf::getDeleted, 1));
+			log.info("将之前设置的同配置下{},id:{}的定时上下架删除", SysFuncTimingShelf.Type.hc.getDesc(), id);
+		}
+	}
 }

+ 1 - 2
netflix-service/src/main/java/com/cyksj/service/mail/impl/MailServiceImpl.java

@@ -25,7 +25,6 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
 import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeUtility;
 import java.io.File;
@@ -68,7 +67,7 @@ public class MailServiceImpl implements MailService {
 	/**
 	 * 获取邮箱客户端
 	 */
-	@PostConstruct
+	//@PostConstruct
 	public void init() throws Exception {
 		List<EmailConfig> emailConfigs = emailConfigMapper.selectList(null);
 		senders = new ArrayList<>(emailConfigs.size());

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -13,7 +13,7 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.AccountMapper;
 import com.cyksj.mapper.AccountUpdatePasswordRecordMapper;
-import com.cyksj.mapper.SysEmailMapper;
+import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.mapper.manage.AutoUpdateAccountPwdLogMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.*;

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonPostServiceImpl.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.OrderDonMapper;
-import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.mapper.order.OrderDonPostMapper;
 import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.OrderDonPost;

+ 1 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -17,6 +17,7 @@ import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.views.*;

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopServiceImpl.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.ValidatorUtil;
-import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.mapper.shop.YhShopApplyRecordMapper;
 import com.cyksj.mapper.shop.YhShopMapper;

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/sys/SysFuncTimingShelfService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.sys;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.SysFuncTimingShelf;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: SysFuncTimingShelfService
+ * 创建者: JavaZou
+ * 创建时间:2023/12/28 11:03
+ */
+public interface SysFuncTimingShelfService extends IService<SysFuncTimingShelf> {
+	void addTimingJob(String type, Long funcId, Boolean preStatus, Long time, Long nowMills);
+}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/sys/impl/SysConfigChangeRecordServiceImpl.java

@@ -3,7 +3,7 @@ package com.cyksj.service.sys.impl;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.constant.Constant;
-import com.cyksj.mapper.SysConfigChangeRecordMapper;
+import com.cyksj.mapper.sys.SysConfigChangeRecordMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.SysConfigChangeRecord;
 import com.cyksj.service.sys.SysConfigChangeRecordService;

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/sys/impl/SysConfigServiceImpl.java

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.util.Jsons;
-import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.model.dto.DefaultShopConfig;
 import com.cyksj.model.dto.YhServiceDto;
 import com.cyksj.model.entity.ShopConfig;

+ 91 - 0
netflix-service/src/main/java/com/cyksj/service/sys/impl/SysFuncTimingShelfServiceImpl.java

@@ -0,0 +1,91 @@
+package com.cyksj.service.sys.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.RandomUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
+import com.cyksj.mapper.sys.SysFuncTimingShelfMapper;
+import com.cyksj.model.entity.SysFuncTimingShelf;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.sys.SysFuncTimingShelfService;
+import com.cyksj.task.JobManager;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: SysFuncTimingShelfServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2023/12/28 11:03
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class SysFuncTimingShelfServiceImpl extends ServiceImpl<SysFuncTimingShelfMapper, SysFuncTimingShelf> implements SysFuncTimingShelfService {
+	private final JobManager jobManager;
+
+	private final HomeManagementConfigMapper homeManagementConfigMapper;
+
+	private final RedisService redisService;
+
+
+	@PostConstruct
+	public void initShelfTimingJob() {
+		List<SysFuncTimingShelf> list = this.list(Wrappers.lambdaQuery(SysFuncTimingShelf.class).eq(SysFuncTimingShelf::getDeleted, 1));
+
+		long nowMills = System.currentTimeMillis();
+		log.info("初始化添加定时上下架任务数量:{}", list.size());
+		list.forEach(sysFuncTimingShelf -> {
+			addTimingJob(sysFuncTimingShelf.getType(), sysFuncTimingShelf.getFuncId(), sysFuncTimingShelf.getPreStatus(), sysFuncTimingShelf.getTime(), nowMills);
+		});
+	}
+
+	@Override
+	public void addTimingJob(String type, Long funcId, Boolean preStatus, Long time, Long nowMills) {
+		Runnable task = null;
+		if (SysFuncTimingShelf.Type.valueOf(type) == SysFuncTimingShelf.Type.hc) {
+			log.info("添加首页配置id:{},time{},状态为:{}定时任务-------------->", funcId, DateTime.of(time), preStatus);
+			task = () -> addHomeConfigTimingJob(funcId);
+		}
+		if (task != null) {
+			Long startTime = time - nowMills;
+			if (startTime < 0) {
+				//随机一个2s
+				startTime = RandomUtil.randomLong(2000);
+			}
+			jobManager.addJob(startTime, task);
+		}
+	}
+
+
+	@Transactional(rollbackFor = Throwable.class)
+	public void addHomeConfigTimingJob(Long funcId) {
+		Optional.ofNullable(this.getOne(Wrappers.lambdaQuery(SysFuncTimingShelf.class)
+				.eq(SysFuncTimingShelf::getType, SysFuncTimingShelf.Type.hc)
+				.eq(SysFuncTimingShelf::getFuncId, funcId)
+				.le(SysFuncTimingShelf::getTime, System.currentTimeMillis())
+				.eq(SysFuncTimingShelf::getDeleted, 1)
+				.last("limit 1"))).ifPresent(timingShelf -> {
+			timingShelf.setDeleted(false);
+			this.updateById(timingShelf);
+			Optional.ofNullable(homeManagementConfigMapper.selectById(funcId)).ifPresent(homeManagementConfig -> {
+				homeManagementConfig.setTime(null);
+				homeManagementConfig.setPreStatus(null);
+				homeManagementConfig.setStatus(timingShelf.getPreStatus());
+				homeManagementConfigMapper.updateById(homeManagementConfig);
+				log.info("将首页配置:{}的状态置为:{}状态", funcId, timingShelf.getPreStatus());
+
+				Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+				redisService.del(keys.toArray(String[]::new));
+			});
+		});
+	}
+}

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -17,7 +17,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.RegisterOrderDonMapper;
-import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.ClickRecordReq;
 import com.cyksj.model.views.*;

+ 1 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -24,6 +24,7 @@ import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
+import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.*;
 import com.cyksj.model.manage.request.ReqAccountIncrExpiryTime;

+ 24 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java

@@ -7,6 +7,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.entity.GoodsDonCategory;
 import com.cyksj.model.entity.HomeManagementConfig;
 import com.cyksj.model.entity.HomeManagementConfigUserClickRecord;
+import com.cyksj.model.request.HomeConfigTimingReq;
 import com.cyksj.model.request.HomeManageConfigReq;
 import com.cyksj.model.views.HomeManagementAvailableGoodsView;
 import com.cyksj.model.views.HomeManagementConfigView;
@@ -86,6 +87,8 @@ public class HomeManageConfigController {
 		homeManagementConfigService.update(null, Wrappers.lambdaUpdate(HomeManagementConfig.class)
 				.set(HomeManagementConfig::getStatus, status)
 				.in(HomeManagementConfig::getId, ids));
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -97,6 +100,8 @@ public class HomeManageConfigController {
 		goodsDonCategoryService.update(null, Wrappers.lambdaUpdate(GoodsDonCategory.class)
 				.set(GoodsDonCategory::getStatus, status)
 				.in(GoodsDonCategory::getId, ids));
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -159,4 +164,23 @@ public class HomeManageConfigController {
 				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(views);
 	}
+
+	/**
+	 * 定时上下架时间
+	 */
+	@PutMapping("/timing/update/status")
+	public Result<String> timingUpdateStatus(@RequestBody HomeConfigTimingReq req) {
+		homeManagementConfigService.timingUpdateStatus(req);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 取消定时上下架
+	 */
+	@PutMapping("/timing/cancel/{id}")
+	public Result<String> timingCancel(@PathVariable Long id) {
+		homeManagementConfigService.timingCancel(id);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
 }