TbCouponUserServiceImpl.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.sqx.modules.tbCoupon.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.sqx.common.utils.Result;
  7. import com.sqx.modules.app.entity.UserEntity;
  8. import com.sqx.modules.app.service.UserService;
  9. import com.sqx.modules.common.entity.CommonInfo;
  10. import com.sqx.modules.common.service.CommonInfoService;
  11. import com.sqx.modules.tbCoupon.dao.TbCouponUserDao;
  12. import com.sqx.modules.tbCoupon.entity.TbCoupon;
  13. import com.sqx.modules.tbCoupon.entity.TbCouponUser;
  14. import com.sqx.modules.tbCoupon.service.TbCouponService;
  15. import com.sqx.modules.tbCoupon.service.TbCouponUserService;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.text.SimpleDateFormat;
  20. import java.util.Calendar;
  21. import java.util.Date;
  22. import java.util.concurrent.locks.ReentrantReadWriteLock;
  23. /**
  24. * <p>
  25. * 服务实现类
  26. * </p>
  27. *
  28. * @author www.javacoder.top
  29. * @since 2022-11-18
  30. */
  31. @Service
  32. public class TbCouponUserServiceImpl extends ServiceImpl<TbCouponUserDao, TbCouponUser> implements TbCouponUserService {
  33. @Autowired
  34. private TbCouponService tbCouponService;
  35. @Autowired
  36. private TbCouponUserDao couponUserDao;
  37. @Autowired
  38. private UserService userService;
  39. @Autowired
  40. private CommonInfoService commonInfoService;
  41. @Autowired
  42. private TbCouponService couponService;
  43. private final ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
  44. @Override
  45. public IPage<TbCouponUser> getMyCouponList(Integer page, Integer limit, TbCouponUser couponUser) {
  46. Page<TbCouponUser> pages;
  47. if (page != null && limit != null) {
  48. pages = new Page<>(page, limit);
  49. } else {
  50. pages = new Page<>();
  51. pages.setSize(-1);
  52. }
  53. return couponUserDao.getMyCouponList(pages, couponUser);
  54. }
  55. @Override
  56. public Result receiveActivity(Long userId, Long couponId) {
  57. reentrantReadWriteLock.readLock().lock();
  58. try {
  59. TbCoupon tbCoupon = tbCouponService.getById(couponId);
  60. if (tbCoupon.getCouponNum()>0){
  61. if (tbCoupon.getIsEnable() != 1) {
  62. return Result.error("当前优惠券未启用");
  63. }
  64. Integer num = couponUserDao.selectCount(new QueryWrapper<TbCouponUser>().eq("user_id", userId).eq("coupon_id", tbCoupon.getCouponId()));
  65. if (tbCoupon.getMaxReceive() != 0) {
  66. if (tbCoupon.getMaxReceive() <= num) {
  67. return Result.error("您已领取过!");
  68. }
  69. }
  70. Long couponUserId = giveCoupon(tbCoupon, userId);
  71. tbCoupon.setCouponNum(tbCoupon.getCouponNum() - 1);
  72. tbCouponService.updateById(tbCoupon);
  73. return Result.success().put("couponUserId",couponUserId);
  74. }else {
  75. return Result.error("当前优惠券已被领完!");
  76. }
  77. }catch (Exception e){
  78. e.printStackTrace();
  79. } finally {
  80. reentrantReadWriteLock.readLock().unlock();
  81. }
  82. return Result.error("领取异常,请重试!");
  83. }
  84. /**
  85. * 赠送优惠券计算
  86. *
  87. * @param tbCoupon
  88. * @param userId
  89. */
  90. @Override
  91. public Long giveCoupon(TbCoupon tbCoupon, Long userId) {
  92. TbCouponUser couponUser = new TbCouponUser();
  93. //copy对象
  94. BeanUtils.copyProperties(tbCoupon, couponUser);
  95. couponUser.setUserId(userId);
  96. couponUser.setCreateTime(new Date());
  97. //是否是永久有效
  98. if (tbCoupon.getValidDays() != null && tbCoupon.getValidDays() != 0) {
  99. //如果不是永久
  100. Calendar instance = Calendar.getInstance();
  101. instance.setTime(new Date());
  102. instance.add(Calendar.DATE, tbCoupon.getValidDays());
  103. couponUser.setExpirationTime(instance.getTime());
  104. couponUser.setValidDays(tbCoupon.getValidDays());
  105. } else {
  106. couponUser.setValidDays(0);
  107. }
  108. couponUser.setStatus(0);
  109. couponUserDao.insert(couponUser);
  110. return couponUser.getId();
  111. }
  112. @Override
  113. public Result giveUserCoupon(String userIds, Long couponId, Integer num) {
  114. TbCoupon tbCoupon = tbCouponService.getById(couponId);
  115. String[] split = userIds.split(",");
  116. for (String userId : split) {
  117. for (int i = 0; i < num; i++) {
  118. giveCoupon(tbCoupon, Long.valueOf(userId));
  119. }
  120. }
  121. return Result.success();
  122. }
  123. @Override
  124. public Result newUserCoupon(Long userId) {
  125. CommonInfo one = commonInfoService.findOne(253);
  126. if (one != null) {
  127. String[] couponInfo = one.getValue().split(",");
  128. if (couponInfo.length != 2) {
  129. return Result.error("参数配置错误,请联系管理员");
  130. }
  131. //查看该用户是否是新用户
  132. UserEntity entity = userService.getById(userId);
  133. if (1 == entity.getNewUserFlag()) {
  134. TbCoupon tbCoupon = couponService.getById(couponInfo[0]);
  135. if (tbCoupon == null) {
  136. return Result.error("优惠券不存在");
  137. }
  138. giveCoupon(tbCoupon, userId);
  139. //修改用户为非新用户
  140. entity.setNewUserFlag(2);
  141. userService.updateById(entity);
  142. return Result.success();
  143. }
  144. return Result.error("本福利仅新用户可领取!");
  145. } else {
  146. return Result.error("参数未配置,请联系管理员");
  147. }
  148. }
  149. }