|
@@ -144,36 +144,52 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
|
|
public void updateProductSkus(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus) {
|
|
|
// 查询 SPU 下已经存在的 SKU 的集合
|
|
|
List<ProductSkuDO> existsSkus = productSkuMapper.selectListBySpuId(spuId);
|
|
|
- Map<Long, ProductSkuDO> existsSkuMap = CollectionUtils.convertMap(existsSkus, ProductSkuDO::getId);
|
|
|
+
|
|
|
+ Map<String, Long> existsSkuMap = existsSkus.stream()
|
|
|
+ .map(v -> {
|
|
|
+ String collect = v.getProperties() == null? "null": v.getProperties()
|
|
|
+ .stream()
|
|
|
+ .map(m -> String.valueOf(m.getValueId()))
|
|
|
+ .collect(Collectors.joining());
|
|
|
+ return String.join("-", collect, String.valueOf(v.getId()));
|
|
|
+ })
|
|
|
+ .collect(Collectors.toMap(v -> v.split("-")[0], v -> Long.valueOf(v.split("-")[1])));
|
|
|
+
|
|
|
|
|
|
// 拆分三个集合,新插入的、需要更新的、需要删除的
|
|
|
List<ProductSkuDO> insertSkus = new ArrayList<>();
|
|
|
- List<ProductSkuDO> updateSkus = new ArrayList<>(); // TODO Luowenfeng:使用 Long 即可
|
|
|
- List<ProductSkuDO> deleteSkus = new ArrayList<>();
|
|
|
+ List<ProductSkuDO> updateSkus = new ArrayList<>();
|
|
|
+ List<Long> deleteSkus = new ArrayList<>();
|
|
|
|
|
|
- // TODO @Luowenfeng:是不是基于规格匹配会比较好。可以参考下 onemall 的 ProductSpuServiceImpl 的 updateProductSpu 逻辑
|
|
|
List<ProductSkuDO> allUpdateSkus = ProductSkuConvert.INSTANCE.convertSkuDOList(skus);
|
|
|
allUpdateSkus.forEach(p -> {
|
|
|
- if (p.getId() != null) {
|
|
|
- if (existsSkuMap.containsKey(p.getId())) {
|
|
|
- updateSkus.add(p);
|
|
|
- return;
|
|
|
- }
|
|
|
- deleteSkus.add(p);
|
|
|
+ String propertiesKey = p.getProperties() == null? "null": p.getProperties().stream().map(m -> String.valueOf(m.getValueId())).collect(Collectors.joining());
|
|
|
+ // 1、找得到的,进行更新
|
|
|
+ if (existsSkuMap.containsKey(propertiesKey)) {
|
|
|
+ updateSkus.add(p);
|
|
|
+ existsSkuMap.remove(propertiesKey);
|
|
|
return;
|
|
|
}
|
|
|
+ // 2、找不到,进行插入
|
|
|
p.setSpuId(spuId);
|
|
|
insertSkus.add(p);
|
|
|
});
|
|
|
+ // 3、多余的,删除
|
|
|
+ if(!existsSkuMap.isEmpty()){
|
|
|
+ deleteSkus = new ArrayList<>(existsSkuMap.values());
|
|
|
+ }
|
|
|
|
|
|
- if (CollectionUtil.isNotEmpty(insertSkus)) {
|
|
|
+ // 4、执行修改 Sku
|
|
|
+ if (!insertSkus.isEmpty()) {
|
|
|
productSkuMapper.insertBatch(insertSkus);
|
|
|
}
|
|
|
- if (updateSkus.size() > 0) {
|
|
|
+ if (!updateSkus.isEmpty()) {
|
|
|
updateSkus.forEach(p -> productSkuMapper.updateById(p));
|
|
|
}
|
|
|
- if (deleteSkus.size() > 0) {
|
|
|
- productSkuMapper.deleteBatchIds(deleteSkus.stream().map(ProductSkuDO::getId).collect(Collectors.toList()));
|
|
|
+ if (!deleteSkus.isEmpty()) {
|
|
|
+ productSkuMapper.deleteBatchIds(deleteSkus);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|