package com.oying.modules.pc.product.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.util.ObjUtil;
|
import com.oying.exception.EntityExistException;
|
import com.oying.exception.EntityNotFoundException;
|
import com.oying.modules.pc.product.converter.ProductImageAssembler;
|
import com.oying.modules.pc.product.converter.ProductLabelAssembler;
|
import com.oying.modules.pc.product.domain.Product;
|
import com.oying.modules.pc.product.domain.ProductImage;
|
import com.oying.modules.pc.product.domain.ProductLabel;
|
import com.oying.modules.pc.product.domain.dto.ProductImageCreateRequest;
|
import com.oying.modules.pc.product.domain.dto.ProductMerchantCreateRequest;
|
import com.oying.modules.pc.product.domain.dto.ProductMerchantUpdateRequest;
|
import com.oying.modules.pc.product.domain.enums.ProductStatusEnum;
|
import com.oying.modules.pc.product.service.ProductAdminService;
|
import com.oying.modules.pc.product.service.ProductImageService;
|
import com.oying.modules.pc.product.service.ProductLabelService;
|
import com.oying.modules.pc.product.service.ProductService;
|
import com.oying.modules.pc.utils.ImageUtils;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
import java.util.Optional;
|
import java.util.stream.Collectors;
|
|
@Service
|
@RequiredArgsConstructor
|
public class ProductAdminServiceImpl implements ProductAdminService {
|
|
private final ProductService productService;
|
private final ProductImageService productImageService;
|
private final ProductLabelService productLabelService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void create(ProductMerchantCreateRequest request) {
|
Product product = new Product();
|
BeanUtils.copyProperties(request, product);
|
request.getImages().stream().findFirst().map(ProductImageCreateRequest::getUploadFileId)
|
.ifPresent(id -> {
|
product.setMainImageId(id.toString());
|
product.setMainImageUrl(ImageUtils.getPublicObjectUrl(id));
|
});
|
product.setStatus(ProductStatusEnum.DRAFT.getValue());
|
productService.create(product);
|
|
List<ProductImage> productImages = request.getImages().stream().map(i -> {
|
i.setProductId(product.getProductId());
|
return ProductImageAssembler.to(i);
|
}).collect(Collectors.toList());
|
if (CollectionUtil.isNotEmpty(productImages)) {
|
productImageService.saveBatch(productImages);
|
}
|
|
List<ProductLabel> productLabels = request.getLabels().stream().map(i -> {
|
i.setProductId(product.getProductId());
|
return ProductLabelAssembler.to(i);
|
}).collect(Collectors.toList());
|
if (CollectionUtil.isNotEmpty(productLabels)) {
|
productLabelService.saveBatch(productLabels);
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void update(ProductMerchantUpdateRequest request) {
|
Product existingProduct = this.findOrThrow(request.getProductId());
|
this.processImagesUpdate(request);
|
this.processLabelsUpdate(request);
|
BeanUtils.copyProperties(request, existingProduct);
|
productService.update(existingProduct);
|
}
|
|
@Transactional
|
@Override
|
public void delete(List<Long> ids) {
|
productService.deleteAll(ids);
|
}
|
|
private Product findOrThrow(Long productId) {
|
Product existingProduct = productService.getById(productId);
|
if (ObjUtil.isEmpty(existingProduct)) {
|
throw new EntityNotFoundException(Product.class, "id", Optional.ofNullable(productId).map(Object::toString).orElse("null"));
|
}
|
return existingProduct;
|
}
|
|
private void processImagesUpdate(ProductMerchantUpdateRequest request) {
|
if (CollectionUtil.isNotEmpty(request.getDeletedImageIds())) {
|
productImageService.deleteAll(request.getDeletedImageIds());
|
}
|
if (CollectionUtil.isNotEmpty(request.getUpdatedImages())) {
|
productImageService.batchUpdate(request.getUpdatedImages());
|
}
|
if (CollectionUtil.isNotEmpty(request.getNewImages())) {
|
productImageService.batchCreate(request.getNewImages());
|
}
|
}
|
|
private void processLabelsUpdate(ProductMerchantUpdateRequest request) {
|
if (CollectionUtil.isNotEmpty(request.getDeletedLabelIds())) {
|
productLabelService.deleteAll(request.getDeletedLabelIds());
|
}
|
if (CollectionUtil.isNotEmpty(request.getUpdatedLabels())) {
|
productLabelService.batchUpdate(request.getUpdatedLabels());
|
}
|
if (CollectionUtil.isNotEmpty(request.getNewLabels())) {
|
productLabelService.batchCreate(request.getNewLabels());
|
}
|
}
|
}
|