定时任务超v过期

课程过期
This commit is contained in:
wuchunlei
2024-06-07 13:55:38 +08:00
parent 2639884eef
commit 454a6e11c7
7 changed files with 311 additions and 123 deletions

View File

@@ -39,4 +39,6 @@ public class CourseMedicine {
@TableField(exist = false)
private List<CourseMedicine> children;
@TableField(exist = false)
private List<CourseEntity> courseList;
}

View File

@@ -0,0 +1,48 @@
package com.peanut.modules.job.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.modules.common.dao.UserCourseBuyDao;
import com.peanut.modules.common.entity.UserCourseBuyEntity;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component("courseTask")
public class CourseTask implements ITask{
@Autowired
private UserCourseBuyDao userCourseBuyDao;
@Override
public void run(String params) {
LambdaQueryWrapper<UserCourseBuyEntity> wrapper = new LambdaQueryWrapper();
wrapper.eq(UserCourseBuyEntity::getUserId,params);
List<UserCourseBuyEntity> list = userCourseBuyDao.selectList(wrapper);
if (list.size() > 0) {
for (UserCourseBuyEntity userCourseBuyEntity : list) {
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);
}
}else {
//开始时间+有效天数,过期删除
if (DateUtils.addDays(userCourseBuyEntity.getStartTime(),userCourseBuyEntity.getDays()).getTime() >= new Date().getTime()) {
userCourseBuyDao.deleteById(userCourseBuyEntity.getId());
}
}
}
System.out.println("课程过期更新完成");
}
}
}

View File

@@ -1,10 +1,19 @@
package com.peanut.modules.job.task;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.common.utils.MailUtil;
import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.common.entity.MyUserEntity;
import com.peanut.modules.common.entity.UserVip;
import com.peanut.modules.common.service.MyUserService;
import com.peanut.modules.master.service.UserVipService;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
@@ -13,28 +22,68 @@ import java.util.List;
@Component("userVipTask")
public class UserVipTask implements ITask{
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private UserVipService vipService;
@Autowired
private MyUserService userService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void run(String params) {
LambdaQueryWrapper<UserVip> wrapper = new LambdaQueryWrapper();
wrapper.eq(UserVip::getState,0);
wrapper.eq(UserVip::getUserId,params);
List<UserVip> list = vipService.list(wrapper);
if (list.size() > 0) {
for (UserVip userVip : list) {
MyUserEntity user = userService.getById(userVip.getUserId());
if (userVip.getEndTime().getTime()<new Date().getTime()){
userVip.setState(1);
vipService.saveOrUpdate(userVip);
MyUserEntity user = userService.getById(userVip.getUserId());
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())) {
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天加入队列");
}
}
}
}
private MessagePostProcessor messagePostProcessor(long date) {
return message -> {
//设置有效期7天
message.getMessageProperties().setExpiration(String.valueOf(date));
return message;
};
}
}

View File

@@ -81,26 +81,36 @@ public class CourseMedicalServiceImpl extends ServiceImpl<CourseMedicineDao, Cou
@Override
public List getMedicalCoursePrice() {
//获取所有医学标签
List<CourseMedicine> courseMedicines = this.list(null);
ArrayList<Map> flag = new ArrayList<>();
List<CourseMedicine> courseMedicines = getCourseMedicalTree();
for (CourseMedicine c : courseMedicines){
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
MPJLambdaWrapper<CourseToMedicine> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(CourseEntity.class);
wrapper.leftJoin(CourseEntity.class,CourseEntity::getId,CourseToMedicine::getCourseId);
wrapper.eq(CourseToMedicine::getMedicalId,c.getId());
List<CourseEntity> courseEntities = toMedicineDao.selectJoinList(CourseEntity.class, wrapper);
if(courseEntities.size()==0){
continue;
getLastLevelCourseList(c);
}
return courseMedicines;
}
private void getLastLevelCourseList(CourseMedicine c){
if (c.getChildren()!=null&&c.getChildren().size() > 0){
for (CourseMedicine child : c.getChildren()){
getLastLevelCourseList(child);
}
}
MPJLambdaWrapper<CourseToMedicine> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(CourseEntity.class);
wrapper.leftJoin(CourseEntity.class,CourseEntity::getId,CourseToMedicine::getCourseId);
wrapper.eq(CourseToMedicine::getMedicalId,c.getId());
wrapper.orderByAsc(CourseToMedicine::getSort);
List<CourseEntity> courseEntities = toMedicineDao.selectJoinList(CourseEntity.class, wrapper);
if(courseEntities.size()!=0){
for (CourseEntity co:courseEntities){
List<CourseCatalogueEntity> courseCatalogueEntities = courseCatalogueDao.selectList(new LambdaQueryWrapper<CourseCatalogueEntity>().eq(CourseCatalogueEntity::getCourseId, co.getId()).orderByAsc(CourseCatalogueEntity::getSort));
co.setCourseCatalogueEntityList(courseCatalogueEntities);
}
stringObjectHashMap.put("medical",c);
stringObjectHashMap.put("courseList",courseEntities);
flag.add(stringObjectHashMap);
c.setCourseList(courseEntities);
}
return flag;
}
}

View File

@@ -40,16 +40,16 @@ public class OrderCancelConsumer {
if(Constants.ORDER_STATUS_TO_BE_PAID.equals(buyOrder.getOrderStatus())){
buyOrder.setOrderStatus(Constants.ORDER_STATUS_OUT_OF_TIME);
//回滚库存
// LambdaQueryWrapper<BuyOrderProduct> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(BuyOrderProduct::getOrderId,buyOrder.getOrderId());
// List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList(wrapper);
// for (BuyOrderProduct b : buyOrderProducts){
// ShopProduct shopProduct = shopProductDao.selectById(b.getProductId());
// shopProduct.setProductStock(shopProduct.getProductStock()+b.getQuantity());
// shopProductDao.updateById(shopProduct);
// }
LambdaQueryWrapper<BuyOrderProduct> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BuyOrderProduct::getOrderId,buyOrder.getOrderId());
List<BuyOrderProduct> buyOrderProducts = buyOrderProductDao.selectList(wrapper);
for (BuyOrderProduct b : buyOrderProducts){
ShopProduct shopProduct = shopProductDao.selectById(b.getProductId());
shopProduct.setProductStock(shopProduct.getProductStock()+b.getQuantity());
shopProductDao.updateById(shopProduct);
}
buyOrderService.updateById(buyOrder);
}
buyOrderService.updateById(buyOrder);
if(Constants.ORDER_STATUS_OUT_OF_TIME.equals(buyOrder.getOrderStatus())){
buyOrderService.removeById(buyOrder);
}

View File

@@ -0,0 +1,36 @@
package com.peanut.modules.mq.Consumer;
import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.common.dao.MyUserDao;
import com.peanut.modules.common.dao.UserVipDao;
import com.peanut.modules.common.entity.MyUserEntity;
import com.peanut.modules.common.entity.UserVip;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
//超v过期死信操作
@Component
public class UserVipConsumer {
@Autowired
private UserVipDao userVipDao;
@Autowired
private MyUserDao userDao;
@RabbitListener(queues = DelayQueueConfig.USERVIP_DEAD_LETTER_QUEUE)
public void userVipConsumer(String userVipId) {
UserVip userVip = userVipDao.selectById(userVipId);
if(userVip == null){
return;
}else {
userVip.setState(1);
userVipDao.updateById(userVip);
MyUserEntity user = userDao.selectById(userVip.getUserId());
user.setVip("0");
userDao.updateById(user);
System.out.println("vip更新完成");
}
}
}