Pārlūkot izejas kodu

增加用户领取优惠券数量限制

Eric 2 gadi atpakaļ
vecāks
revīzija
a931bc39cd

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/CouponIssueMapper.java

@@ -33,4 +33,12 @@ public interface CouponIssueMapper extends BaseMapper<CouponIssue> {
      * @return List<StatGroupWrapper>
      */
     List<StatGroupWrapper> selectCouponStateStatInfo(@Param("userId") Long id, @Param("record") CouponInfoQuery.CouponStateStatQuery query);
+
+    /**
+     * 用户发送优惠券统计
+     * @param couponId 优惠券ID
+     * @param statQuery CouponInfoQuery.IssueStatQuery
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectCouponIssueStatInfo(@Param("couponId") Long couponId, @Param("record") CouponInfoQuery.IssueStatQuery statQuery);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponInfoQuery.java

@@ -68,6 +68,9 @@ public class CouponInfoQuery implements Serializable {
 
         // 状态排除
         private List<CouponUseStateEnum> excludeUseState;
+
+        // 发送用户
+        private List<Long> userIds;
     }
 
     /**

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java

@@ -26,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -36,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.MessageFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -167,6 +169,22 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
             if (!throwE) return false;
             throw new BizException("优惠券已被禁用");
         }
+
+        List<Long> userIds = userParam.stream()
+                .map(UserParam::getUserId).distinct().collect(Collectors.toList());
+        // 判断用户领取数据限制
+        if (Optional.ofNullable(couponInfo.getQuantityLimit()).orElse(0) > 0
+                && CollectionUtils.isNotEmpty(userIds)) {
+
+            CouponInfoQuery.IssueStatQuery statQuery = CouponInfoQuery.IssueStatQuery.builder().userIds(userIds).build();
+            // 统计用户领取优惠券数量
+            List<StatGroupWrapper> groupWrappers = getBaseMapper().selectCouponIssueStatInfo(couponId, statQuery);
+
+            if (groupWrappers.stream().anyMatch(x -> x.getTotal() >= couponInfo.getQuantityLimit())) {
+                throw new BizException(MessageFormat.format("优惠券已领取,每人仅限{0}张", couponInfo.getQuantityLimit()));
+            }
+        }
+
         // 判断优惠券类型 设置优惠券时间
         Long startTime = null;
         Long endTime = null;

+ 15 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CouponIssueMapper.xml

@@ -159,4 +159,19 @@
         <if test="record.groupByState != null">GROUP BY t1.use_state_</if>
     </select>
     <!--用户优惠券状态统计-->
+
+    <!--用户发送优惠券统计-->
+    <select id="selectCouponIssueStatInfo" resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.user_id_ AS id, COUNT(DISTINCT t1.id_) AS total FROM coupon_issue t1
+        <where>
+            <if test="couponId != null">
+                AND t1.coupon_id_ = #{couponId}
+            </if>
+            <if test="record.userIds != null">
+                AND t1.user_id_ IN (<foreach collection="record.userIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.user_id_
+    </select>
+    <!--用户发送优惠券统计-->
 </mapper>