浏览代码

过滤掉首页已经领取掉的优惠券

DongGuoChao 7 年之前
父节点
当前提交
714870bfc3

+ 36 - 8
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java

@@ -3,10 +3,9 @@ package org.linlinjava.litemall.db.service;
 import com.alibaba.druid.util.StringUtils;
 import com.github.pagehelper.PageHelper;
 import org.linlinjava.litemall.db.dao.LitemallCouponMapper;
-import org.linlinjava.litemall.db.domain.LitemallCoupon;
+import org.linlinjava.litemall.db.dao.LitemallCouponUserMapper;
+import org.linlinjava.litemall.db.domain.*;
 import org.linlinjava.litemall.db.domain.LitemallCoupon.Column;
-import org.linlinjava.litemall.db.domain.LitemallCouponExample;
-import org.linlinjava.litemall.db.domain.LitemallCouponUser;
 import org.linlinjava.litemall.db.util.CouponConstant;
 import org.springframework.stereotype.Service;
 
@@ -14,18 +13,21 @@ import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Random;
+import java.util.stream.Collectors;
 
 @Service
 public class LitemallCouponService {
     @Resource
     private LitemallCouponMapper couponMapper;
+    @Resource
+    private LitemallCouponUserMapper couponUserMapper;
 
     private Column[] result = new Column[]{Column.id, Column.name, Column.desc, Column.tag,
                                             Column.days, Column.startTime, Column.endTime,
                                             Column.discount, Column.min};
 
     /**
-     * 查询
+     * 查询,空参数
      *
      * @param offset
      * @param limit
@@ -34,11 +36,24 @@ public class LitemallCouponService {
      * @return
      */
     public List<LitemallCoupon> queryList(int offset, int limit, String sort, String order) {
-        LitemallCouponExample example = new LitemallCouponExample();
-        example.or().andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false);
-        example.setOrderByClause(sort + " " + order);
+        return queryList(LitemallCouponExample.newAndCreateCriteria(), offset, limit, sort, order);
+    }
+
+    /**
+     * 查询
+     *
+     * @param criteria 可扩展的条件
+     * @param offset
+     * @param limit
+     * @param sort
+     * @param order
+     * @return
+     */
+    public List<LitemallCoupon> queryList(LitemallCouponExample.Criteria criteria, int offset, int limit, String sort, String order) {
+        criteria.andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false);
+        criteria.example().setOrderByClause(sort + " " + order);
         PageHelper.startPage(offset, limit);
-        return couponMapper.selectByExampleSelective(example, result);
+        return couponMapper.selectByExampleSelective(criteria.example(), result);
     }
 
     public int queryTotal() {
@@ -47,6 +62,19 @@ public class LitemallCouponService {
         return (int) couponMapper.countByExample(example);
     }
 
+    public List<LitemallCoupon> queryAvailableList(Integer userId, int offset, int limit) {
+        assert userId != null;
+        // 过滤掉登录账号已经领取过的coupon
+        LitemallCouponExample.Criteria c = LitemallCouponExample.newAndCreateCriteria();
+        List<LitemallCouponUser> used = couponUserMapper.selectByExample(
+                LitemallCouponUserExample.newAndCreateCriteria().andUserIdEqualTo(userId).example()
+        );
+        if(used!=null && !used.isEmpty()){
+            c.andIdNotIn(used.stream().map(LitemallCouponUser::getCouponId).collect(Collectors.toList()));
+        }
+        return queryList(c, offset, limit, "add_time", "desc");
+    }
+
     public List<LitemallCoupon> queryList(int offset, int limit) {
         return queryList(offset, limit, "add_time", "desc");
     }

+ 10 - 3
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java

@@ -7,6 +7,7 @@ import org.linlinjava.litemall.core.util.ResponseUtil;
 import org.linlinjava.litemall.db.domain.LitemallCategory;
 import org.linlinjava.litemall.db.domain.LitemallGoods;
 import org.linlinjava.litemall.db.service.*;
+import org.linlinjava.litemall.wx.annotation.LoginUser;
 import org.linlinjava.litemall.wx.service.HomeCacheManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -70,11 +71,11 @@ public class WxHomeController {
 
     /**
      * 首页数据
-     *
+     * @param userId 当用户已经登录时,非空。为登录状态为null
      * @return 首页数据
      */
     @GetMapping("/index")
-    public Object index() {
+    public Object index(@LoginUser Integer userId) {
         //优先从缓存中读取
         if (HomeCacheManager.hasData(HomeCacheManager.INDEX)) {
             return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.INDEX));
@@ -87,7 +88,13 @@ public class WxHomeController {
 
         Callable<List> channelListCallable = () -> categoryService.queryChannel();
 
-        Callable<List> couponListCallable = () -> couponService.queryList(0, 3);
+        Callable<List> couponListCallable;
+        if(userId == null){
+            couponListCallable = () -> couponService.queryList(0, 3);
+        } else {
+            couponListCallable = () -> couponService.queryAvailableList(userId,0, 3);
+        }
+
 
         Callable<List> newGoodsListCallable = () -> goodsService.queryByNew(0, SystemConfig.getNewLimit());
 

+ 1 - 1
litemall-wx/pages/index/index.wxml

@@ -24,7 +24,7 @@
         </view>
       </view>
     </view>
-    <view class="b">
+    <view wx:if="{{coupon.length>0}}" class="b">
       <view class="item" wx:for="{{coupon}}" wx:for-index="index" wx:for-item="item" wx:key="id" bindtap="getCoupon" data-index="{{item.id}}">
         <view class="tag">{{item.tag}}</view>
         <view class="content">