From 0c4467ea4f37bfcb8cae0d134617314da8c55b95 Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Sat, 27 Sep 2025 15:28:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=AC=A1=E6=97=A5=E8=A1=A5?= =?UTF-8?q?=E5=85=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/product/ShopProductItem.java | 4 ++ .../quartz/job/ProductItemAutoFillJob.java | 53 +++++++++++++++++++ .../impl/ShopProductBaseServiceImpl.java | 13 +++++ sql/shop/dev/20250927_ddl.sql | 3 ++ 4 files changed, 73 insertions(+) create mode 100644 mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java create mode 100644 sql/shop/dev/20250927_ddl.sql diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java index bb6508b8..d0105d68 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java @@ -183,5 +183,9 @@ public class ShopProductItem implements Serializable { @TableField(exist=false) private String mergedUnitPrices; + @ApiModelProperty(value = "次日自动补满至") + private Integer automatic; + @ApiModelProperty(value = "是否开启次日补全1开启,0不开启") + private String is_open_automatic; } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java new file mode 100644 index 00000000..404f7a3f --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java @@ -0,0 +1,53 @@ +package com.suisung.mall.shop.components.quartz.job; + + +import cn.hutool.core.util.PageUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import com.suisung.mall.common.modules.product.ShopProductItem; +import com.suisung.mall.shop.config.SpringUtil; +import com.suisung.mall.shop.product.service.ShopProductItemService; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.quartz.QuartzJobBean; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 任务:用于次日更新商品的库存 + */ +public class ProductItemAutoFillJob extends QuartzJobBean { + @Override + protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { + Logger logger = LoggerFactory.getLogger(ProductItemAutoFillJob.class); + logger.info("次日更新商品库存开始"); + ShopProductItemService shopProductItemService= SpringUtil.getBean(ShopProductItemService.class); + long startTime = System.nanoTime(); + // 更新商品库存 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_open_automatic","1"); + queryWrapper.apply("item_quantity queryWrapper2 = new QueryWrapper<>(); + queryWrapper2.eq("is_open_automatic","1"); + queryWrapper2.apply("item_quantity pageShopProductItem=shopProductItemService.lists(queryWrapper2,i, batchSize); + List shopProductItems= pageShopProductItem.getRecords(); + shopProductItems= shopProductItems.stream() + .peek(shopProductItem -> shopProductItem.setItem_quantity(shopProductItem.getAutomatic())) + .collect(Collectors.toList()); + shopProductItemService.updateBatchById(shopProductItems); + } + + long endTime = System.nanoTime(); + long duration = (endTime - startTime); + logger.info("更新商品库存结束,总共更新商品数量:{},耗时{}",total,duration / 1000000000); + } +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java index 72572971..1eeb211a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java @@ -25,6 +25,7 @@ import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.constant.ConfigConstant; import com.suisung.mall.common.constant.MqConstant; import com.suisung.mall.common.domain.UserDto; +import com.suisung.mall.common.enums.DicEnum; import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.feignService.EduService; import com.suisung.mall.common.feignService.SearchService; @@ -480,6 +481,18 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl item_image_other = Convert.toList(String.class, productItemMap.get("color_img")); diff --git a/sql/shop/dev/20250927_ddl.sql b/sql/shop/dev/20250927_ddl.sql new file mode 100644 index 00000000..ff68d04b --- /dev/null +++ b/sql/shop/dev/20250927_ddl.sql @@ -0,0 +1,3 @@ +alter table shop_product_item add automatic INTEGER DEFAULT NULL COMMENT '次日自动补满至'; +alter table shop_product_item add is_open_automatic varchar(1) not null DEFAULT '0' COMMENT '是否开启次日补全1开启,0不开启'; +alter table shop_product_item add index `index_is_open_automatic` (`is_open_automatic`) USING BTREE; \ No newline at end of file