diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java index 41d06b2..9a5bb13 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java @@ -69,7 +69,7 @@ public class ShopFlashSaleActivity implements Serializable { @Schema(description = "库存") private Integer stock; - @Schema(description = "展示类型,0:普通用户,1:新用户") + @Schema(description = "展示类型,0:普通用户,1:新用户 2:老用户") private Integer displayType; @Schema(description = "备注") diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java index 4863911..8f6e461 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java @@ -100,13 +100,14 @@ public class ShopFlashSaleActivityServiceImpl extends ServiceImpl getMyActive(Integer tenantId, Integer popFlag) { List resultVOList = new ArrayList<>(); + //1.判断当前登录用户 User loginUser = LoginUserUtil.getLoginUser(); if(loginUser == null){ throw new BusinessException(GlobalErrorCodeConstants.UNAUTHORIZED.getMsg()); } Boolean newUser = true; - //判断是否为新用户【只要未成功下单都判定为新用户】 + //2.判断是否为新用户【只要未成功下单都判定为新用户】 LambdaQueryWrapper shopOrderLambdaQueryWrapper = new LambdaQueryWrapper().eq(ShopOrder::getUserId, loginUser.getUserId()).eq(ShopOrder::getPayStatus, 1) .in(ShopOrder::getOrderStatus, Arrays.asList(0, 1)); List shopOrderList = shopOrderMapper.selectList(shopOrderLambdaQueryWrapper); @@ -114,32 +115,56 @@ public class ShopFlashSaleActivityServiceImpl extends ServiceImpl activityWrapper = lambdaQuery().eq(ShopFlashSaleActivity::getStatus, 0).gt(ShopFlashSaleActivity::getStock, 0).eq(ShopFlashSaleActivity::getTenantId, tenantId) - .apply("NOW() BETWEEN start_time AND end_time"); + //3.查询满足条件的活动数据 + LambdaQueryChainWrapper activityWrapper = lambdaQuery().eq(ShopFlashSaleActivity::getStatus, 0).gt(ShopFlashSaleActivity::getStock, 0) + .eq(ShopFlashSaleActivity::getTenantId, tenantId).apply("NOW() BETWEEN start_time AND end_time"); if(popFlag != null){ activityWrapper.eq(ShopFlashSaleActivity::getPopFlag, popFlag); } + activityWrapper.orderByAsc(ShopFlashSaleActivity::getSortNumber); + List activityList = activityWrapper.list(); + //4.查询老用户已下单爆款活动订单数据 Map activityMap = new HashMap<>(); if(!newUser){ //查询当前用户是否有下过秒杀活动订单数据【判断下单数量是否超过限制】 - List activityIdList = activityWrapper.list().stream().map(ShopFlashSaleActivity::getId).collect(Collectors.toList()); + List activityIdList = activityList.stream().map(ShopFlashSaleActivity::getId).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(activityIdList)){ LambdaQueryWrapper shopOrderWrapper = new LambdaQueryWrapper().select(ShopOrder::getOrderId, ShopOrder::getActivityId, ShopOrder::getTotalNum) .eq(ShopOrder::getUserId, loginUser.getUserId()).in(ShopOrder::getActivityId, activityIdList).in(ShopOrder::getOrderStatus, Arrays.asList(0, 1)); activityMap = shopOrderMapper.selectList(shopOrderWrapper).stream().collect(Collectors.groupingBy(ShopOrder::getActivityId, Collectors.summingInt(ShopOrder::getTotalNum))); } - activityWrapper.eq(ShopFlashSaleActivity::getDisplayType, 0); } - activityWrapper.orderByAsc(ShopFlashSaleActivity::getSortNumber); - List activityList = activityWrapper.list(); + //5.存在活动爆款,则判断用户购买能力 if(CollectionUtils.isNotEmpty(activityList)){ resultVOList = BeanUtil.copyToList(activityList, ShopFlashSaleActivityVO.class); List goodsIdList = resultVOList.stream().map(ShopFlashSaleActivityVO::getGoodsId).distinct().collect(Collectors.toList()); List shopGoods = shopGoodsMapper.selectBatchIds(goodsIdList); + + Map finalActivityMap = activityMap; + Boolean finalNewUser = newUser; resultVOList.forEach(activity -> { + //5.1 判断新老用户商品购买能力、超买能力 + if(finalNewUser){ + if(activity.getDisplayType() == 2){ + activity.setEnable(false); + } + }else { + if(activity.getDisplayType() == 1){ + activity.setEnable(false); + } + + if(activity.getEnable()){ + //超下单数量活动不可选 + Integer orderTotalNum = finalActivityMap.get(activity.getId()); + if(orderTotalNum != null && orderTotalNum >= activity.getSaleLimit()){ + activity.setEnable(false); + } + } + } + + //5.2 回显商品信息 ShopGoods shopGood = shopGoods.stream().filter(goods -> activity.getGoodsId().equals(goods.getGoodsId())).findFirst().orElse(null); if(shopGood != null){ activity.setGoodsPrice(shopGood.getPrice()); @@ -150,19 +175,6 @@ public class ShopFlashSaleActivityServiceImpl extends ServiceImpl iterator = resultVOList.iterator(); - while (iterator.hasNext()){ - ShopFlashSaleActivityVO vo = iterator.next(); - Integer orderTotalNum = activityMap.get(vo.getId()); - if(orderTotalNum != null && orderTotalNum >= vo.getSaleLimit()){ - iterator.remove(); - } - } - } - return resultVOList; } diff --git a/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java b/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java index 7ff1921..e142d82 100644 --- a/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java +++ b/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java @@ -65,7 +65,7 @@ public class ShopFlashSaleActivityVO implements Serializable { @Schema(description = "库存") private Integer stock; - @Schema(description = "展示类型,0:普通用户,1:新用户") + @Schema(description = "展示类型,0:普通用户,1:新用户 2:老用户") private Integer displayType; @Schema(description = "备注") @@ -80,6 +80,9 @@ public class ShopFlashSaleActivityVO implements Serializable { @Schema(description = "租户id") private Integer tenantId; + @Schema(description = "是否可选") + private Boolean enable = true; + @Schema(description = "创建者") private String creator;