修改课程、会员延迟队列
This commit is contained in:
@@ -54,13 +54,15 @@ public class DelayQueueConfig {
|
||||
public static final String ORDER_CANCEL_DEAD_LETTER_QUEUE = "order_cancel_dead_letter_queue";
|
||||
|
||||
|
||||
//超V过期队列+死信
|
||||
//超V过期延迟队列
|
||||
public static final String USERVIP_QUEUE = "uservip_queue";
|
||||
public static final String USERVIP_EXCHANGE = "uservip_exchange";
|
||||
public static final String USERVIP_ROUTING_KEY = "uservip_routingKey";
|
||||
public static final String USERVIP_DEAD_LETTER_QUEUE = "uservip_dead_letter_queue";
|
||||
public static final String USERVIP_DEAD_LETTER_EXCHANGE = "uservip_dead_letter_exchange";
|
||||
public static final String USERVIP_DEAD_LETTER_ROUTING_KEY = "uservip_dead_letter_routingKey";
|
||||
|
||||
//课程过期延迟队列
|
||||
public static final String COURSE_QUEUE = "course_queue";
|
||||
public static final String COURSE_EXCHANGE = "course_exchange";
|
||||
public static final String COURSE_ROUTING_KEY = "course_routingKey";
|
||||
|
||||
/**
|
||||
* 快递队列
|
||||
@@ -225,44 +227,51 @@ public class DelayQueueConfig {
|
||||
.with(ORDER_CANCEL_DEAD_LETTER_ROUTING_KEY);
|
||||
}
|
||||
|
||||
//超V过期队列+死信
|
||||
//超V过期延迟队列
|
||||
@Bean
|
||||
public Queue uservipQueue() {
|
||||
Map<String, Object> arguments = new HashMap<>(2);
|
||||
// 绑定死信交换机
|
||||
arguments.put("x-dead-letter-exchange", USERVIP_DEAD_LETTER_EXCHANGE);
|
||||
// 绑定我们的路由key
|
||||
arguments.put("x-dead-letter-routing-key", USERVIP_DEAD_LETTER_ROUTING_KEY);
|
||||
return new Queue(USERVIP_QUEUE, true, false, false, arguments);
|
||||
return new Queue(USERVIP_QUEUE, true, false, false);
|
||||
}
|
||||
@Bean
|
||||
public DirectExchange uservipExchange() {
|
||||
return new DirectExchange(USERVIP_EXCHANGE);
|
||||
public CustomExchange uservipExchange() {
|
||||
Map<String, Object> args = new HashMap<>();
|
||||
//自定义交换机的类型
|
||||
args.put("x-delayed-type", "direct");
|
||||
return new CustomExchange(USERVIP_EXCHANGE, "x-delayed-message", true, false,args);
|
||||
}
|
||||
@Bean
|
||||
public Binding uservipBinding() {
|
||||
return BindingBuilder
|
||||
.bind(uservipQueue())
|
||||
.to(uservipExchange())
|
||||
.with(USERVIP_ROUTING_KEY);
|
||||
.with(USERVIP_ROUTING_KEY)
|
||||
.noargs();
|
||||
}
|
||||
|
||||
|
||||
//课程过期延迟队列
|
||||
@Bean
|
||||
public Queue courseQueue() {
|
||||
return new Queue(COURSE_QUEUE, true, false, false);
|
||||
}
|
||||
@Bean
|
||||
public Queue uservipDeadLetterQueue() {
|
||||
return new Queue(USERVIP_DEAD_LETTER_QUEUE);
|
||||
public CustomExchange courseExchange() {
|
||||
Map<String, Object> args = new HashMap<>();
|
||||
//自定义交换机的类型
|
||||
args.put("x-delayed-type", "direct");
|
||||
return new CustomExchange(COURSE_EXCHANGE, "x-delayed-message", true, false,args);
|
||||
}
|
||||
@Bean
|
||||
public DirectExchange uservipDeadLetterExchange() {
|
||||
return new DirectExchange(USERVIP_DEAD_LETTER_EXCHANGE);
|
||||
}
|
||||
@Bean
|
||||
public Binding uservipDeadBinding() {
|
||||
public Binding courseBinding() {
|
||||
return BindingBuilder
|
||||
.bind(uservipDeadLetterQueue())
|
||||
.to(uservipDeadLetterExchange())
|
||||
.with(USERVIP_DEAD_LETTER_ROUTING_KEY);
|
||||
.bind(courseQueue())
|
||||
.to(courseExchange())
|
||||
.with(COURSE_ROUTING_KEY)
|
||||
.noargs();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Bean
|
||||
public Queue FMSQueue() {
|
||||
return new Queue(FMS_QUEUE);
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package com.peanut.modules.job.task;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.peanut.config.DelayQueueConfig;
|
||||
import com.peanut.modules.common.dao.UserCourseBuyDao;
|
||||
import com.peanut.modules.common.entity.UserCourseBuyEntity;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.springframework.amqp.core.MessagePostProcessor;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -15,34 +17,52 @@ public class CourseTask implements ITask{
|
||||
|
||||
@Autowired
|
||||
private UserCourseBuyDao userCourseBuyDao;
|
||||
@Autowired
|
||||
private RabbitTemplate rabbitTemplate;
|
||||
|
||||
@Override
|
||||
public void run(String params) {
|
||||
public void run(String userId) {
|
||||
LambdaQueryWrapper<UserCourseBuyEntity> wrapper = new LambdaQueryWrapper();
|
||||
wrapper.eq(UserCourseBuyEntity::getUserId,params);
|
||||
wrapper.eq(UserCourseBuyEntity::getUserId,userId);
|
||||
List<UserCourseBuyEntity> list = userCourseBuyDao.selectList(wrapper);
|
||||
if (list.size() > 0) {
|
||||
for (UserCourseBuyEntity userCourseBuyEntity : list) {
|
||||
if (userCourseBuyEntity.getEndTime()!=null&&userCourseBuyEntity.getEndTime().getTime()<new Date().getTime()){
|
||||
//结束时间,过期删除
|
||||
userCourseBuyDao.deleteById(userCourseBuyEntity.getId());
|
||||
}else {
|
||||
if (userCourseBuyEntity.getStartTime()==null) {
|
||||
//未开始学习,超过一年自动开始
|
||||
if (DateUtils.addYears(userCourseBuyEntity.getCreateTime(),1).getTime()<=new Date().getTime()){
|
||||
userCourseBuyEntity.setStartTime(DateUtils.addYears(userCourseBuyEntity.getCreateTime(),1));
|
||||
userCourseBuyEntity.setEndTime(DateUtils.addDays(userCourseBuyEntity.getStartTime(),userCourseBuyEntity.getDays()));
|
||||
userCourseBuyDao.updateById(userCourseBuyEntity);
|
||||
if (DateUtils.isSameDay(DateUtils.addDays(DateUtils.addYears(userCourseBuyEntity.getCreateTime(),1),2),new Date())){
|
||||
rabbitTemplate.convertAndSend(
|
||||
DelayQueueConfig.COURSE_EXCHANGE,
|
||||
DelayQueueConfig.COURSE_ROUTING_KEY,
|
||||
userCourseBuyEntity.getId(),
|
||||
messagePostProcessor(DateUtils.addYears(userCourseBuyEntity.getCreateTime(),1).getTime()-new Date().getTime())
|
||||
);
|
||||
System.out.println("未开始学习,超过一年自动开始,加入队列");
|
||||
}
|
||||
}else {
|
||||
//开始时间+有效天数,过期删除
|
||||
if (userCourseBuyEntity.getEndTime().getTime() <= new Date().getTime()) {
|
||||
userCourseBuyDao.deleteById(userCourseBuyEntity.getId());
|
||||
//结束时间,过期删除
|
||||
if (DateUtils.isSameDay(DateUtils.addDays(new Date(),2),userCourseBuyEntity.getEndTime())){
|
||||
rabbitTemplate.convertAndSend(
|
||||
DelayQueueConfig.COURSE_EXCHANGE,
|
||||
DelayQueueConfig.COURSE_ROUTING_KEY,
|
||||
userCourseBuyEntity.getId(),
|
||||
messagePostProcessor(userCourseBuyEntity.getEndTime().getTime()-new Date().getTime())
|
||||
);
|
||||
System.out.println("过期删除,加入队列");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("课程过期更新完成");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private MessagePostProcessor messagePostProcessor(long date) {
|
||||
return message -> {
|
||||
message.getMessageProperties().setDelay((int)date);
|
||||
return message;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,10 +32,10 @@ public class UserVipTask implements ITask{
|
||||
private RabbitTemplate rabbitTemplate;
|
||||
|
||||
@Override
|
||||
public void run(String params) {
|
||||
public void run(String userId) {
|
||||
LambdaQueryWrapper<UserVip> wrapper = new LambdaQueryWrapper();
|
||||
wrapper.eq(UserVip::getState,0);
|
||||
wrapper.eq(UserVip::getUserId,params);
|
||||
wrapper.eq(UserVip::getUserId,userId);
|
||||
List<UserVip> list = vipService.list(wrapper);
|
||||
if (list.size() > 0) {
|
||||
for (UserVip userVip : list) {
|
||||
@@ -45,35 +45,34 @@ public class UserVipTask implements ITask{
|
||||
vipService.saveOrUpdate(userVip);
|
||||
user.setVip("0");
|
||||
userService.saveOrUpdate(user);
|
||||
}else if (DateUtils.isSameDay(DateUtils.addDays(new Date(),60),userVip.getEndTime())) {
|
||||
try {
|
||||
if (StringUtils.isNotEmpty(user.getTel())){
|
||||
userService.sendCodeForRegister(user.getTel(),"VIPWillExpire",86);
|
||||
}else if (StringUtils.isNotEmpty(user.getEmail())) {
|
||||
MailUtil.sendMail("太湖超V提醒","超V还有2月到期",user.getEmail());
|
||||
}
|
||||
}catch (Exception e) {
|
||||
logger.error("userVipTask定时任务超V提醒出错,错误为:{}", e.getMessage());
|
||||
}
|
||||
}else if (DateUtils.isSameDay(DateUtils.addDays(new Date(),30),userVip.getEndTime())) {
|
||||
try {
|
||||
if (StringUtils.isNotEmpty(user.getTel())){
|
||||
userService.sendCodeForRegister(user.getTel(),"VIPWillExpire",86);
|
||||
}else if (StringUtils.isNotEmpty(user.getEmail())) {
|
||||
MailUtil.sendMail("太湖超V提醒","超V还有一月到期",user.getEmail());
|
||||
}
|
||||
}catch (Exception e) {
|
||||
logger.error("userVipTask定时任务超V提醒出错,错误为:{}", e.getMessage());
|
||||
}
|
||||
}else if (DateUtils.isSameDay(DateUtils.addMinutes(new Date(),3),userVip.getEndTime())) {
|
||||
// }else if (DateUtils.isSameDay(DateUtils.addDays(new Date(),60),userVip.getEndTime())) {
|
||||
// try {
|
||||
// if (StringUtils.isNotEmpty(user.getTel())){
|
||||
// userService.sendCodeForRegister(user.getTel(),"VIPWillExpire",86);
|
||||
// }else if (StringUtils.isNotEmpty(user.getEmail())) {
|
||||
// MailUtil.sendMail("太湖超V提醒","超V还有2月到期",user.getEmail());
|
||||
// }
|
||||
// }catch (Exception e) {
|
||||
// logger.error("userVipTask定时任务超V提醒出错,错误为:{}", e.getMessage());
|
||||
// }
|
||||
// }else if (DateUtils.isSameDay(DateUtils.addDays(new Date(),30),userVip.getEndTime())) {
|
||||
// try {
|
||||
// if (StringUtils.isNotEmpty(user.getTel())){
|
||||
// userService.sendCodeForRegister(user.getTel(),"VIPWillExpire",86);
|
||||
// }else if (StringUtils.isNotEmpty(user.getEmail())) {
|
||||
// MailUtil.sendMail("太湖超V提醒","超V还有一月到期",user.getEmail());
|
||||
// }
|
||||
// }catch (Exception e) {
|
||||
// logger.error("userVipTask定时任务超V提醒出错,错误为:{}", e.getMessage());
|
||||
// }
|
||||
}else if (DateUtils.isSameDay(DateUtils.addDays(new Date(),2),userVip.getEndTime())) {
|
||||
rabbitTemplate.convertAndSend(
|
||||
DelayQueueConfig.USERVIP_EXCHANGE,
|
||||
DelayQueueConfig.USERVIP_ROUTING_KEY,
|
||||
userVip.getId(),
|
||||
messagePostProcessor(userVip.getEndTime().getTime()-new Date().getTime())
|
||||
);
|
||||
System.out.println("----------------------------------------");
|
||||
System.out.println("会员还剩7天,加入队列");
|
||||
System.out.println("-------------------------会员还剩2天,加入队列");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -81,8 +80,7 @@ public class UserVipTask implements ITask{
|
||||
|
||||
private MessagePostProcessor messagePostProcessor(long date) {
|
||||
return message -> {
|
||||
//设置有效期7天
|
||||
message.getMessageProperties().setExpiration(String.valueOf(date));
|
||||
message.getMessageProperties().setDelay((int)date);
|
||||
return message;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.peanut.modules.mq.Consumer;
|
||||
|
||||
import com.peanut.config.DelayQueueConfig;
|
||||
import com.peanut.modules.common.dao.UserCourseBuyDao;
|
||||
import com.peanut.modules.common.entity.UserCourseBuyEntity;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
//购买的课程到期操作
|
||||
@Component
|
||||
public class CourseConsumer {
|
||||
|
||||
@Autowired
|
||||
private UserCourseBuyDao userCourseBuyDao;
|
||||
|
||||
@RabbitListener(queues = DelayQueueConfig.COURSE_QUEUE)
|
||||
public void courseConsumer(String userCourseBuyId) {
|
||||
UserCourseBuyEntity userCourseBuyEntity = userCourseBuyDao.selectById(userCourseBuyId);
|
||||
if (userCourseBuyEntity.getStartTime()==null) {
|
||||
//未开始学习,超过一年自动开始
|
||||
userCourseBuyEntity.setStartTime(DateUtils.addYears(userCourseBuyEntity.getCreateTime(),1));
|
||||
userCourseBuyEntity.setEndTime(DateUtils.addDays(userCourseBuyEntity.getStartTime(),userCourseBuyEntity.getDays()));
|
||||
userCourseBuyDao.updateById(userCourseBuyEntity);
|
||||
}else {
|
||||
//结束时间,过期删除
|
||||
userCourseBuyDao.deleteById(userCourseBuyEntity.getId());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,7 +18,7 @@ public class UserVipConsumer {
|
||||
@Autowired
|
||||
private MyUserDao userDao;
|
||||
|
||||
@RabbitListener(queues = DelayQueueConfig.USERVIP_DEAD_LETTER_QUEUE)
|
||||
@RabbitListener(queues = DelayQueueConfig.USERVIP_QUEUE)
|
||||
public void userVipConsumer(String userVipId) {
|
||||
UserVip userVip = userVipDao.selectById(userVipId);
|
||||
if(userVip == null){
|
||||
@@ -29,7 +29,7 @@ public class UserVipConsumer {
|
||||
MyUserEntity user = userDao.selectById(userVip.getUserId());
|
||||
user.setVip("0");
|
||||
userDao.updateById(user);
|
||||
System.out.println("vip更新完成");
|
||||
System.out.println(user.getName()+"-"+user.getTel()+"-"+user.getEmail()+"超v过期,vip更新完成");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -293,7 +293,7 @@ public class CourseServiceImpl extends ServiceImpl<CourseDao, CourseEntity> impl
|
||||
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, user.getId()));
|
||||
List<UserCourseBuyEntity> userCourseBuyList = userCourseBuyDao.selectList(new LambdaQueryWrapper<UserCourseBuyEntity>().eq(UserCourseBuyEntity::getUserId, ShiroUtils.getUId()).eq(UserCourseBuyEntity::getCatalogueId, courseCatalogueEntity.getId()));
|
||||
//完成度、上次学习时间
|
||||
catalogueCompletion(courseCatalogueEntity);
|
||||
// catalogueCompletion(courseCatalogueEntity);
|
||||
//是否购买,生效时间
|
||||
if ("1".equals(user.getVip())||"3".equals(user.getVip())){
|
||||
//是超级会员或者国学会员
|
||||
|
||||
Reference in New Issue
Block a user