CourseLikeDeliverStrategy.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package cn.seecoder.courselearning.serviceimpl.coupon.coupondeliverstrategy;
  2. import cn.seecoder.courselearning.mapperservice.course.CourseLikesMapper;
  3. import cn.seecoder.courselearning.mapperservice.course.CourseMapper;
  4. import cn.seecoder.courselearning.po.coupon.Coupon;
  5. import cn.seecoder.courselearning.po.course.Course;
  6. import cn.seecoder.courselearning.po.user.User;
  7. import cn.seecoder.courselearning.service.coupon.coupondeliverstrategy.CouponDeliverStrategy;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Component;
  10. import java.util.Map;
  11. /**
  12. * 用户点赞数发放策略
  13. */
  14. @Component
  15. public class CourseLikeDeliverStrategy implements CouponDeliverStrategy {
  16. @Autowired
  17. protected CourseLikesMapper courseLikesMapper;
  18. @Autowired
  19. protected CourseMapper courseMapper;
  20. /**
  21. * 这里实现的逻辑为如果给extra中courseId对应的课程点过赞,则只要优惠券适用范围是该课程同学校的其他所有课程,则可以发放
  22. * @param user 用户
  23. * @param coupon 优惠券
  24. * @param extra 额外的判断数据
  25. * @return
  26. */
  27. @Override
  28. public boolean canDeliver(User user, Coupon coupon, Map<String, String> extra) {
  29. String courseIdStr = extra.get("courseId");
  30. if (courseIdStr == null) return false;
  31. Integer courseId = Integer.valueOf(courseIdStr);
  32. // 获取用户点赞数
  33. int result = courseLikesMapper.count(user.getId(), courseId);
  34. if (result == 1) {
  35. // 判断优惠券的适用范围
  36. Course course = courseMapper.selectByPrimaryKey(courseId);
  37. // 判断能否适用
  38. if (coupon.getScope().canUse(course, coupon)) {
  39. return true;
  40. } else {
  41. return false;
  42. }
  43. }
  44. return false;
  45. }
  46. }