From b4d3224898d50b8f1e30b5c8083a520743927282 Mon Sep 17 00:00:00 2001 From: xin <1099200748@qq.com> Date: Mon, 14 Jul 2025 21:08:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into xin --- oying-system/src/main/java/com/oying/modules/pc/product/service/impl/ProductMerchantServiceImpl.java | 62 +++++++++++++++++++++++++++--- 1 files changed, 55 insertions(+), 7 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 index 7540a58..583047a 100644 --- 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 @@ -3,32 +3,36 @@ 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.BadRequestException; import com.oying.exception.EntityNotFoundException; +import com.oying.modules.pc.common.core.constrant.AuditStatusEnum; 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.ProductAudit; 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.ProductChangeTypeEnum; 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.product.events.ProductAuditVerdictEvent; +import com.oying.modules.pc.product.service.*; import com.oying.modules.pc.utils.ImageUtils; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; +@Slf4j @Service @RequiredArgsConstructor public class ProductMerchantServiceImpl implements ProductMerchantService { @@ -36,6 +40,7 @@ private final ProductService productService; private final ProductImageService productImageService; private final ProductLabelService productLabelService; + private final ProductAuditService productAuditService; @Override @Transactional(rollbackFor = Exception.class) @@ -71,6 +76,7 @@ @Transactional(rollbackFor = Exception.class) public void update(ProductMerchantUpdateRequest request) { Product existingProduct = this.findOrThrow(request.getProductId()); + this.validateApprovedStatus(existingProduct.getStatus()); this.processImagesUpdate(request); this.processLabelsUpdate(request); BeanUtils.copyProperties(request, existingProduct); @@ -80,6 +86,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void updateImages(ProductMerchantUpdateRequest request) { + Product existingProduct = this.findOrThrow(request.getProductId()); + this.validateApprovedStatus(existingProduct.getStatus()); this.findOrThrow(request.getProductId()); this.processImagesUpdate(request); } @@ -87,6 +95,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void updateLabels(ProductMerchantUpdateRequest request) { + Product existingProduct = this.findOrThrow(request.getProductId()); + this.validateApprovedStatus(existingProduct.getStatus()); this.findOrThrow(request.getProductId()); this.processImagesUpdate(request); } @@ -99,9 +109,14 @@ @Override public void putOnShelf(Long productId) { + ProductAudit audit = new ProductAudit(); + audit.setProductId(productId); + audit.setType(ProductChangeTypeEnum.PUT_ON_SHELF.name()); + audit.setStatus(AuditStatusEnum.PENDING.getValue()); + productAuditService.create(audit); LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<Product>() .eq(Product::getProductId, productId) - .set(Product::getStatus, ProductStatusEnum.AVAILABLE.getValue()); + .set(Product::getStatus, ProductStatusEnum.PENDING.getValue()); productService.update(wrapper); } @@ -111,6 +126,21 @@ .eq(Product::getProductId, productId) .set(Product::getStatus, ProductStatusEnum.NO_AVAILABLE.getValue()); productService.update(wrapper); + } + + @Override + @EventListener + @Transactional(rollbackFor = Exception.class) + public void handleAuditVerdictEvent(ProductAuditVerdictEvent event) { + try { + ProductAudit audit = productAuditService.getById(event.getAuditId()); + ProductChangeTypeEnum changeType = ProductChangeTypeEnum.valueOf(audit.getType()); + if (changeType == ProductChangeTypeEnum.PUT_ON_SHELF) { + this.handlePutOnShelfAuditEvent(audit); + } + } catch (Exception e) { + log.error("处理商品审核结果异常", e); + } } private Product findOrThrow(Long productId) { @@ -146,4 +176,22 @@ productLabelService.batchCreate(newLabels); } } + + private void handlePutOnShelfAuditEvent(ProductAudit audit) { + AuditStatusEnum auditStatus = AuditStatusEnum.get(audit.getStatus()); + if (AuditStatusEnum.APPROVED.equals(auditStatus)) { + Product existingProduct = productService.getById(audit.getProductId()); + existingProduct.setStatus(auditStatus.getValue()); + productService.updateById(existingProduct); + } + } + + private void validateApprovedStatus(Integer status) { + Set<ProductStatusEnum> statusEnumSet = CollectionUtil.newHashSet(ProductStatusEnum.PENDING, + ProductStatusEnum.UNDER_REVIEW, ProductStatusEnum.AVAILABLE); + ProductStatusEnum existingStatus = ProductStatusEnum.getOrDefault(status, ProductStatusEnum.DRAFT); + if (statusEnumSet.contains(existingStatus)) { + throw new BadRequestException("在售商品无法修改"); + } + } } -- Gitblit v1.9.3