From 18813ca83b94c807e35756a8a5f52effa5b99ba8 Mon Sep 17 00:00:00 2001 From: zepengdev <lzpsmith@outlook.com> Date: Tue, 17 Jun 2025 16:00:42 +0800 Subject: [PATCH] feat(product): 新增商品批量查询接口 --- oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductAdminServiceImpl.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 115 insertions(+), 0 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductAdminServiceImpl.java b/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductAdminServiceImpl.java new file mode 100644 index 0000000..aada193 --- /dev/null +++ b/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductAdminServiceImpl.java @@ -0,0 +1,115 @@ +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()); + } + } +} -- Gitblit v1.9.3