mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-12 17:21:52 +08:00
code review:拼团、秒杀活动的代码
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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)));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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")
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -12,6 +12,9 @@ import java.time.LocalDateTime;
|
||||
/**
|
||||
* 拼团记录 DO
|
||||
*
|
||||
* 1. 用户参与拼团时,会创建一条记录
|
||||
* 2. 团长的拼团记录,和参团人的拼团记录,通过 {@link #headId} 关联
|
||||
*
|
||||
* @author HUIHUI
|
||||
*/
|
||||
@TableName("promotion_combination_record")
|
||||
|
@@ -15,6 +15,7 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO> {
|
||||
|
||||
// TODO @puhui999:selectByUserIdAndOrderId
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -70,6 +70,6 @@ public interface CombinationActivityService {
|
||||
* @param ids 拼团活动 ids
|
||||
* @return 拼团活动的商品列表
|
||||
*/
|
||||
List<CombinationProductDO> getProductsByActivityIds(Collection<Long> ids);
|
||||
List<CombinationProductDO> getCombinationProductsByActivityIds(Collection<Long> ids);
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
});
|
||||
|
||||
|
@@ -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 @puhui999:findFirst
|
||||
List<Long> f = CollectionUtils.filterList(skuIdsSet, s -> !skuIdsSet1.contains(s));
|
||||
if (CollUtil.isNotEmpty(f)) {
|
||||
throw exception(SKU_NOT_EXISTS);
|
||||
|
Reference in New Issue
Block a user