diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java index a3f8bb47..e99f0663 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java +++ b/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 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 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 queryAvailableList(Integer userId, int offset, int limit) { + assert userId != null; + // 过滤掉登录账号已经领取过的coupon + LitemallCouponExample.Criteria c = LitemallCouponExample.newAndCreateCriteria(); + List 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 queryList(int offset, int limit) { return queryList(offset, limit, "add_time", "desc"); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java index 21ddba92..3d2941ca 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java +++ b/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 channelListCallable = () -> categoryService.queryChannel(); - Callable couponListCallable = () -> couponService.queryList(0, 3); + Callable couponListCallable; + if(userId == null){ + couponListCallable = () -> couponService.queryList(0, 3); + } else { + couponListCallable = () -> couponService.queryAvailableList(userId,0, 3); + } + Callable newGoodsListCallable = () -> goodsService.queryByNew(0, SystemConfig.getNewLimit()); diff --git a/litemall-wx/pages/index/index.wxml b/litemall-wx/pages/index/index.wxml index c2705083..e6b8ea48 100644 --- a/litemall-wx/pages/index/index.wxml +++ b/litemall-wx/pages/index/index.wxml @@ -24,7 +24,7 @@ - + {{item.tag}}