Skip to content

Commit 628cfe2

Browse files
committed
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts: # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillConfigController.java
2 parents edcb29d + 9a49b84 commit 628cfe2

File tree

9 files changed

+102
-12
lines changed

9 files changed

+102
-12
lines changed

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/coupon/CouponApi.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ CommonResult<List<CouponRespDTO>> getCouponListByUserId(@RequestParam("userId")
4141
@Parameter(name = "giveCoupons", description = "key: 优惠劵模版编号,value:对应的数量", required = true),
4242
@Parameter(name = "userId", description = "用户编号", required = true)
4343
})
44-
CommonResult<List<Long>> takeCouponsByAdmin(@RequestParam("giveCoupons") Map<Long, Integer> giveCoupons,
44+
CommonResult<List<Long>> takeCouponsByAdmin(@RequestBody Map<Long, Integer> giveCoupons,
4545
@RequestParam("userId") Long userId);
4646

4747
@PostMapping(PREFIX + "/invalidate-by-admin")

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java

+23-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.iocoder.yudao.module.promotion.controller.admin.seckill;
22

33
import cn.hutool.core.collection.CollUtil;
4+
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
45
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
56
import cn.iocoder.yudao.framework.common.pojo.PageResult;
67
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
@@ -13,15 +14,17 @@
1314
import io.swagger.v3.oas.annotations.Operation;
1415
import io.swagger.v3.oas.annotations.Parameter;
1516
import io.swagger.v3.oas.annotations.tags.Tag;
17+
import jakarta.annotation.Resource;
18+
import jakarta.validation.Valid;
1619
import org.springframework.security.access.prepost.PreAuthorize;
1720
import org.springframework.validation.annotation.Validated;
1821
import org.springframework.web.bind.annotation.*;
1922

20-
import javax.annotation.Resource;
21-
import javax.validation.Valid;
23+
import java.util.Collections;
2224
import java.util.List;
2325

2426
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27+
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
2528
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
2629

2730
@Tag(name = "管理后台 - 秒杀活动")
@@ -89,11 +92,28 @@ public CommonResult<PageResult<SeckillActivityRespVO>> getSeckillActivityPage(@V
8992
}
9093

9194
// 拼接数据
92-
List<SeckillProductDO> products = seckillActivityService.getSeckillProductListByActivityId(
95+
List<SeckillProductDO> products = seckillActivityService.getSeckillProductListByActivityIds(
9396
convertSet(pageResult.getList(), SeckillActivityDO::getId));
9497
List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(
9598
convertSet(pageResult.getList(), SeckillActivityDO::getSpuId)).getCheckedData();
9699
return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, products, spuList));
97100
}
98101

102+
@GetMapping("/list-by-ids")
103+
@Operation(summary = "获得秒杀活动列表,基于活动编号数组")
104+
@Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]")
105+
public CommonResult<List<SeckillActivityRespVO>> getCombinationActivityListByIds(@RequestParam("ids") List<Long> ids) {
106+
// 1. 获得开启的活动列表
107+
List<SeckillActivityDO> activityList = seckillActivityService.getSeckillActivityListByIds(ids);
108+
activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus()));
109+
if (CollUtil.isEmpty(activityList)) {
110+
return success(Collections.emptyList());
111+
}
112+
// 2. 拼接返回
113+
List<SeckillProductDO> productList = seckillActivityService.getSeckillProductListByActivityIds(
114+
convertList(activityList, SeckillActivityDO::getId));
115+
List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)).getCheckedData();
116+
return success(SeckillActivityConvert.INSTANCE.convertList(activityList, productList, spuList));
117+
}
118+
99119
}

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillConfigController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
import io.swagger.v3.oas.annotations.Operation;
1111
import io.swagger.v3.oas.annotations.Parameter;
1212
import io.swagger.v3.oas.annotations.tags.Tag;
13+
import jakarta.annotation.Resource;
14+
import jakarta.validation.Valid;
1315
import org.springframework.security.access.prepost.PreAuthorize;
1416
import org.springframework.validation.annotation.Validated;
1517
import org.springframework.web.bind.annotation.*;
1618

17-
import javax.annotation.Resource;
18-
import javax.validation.Valid;
1919
import java.util.List;
2020

2121
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java

+3
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,7 @@ public class SeckillActivityRespVO extends SeckillActivityBaseVO {
5454
example = "50")
5555
private Integer marketPrice;
5656

57+
@Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
58+
private Integer seckillPrice; // 从 products 获取最小 price 读取
59+
5760
}

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java

+22-4
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@
3535
import java.time.LocalDate;
3636
import java.time.LocalDateTime;
3737
import java.time.LocalTime;
38+
import java.util.Collections;
3839
import java.util.List;
3940

4041
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
41-
import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildCache;
42+
import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache;
4243
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
4344
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst;
4445
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween;
@@ -52,7 +53,7 @@ public class AppSeckillActivityController {
5253
/**
5354
* {@link AppSeckillActivityNowRespVO} 缓存,通过它异步刷新 {@link #getNowSeckillActivity()} 所要的首页数据
5455
*/
55-
private final LoadingCache<String, AppSeckillActivityNowRespVO> nowSeckillActivityCache = buildCache(Duration.ofSeconds(10L),
56+
private final LoadingCache<String, AppSeckillActivityNowRespVO> nowSeckillActivityCache = buildAsyncReloadingCache(Duration.ofSeconds(10L),
5657
new CacheLoader<String, AppSeckillActivityNowRespVO>() {
5758

5859
@Override
@@ -86,7 +87,7 @@ private AppSeckillActivityNowRespVO getNowSeckillActivity0() {
8687

8788
// 2.1 查询满足当前阶段的活动
8889
List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIdAndStatus(config.getId(), CommonStatusEnum.ENABLE.getStatus());
89-
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityId(
90+
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityIds(
9091
convertList(activityList, SeckillActivityDO::getId));
9192
// 2.2 获取 spu 信息
9293
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)).getCheckedData();
@@ -101,7 +102,7 @@ public CommonResult<PageResult<AppSeckillActivityRespVO>> getSeckillActivityPage
101102
if (CollUtil.isEmpty(pageResult.getList())) {
102103
return success(PageResult.empty(pageResult.getTotal()));
103104
}
104-
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityId(
105+
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityIds(
105106
convertList(pageResult.getList(), SeckillActivityDO::getId));
106107

107108
// 2. 拼接数据
@@ -149,4 +150,21 @@ public CommonResult<AppSeckillActivityDetailRespVO> getSeckillActivity(@RequestP
149150
return success(SeckillActivityConvert.INSTANCE.convert3(activity, productList, startTime, endTime));
150151
}
151152

153+
@GetMapping("/list-by-ids")
154+
@Operation(summary = "获得拼团活动列表,基于活动编号数组")
155+
@Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]")
156+
public CommonResult<List<AppSeckillActivityRespVO>> getCombinationActivityListByIds(@RequestParam("ids") List<Long> ids) {
157+
// 1. 获得开启的活动列表
158+
List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByIds(ids);
159+
activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus()));
160+
if (CollUtil.isEmpty(activityList)) {
161+
return success(Collections.emptyList());
162+
}
163+
// 2. 拼接返回
164+
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityIds(
165+
convertList(activityList, SeckillActivityDO::getId));
166+
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)).getCheckedData();
167+
return success(SeckillActivityConvert.INSTANCE.convertAppList(activityList, productList, spuList));
168+
}
169+
152170
}

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/vo/activity/AppSeckillActivityRespVO.java

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public class AppSeckillActivityRespVO {
1616
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
1717
private Long spuId;
1818

19+
@Schema(description = "商品 SPU 名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "一个白菜")
20+
private String spuName; // 从 SPU 的 name 读取
21+
1922
@Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 picUrl 读取
2023
example = "https://www.iocoder.cn/xx.png")
2124
private String picUrl;

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/SeckillActivityConvert.java

+33
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.iocoder.yudao.framework.common.pojo.PageResult;
44
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
55
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
6+
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
67
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
78
import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillValidateJoinRespDTO;
89
import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO;
@@ -87,6 +88,38 @@ default List<SeckillProductDO> convertList(List<? extends SeckillProductBaseVO>
8788
return CollectionUtils.convertList(products, item -> convert(activity, item).setActivityStatus(activity.getStatus()));
8889
}
8990

91+
default List<SeckillActivityRespVO> convertList(List<SeckillActivityDO> list,
92+
List<SeckillProductDO> productList,
93+
List<ProductSpuRespDTO> spuList) {
94+
List<SeckillActivityRespVO> activityList = BeanUtils.toBean(list, SeckillActivityRespVO.class);
95+
Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
96+
Map<Long, List<SeckillProductDO>> productMap = convertMultiMap(productList, SeckillProductDO::getActivityId);
97+
return CollectionUtils.convertList(activityList, item -> {
98+
// 设置 product 信息
99+
item.setSeckillPrice(getMinValue(productMap.get(item.getId()), SeckillProductDO::getSeckillPrice));
100+
// 设置 SPU 信息
101+
findAndThen(spuMap, item.getSpuId(), spu -> item.setSpuName(spu.getName())
102+
.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
103+
return item;
104+
});
105+
}
106+
107+
default List<AppSeckillActivityRespVO> convertAppList(List<SeckillActivityDO> list,
108+
List<SeckillProductDO> productList,
109+
List<ProductSpuRespDTO> spuList) {
110+
List<AppSeckillActivityRespVO> activityList = BeanUtils.toBean(list, AppSeckillActivityRespVO.class);
111+
Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
112+
Map<Long, List<SeckillProductDO>> productMap = convertMultiMap(productList, SeckillProductDO::getActivityId);
113+
return CollectionUtils.convertList(activityList, item -> {
114+
// 设置 product 信息
115+
item.setSeckillPrice(getMinValue(productMap.get(item.getId()), SeckillProductDO::getSeckillPrice));
116+
// 设置 SPU 信息
117+
findAndThen(spuMap, item.getSpuId(), spu -> item.setSpuName(spu.getName())
118+
.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
119+
return item;
120+
});
121+
}
122+
90123
List<SeckillProductRespVO> convertList2(List<SeckillProductDO> list);
91124

92125
List<AppSeckillActivityRespVO> convertList3(List<SeckillActivityDO> activityList);

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public interface SeckillActivityService {
9898
* @param activityIds 活动编号
9999
* @return 活动商品列表
100100
*/
101-
List<SeckillProductDO> getSeckillProductListByActivityId(Collection<Long> activityIds);
101+
List<SeckillProductDO> getSeckillProductListByActivityIds(Collection<Long> activityIds);
102102

103103
/**
104104
* 通过活动时段编号获取指定 status 的秒杀活动
@@ -139,4 +139,12 @@ public interface SeckillActivityService {
139139
*/
140140
List<SeckillActivityDO> getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime);
141141

142+
/**
143+
* 获得拼团活动列表
144+
*
145+
* @param ids 拼团活动编号数组
146+
* @return 拼团活动的列表
147+
*/
148+
List<SeckillActivityDO> getSeckillActivityListByIds(Collection<Long> ids);
149+
142150
}

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ public List<SeckillProductDO> getSeckillProductListByActivityId(Long activityId)
276276
}
277277

278278
@Override
279-
public List<SeckillProductDO> getSeckillProductListByActivityId(Collection<Long> activityIds) {
279+
public List<SeckillProductDO> getSeckillProductListByActivityIds(Collection<Long> activityIds) {
280280
return seckillProductMapper.selectListByActivityId(activityIds);
281281
}
282282

@@ -336,4 +336,9 @@ public List<SeckillActivityDO> getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(
336336
convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime);
337337
}
338338

339+
@Override
340+
public List<SeckillActivityDO> getSeckillActivityListByIds(Collection<Long> ids) {
341+
return seckillActivityMapper.selectList(SeckillActivityDO::getId, ids);
342+
}
343+
339344
}

0 commit comments

Comments
 (0)