|
|
|
|
@ -1,11 +1,13 @@
|
|
|
|
|
package cn.iocoder.yudao.module.promotion.dal.mysql.coupon;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
|
|
import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
|
|
|
|
|
import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.promotion.service.coupon.bo.CouponTakeCountBO;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
import com.github.yulichang.toolkit.MPJWrappers;
|
|
|
|
|
@ -13,6 +15,8 @@ import org.apache.ibatis.annotations.Mapper;
|
|
|
|
|
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 优惠劵 Mapper
|
|
|
|
|
@ -73,4 +77,21 @@ public interface CouponMapper extends BaseMapperX<CouponDO> {
|
|
|
|
|
.in(CouponDO::getTemplateId, templateIds)
|
|
|
|
|
.groupBy(CouponDO::getTemplateId)), CouponTakeCountBO.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
default List<CouponDO> selectListByUserIdAndStatusAndUsePriceLeAndProductScope(
|
|
|
|
|
Long userId, Integer status, Integer usePrice, List<Long> spuIds, List<Long> categoryIds) {
|
|
|
|
|
|
|
|
|
|
Function<List<Long>, String> productScopeValuesFindInSetFunc = ids -> ids.stream()
|
|
|
|
|
.map(id -> StrUtil.format("FIND_IN_SET({}, product_scope_values) ", id))
|
|
|
|
|
.collect(Collectors.joining(" OR "));
|
|
|
|
|
return selectList(new LambdaQueryWrapperX<CouponDO>()
|
|
|
|
|
.eq(CouponDO::getUserId, userId)
|
|
|
|
|
.eq(CouponDO::getStatus, status)
|
|
|
|
|
.le(CouponDO::getUsePrice, usePrice)
|
|
|
|
|
.and(w -> w.eq(CouponDO::getProductScope, PromotionProductScopeEnum.ALL.getScope())
|
|
|
|
|
.or(ww -> ww.eq(CouponDO::getProductScope, PromotionProductScopeEnum.SPU.getScope())
|
|
|
|
|
.apply(productScopeValuesFindInSetFunc.apply(spuIds)))
|
|
|
|
|
.or(ww -> ww.eq(CouponDO::getProductScope, PromotionProductScopeEnum.CATEGORY.getScope())
|
|
|
|
|
.apply(productScopeValuesFindInSetFunc.apply(categoryIds)))));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|