package com.ylx.massage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ylx.massage.domain.Coupon; import com.ylx.massage.domain.vo.CouponReceiveVo; import com.ylx.massage.mapper.CouponReceiveMapper; import com.ylx.massage.domain.CouponReceive; import com.ylx.massage.service.CouponReceiveService; import com.ylx.massage.service.CouponService; import com.ylx.massage.utils.DateTimeUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 优惠券领取表(CouponReceive)表服务实现类 * * @author makejava * @since 2024-05-14 11:25:45 */ @Service("couponReceiveService") public class CouponReceiveServiceImpl extends ServiceImpl implements CouponReceiveService { @Resource private CouponService couponService; @Resource private CouponReceiveMapper couponReceiveMapper; @Override public Coupon submit(CouponReceive couponReceive) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); Coupon coupon = couponService.getById(couponReceive.getCouponId()); if (coupon == null) { return null; } queryWrapper.eq(CouponReceive::getOpenid, couponReceive.getOpenid()).eq(CouponReceive::getCouponId, couponReceive.getCouponId()); //限制没人只能领x张 List one = this.list(queryWrapper); if (coupon.getUserLimit() <= one.size()) { return null; } couponReceive.setExpirationTime(DateTimeUtils.addDays(new Date(), coupon.getTermDays())); this.save(couponReceive); return coupon; } @Override public List getByOpenId(String openid) { return couponReceiveMapper.getByOpenId(openid); } @Override @Transactional(rollbackFor = Exception.class) public void removeCoupons(List coupons) { boolean b = this.removeByIds(coupons.stream().map(CouponReceiveVo::getId).collect(Collectors.toList())); //使用数量+1 coupons.forEach(coup -> { UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.lambda().eq(Coupon::getId, coup.getCouponId()); wrapper.setSql(" used_num = used_num + " + 1); couponService.update(wrapper); }); } }