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