code review:拼团、秒杀活动的代码

This commit is contained in:
YunaiV
2023-08-05 20:51:48 +08:00
parent 7a7ae3b8ec
commit 5e2fa48f20
24 changed files with 149 additions and 108 deletions

View File

@@ -20,23 +20,23 @@ public class CombinationRecordApiImpl implements CombinationRecordApi {
private CombinationRecordService recordService;
@Override
public void createRecord(CombinationRecordCreateReqDTO reqDTO) {
recordService.createRecord(reqDTO);
public void createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) {
recordService.createCombinationRecord(reqDTO);
}
@Override
public boolean validateRecordStatusIsSuccess(Long userId, Long orderId) {
return CombinationRecordStatusEnum.isSuccess(recordService.getRecord(userId, orderId).getStatus());
public boolean isCombinationRecordSuccess(Long userId, Long orderId) {
return CombinationRecordStatusEnum.isSuccess(recordService.getCombinationRecord(userId, orderId).getStatus());
}
@Override
public void updateRecordStatus(Long userId, Long orderId, Integer status) {
recordService.updateRecordStatusByUserIdAndOrderId(userId, orderId, status);
public void updateCombinationRecordStatus(Long userId, Long orderId, Integer status) {
recordService.updateCombinationRecordStatusByUserIdAndOrderId(userId, orderId, status);
}
@Override
public void updateRecordStatusAndStartTime(Long userId, Long orderId, Integer status) {
recordService.updateRecordStatusAndStartTimeByUserIdAndOrderId(userId, orderId, status, LocalDateTime.now());
public void updateCombinationRecordStatusAndStartTime(Long userId, Long orderId, Integer status) {
recordService.updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(userId, orderId, status, LocalDateTime.now());
}
}

View File

@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.promotion.controller.admin.combination;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
@@ -23,9 +22,11 @@ import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import static cn.hutool.core.collection.CollectionUtil.newArrayList;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@Tag(name = "管理后台 - 拼团活动")
@RestController
@@ -35,6 +36,7 @@ public class CombinationActivityController {
@Resource
private CombinationActivityService combinationActivityService;
@Resource
private ProductSpuApi spuApi;
@@ -68,17 +70,18 @@ public class CombinationActivityController {
@PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')")
public CommonResult<CombinationActivityRespVO> getCombinationActivity(@RequestParam("id") Long id) {
CombinationActivityDO activity = combinationActivityService.getCombinationActivity(id);
List<CombinationProductDO> products = combinationActivityService.getProductsByActivityIds(newArrayList(id));
List<CombinationProductDO> products = combinationActivityService.getCombinationProductsByActivityIds(newArrayList(id));
return success(CombinationActivityConvert.INSTANCE.convert(activity, products));
}
// TODO @puhui999是不是可以删掉貌似没用
@GetMapping("/list")
@Operation(summary = "获得拼团活动列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')")
public CommonResult<List<CombinationActivityRespVO>> getCombinationActivityList(@RequestParam("ids") Collection<Long> ids) {
List<CombinationActivityDO> list = combinationActivityService.getCombinationActivityList(ids);
return success(CombinationActivityConvert.INSTANCE.complementList(list));
return success(CombinationActivityConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@@ -86,10 +89,14 @@ public class CombinationActivityController {
@PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')")
public CommonResult<PageResult<CombinationActivityRespVO>> getCombinationActivityPage(
@Valid CombinationActivityPageReqVO pageVO) {
// 查询拼团活动
PageResult<CombinationActivityDO> pageResult = combinationActivityService.getCombinationActivityPage(pageVO);
// 拼接数据
Set<Long> activityIds = convertSet(pageResult.getList(), CombinationActivityDO::getId);
Set<Long> spuIds = convertSet(pageResult.getList(), CombinationActivityDO::getSpuId);
return success(CombinationActivityConvert.INSTANCE.convertPage(pageResult,
combinationActivityService.getProductsByActivityIds(CollectionUtils.convertSet(pageResult.getList(), CombinationActivityDO::getId)),
spuApi.getSpuList(CollectionUtils.convertSet(pageResult.getList(), CombinationActivityDO::getSpuId))));
combinationActivityService.getCombinationProductsByActivityIds(activityIds),
spuApi.getSpuList(spuIds)));
}
}

View File

@@ -79,6 +79,7 @@ public class SeckillActivityController {
return success(SeckillActivityConvert.INSTANCE.convert(seckillActivity, seckillProducts));
}
// TODO @puhui999是不是可以删掉貌似没用
@GetMapping("/list")
@Operation(summary = "获得秒杀活动列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")

View File

@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.promotion.convert.combination;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
@@ -70,7 +71,7 @@ public interface CombinationActivityConvert {
return respVO;
}
List<CombinationActivityRespVO> complementList(List<CombinationActivityDO> list);
List<CombinationActivityRespVO> convertList(List<CombinationActivityDO> list);
PageResult<CombinationActivityRespVO> convertPage(PageResult<CombinationActivityDO> page);
@@ -80,8 +81,10 @@ public interface CombinationActivityConvert {
Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
PageResult<CombinationActivityRespVO> pageResult = convertPage(page);
pageResult.getList().forEach(item -> {
MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> item.setSpuName(spu.getName()));
MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()));
MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> {
item.setSpuName(spu.getName());
item.setPicUrl(spu.getPicUrl());
});
item.setProducts(convertList2(productList));
});
return pageResult;
@@ -100,7 +103,7 @@ public interface CombinationActivityConvert {
})
CombinationProductDO convert(CombinationActivityDO activityDO, CombinationProductBaseVO vo);
default List<CombinationProductDO> complementList(List<? extends CombinationProductBaseVO> products, CombinationActivityDO activityDO) {
default List<CombinationProductDO> convertList(List<? extends CombinationProductBaseVO> products, CombinationActivityDO activityDO) {
List<CombinationProductDO> list = new ArrayList<>();
products.forEach(sku -> {
CombinationProductDO productDO = convert(activityDO, sku);
@@ -110,16 +113,12 @@ public interface CombinationActivityConvert {
return list;
}
default List<CombinationProductDO> complementList(List<CombinationProductDO> productDOs, List<CombinationProductUpdateReqVO> vos, CombinationActivityDO activityDO) {
Map<Long, Long> longMap = convertMap(productDOs, CombinationProductDO::getSkuId, CombinationProductDO::getId);
List<CombinationProductDO> list = new ArrayList<>();
vos.forEach(sku -> {
CombinationProductDO productDO = convert(activityDO, sku);
productDO.setId(longMap.get(sku.getSkuId()));
productDO.setActivityStatus(activityDO.getStatus());
list.add(productDO);
});
return list;
default List<CombinationProductDO> convertList(List<CombinationProductUpdateReqVO> updateProductVOs,
List<CombinationProductDO> products, CombinationActivityDO activity) {
Map<Long, Long> productMap = convertMap(products, CombinationProductDO::getSkuId, CombinationProductDO::getId);
return CollectionUtils.convertList(updateProductVOs, updateProductVO -> convert(activity, updateProductVO)
.setId(productMap.get(updateProductVO.getSkuId()))
.setActivityStatus(activity.getStatus()));
}
CombinationRecordDO convert(CombinationRecordCreateReqDTO reqDTO);

View File

@@ -21,6 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
/**
* 秒杀活动 Convert
*
@@ -37,6 +39,7 @@ public interface SeckillActivityConvert {
SeckillActivityRespVO convert(SeckillActivityDO bean);
// TODO @puhui999这个是不是还是 convertList 好点?
List<SeckillActivityRespVO> complementList(List<SeckillActivityDO> list);
PageResult<SeckillActivityRespVO> convertPage(PageResult<SeckillActivityDO> page);
@@ -73,7 +76,7 @@ public interface SeckillActivityConvert {
})
SeckillProductDO convert(SeckillActivityDO activityDO, SeckillProductBaseVO vo);
default List<SeckillProductDO> complementList(List<? extends SeckillProductBaseVO> products, SeckillActivityDO activityDO) {
default List<SeckillProductDO> convertList(List<? extends SeckillProductBaseVO> products, SeckillActivityDO activityDO) {
List<SeckillProductDO> list = new ArrayList<>();
products.forEach(sku -> {
SeckillProductDO productDO = convert(activityDO, sku);
@@ -83,16 +86,12 @@ public interface SeckillActivityConvert {
return list;
}
default List<SeckillProductDO> complementList(List<SeckillProductDO> productDOs, List<SeckillProductUpdateReqVO> vos, SeckillActivityDO activityDO) {
Map<Long, Long> longMap = CollectionUtils.convertMap(productDOs, SeckillProductDO::getSkuId, SeckillProductDO::getId);
List<SeckillProductDO> list = new ArrayList<>();
vos.forEach(sku -> {
SeckillProductDO productDO = convert(activityDO, sku);
productDO.setId(longMap.get(sku.getSkuId()));
productDO.setActivityStatus(activityDO.getStatus());
list.add(productDO);
});
return list;
default List<SeckillProductDO> convertList(List<SeckillProductUpdateReqVO> updateProductVOs,
List<SeckillProductDO> products, SeckillActivityDO activity) {
Map<Long, Long> productMap = convertMap(products, SeckillProductDO::getSkuId, SeckillProductDO::getId);
return CollectionUtils.convertList(updateProductVOs, updateProductVO -> convert(activity, updateProductVO)
.setId(productMap.get(updateProductVO.getSkuId()))
.setActivityStatus(activity.getStatus()));
}
List<SeckillProductRespVO> convertList2(List<SeckillProductDO> productDOs);

View File

@@ -12,6 +12,9 @@ import java.time.LocalDateTime;
/**
* 拼团记录 DO
*
* 1. 用户参与拼团时,会创建一条记录
* 2. 团长的拼团记录,和参团人的拼团记录,通过 {@link #headId} 关联
*
* @author HUIHUI
*/
@TableName("promotion_combination_record")

View File

@@ -15,6 +15,7 @@ import java.util.List;
@Mapper
public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO> {
// TODO @puhui999selectByUserIdAndOrderId
default CombinationRecordDO selectRecord(Long userId, Long orderId) {
return selectOne(CombinationRecordDO::getUserId, userId,
CombinationRecordDO::getOrderId, orderId);
@@ -28,7 +29,8 @@ public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO
* @return 拼团记录
*/
default CombinationRecordDO selectRecordByHeadId(Long headId, Long activityId, Integer status) {
return selectOne(CombinationRecordDO::getUserId, headId, CombinationRecordDO::getActivityId, activityId,
return selectOne(CombinationRecordDO::getHeadId, headId,
CombinationRecordDO::getActivityId, activityId,
CombinationRecordDO::getStatus, status);
}

View File

@@ -70,6 +70,6 @@ public interface CombinationActivityService {
* @param ids 拼团活动 ids
* @return 拼团活动的商品列表
*/
List<CombinationProductDO> getProductsByActivityIds(Collection<Long> ids);
List<CombinationProductDO> getCombinationProductsByActivityIds(Collection<Long> ids);
}

View File

@@ -19,14 +19,14 @@ public interface CombinationRecordService {
* @param orderId 订单编号
* @param status 状态
*/
void updateRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status);
void updateCombinationRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status);
/**
* 创建拼团记录
*
* @param reqDTO 创建信息
*/
void createRecord(CombinationRecordCreateReqDTO reqDTO);
void createCombinationRecord(CombinationRecordCreateReqDTO reqDTO);
/**
* 更新拼团状态和开始时间
@@ -36,7 +36,8 @@ public interface CombinationRecordService {
* @param status 状态
* @param startTime 开始时间
*/
void updateRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId, Integer status, LocalDateTime startTime);
void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId,
Integer status, LocalDateTime startTime);
/**
* 获得拼团状态
@@ -45,6 +46,6 @@ public interface CombinationRecordService {
* @param orderId 订单编号
* @return 拼团状态
*/
CombinationRecordDO getRecord(Long userId, Long orderId);
CombinationRecordDO getCombinationRecord(Long userId, Long orderId);
}

View File

@@ -37,7 +37,7 @@ import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuExistence;
import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuAllExists;
/**
* 拼团活动 Service 实现类
@@ -66,7 +66,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
// 获取所选 spu下的所有 sku
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(createReqVO.getSpuId()));
// 校验商品 sku 是否存在
validateProductSkuExistence(createReqVO.getProducts(), skus, CombinationProductCreateReqVO::getSkuId);
validateProductSkuAllExists(createReqVO.getProducts(), skus, CombinationProductCreateReqVO::getSkuId);
// TODO 艿艿 有个小问题:现在有活动时间和限制时长,活动时间的结束时间早于设置的限制时间怎么算状态比如:
// 活动时间 2023-08-05 15:00:00 - 2023-08-05 15:20:00 限制时长 2小时那么活动时间结束就结束还是加时到满两小时
@@ -80,7 +80,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
activityDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
combinationActivityMapper.insert(activityDO);
// 插入商品
List<CombinationProductDO> productDOs = CombinationActivityConvert.INSTANCE.complementList(createReqVO.getProducts(), activityDO);
List<CombinationProductDO> productDOs = CombinationActivityConvert.INSTANCE.convertList(createReqVO.getProducts(), activityDO);
combinationProductMapper.insertBatch(productDOs);
// 返回
return activityDO.getId();
@@ -118,7 +118,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
// 获取所选 spu下的所有 sku
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(updateReqVO.getSpuId()));
// 校验商品 sku 是否存在
validateProductSkuExistence(updateReqVO.getProducts(), skus, CombinationProductUpdateReqVO::getSkuId);
validateProductSkuAllExists(updateReqVO.getProducts(), skus, CombinationProductUpdateReqVO::getSkuId);
// 更新
CombinationActivityDO updateObj = CombinationActivityConvert.INSTANCE.convert(updateReqVO);
@@ -140,18 +140,21 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
// 前端传过来的活动商品
Set<Long> convertSet1 = CollectionUtils.convertSet(products, CombinationProductUpdateReqVO::getSkuId);
// 分化数据
// TODO @芋艿:看下这个实现
Map<String, List<CombinationProductDO>> data = CollectionUtils.convertCDUMap(convertSet1, convertSet, mapData -> {
HashMap<String, List<CombinationProductDO>> cdu = MapUtil.newHashMap(3);
MapUtils.findAndThen(mapData, "create", list -> {
cdu.put("create", CombinationActivityConvert.INSTANCE.complementList(CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
cdu.put("create", CombinationActivityConvert.INSTANCE.convertList(CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
});
MapUtils.findAndThen(mapData, "delete", list -> {
cdu.put("create", CollectionUtils.filterList(combinationProductDOs, item -> list.contains(item.getSkuId())));
});
MapUtils.findAndThen(mapData, "update", list -> {
cdu.put("update", CombinationActivityConvert.INSTANCE.complementList(combinationProductDOs,
CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
});
// TODO @芋艿:临时注释,避免有问题
// MapUtils.findAndThen(mapData, "update", list -> {
// cdu.put("update", CombinationActivityConvert.INSTANCE.convertList(
// combinationProductDOs,
// CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
// });
return cdu;
});
@@ -199,12 +202,12 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
}
@Override
public List<CombinationProductDO> getProductsByActivityIds(Collection<Long> ids) {
public List<CombinationProductDO> getCombinationProductsByActivityIds(Collection<Long> ids) {
return combinationProductMapper.selectListByActivityIds(ids);
}
@Override
public void updateRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status) {
public void updateCombinationRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status) {
// 校验拼团是否存在
CombinationRecordDO recordDO = validateCombinationRecord(userId, orderId);
@@ -215,7 +218,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId, Integer status, LocalDateTime startTime) {
public void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId, Integer status, LocalDateTime startTime) {
CombinationRecordDO recordDO = validateCombinationRecord(userId, orderId);
// 更新状态
recordDO.setStatus(status);
@@ -247,15 +250,15 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
}
@Override
public void createRecord(CombinationRecordCreateReqDTO reqDTO) {
// 校验拼团活动
public void createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) {
// 1.1 校验拼团活动
CombinationActivityDO activity = validateCombinationActivityExists(reqDTO.getActivityId());
// 需要校验下,当前是不是已经参加了该拼团;
// 1.2 需要校验下,当前是不是已经参加了该拼团;
CombinationRecordDO recordDO = recordMapper.selectRecord(reqDTO.getUserId(), reqDTO.getOrderId());
if (recordDO != null) {
throw exception(COMBINATION_RECORD_EXISTS);
}
// 父拼团是否存在,是否已经满了
// 1.3 父拼团是否存在,是否已经满了
if (reqDTO.getHeadId() != null) {
CombinationRecordDO recordDO1 = recordMapper.selectRecordByHeadId(reqDTO.getHeadId(), reqDTO.getActivityId(), CombinationRecordStatusEnum.IN_PROGRESS.getStatus());
if (recordDO1 == null) {
@@ -266,9 +269,12 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
throw exception(COMBINATION_RECORD_USER_FULL);
}
}
// TODO @puhui999应该还有一些校验后续补噶例如说一个团自己已经参与进去了不能再参与进去
// 2. 创建拼团记录
CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO);
if (reqDTO.getHeadId() == null) {
// TODO @puhui999不是自己呀headId 是父团长的 CombinationRecordDO.id 哈
record.setHeadId(reqDTO.getUserId());
}
record.setVirtualGroup(false);
@@ -279,7 +285,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
}
@Override
public CombinationRecordDO getRecord(Long userId, Long orderId) {
public CombinationRecordDO getCombinationRecord(Long userId, Long orderId) {
return validateCombinationRecord(userId, orderId);
}

View File

@@ -34,7 +34,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuExistence;
import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuAllExists;
/**
* 秒杀活动 Service 实现类
@@ -74,7 +74,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
.setTotalStock(CollectionUtils.getSumValue(createReqVO.getProducts(), SeckillProductCreateReqVO::getStock, Integer::sum));
seckillActivityMapper.insert(activity);
// 插入商品
List<SeckillProductDO> products = SeckillActivityConvert.INSTANCE.complementList(createReqVO.getProducts(), activity);
List<SeckillProductDO> products = SeckillActivityConvert.INSTANCE.convertList(createReqVO.getProducts(), activity);
seckillProductMapper.insertBatch(products);
return activity.getId();
}
@@ -121,7 +121,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
// 获取所选 spu下的所有 sku
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollUtil.newArrayList(updateReqVO.getSpuId()));
// 校验商品 sku 是否存在
validateProductSkuExistence(updateReqVO.getProducts(), skus, SeckillProductUpdateReqVO::getSkuId);
validateProductSkuAllExists(updateReqVO.getProducts(), skus, SeckillProductUpdateReqVO::getSkuId);
// 更新活动
SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO)
@@ -150,16 +150,17 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
Map<String, List<SeckillProductDO>> data = CollectionUtils.convertCDUMap(voSkuIds, dbSkuIds, mapData -> {
HashMap<String, List<SeckillProductDO>> cdu = MapUtil.newHashMap(3);
MapUtils.findAndThen(mapData, "create", list -> {
cdu.put("create", SeckillActivityConvert.INSTANCE.complementList(
cdu.put("create", SeckillActivityConvert.INSTANCE.convertList(
CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
});
MapUtils.findAndThen(mapData, "delete", list -> {
cdu.put("create", CollectionUtils.filterList(seckillProductDOs, item -> list.contains(item.getSkuId())));
});
MapUtils.findAndThen(mapData, "update", list -> {
cdu.put("update", SeckillActivityConvert.INSTANCE.complementList(seckillProductDOs,
CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
});
// TODO @芋艿:临时注释
// MapUtils.findAndThen(mapData, "update", list -> {
// cdu.put("update", SeckillActivityConvert.INSTANCE.convertList(seckillProductDOs,
// CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), updateObj));
// });
return cdu;
});

View File

@@ -31,18 +31,20 @@ public class PromotionUtils {
return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus();
}
// TODO @puhui999是不是第一个参数是 sku然后是 products这样关联性好点
/**
* 校验商品 sku 是否存在
* 校验商品 sku 是否存在
*
* @param products 需要校验的商品
* @param skus 数据库中的商品 skus
* @param func 获取需要校验的商品的 skuId
*/
public static <T> void validateProductSkuExistence(List<T> products, List<ProductSkuRespDTO> skus, Function<T, Long> func) {
public static <T> void validateProductSkuAllExists(List<T> products, List<ProductSkuRespDTO> skus, Function<T, Long> func) {
// 校验 sku 个数是否一致
Set<Long> skuIdsSet = CollectionUtils.convertSet(products, func);
Set<Long> skuIdsSet1 = CollectionUtils.convertSet(skus, ProductSkuRespDTO::getId);
// 校验 skuId 是否存在
// TODO @puhui999findFirst
List<Long> f = CollectionUtils.filterList(skuIdsSet, s -> !skuIdsSet1.contains(s));
if (CollUtil.isNotEmpty(f)) {
throw exception(SKU_NOT_EXISTS);