feat: 增加根据促销活动搜索商品索引。增加获取优惠券领取记录。增加优惠券关闭后同时作废所有会员领取的优惠券。

This commit is contained in:
paulGao 2023-01-05 14:39:23 +08:00
parent 0eec40673f
commit 8ddba831f0
10 changed files with 105 additions and 3 deletions

View File

@ -325,7 +325,7 @@ public abstract class BaseElasticsearchService {
" }\n" +
" },\n" +
" \"promotionMapJson\": {\n" +
" \"type\": \"text\"\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"thumbnail\": {\n" +
" \"type\": \"text\",\n" +

View File

@ -27,8 +27,18 @@ public class MemberCouponSearchParams extends BasePromotionsSearchParams impleme
private static final String PRICE_COLUMN = "price";
@ApiModelProperty(value = "优惠券id")
private String couponId;
@ApiModelProperty(value = "优惠券名称")
private String couponName;
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "会员名称")
private String memberName;
/**
* POINT("打折"), PRICE("减免现金");
*
@ -62,6 +72,9 @@ public class MemberCouponSearchParams extends BasePromotionsSearchParams impleme
@Override
public <T> QueryWrapper<T> queryWrapper() {
QueryWrapper<T> queryWrapper = super.queryWrapper();
queryWrapper.eq(CharSequenceUtil.isNotEmpty(couponId), "coupon_id", couponId);
queryWrapper.like(CharSequenceUtil.isNotEmpty(couponName), "coupon_name", couponName);
queryWrapper.like(CharSequenceUtil.isNotEmpty(memberName), "member_name", memberName);
if (CharSequenceUtil.isNotEmpty(couponType)) {
queryWrapper.eq("coupon_type", CouponTypeEnum.valueOf(couponType).name());
}

View File

@ -1,7 +1,13 @@
package cn.lili.modules.promotion.mapper;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.vos.MemberCouponVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* 会员优惠券数据处理层
@ -11,4 +17,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface MemberCouponMapper extends BaseMapper<MemberCoupon> {
@Select("SELECT mc.*,c.coupon_name FROM li_member_coupon mc LEFT JOIN li_coupon c ON mc.coupon_id = c.id ${ew.customSqlSegment}")
Page<MemberCouponVO> getMemberCoupons(Page<MemberCoupon> page, @Param(Constants.WRAPPER) Wrapper<MemberCouponVO> queryWrapper);
}

View File

@ -3,7 +3,9 @@ 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.vos.MemberCouponVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@ -154,4 +156,13 @@ public interface MemberCouponService extends IService<MemberCoupon> {
*/
void voidCoupon(String couponId);
/**
* 获取会员优惠券列表
*
* @param page 分页参数
* @param param 查询参数
* @return 会员优惠券列表
*/
Page<MemberCouponVO> getMemberCouponsPage(Page<MemberCoupon> page, MemberCouponSearchParams param);
}

View File

@ -166,6 +166,13 @@ public class CouponServiceImpl extends AbstractPromotionsServiceImpl<CouponMappe
this.update(updateWrapper);
}
// 关闭优惠券删除相关会员优惠券和券活动
if (startTime == null && endTime == null) {
//删除优惠券信息
this.memberCouponService.closeMemberCoupon(ids);
//删除优惠券活动关联优惠券
this.couponActivityItemService.removeByCouponId(ids);
}
return super.updateStatus(ids, startTime, endTime);
}

View File

@ -14,6 +14,7 @@ import cn.lili.modules.promotion.entity.enums.CouponGetEnum;
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.mapper.MemberCouponMapper;
import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.promotion.service.MemberCouponService;
@ -302,6 +303,27 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
this.update(updateWrapper);
}
@Override
public Page<MemberCouponVO> getMemberCouponsPage(Page<MemberCoupon> page, MemberCouponSearchParams param) {
QueryWrapper<MemberCouponVO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getMemberId()), "mc.member_id", param.getMemberId());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getStoreId()), "c.store_id", param.getStoreId());
queryWrapper.like(CharSequenceUtil.isNotEmpty(param.getMemberName()), "mc.member_name", param.getMemberName());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getCouponId()), "mc.coupon_id", param.getCouponId());
queryWrapper.like(CharSequenceUtil.isNotEmpty(param.getCouponName()), "c.coupon_name", param.getCouponName());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getGetType()), "mc.get_type", param.getGetType());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getScopeType()), "mc.scope_type", param.getPromotionStatus());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getCouponType()), "mc.coupon_type", param.getCouponType());
queryWrapper.eq(CharSequenceUtil.isNotEmpty(param.getMemberCouponStatus()), "mc.member_coupon_status", param.getMemberCouponStatus());
if (param.getStartTime() != null) {
queryWrapper.ge("start_time", new Date(param.getStartTime()));
}
if (param.getEndTime() != null) {
queryWrapper.le("end_time", new Date(param.getEndTime()));
}
return this.baseMapper.getMemberCoupons(page, queryWrapper);
}
/**
* 清除无效的会员优惠券
*

View File

@ -1,7 +1,7 @@
package cn.lili.modules.search.entity.dto;
import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.utils.RegularUtil;
import cn.lili.common.utils.StringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -49,9 +49,18 @@ public class EsGoodsSearchDTO {
@ApiModelProperty("当前商品skuId,根据当前浏览的商品信息来给用户推荐可能喜欢的商品")
private String currentGoodsId;
/**
* @see cn.lili.common.enums.PromotionTypeEnum
*/
@ApiModelProperty("促销活动类型")
private String promotionType;
@ApiModelProperty(value = "促销活动id")
private String promotionsId;
//过滤搜索关键字
public String getKeyword() {
if (StringUtils.isNotEmpty(keyword)) {
if (CharSequenceUtil.isNotEmpty(keyword)) {
RegularUtil.replace(this.keyword);
}
return keyword;

View File

@ -469,6 +469,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
if (CharSequenceUtil.isNotEmpty(searchDTO.getProp())) {
this.propSearch(filterBuilder, searchDTO);
}
// 促销活动判定
if (CharSequenceUtil.isNotEmpty(searchDTO.getPromotionsId()) && CharSequenceUtil.isNotEmpty(searchDTO.getPromotionType())) {
filterBuilder.must(QueryBuilders.wildcardQuery("promotionMapJson", "*" + searchDTO.getPromotionType() + "-" + searchDTO.getPromotionsId() + "*"));
}
//价格区间判定
if (CharSequenceUtil.isNotEmpty(searchDTO.getPrice())) {
String[] prices = searchDTO.getPrice().split("_");

View File

@ -10,7 +10,9 @@ import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dos.Coupon;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams;
import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
import cn.lili.modules.promotion.entity.vos.CouponVO;
import cn.lili.modules.promotion.entity.vos.MemberCouponVO;
import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.modules.promotion.tools.PromotionTools;
@ -111,6 +113,14 @@ public class CouponManagerController {
}
@ApiOperation(value = "获取优惠券领取详情")
@GetMapping(value = "/received")
public ResultMessage<IPage<MemberCouponVO>> getReceiveByPage(MemberCouponSearchParams searchParams,
PageVO page) {
IPage<MemberCouponVO> result = memberCouponService.getMemberCouponsPage(PageUtil.initPage(page), searchParams);
return ResultUtil.data(result);
}
private void setStoreInfo(CouponVO couponVO) {
AuthUser currentUser = UserContext.getCurrentUser();
if (currentUser == null) {

View File

@ -10,8 +10,12 @@ import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dos.Coupon;
import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams;
import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
import cn.lili.modules.promotion.entity.vos.CouponVO;
import cn.lili.modules.promotion.entity.vos.MemberCouponVO;
import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
@ -38,6 +42,10 @@ public class CouponStoreController {
@Autowired
private CouponService couponService;
@Autowired
private MemberCouponService memberCouponService;
@GetMapping
@ApiOperation(value = "获取优惠券列表")
public ResultMessage<IPage<CouponVO>> getCouponList(CouponSearchParams queryParam, PageVO page) {
@ -91,6 +99,15 @@ public class CouponStoreController {
return couponService.removePromotions(filterIds) ? ResultUtil.success() : ResultUtil.error(ResultCode.COUPON_DELETE_ERROR);
}
@ApiOperation(value = "获取优惠券领取详情")
@GetMapping(value = "/received")
public ResultMessage<IPage<MemberCouponVO>> getReceiveByPage(MemberCouponSearchParams searchParams,
PageVO page) {
searchParams.setStoreId(Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId());
IPage<MemberCouponVO> result = memberCouponService.getMemberCouponsPage(PageUtil.initPage(page), searchParams);
return ResultUtil.data(result);
}
@ApiOperation(value = "修改优惠券状态")
@PutMapping("/status")
public ResultMessage<Object> updateCouponStatus(String couponIds, Long startTime, Long endTime) {