| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CouponMapper; |
| | | import com.doumee.dao.business.MemberCouponMapper; |
| | | import com.doumee.dao.business.model.Coupon; |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | import com.doumee.dao.system.model.SystemUser; |
| | | import com.doumee.service.business.MemberCouponService; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | |
| | | @Autowired |
| | | private MemberCouponMapper memberCouponMapper; |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | |
| | | QueryWrapper<MemberCoupon> wrapper = new QueryWrapper<>(memberCoupon); |
| | | return memberCouponMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | @Override |
| | | public PageData<MemberCoupon> findMemberPage(Integer memberId, Integer status, PageWrap<MemberCoupon> pageWrap) { |
| | | IPage<MemberCoupon> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<MemberCoupon> qw = new MPJLambdaWrapper<>(); |
| | | qw.selectAll(MemberCoupon.class) |
| | | .eq(MemberCoupon::getMemberId, memberId) |
| | | .eq(MemberCoupon::getIsdeleted, Constants.ZERO); |
| | | |
| | | if (status != null) { |
| | | if (status == Constants.CouponStatus.expired.getKey()) { |
| | | // 已失效包含两种:98=未领取已过期, 99=已过期 |
| | | qw.in(MemberCoupon::getStatus, |
| | | Constants.CouponStatus.expiredUnclaimed.getKey(), |
| | | Constants.CouponStatus.expired.getKey()); |
| | | } else { |
| | | qw.eq(MemberCoupon::getStatus, status); |
| | | } |
| | | } |
| | | |
| | | // 按状态排序 |
| | | if (status != null) { |
| | | switch (status) { |
| | | case 0: // 待领取 → 创建时间倒序 |
| | | case 98: // 已失效(查询时包含了98和99) |
| | | case 99: |
| | | qw.orderByDesc(MemberCoupon::getCreateDate); |
| | | break; |
| | | case 1: // 待使用 → 领取时间倒序 |
| | | qw.orderByDesc(MemberCoupon::getValidDate); |
| | | break; |
| | | case 2: // 已使用 → 使用时间倒序 |
| | | qw.orderByDesc(MemberCoupon::getUseDate); |
| | | break; |
| | | default: |
| | | qw.orderByDesc(MemberCoupon::getId); |
| | | break; |
| | | } |
| | | } else { |
| | | qw.orderByDesc(MemberCoupon::getId); |
| | | } |
| | | |
| | | return PageData.from(memberCouponMapper.selectJoinPage(page, MemberCoupon.class, qw)); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void claimCoupon(Integer memberId, Integer couponId) { |
| | | // 查询该会员的待领取优惠券记录 |
| | | MemberCoupon mc = memberCouponMapper.selectOne(new QueryWrapper<MemberCoupon>().lambda() |
| | | .eq(MemberCoupon::getId, couponId) |
| | | .eq(MemberCoupon::getMemberId, memberId) |
| | | .eq(MemberCoupon::getStatus, Constants.CouponStatus.waitClaim.getKey()) |
| | | .eq(MemberCoupon::getIsdeleted, Constants.ZERO)); |
| | | if (mc == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // 校验优惠券是否有效 |
| | | Coupon coupon = couponMapper.selectById(couponId); |
| | | if (coupon == null || coupon.getStatus() != Constants.ZERO) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "优惠券无效"); |
| | | } |
| | | // 标记已领取,计算有效期 |
| | | Date now = new Date(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(now); |
| | | cal.add(Calendar.DAY_OF_MONTH, mc.getValidDays() != null ? mc.getValidDays() : 0); |
| | | memberCouponMapper.update(new UpdateWrapper<MemberCoupon>().lambda() |
| | | .set(MemberCoupon::getStatus, Constants.CouponStatus.claimed.getKey()) |
| | | .set(MemberCoupon::getValidDate, now) |
| | | .set(MemberCoupon::getStartDate, now) |
| | | .set(MemberCoupon::getEndDate, cal.getTime()) |
| | | .set(MemberCoupon::getEditDate, now) |
| | | .eq(MemberCoupon::getId, mc.getId())); |
| | | } |
| | | } |