|
@@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.product.service.sku;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.collection.ListUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
|
|
|
-import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuBaseVO;
|
|
|
-import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO;
|
|
|
+import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSkuSaveReqVO;
|
|
|
import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert;
|
|
|
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO;
|
|
|
import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO;
|
|
@@ -14,12 +14,12 @@ import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper;
|
|
|
import cn.iocoder.yudao.module.product.service.property.ProductPropertyService;
|
|
|
import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService;
|
|
|
import cn.iocoder.yudao.module.product.service.spu.ProductSpuService;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
-import jakarta.annotation.Resource;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -68,11 +68,6 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
return productSkuMapper.selectById(id);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<ProductSkuDO> getSkuList() {
|
|
|
- return productSkuMapper.selectList();
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public List<ProductSkuDO> getSkuList(Collection<Long> ids) {
|
|
|
if (CollUtil.isEmpty(ids)) {
|
|
@@ -82,20 +77,18 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void validateSkuList(List<ProductSkuCreateOrUpdateReqVO> skus, Boolean specType) {
|
|
|
+ public void validateSkuList(List<ProductSkuSaveReqVO> skus, Boolean specType) {
|
|
|
// 0、校验skus是否为空
|
|
|
if (CollUtil.isEmpty(skus)) {
|
|
|
throw exception(SKU_NOT_EXISTS);
|
|
|
}
|
|
|
// 单规格,赋予单规格默认属性
|
|
|
if (ObjectUtil.equal(specType, false)) {
|
|
|
- ProductSkuCreateOrUpdateReqVO skuVO = skus.get(0);
|
|
|
- List<ProductSkuBaseVO.Property> properties = new ArrayList<>();
|
|
|
- ProductSkuBaseVO.Property property = new ProductSkuBaseVO.Property();
|
|
|
- property.setPropertyId(ProductPropertyDO.ID_DEFAULT);
|
|
|
- property.setPropertyName(ProductPropertyDO.NAME_DEFAULT);
|
|
|
- property.setValueId(ProductPropertyValueDO.ID_DEFAULT);
|
|
|
- property.setValueName(ProductPropertyValueDO.NAME_DEFAULT);
|
|
|
+ ProductSkuSaveReqVO skuVO = skus.get(0);
|
|
|
+ List<ProductSkuSaveReqVO.Property> properties = new ArrayList<>();
|
|
|
+ ProductSkuSaveReqVO.Property property = new ProductSkuSaveReqVO.Property()
|
|
|
+ .setPropertyId(ProductPropertyDO.ID_DEFAULT).setPropertyName(ProductPropertyDO.NAME_DEFAULT)
|
|
|
+ .setValueId(ProductPropertyValueDO.ID_DEFAULT).setValueName(ProductPropertyValueDO.NAME_DEFAULT);
|
|
|
properties.add(property);
|
|
|
skuVO.setProperties(properties);
|
|
|
return; // 单规格不需要后续的校验
|
|
@@ -106,7 +99,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
// 遍历多个 Property 属性
|
|
|
.flatMap(p -> p.getProperties().stream())
|
|
|
// 将每个 Property 转换成对应的 propertyId,最后形成集合
|
|
|
- .map(ProductSkuCreateOrUpdateReqVO.Property::getPropertyId)
|
|
|
+ .map(ProductSkuSaveReqVO.Property::getPropertyId)
|
|
|
.collect(Collectors.toSet());
|
|
|
List<ProductPropertyDO> propertyList = productPropertyService.getPropertyList(propertyIds);
|
|
|
if (propertyList.size() != propertyIds.size()) {
|
|
@@ -133,17 +126,18 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
// 4. 最后校验,每个 Sku 之间不是重复的
|
|
|
// 每个元素,都是一个 Sku 的 attrValueId 集合。这样,通过最外层的 Set ,判断是否有重复的.
|
|
|
Set<Set<Long>> skuAttrValues = new HashSet<>();
|
|
|
- for (ProductSkuCreateOrUpdateReqVO sku : skus) {
|
|
|
+ for (ProductSkuSaveReqVO sku : skus) {
|
|
|
// 添加失败,说明重复
|
|
|
- if (!skuAttrValues.add(convertSet(sku.getProperties(), ProductSkuCreateOrUpdateReqVO.Property::getValueId))) {
|
|
|
+ if (!skuAttrValues.add(convertSet(sku.getProperties(), ProductSkuSaveReqVO.Property::getValueId))) {
|
|
|
throw exception(SPU_SKU_NOT_DUPLICATE);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void createSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skuCreateReqList) {
|
|
|
- productSkuMapper.insertBatch(ProductSkuConvert.INSTANCE.convertList06(skuCreateReqList, spuId));
|
|
|
+ public void createSkuList(Long spuId, List<ProductSkuSaveReqVO> skuCreateReqList) {
|
|
|
+ List<ProductSkuDO> skus = BeanUtils.toBean(skuCreateReqList, ProductSkuDO.class, sku -> sku.setSpuId(spuId));
|
|
|
+ productSkuMapper.insertBatch(skus);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -164,11 +158,6 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
productSkuMapper.deleteBySpuId(spuId);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<ProductSkuDO> getSkuListByAlarmStock() {
|
|
|
- return productSkuMapper.selectListByAlarmStock();
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public int updateSkuProperty(Long propertyId, String propertyName) {
|
|
|
// 获取所有的 sku
|
|
@@ -220,7 +209,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void updateSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus) {
|
|
|
+ public void updateSkuList(Long spuId, List<ProductSkuSaveReqVO> skus) {
|
|
|
// 构建属性与 SKU 的映射关系;
|
|
|
Map<String, Long> existsSkuMap = convertMap(productSkuMapper.selectListBySpuId(spuId),
|
|
|
ProductSkuConvert.INSTANCE::buildPropertyKey, ProductSkuDO::getId);
|
|
@@ -228,7 +217,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
// 拆分三个集合,新插入的、需要更新的、需要删除的
|
|
|
List<ProductSkuDO> insertSkus = new ArrayList<>();
|
|
|
List<ProductSkuDO> updateSkus = new ArrayList<>();
|
|
|
- List<ProductSkuDO> allUpdateSkus = ProductSkuConvert.INSTANCE.convertList06(skus, spuId);
|
|
|
+ List<ProductSkuDO> allUpdateSkus = BeanUtils.toBean(skus, ProductSkuDO.class, sku -> sku.setSpuId(spuId));
|
|
|
allUpdateSkus.forEach(sku -> {
|
|
|
String propertiesKey = ProductSkuConvert.INSTANCE.buildPropertyKey(sku);
|
|
|
// 1、找得到的,进行更新
|