package com.sqx.modules.tbCoupon.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sqx.common.utils.Result; import com.sqx.modules.app.entity.UserEntity; import com.sqx.modules.app.service.UserService; import com.sqx.modules.common.entity.CommonInfo; import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.tbCoupon.dao.TbCouponUserDao; import com.sqx.modules.tbCoupon.entity.TbCoupon; import com.sqx.modules.tbCoupon.entity.TbCouponUser; import com.sqx.modules.tbCoupon.service.TbCouponService; import com.sqx.modules.tbCoupon.service.TbCouponUserService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.concurrent.locks.ReentrantReadWriteLock; /** *

* 服务实现类 *

* * @author www.javacoder.top * @since 2022-11-18 */ @Service public class TbCouponUserServiceImpl extends ServiceImpl implements TbCouponUserService { @Autowired private TbCouponService tbCouponService; @Autowired private TbCouponUserDao couponUserDao; @Autowired private UserService userService; @Autowired private CommonInfoService commonInfoService; @Autowired private TbCouponService couponService; private final ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); @Override public IPage getMyCouponList(Integer page, Integer limit, TbCouponUser couponUser) { Page pages; if (page != null && limit != null) { pages = new Page<>(page, limit); } else { pages = new Page<>(); pages.setSize(-1); } return couponUserDao.getMyCouponList(pages, couponUser); } @Override public Result receiveActivity(Long userId, Long couponId) { reentrantReadWriteLock.readLock().lock(); try { TbCoupon tbCoupon = tbCouponService.getById(couponId); if (tbCoupon.getCouponNum()>0){ if (tbCoupon.getIsEnable() != 1) { return Result.error("当前优惠券未启用"); } Integer num = couponUserDao.selectCount(new QueryWrapper().eq("user_id", userId).eq("coupon_id", tbCoupon.getCouponId())); if (tbCoupon.getMaxReceive() != 0) { if (tbCoupon.getMaxReceive() <= num) { return Result.error("您已领取过!"); } } Long couponUserId = giveCoupon(tbCoupon, userId); tbCoupon.setCouponNum(tbCoupon.getCouponNum() - 1); tbCouponService.updateById(tbCoupon); return Result.success().put("couponUserId",couponUserId); }else { return Result.error("当前优惠券已被领完!"); } }catch (Exception e){ e.printStackTrace(); } finally { reentrantReadWriteLock.readLock().unlock(); } return Result.error("领取异常,请重试!"); } /** * 赠送优惠券计算 * * @param tbCoupon * @param userId */ @Override public Long giveCoupon(TbCoupon tbCoupon, Long userId) { TbCouponUser couponUser = new TbCouponUser(); //copy对象 BeanUtils.copyProperties(tbCoupon, couponUser); couponUser.setUserId(userId); couponUser.setCreateTime(new Date()); //是否是永久有效 if (tbCoupon.getValidDays() != null && tbCoupon.getValidDays() != 0) { //如果不是永久 Calendar instance = Calendar.getInstance(); instance.setTime(new Date()); instance.add(Calendar.DATE, tbCoupon.getValidDays()); couponUser.setExpirationTime(instance.getTime()); couponUser.setValidDays(tbCoupon.getValidDays()); } else { couponUser.setValidDays(0); } couponUser.setStatus(0); couponUserDao.insert(couponUser); return couponUser.getId(); } @Override public Result giveUserCoupon(String userIds, Long couponId, Integer num) { TbCoupon tbCoupon = tbCouponService.getById(couponId); String[] split = userIds.split(","); for (String userId : split) { for (int i = 0; i < num; i++) { giveCoupon(tbCoupon, Long.valueOf(userId)); } } return Result.success(); } @Override public Result newUserCoupon(Long userId) { CommonInfo one = commonInfoService.findOne(253); if (one != null) { String[] couponInfo = one.getValue().split(","); if (couponInfo.length != 2) { return Result.error("参数配置错误,请联系管理员"); } //查看该用户是否是新用户 UserEntity entity = userService.getById(userId); if (1 == entity.getNewUserFlag()) { TbCoupon tbCoupon = couponService.getById(couponInfo[0]); if (tbCoupon == null) { return Result.error("优惠券不存在"); } giveCoupon(tbCoupon, userId); //修改用户为非新用户 entity.setNewUserFlag(2); userService.updateById(entity); return Result.success(); } return Result.error("本福利仅新用户可领取!"); } else { return Result.error("参数未配置,请联系管理员"); } } }