promotion:修复砍价活动返回的 combinationPrice 为空的问题

This commit is contained in:
YunaiV 2023-10-06 22:29:11 +08:00
parent 1d9db4874f
commit c8f1269d6e
13 changed files with 63 additions and 42 deletions

View File

@ -56,7 +56,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
} }
default Long selectCount() { default Long selectCount() {
return selectCount(new QueryWrapper<T>()); return selectCount(new QueryWrapper<>());
} }
default Long selectCount(String field, Object value) { default Long selectCount(String field, Object value) {

View File

@ -74,7 +74,7 @@ public class CombinationActivityController {
@PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')") @PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')")
public CommonResult<CombinationActivityRespVO> getCombinationActivity(@RequestParam("id") Long id) { public CommonResult<CombinationActivityRespVO> getCombinationActivity(@RequestParam("id") Long id) {
CombinationActivityDO activity = combinationActivityService.getCombinationActivity(id); CombinationActivityDO activity = combinationActivityService.getCombinationActivity(id);
List<CombinationProductDO> products = combinationActivityService.getCombinationProductsByActivityIds(newArrayList(id)); List<CombinationProductDO> products = combinationActivityService.getCombinationProductListByActivityIds(newArrayList(id));
return success(CombinationActivityConvert.INSTANCE.convert(activity, products)); return success(CombinationActivityConvert.INSTANCE.convert(activity, products));
} }
@ -98,7 +98,7 @@ public class CombinationActivityController {
Map<Long, Integer> recordCountMap = combinationRecordService.getCombinationRecordCountMapByActivity( Map<Long, Integer> recordCountMap = combinationRecordService.getCombinationRecordCountMapByActivity(
activityIds, null, null); activityIds, null, null);
// 拼接数据 // 拼接数据
List<CombinationProductDO> products = combinationActivityService.getCombinationProductsByActivityIds( List<CombinationProductDO> products = combinationActivityService.getCombinationProductListByActivityIds(
convertSet(pageResult.getList(), CombinationActivityDO::getId)); convertSet(pageResult.getList(), CombinationActivityDO::getId));
List<ProductSpuRespDTO> spus = productSpuApi.getSpuList( List<ProductSpuRespDTO> spus = productSpuApi.getSpuList(
convertSet(pageResult.getList(), CombinationActivityDO::getSpuId)); convertSet(pageResult.getList(), CombinationActivityDO::getSpuId));

View File

@ -78,7 +78,7 @@ public class CombinationRecordController {
private Map<String, Long> getCombinationRecordSummary0() { private Map<String, Long> getCombinationRecordSummary0() {
Map<String, Long> hashMap = MapUtil.newHashMap(3); Map<String, Long> hashMap = MapUtil.newHashMap(3);
hashMap.put("userCount", combinationRecordService.getCombinationRecordsCount());// 获取所有拼团记录 hashMap.put("userCount", combinationRecordService.getCombinationRecordCount());// 获取所有拼团记录
hashMap.put("successCount", combinationRecordService.getCombinationRecordsSuccessCount());// 获取成团记录 hashMap.put("successCount", combinationRecordService.getCombinationRecordsSuccessCount());// 获取成团记录
hashMap.put("virtualGroupCount", combinationRecordService.getRecordsVirtualGroupCount());// 获取虚拟成团记录 hashMap.put("virtualGroupCount", combinationRecordService.getRecordsVirtualGroupCount());// 获取虚拟成团记录
return hashMap; return hashMap;

View File

@ -30,7 +30,6 @@ import java.time.Duration;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@ -56,6 +55,7 @@ public class AppCombinationActivityController {
@Resource @Resource
private CombinationActivityService activityService; private CombinationActivityService activityService;
@Resource @Resource
private ProductSpuApi spuApi; private ProductSpuApi spuApi;
@ -68,40 +68,45 @@ public class AppCombinationActivityController {
} }
private List<AppCombinationActivityRespVO> getCombinationActivityList0(Integer count) { private List<AppCombinationActivityRespVO> getCombinationActivityList0(Integer count) {
List<CombinationActivityDO> list = activityService.getCombinationActivityListByCount(defaultIfNull(count, 6)); List<CombinationActivityDO> activityList = activityService.getCombinationActivityListByCount(count);
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(activityList)) {
return Collections.emptyList(); return Collections.emptyList();
} }
// 拼接返回 // 拼接返回
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(list, CombinationActivityDO::getSpuId)); List<CombinationProductDO> productList = activityService.getCombinationProductListByActivityIds(
return CombinationActivityConvert.INSTANCE.convertAppList(list, spuList); convertList(activityList, CombinationActivityDO::getId));
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, CombinationActivityDO::getSpuId));
return CombinationActivityConvert.INSTANCE.convertAppList(activityList, productList, spuList);
} }
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得拼团活动分页") @Operation(summary = "获得拼团活动分页")
public CommonResult<PageResult<AppCombinationActivityRespVO>> getCombinationActivityPage(PageParam pageParam) { public CommonResult<PageResult<AppCombinationActivityRespVO>> getCombinationActivityPage(PageParam pageParam) {
PageResult<CombinationActivityDO> result = activityService.getCombinationActivityPage(pageParam); PageResult<CombinationActivityDO> pageResult = activityService.getCombinationActivityPage(pageParam);
if (CollUtil.isEmpty(result.getList())) { if (CollUtil.isEmpty(pageResult.getList())) {
return success(PageResult.empty(result.getTotal())); return success(PageResult.empty(pageResult.getTotal()));
} }
// 拼接返回 // 拼接返回
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(result.getList(), CombinationActivityDO::getSpuId)); List<CombinationProductDO> productList = activityService.getCombinationProductListByActivityIds(
return success(CombinationActivityConvert.INSTANCE.convertAppPage(result, spuList)); convertList(pageResult.getList(), CombinationActivityDO::getId));
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(pageResult.getList(), CombinationActivityDO::getSpuId));
return success(CombinationActivityConvert.INSTANCE.convertAppPage(pageResult, productList, spuList));
} }
@GetMapping("/get-detail") @GetMapping("/get-detail")
@Operation(summary = "获得拼团活动明细") @Operation(summary = "获得拼团活动明细")
@Parameter(name = "id", description = "活动编号", required = true, example = "1024") @Parameter(name = "id", description = "活动编号", required = true, example = "1024")
public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) { public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) {
// 1获取活动 // 1. 获取活动
CombinationActivityDO combinationActivity = activityService.getCombinationActivity(id); CombinationActivityDO activity = activityService.getCombinationActivity(id);
if (combinationActivity == null if (activity == null
|| ObjectUtil.equal(combinationActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { || ObjectUtil.equal(activity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
return success(null); return success(null);
} }
// 2获取活动商品
List<CombinationProductDO> products = activityService.getCombinationProductsByActivityId(combinationActivity.getId()); // 2. 获取活动商品
return success(CombinationActivityConvert.INSTANCE.convert3(combinationActivity, products)); List<CombinationProductDO> products = activityService.getCombinationProductsByActivityId(activity.getId());
return success(CombinationActivityConvert.INSTANCE.convert3(activity, products));
} }
} }

View File

@ -39,21 +39,21 @@ public class AppCombinationRecordController {
@GetMapping("/get-summary") @GetMapping("/get-summary")
@Operation(summary = "获得拼团记录的概要信息", description = "用于小程序首页") @Operation(summary = "获得拼团记录的概要信息", description = "用于小程序首页")
// TODO 芋艿增加 @Cache 缓存1 分钟过期
public CommonResult<AppCombinationRecordSummaryRespVO> getCombinationRecordSummary() { public CommonResult<AppCombinationRecordSummaryRespVO> getCombinationRecordSummary() {
// 获取所有拼团记录
Long count = combinationRecordService.getCombinationRecordsCount();
AppCombinationRecordSummaryRespVO summary = new AppCombinationRecordSummaryRespVO(); AppCombinationRecordSummaryRespVO summary = new AppCombinationRecordSummaryRespVO();
if (count == null || count == 0L) { // 1. 获得拼团记录数量
Long count = combinationRecordService.getCombinationRecordCount();
if (count == 0) {
summary.setAvatars(Collections.emptyList()); summary.setAvatars(Collections.emptyList());
summary.setUserCount(count); summary.setUserCount(count);
return success(summary); return success(summary);
} }
summary.setUserCount(count); summary.setUserCount(count);
// TODO 只返回最近的 7
int num = 7; // 2. 获得拼团记录头像
summary.setAvatars(convertList(combinationRecordService.getLatestCombinationRecordList(num), CombinationRecordDO::getAvatar)); List<CombinationRecordDO> records = combinationRecordService.getLatestCombinationRecordList(
AppCombinationRecordSummaryRespVO.AVATAR_COUNT);
summary.setAvatars(convertList(records, CombinationRecordDO::getAvatar));
return success(summary); return success(summary);
} }

View File

@ -9,6 +9,11 @@ import java.util.List;
@Data @Data
public class AppCombinationRecordSummaryRespVO { public class AppCombinationRecordSummaryRespVO {
/**
* 加载 {@link #avatars} 的数量
*/
public static final Integer AVATAR_COUNT = 7;
@Schema(description = "拼团用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "拼团用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long userCount; private Long userCount;

View File

@ -86,7 +86,8 @@ public class AppSeckillActivityController {
// 2.1 查询满足当前阶段的活动 // 2.1 查询满足当前阶段的活动
List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIdAndStatus(config.getId(), CommonStatusEnum.ENABLE.getStatus()); List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIdAndStatus(config.getId(), CommonStatusEnum.ENABLE.getStatus());
List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityId(convertList(activityList, SeckillActivityDO::getId)); List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityId(
convertList(activityList, SeckillActivityDO::getId));
// 2.2 获取 spu 信息 // 2.2 获取 spu 信息
List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)); List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId));
return SeckillActivityConvert.INSTANCE.convert(config, activityList, productList, spuList); return SeckillActivityConvert.INSTANCE.convert(config, activityList, productList, spuList);

View File

@ -28,7 +28,7 @@ import org.mapstruct.factory.Mappers;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
/** /**
@ -120,10 +120,16 @@ public interface CombinationActivityConvert {
List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list); List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list);
default List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list, List<ProductSpuRespDTO> spuList) { default List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list,
List<CombinationProductDO> productList,
List<ProductSpuRespDTO> spuList) {
List<AppCombinationActivityRespVO> activityList = convertAppList(list); List<AppCombinationActivityRespVO> activityList = convertAppList(list);
Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
Map<Long, List<CombinationProductDO>> productMap = convertMultiMap(productList, CombinationProductDO::getActivityId);
return CollectionUtils.convertList(activityList, item -> { return CollectionUtils.convertList(activityList, item -> {
// 设置 product 信息
item.setCombinationPrice(getMinValue(productMap.get(item.getId()), CombinationProductDO::getCombinationPrice));
// 设置 SPU 信息
findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice())); findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
return item; return item;
}); });
@ -131,13 +137,17 @@ public interface CombinationActivityConvert {
PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result); PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result);
default PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result, List<ProductSpuRespDTO> spuList) { default PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result,
List<CombinationProductDO> productList,
List<ProductSpuRespDTO> spuList) {
PageResult<AppCombinationActivityRespVO> appPage = convertAppPage(result); PageResult<AppCombinationActivityRespVO> appPage = convertAppPage(result);
Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
Map<Long, List<CombinationProductDO>> productMap = convertMultiMap(productList, CombinationProductDO::getActivityId);
List<AppCombinationActivityRespVO> list = CollectionUtils.convertList(appPage.getList(), item -> { List<AppCombinationActivityRespVO> list = CollectionUtils.convertList(appPage.getList(), item -> {
findAndThen(spuMap, item.getSpuId(), spu -> { // 设置 product 信息
item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()); item.setCombinationPrice(getMinValue(productMap.get(item.getId()), CombinationProductDO::getCombinationPrice));
}); // 设置 SPU 信息
findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
return item; return item;
}); });
appPage.setList(list); appPage.setList(list);

View File

@ -77,7 +77,7 @@ public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO
*/ */
default List<CombinationRecordDO> selectLatestList(int count) { default List<CombinationRecordDO> selectLatestList(int count) {
return selectList(new LambdaQueryWrapperX<CombinationRecordDO>() return selectList(new LambdaQueryWrapperX<CombinationRecordDO>()
.orderByDesc(CombinationRecordDO::getCreateTime) .orderByDesc(CombinationRecordDO::getId)
.last("LIMIT " + count)); .last("LIMIT " + count));
} }

View File

@ -73,7 +73,7 @@ public interface CombinationActivityService {
* @return 拼团活动的商品列表 * @return 拼团活动的商品列表
*/ */
default List<CombinationProductDO> getCombinationProductsByActivityId(Long activityId) { default List<CombinationProductDO> getCombinationProductsByActivityId(Long activityId) {
return getCombinationProductsByActivityIds(Collections.singletonList(activityId)); return getCombinationProductListByActivityIds(Collections.singletonList(activityId));
} }
/** /**
@ -82,7 +82,7 @@ public interface CombinationActivityService {
* @param activityIds 拼团活动 ids * @param activityIds 拼团活动 ids
* @return 拼团活动的商品列表 * @return 拼团活动的商品列表
*/ */
List<CombinationProductDO> getCombinationProductsByActivityIds(Collection<Long> activityIds); List<CombinationProductDO> getCombinationProductListByActivityIds(Collection<Long> activityIds);
/** /**
* 获取正在进行的活动分页数据 * 获取正在进行的活动分页数据

View File

@ -200,7 +200,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
} }
@Override @Override
public List<CombinationProductDO> getCombinationProductsByActivityIds(Collection<Long> activityIds) { public List<CombinationProductDO> getCombinationProductListByActivityIds(Collection<Long> activityIds) {
return combinationProductMapper.selectListByActivityIds(activityIds); return combinationProductMapper.selectListByActivityIds(activityIds);
} }

View File

@ -96,7 +96,7 @@ public interface CombinationRecordService {
* *
* @return 记录数 * @return 记录数
*/ */
Long getCombinationRecordsCount(); Long getCombinationRecordCount();
/** /**
* 获取成功记录数 * 获取成功记录数

View File

@ -227,7 +227,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
} }
@Override @Override
public Long getCombinationRecordsCount() { public Long getCombinationRecordCount() {
return recordMapper.selectCount(); return recordMapper.selectCount();
} }