优化结算时获取用户优惠券信息(增加redis存储)

This commit is contained in:
paulGao 2022-01-11 17:34:00 +08:00
parent 459a736ebc
commit 1c28e0bd5f
5 changed files with 49 additions and 47 deletions

View File

@ -2,7 +2,6 @@ package cn.lili.modules.order.cart.render.impl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO;
@ -13,11 +12,8 @@ import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.cart.render.util.PromotionPriceUtil;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
import cn.lili.modules.promotion.entity.enums.CouponTypeEnum;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.MemberCouponVO;
import cn.lili.modules.promotion.service.MemberCouponService;
import org.springframework.beans.factory.annotation.Autowired;
@ -64,11 +60,7 @@ public class CouponRender implements CartRenderStep {
* @param tradeDTO 交易dto
*/
private void renderCouponRule(TradeDTO tradeDTO) {
MemberCouponSearchParams searchParams = new MemberCouponSearchParams();
searchParams.setMemberId(UserContext.getCurrentUser().getId());
searchParams.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name());
searchParams.setPromotionStatus(PromotionsStatusEnum.START.name());
List<MemberCoupon> memberCouponList = memberCouponService.getMemberCoupons(searchParams);
List<MemberCoupon> memberCouponList = memberCouponService.getMemberCoupons(tradeDTO.getMemberId());
if (!memberCouponList.isEmpty()) {
this.checkMemberExistCoupon(tradeDTO, memberCouponList);

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,6 @@ package cn.lili.modules.promotion.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@ -55,12 +54,19 @@ public interface MemberCouponService extends IService<MemberCoupon> {
/**
* 获取会员优惠券列表
*
* @param pageVo 分页参数
* @param param 查询参数
* @return 会员优惠券列表
*/
List<MemberCoupon> getMemberCoupons(MemberCouponSearchParams param);
/**
* 获取当前用户的优惠券列表优先读取缓存
*
* @param memberId 会员id
* @return 会员优惠券列表
*/
List<MemberCoupon> getMemberCoupons(String memberId);
/**
* 获取会员优惠券列表
*
@ -97,27 +103,19 @@ public interface MemberCouponService extends IService<MemberCoupon> {
*/
long getMemberCouponsNum();
/**
* 更新会员优惠券状态
*
* @param status 要变更的状态
* @param id 会员优惠券id
*/
void updateMemberCouponStatus(MemberCouponStatusEnum status, String id);
/**
* 使用优惠券
*
* @param ids 会员优惠券id
*/
void used(List<String> ids);
void used(String memberId, List<String> ids);
/**
* 作废当前会员优惠券
*
* @param id id
*/
void cancellation(String id);
void cancellation(String memberId, String id);
/**
* 关闭会员优惠券

View File

@ -1,5 +1,6 @@
package cn.lili.modules.promotion.serviceimpl;
import cn.lili.cache.Cache;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser;
@ -24,6 +25,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -37,6 +41,7 @@ import java.util.*;
*/
@Service
@Transactional(rollbackFor = Exception.class)
@CacheConfig(cacheNames = "{MemberCoupon}")
public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, MemberCoupon> implements MemberCouponService {
/**
@ -45,6 +50,12 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
@Autowired
private CouponService couponService;
/**
* 缓存
*/
@Autowired
private Cache cache;
@Override
public void checkCouponLimit(String couponId, String memberId) {
Coupon coupon = couponService.getById(couponId);
@ -71,6 +82,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
* @param memberName 会员名称
*/
@Override
@CacheEvict(key = "#memberId")
public void receiveBuyerCoupon(String couponId, String memberId, String memberName) {
Coupon coupon = couponService.getById(couponId);
if (coupon != null && !CouponGetEnum.FREE.name().equals(coupon.getGetType())) {
@ -82,6 +94,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
}
@Override
@CacheEvict(key = "#memberId")
public void receiveCoupon(String couponId, String memberId, String memberName) {
Coupon coupon = couponService.getById(couponId);
if (coupon != null) {
@ -108,6 +121,22 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
return this.list(param.queryWrapper());
}
/**
* 获取当前用户的优惠券列表优先读取缓存
*
* @param memberId 会员id
* @return 会员优惠券列表
*/
@Override
@Cacheable(key = "#memberId")
public List<MemberCoupon> getMemberCoupons(String memberId) {
MemberCouponSearchParams searchParams = new MemberCouponSearchParams();
searchParams.setMemberId(Objects.requireNonNull(UserContext.getCurrentUser()).getId());
searchParams.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name());
searchParams.setPromotionStatus(PromotionsStatusEnum.START.name());
return this.getMemberCoupons(searchParams);
}
/**
* 获取会员优惠券列表
*
@ -177,31 +206,10 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
return this.count(queryWrapper);
}
/**
* 更新会员优惠券状态
*
* @param status 要变更的状态
* @param id 会员优惠券id
*/
@Override
public void updateMemberCouponStatus(MemberCouponStatusEnum status, String id) {
MemberCoupon memberCoupon = this.getById(id);
if (memberCoupon == null) {
throw new ServiceException(ResultCode.COUPON_MEMBER_NOT_EXIST);
}
String memberCouponStatus = memberCoupon.getMemberCouponStatus();
if (memberCouponStatus.equals(MemberCouponStatusEnum.NEW.name()) || memberCouponStatus.equals(MemberCouponStatusEnum.USED.name())) {
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MemberCoupon::getId, id).set(MemberCoupon::getMemberCouponStatus, status.name());
this.update(updateWrapper);
} else {
throw new ServiceException(ResultCode.COUPON_MEMBER_STATUS_ERROR);
}
}
@Override
public void used(List<String> ids) {
@CacheEvict(key = "#memberId")
public void used(String memberId, List<String> ids) {
if (ids != null && !ids.isEmpty()) {
List<MemberCoupon> memberCoupons = this.listByIds(ids);
@ -228,7 +236,8 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
* @param id id
*/
@Override
public void cancellation(String id) {
@CacheEvict(key = "#memberId")
public void cancellation(String memberId, String id) {
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MemberCoupon::getId, id);
updateWrapper.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name());
@ -245,6 +254,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
LambdaUpdateWrapper<MemberCoupon> memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
.in(MemberCoupon::getCouponId, couponIds)
.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name());
this.cache.vagueDel("{MemberCoupon}");
this.update(memberCouponLambdaUpdateWrapper);
}

View File

@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* 管理端,优惠券接口
@ -91,7 +92,8 @@ public class CouponManagerController {
@ApiOperation(value = "会员优惠券作废")
@PutMapping(value = "/member/cancellation/{id}")
public ResultMessage<Object> cancellation(@PathVariable String id) {
memberCouponService.cancellation(id);
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
memberCouponService.cancellation(currentUser.getId(), id);
return ResultUtil.success(ResultCode.COUPON_CANCELLATION_SUCCESS);
}