diff --git a/src/main/java/com/gxwebsoft/shop/dto/OrderCreateRequest.java b/src/main/java/com/gxwebsoft/shop/dto/OrderCreateRequest.java index be9ca22..3553a59 100644 --- a/src/main/java/com/gxwebsoft/shop/dto/OrderCreateRequest.java +++ b/src/main/java/com/gxwebsoft/shop/dto/OrderCreateRequest.java @@ -147,6 +147,9 @@ public class OrderCreateRequest { @NotNull(message = "租户ID不能为空") private Integer tenantId; + @Schema(description = "秒杀活动ID") + private Long activityId; + @Schema(description = "订单商品列表") @Valid @NotEmpty(message = "订单商品列表不能为空") diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java index 5e05533..7494f54 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java @@ -63,6 +63,9 @@ public class ShopFlashSaleActivity implements Serializable { ) private LocalDateTime endTime; + @Schema(description = "活动限购数量") + private Integer saleLimit; + @Schema(description = "库存") private Integer stock; diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java index 97566ce..c82416b 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java @@ -306,6 +306,9 @@ public class ShopOrder implements Serializable { @NotNull(message = "租户ID不能为空") private Integer tenantId; + @Schema(description = "秒杀活动ID") + private Long activityId; + @Schema(description = "修改时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopFlashSaleActivityParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopFlashSaleActivityParam.java index bd96c32..a03d584 100644 --- a/src/main/java/com/gxwebsoft/shop/param/ShopFlashSaleActivityParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/ShopFlashSaleActivityParam.java @@ -51,6 +51,9 @@ public class ShopFlashSaleActivityParam extends BaseParam { @Schema(description = "活动结束时间") private String endTime; + @Schema(description = "活动限购数量") + private Integer saleLimit; + @Schema(description = "库存") @QueryField(type = QueryType.EQ) private Integer stock; 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 ac09f3a..6819dd3 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java @@ -25,9 +25,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -101,7 +99,15 @@ 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"); + + Map activityMap = new HashMap<>(); if(!newUser){ + //查询当前用户是否有下过秒杀活动订单数据【判断下单数量是否超过限制】 + List activityIdList = activityWrapper.list().stream().map(ShopFlashSaleActivity::getId).collect(Collectors.toList()); + 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); @@ -120,6 +126,19 @@ 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 07b5f10..bee0f6a 100644 --- a/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java +++ b/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java @@ -53,6 +53,9 @@ public class ShopFlashSaleActivityVO implements Serializable { @Schema(description = "活动结束时间") private LocalDateTime endTime; + @Schema(description = "活动限购数量") + private Integer saleLimit; + @Schema(description = "库存") private Integer stock;