From c1c7cbba7bd50003df49fc1dd3cb44795c622ab9 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 14 Apr 2026 13:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/ProductController.java | 13 ++++++ .../product/param/ProductIsAutoSaleParam.java | 40 +++++++++++++++++++ .../czg/product/service/ProductService.java | 7 ++++ .../service/impl/ProductServiceImpl.java | 12 ++++++ 4 files changed, 72 insertions(+) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductIsAutoSaleParam.java diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java index 0e6d9f3a4..0f0df99f0 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java @@ -202,6 +202,18 @@ public class ProductController { return CzgResult.success(); } + /** + * 商品-标记售罄 + */ + @PostMapping("markIsAutoSoldOut") + //@SaStaffCheckPermission("yun_xu_shou_qing_shang_pin") + //@SaAdminCheckPermission("product:markIsSoldOut") + public CzgResult markIsAutoSoldOut(@RequestBody @Validated({DefaultGroup.class}) ProductIsAutoSaleParam param) { + productService.markProductIsAutoSoldOut(StpKit.USER.getShopId(), param); + ThreadUtil.execAsync(() -> rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(StpKit.USER.getShopId()))); + return CzgResult.success(); + } + /** * 商品-绑定耗材 */ @@ -211,6 +223,7 @@ public class ProductController { public CzgResult bindCons(@RequestBody @Validated({DefaultGroup.class}) ProdConsBindDTO param) { AssertUtil.isNull(param.getId(), "商品Id不能为空"); prodConsRelationService.saveProdConsRelation(param); + ThreadUtil.execAsync(() -> rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(StpKit.USER.getShopId()))); asyncConsProToShop(param.getId()); return CzgResult.success(); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductIsAutoSaleParam.java b/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductIsAutoSaleParam.java new file mode 100644 index 000000000..3e7c97ed2 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductIsAutoSaleParam.java @@ -0,0 +1,40 @@ +package com.czg.product.param; + +import com.czg.validator.group.DefaultGroup; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 商品上下架参数 + * + * @author tankaikai + * @since 2025-02-18 17:46 + */ +@Data +public class ProductIsAutoSaleParam implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 商品id + */ + @NotNull(message = "商品id能为空", groups = DefaultGroup.class) + private Long id; + + /** + * 是否上下架 1-上架,0-下架 + */ + @NotNull(message = "自动售罄不能为空", groups = DefaultGroup.class) + @Min(value = 0, message = "自动售罄必须是0或1", groups = DefaultGroup.class) + @Max(value = 1, message = "自动售罄必须是0或1", groups = DefaultGroup.class) + private Integer isAutoSoldStock; + + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java index 146392210..7d798f769 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java @@ -97,6 +97,13 @@ public interface ProductService extends IService { */ void markProductIsSoldOut(ProductIsSoldOutParam param); + /** + * 标记商品自动售罄 + * + * @param param 入参 + */ + void markProductIsAutoSoldOut(Long shopId, ProductIsAutoSaleParam param); + /** * 退货到库存 * diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index 8ee31b765..4a93a2d9a 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -700,6 +700,18 @@ public class ProductServiceImpl extends ServiceImpl impl Product old = getById(prodId); Long categoryId = old.getCategoryId(); clearProductCache(categoryId); + ThreadUtil.execAsync(() -> rabbitPublisher.sendConsInfoChangeMsg(Convert.toStr(shopId))); + } + + @Override + public void markProductIsAutoSoldOut(Long shopId, ProductIsAutoSaleParam param) { + Product entity = super.getOne(query().eq(Product::getId, param.getId()).eq(Product::getShopId, shopId)); + if (entity == null) { + throw new CzgException("商品不存在"); + } + Product update = new Product(); + update.setIsAutoSoldStock(param.getIsAutoSoldStock()); + update(update, query().eq(Product::getId, param.getId()).eq(Product::getShopId, shopId)); } @Override