|
@@ -10,29 +10,25 @@ import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
|
|
|
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
|
|
|
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
|
|
|
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
|
|
|
-import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityCreateReqVO;
|
|
|
-import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO;
|
|
|
-import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityUpdateReqVO;
|
|
|
-import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.product.BargainProductBaseVO;
|
|
|
+import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityBaseVO;
|
|
|
+import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityUpdateReqVO;
|
|
|
import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert;
|
|
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
|
|
|
-import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainProductDO;
|
|
|
import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper;
|
|
|
-import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainProductMapper;
|
|
|
+import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainRecordMapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch;
|
|
|
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue;
|
|
|
+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.validateProductSkuAllExists;
|
|
|
|
|
|
/**
|
|
|
* 砍价活动 Service 实现类
|
|
@@ -43,42 +39,43 @@ import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProd
|
|
|
@Validated
|
|
|
public class BargainActivityServiceImpl implements BargainActivityService {
|
|
|
|
|
|
+
|
|
|
@Resource
|
|
|
private BargainActivityMapper bargainActivityMapper;
|
|
|
@Resource
|
|
|
- private BargainProductMapper bargainProductMapper;
|
|
|
-
|
|
|
+ private BargainRecordMapper recordMapper;
|
|
|
@Resource
|
|
|
private ProductSpuApi productSpuApi;
|
|
|
@Resource
|
|
|
private ProductSkuApi productSkuApi;
|
|
|
|
|
|
+ private static void validateSku(Long skuId, List<ProductSkuRespDTO> skus) {
|
|
|
+ // 校验商品 sku 是否存在
|
|
|
+ if (!CollectionUtils.convertSet(skus, ProductSkuRespDTO::getId).contains(skuId)) {
|
|
|
+ throw exception(SKU_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public Long createBargainActivity(BargainActivityCreateReqVO createReqVO) {
|
|
|
+ public Long createBargainActivity(BargainActivityBaseVO createReqVO) {
|
|
|
// 校验商品 SPU 是否存在是否参加的别的活动
|
|
|
- validateProductBargainConflict(createReqVO.getSpuId(), null);
|
|
|
+ validateBargainConflict(createReqVO.getSpuId(), null);
|
|
|
// 获取所选 spu下的所有 sku
|
|
|
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(createReqVO.getSpuId()));
|
|
|
- // 校验商品 sku 是否存在
|
|
|
- validateProductSkuAllExists(skus, createReqVO.getProducts(), BargainProductBaseVO::getSkuId);
|
|
|
+ validateSku(createReqVO.getSkuId(), skus);
|
|
|
|
|
|
// 插入砍价活动
|
|
|
- BargainActivityDO activity = BargainActivityConvert.INSTANCE.convert(createReqVO);
|
|
|
+ BargainActivityDO activityDO = BargainActivityConvert.INSTANCE.convert(createReqVO);
|
|
|
// TODO 营销相关属性初始化 砍价成功更新相关属性
|
|
|
- activity.setSuccessCount(0);
|
|
|
- // 活动总库存
|
|
|
- activity.setStock(getSumValue(createReqVO.getProducts(), BargainProductBaseVO::getStock, Integer::sum));
|
|
|
- activity.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
- bargainActivityMapper.insert(activity);
|
|
|
- // 插入商品
|
|
|
- List<BargainProductDO> productDOs = BargainActivityConvert.INSTANCE.convertList(createReqVO.getProducts(), activity);
|
|
|
- bargainProductMapper.insertBatch(productDOs);
|
|
|
+ activityDO.setSuccessCount(0);
|
|
|
+ activityDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
+ bargainActivityMapper.insert(activityDO);
|
|
|
// 返回
|
|
|
- return activity.getId();
|
|
|
+ return activityDO.getId();
|
|
|
}
|
|
|
|
|
|
- private void validateProductBargainConflict(Long spuId, Long activityId) {
|
|
|
+ private void validateBargainConflict(Long spuId, Long activityId) {
|
|
|
// 校验商品 spu 是否存在
|
|
|
List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(CollUtil.newArrayList(spuId));
|
|
|
if (CollUtil.isEmpty(spuList)) {
|
|
@@ -106,52 +103,16 @@ public class BargainActivityServiceImpl implements BargainActivityService {
|
|
|
throw exception(BARGAIN_ACTIVITY_STATUS_DISABLE);
|
|
|
}
|
|
|
// 校验商品冲突
|
|
|
- validateProductBargainConflict(updateReqVO.getSpuId(), updateReqVO.getId());
|
|
|
+ validateBargainConflict(updateReqVO.getSpuId(), updateReqVO.getId());
|
|
|
// 获取所选 spu下的所有 sku
|
|
|
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(updateReqVO.getSpuId()));
|
|
|
// 校验商品 sku 是否存在
|
|
|
- validateProductSkuAllExists(skus, updateReqVO.getProducts(), BargainProductBaseVO::getSkuId);
|
|
|
+ validateSku(updateReqVO.getSkuId(), skus);
|
|
|
|
|
|
// 更新
|
|
|
BargainActivityDO updateObj = BargainActivityConvert.INSTANCE.convert(updateReqVO);
|
|
|
- // 更新活动库存
|
|
|
- updateObj.setStock(getSumValue(updateReqVO.getProducts(), BargainProductBaseVO::getStock, Integer::sum));
|
|
|
bargainActivityMapper.updateById(updateObj);
|
|
|
- // 更新商品
|
|
|
- updateBargainProduct(updateObj, updateReqVO.getProducts());
|
|
|
- }
|
|
|
|
|
|
- /**
|
|
|
- * 更新砍价商品
|
|
|
- *
|
|
|
- * @param updateObj 更新的活动
|
|
|
- * @param products 商品配置
|
|
|
- */
|
|
|
- private void updateBargainProduct(BargainActivityDO updateObj, List<BargainProductBaseVO> products) {
|
|
|
- // 默认全部新增
|
|
|
- List<BargainProductDO> defaultNewList = BargainActivityConvert.INSTANCE.convertList(products, updateObj);
|
|
|
- // 数据库中的老数据
|
|
|
- List<BargainProductDO> oldList = bargainProductMapper.selectListByActivityIds(CollUtil.newArrayList(updateObj.getId()));
|
|
|
- List<List<BargainProductDO>> lists = CollectionUtils.diffList(oldList, defaultNewList, (oldVal, newVal) -> {
|
|
|
- boolean same = ObjectUtil.equal(oldVal.getSkuId(), newVal.getSkuId());
|
|
|
- if (same) {
|
|
|
- newVal.setId(oldVal.getId());
|
|
|
- }
|
|
|
- return same;
|
|
|
- });
|
|
|
-
|
|
|
- // create
|
|
|
- if (CollUtil.isNotEmpty(lists.get(0))) {
|
|
|
- bargainProductMapper.insertBatch(lists.get(0));
|
|
|
- }
|
|
|
- // update
|
|
|
- if (CollUtil.isNotEmpty(lists.get(1))) {
|
|
|
- bargainProductMapper.updateBatch(lists.get(1));
|
|
|
- }
|
|
|
- // delete
|
|
|
- if (CollUtil.isNotEmpty(lists.get(2))) {
|
|
|
- bargainProductMapper.deleteBatchIds(CollectionUtils.convertList(lists.get(2), BargainProductDO::getId));
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -178,7 +139,7 @@ public class BargainActivityServiceImpl implements BargainActivityService {
|
|
|
|
|
|
@Override
|
|
|
public BargainActivityDO getBargainActivity(Long id) {
|
|
|
- return bargainActivityMapper.selectById(id);
|
|
|
+ return validateBargainActivityExists(id);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -186,9 +147,4 @@ public class BargainActivityServiceImpl implements BargainActivityService {
|
|
|
return bargainActivityMapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<BargainProductDO> getBargainProductsByActivityIds(Collection<Long> activityIds) {
|
|
|
- return bargainProductMapper.selectListByActivityIds(activityIds);
|
|
|
- }
|
|
|
-
|
|
|
}
|