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/ProductMerchantServiceImpl.java | 149 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 149 insertions(+), 0 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductMerchantServiceImpl.java b/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductMerchantServiceImpl.java new file mode 100644 index 0000000..7540a58 --- /dev/null +++ b/oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductMerchantServiceImpl.java @@ -0,0 +1,149 @@ +package com.oying.modules.pc.product.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.ProductLabelCreateRequest; +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.ProductImageService; +import com.oying.modules.pc.product.service.ProductLabelService; +import com.oying.modules.pc.product.service.ProductMerchantService; +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 ProductMerchantServiceImpl implements ProductMerchantService { + + 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); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateImages(ProductMerchantUpdateRequest request) { + this.findOrThrow(request.getProductId()); + this.processImagesUpdate(request); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateLabels(ProductMerchantUpdateRequest request) { + this.findOrThrow(request.getProductId()); + this.processImagesUpdate(request); + } + + @Transactional + @Override + public void batchDelete(List<Long> ids) { + productService.deleteAll(ids); + } + + @Override + public void putOnShelf(Long productId) { + LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<Product>() + .eq(Product::getProductId, productId) + .set(Product::getStatus, ProductStatusEnum.AVAILABLE.getValue()); + productService.update(wrapper); + } + + @Override + public void takeOffShelf(Long productId) { + LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<Product>() + .eq(Product::getProductId, productId) + .set(Product::getStatus, ProductStatusEnum.NO_AVAILABLE.getValue()); + productService.update(wrapper); + } + + 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())) { + List<ProductImageCreateRequest> newImages = request.getNewImages().stream().peek(i-> i.setProductId(request.getProductId())).collect(Collectors.toList()); + productImageService.batchCreate(newImages); + } + } + + 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())) { + List<ProductLabel> newLabels = request.getNewLabels().stream().peek(i-> i.setProductId(request.getProductId())).collect(Collectors.toList()); + productLabelService.batchCreate(newLabels); + } + } +} -- Gitblit v1.9.3