Просмотр исходного кода

fix 领取过后的优惠券不展示在列表

zoujiajian 3 лет назад
Родитель
Сommit
392d2aebab

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/coupon/CouponRecommendMapper.java

@@ -1,8 +1,12 @@
 package com.cyksj.mapper.manage.coupon;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.CouponRecommend;
 import com.cyksj.model.views.CouponAvailableRecommendView;
+import com.cyksj.model.views.CouponRecommendView;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
@@ -22,4 +26,6 @@ public interface CouponRecommendMapper extends BaseMapper<CouponRecommend> {
 			" left join coupon_user cu on cu.coupon_id = c.id and cu.user_id = #{userId}" +
 			" where cr.deleted is true and c.deleted is true and cu.coupon_id is null")
 	List<CouponAvailableRecommendView> getRecommendCouponList(Long userId);
+
+	Page<CouponRecommendView> getRecommendCouponViewList(@Param("userId") Long userId, @Param("isNewUser") Boolean isNewUser, @Param("page") IPage<CouponRecommendView> page);
 }

+ 26 - 0
netflix-dao/src/main/resources/mapper/CouponRecommendMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.manage.coupon.CouponRecommendMapper">
+
+    <select id="getRecommendCouponViewList" resultType="com.cyksj.model.views.CouponRecommendView">
+        select cr.id,
+        cr.coupon_id,
+        c.name,
+        c.goods_type,
+        c.type,
+        c.reduce_money,
+        c.discount,
+        c.goods_sku_ids,
+        c.is_valid_time,
+        c.valid_start_time,
+        c.valid_end_time,
+        c.valid_days,
+        c.is_renew,
+        c.scope from coupon_recommend cr left join coupon c on c.id = cr.coupon_id
+        left join coupon_user cu on cu.coupon_id = c.id and cu.user_id = #{userId}
+        where cr.deleted is true and c.deleted is true and cu.coupon_id is null
+        <if test='!isNewUser'>
+            and c.scope !='newUser'
+        </if>
+    </select>
+</mapper>

+ 3 - 4
netflix-dao/src/main/resources/mapper/CouponUserMapper.xml

@@ -85,13 +85,11 @@
                (case
                     when ca.remain_num &lt;= 0 then 'over'
                     when cu.id is null then 'collecting'
-                    when cu.id is not null
-                        then 'received' end)                                                                     as couponStatus,
+                   end)                                                                     as couponStatus,
                (case
                     when remain_num &lt;= 0 then 2
                     when cu.id is null then 0
-                    when cu.id is not null
-                        then 1 end)                                                                              as `order`
+                   end)                                                                              as `order`
         from coupon_active ca
                  left join coupon c
                            on c.id = ca.coupon_id
@@ -100,6 +98,7 @@
           and c.deleted is true
         and ca.expiry_status != 0
         and ca.`status` != 0
+        and cu.id is null
         order by `order`
     </select>
 </mapper>

+ 11 - 14
netflix-web/src/main/java/com/cyksj/web/controller/coupon/CouponFrontController.java

@@ -9,10 +9,10 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
+import com.cyksj.mapper.manage.coupon.CouponRecommendMapper;
 import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.CouponPopularizeDto;
-import com.cyksj.model.entity.Coupon;
 import com.cyksj.model.entity.CouponUser;
 import com.cyksj.model.request.CouponCollectReq;
 import com.cyksj.model.views.*;
@@ -50,6 +50,8 @@ public class CouponFrontController {
 
 	private final CouponMapper couponMapper;
 
+	private final CouponRecommendMapper couponRecommendMapper;
+
 	/**
 	 * 优惠券领取中心列表
 	 */
@@ -107,20 +109,15 @@ public class CouponFrontController {
 	 * 推荐优惠券列表
 	 */
 	@GetMapping("/recommend/list")
-	public Result<SearchResult<CouponRecommendView>> getRecommendList(HttpServletRequest request) {
+	public Result<Page<CouponRecommendView>> getRecommendList(@RequestParam(defaultValue = "1") Long start, @RequestParam(defaultValue = "5") Long limit) {
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		CouponNewUserView couponNewUserView = beanSearcher.searchFirst(CouponNewUserView.class, MapUtils.builder().field(CouponNewUserView::getUserId, userId).op(Operator.Equal).build());
-		SearchResult<CouponRecommendView> search = beanSearcher.search(CouponRecommendView.class,
-				MapUtils.flatBuilder(request.getParameterMap())
-						.orderBy(CouponRecommendView::getId).desc()
-						.build());
-		search.getDataList().stream().filter(data -> {
-			//过滤新用户优惠券
-			if (data.getScope() == Coupon.Scope.newUser && couponNewUserView != null) {
-				return false;
-			}
-			return true;
-		}).forEach(data -> {
+		Boolean isNewUser = true;
+		if (couponNewUserView != null) {
+			isNewUser = false;
+		}
+		Page<CouponRecommendView> page = couponRecommendMapper.getRecommendCouponViewList(userId, isNewUser, new Page<>(start, limit));
+		page.getRecords().forEach(data -> {
 			CouponUser couponUser = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, data.getCouponId()).select(CouponUser::getId).last("limit 1"));
 			if (couponUser == null) {
 				//待领取
@@ -132,7 +129,7 @@ public class CouponFrontController {
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
 		});
-		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
 	}
 
 	/**