diff --git a/src/main/java/com/peanut/modules/common/controller/CouponController.java b/src/main/java/com/peanut/modules/common/controller/CouponController.java index 3ee1b39e..dd150297 100644 --- a/src/main/java/com/peanut/modules/common/controller/CouponController.java +++ b/src/main/java/com/peanut/modules/common/controller/CouponController.java @@ -13,6 +13,7 @@ import com.peanut.modules.master.service.CourseService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -58,6 +59,8 @@ public class CouponController { Page couponPage = couponService.page(new Page<>(page, limit), wrapper); for (CouponEntity couponEntity : couponPage.getRecords()) { couponService.setRangeList(couponEntity); + couponEntity.setGrantCount(couponHistoryService.count(new LambdaQueryWrapper() + .eq(CouponHistory::getCouponId,couponEntity.getId()))); } return R.ok().put("couponPage",couponPage); } @@ -122,21 +125,13 @@ public class CouponController { //修改优惠劵 @RequestMapping("/updateCoupon") public R updateCoupon(@RequestBody CouponEntity couponEntity){ - int count = couponHistoryService.count(new LambdaQueryWrapper() - .eq(CouponHistory::getCouponId,couponEntity.getId())); - if (count>0){ - return R.error("已有用户拥有优惠券"); - } - CouponEntity c = couponService.getById(couponEntity.getId()); - if (c.getCurrentState()==0){ - return R.error("优惠券发放中,请先结束再修改"); - } couponService.updateById(couponEntity); return R.ok(); } //删除优惠劵 @RequestMapping("/delCoupon") + @Transactional public R delCoupon(@RequestBody Map params){ int couponId = Integer.parseInt(params.get("id").toString()); int count = couponHistoryService.count(new LambdaQueryWrapper() @@ -149,6 +144,12 @@ public class CouponController { return R.error("优惠券发放中,请先结束再删除"); } couponService.removeById(couponId); + //删除优惠券商品绑定 + List ctps = couponToProductService.list(new LambdaQueryWrapper() + .eq(CouponToProduct::getCouponId,couponId)); + for (CouponToProduct ctp:ctps){ + couponToProductService.removeById(ctp.getId()); + } return R.ok(); } diff --git a/src/main/java/com/peanut/modules/common/entity/CouponEntity.java b/src/main/java/com/peanut/modules/common/entity/CouponEntity.java index 90732917..b3c86945 100644 --- a/src/main/java/com/peanut/modules/common/entity/CouponEntity.java +++ b/src/main/java/com/peanut/modules/common/entity/CouponEntity.java @@ -67,6 +67,8 @@ public class CouponEntity { @TableLogic private Integer delFlag; + @TableField(exist = false) + private int grantCount; @TableField(exist = false) private List rangeList; @TableField(exist = false) diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java index 8b1dbf7c..022419f8 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java @@ -333,15 +333,6 @@ public class ClassEntityServiceImpl extends ServiceImpl impl @Override public R insertCouponHistory(int couponId, int userId,int getType,String remark) { CouponEntity couponEntity = couponDao.selectById(couponId); - int historyCount = couponHistoryDao.selectCount(new LambdaQueryWrapper() - .eq(CouponHistory::getCouponId,couponId)); - //是否超出总发行量 - if (historyCount historyList = couponHistoryDao.selectList(new LambdaQueryWrapper() - .eq(CouponHistory::getUserId,userId) + if (couponEntity.getCurrentState()==0){ + int historyCount = couponHistoryDao.selectCount(new LambdaQueryWrapper() .eq(CouponHistory::getCouponId,couponId)); - //是否超出可持有张数 - if (historyList.size() historyList = couponHistoryDao.selectList(new LambdaQueryWrapper() + .eq(CouponHistory::getUserId,userId) + .eq(CouponHistory::getCouponId,couponId)); + //是否超出可持有张数 + if (historyList.size() classEntities = classEntityDao.selectList(new MPJLambdaWrapper() + .leftJoin(ClassModel.class,ClassModel::getId,ClassEntity::getModelId) + .selectAll(ClassEntity.class) + .eq(ClassModel::getIsExam,1) + .eq(ClassEntity::getState,1)); + for (ClassEntity classEntity : classEntities) { + ClassModel classModel = classModelDao.selectById(classEntity.getModelId()); + int studyDays = classModel.getDays()-classModel.getExamDays(); + //考试周开始时间 + Date startExamTime = DateUtils.addDateDays(classEntity.getStartTime(),studyDays); + if (startExamTime.getTime()<=new Date().getTime()){//已到考试周,调整小班状态为考试周 + classEntity.setState("3"); + classEntityDao.updateById(classEntity); + }else if (DateUtils.format(startExamTime).equals(DateUtils.format(new Date()))){ + //当天与考试周到达天相同,加入队列 + if (classModel.getIsExam()==1){ + //根据设置的天数将班级状态从进行中设置成考试中 + rabbitTemplate.convertAndSend( + DelayQueueConfig.COMMON_EXCHANGE, + DelayQueueConfig.COMMON_ROUTING_KEY, + "examDays" + "," + classEntity.getId(), + new MessagePostProcessor() { + @Override + public Message postProcessMessage(Message message) throws AmqpException { + message.getMessageProperties().setDelay((int)(startExamTime.getTime()-new Date().getTime())); + return message; + } + } + ); + } + } + } + } + +} diff --git a/src/main/java/com/peanut/modules/job/task/CouponEffectTask.java b/src/main/java/com/peanut/modules/job/task/CouponEffectTask.java new file mode 100644 index 00000000..e916d07c --- /dev/null +++ b/src/main/java/com/peanut/modules/job/task/CouponEffectTask.java @@ -0,0 +1,56 @@ +package com.peanut.modules.job.task; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.peanut.common.utils.DateUtils; +import com.peanut.config.DelayQueueConfig; +import com.peanut.modules.common.dao.CouponDao; +import com.peanut.modules.common.dao.CouponHistoryDao; +import com.peanut.modules.common.entity.CouponEntity; +import com.peanut.modules.common.entity.CouponHistory; +import org.springframework.amqp.AmqpException; +import org.springframework.amqp.core.Message; +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; + +@Component("couponEffectTask") +public class CouponEffectTask implements ITask{ + + @Autowired + private CouponHistoryDao couponHistoryDao; + @Autowired + private RabbitTemplate rabbitTemplate; + + @Override + public void run(String params) { + List classEntities = couponHistoryDao.selectList(new LambdaQueryWrapper() + .eq(CouponHistory::getStatus,0) + .ne(CouponHistory::getEffectType,0)); + for (CouponHistory couponHistory : classEntities) { + Date endTime = couponHistory.getEndTime(); + if (endTime.getTime()<=new Date().getTime()){ + //优惠券到期 + couponHistory.setStatus(2); + couponHistoryDao.updateById(couponHistory); + }else if (DateUtils.format(endTime).equals(DateUtils.format(new Date()))) { + //优惠券到期时间是当天 + rabbitTemplate.convertAndSend( + DelayQueueConfig.COMMON_EXCHANGE, + DelayQueueConfig.COMMON_ROUTING_KEY, + "couponExpire"+","+couponHistory.getId(), + new MessagePostProcessor() { + @Override + public Message postProcessMessage(Message message) throws AmqpException { + message.getMessageProperties().setDelay((int)(endTime.getTime()-new Date().getTime())); + return message; + } + } + ); + } + } + } +}