新增次日补全功能

This commit is contained in:
liyj 2025-09-27 15:28:55 +08:00
parent 0f0f4e048c
commit 0c4467ea4f
4 changed files with 73 additions and 0 deletions

View File

@ -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;
}

View File

@ -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<ShopProductItem> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_open_automatic","1");
queryWrapper.apply("item_quantity<automatic");
long total= shopProductItemService.count(queryWrapper);
QueryWrapper<ShopProductItem> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("is_open_automatic","1");
queryWrapper2.apply("item_quantity<automatic");
Integer batchSize = 500;
int pages= PageUtil.totalPage(Math.toIntExact(total), batchSize);
for (int i=1;i<=pages;i++){
Page<ShopProductItem> pageShopProductItem=shopProductItemService.lists(queryWrapper2,i, batchSize);
List<ShopProductItem> 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);
}
}

View File

@ -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<ShopProductBaseM
BigDecimal item_unit_points = Convert.toBigDecimal(productItemMap.get("item_unit_points"));
BigDecimal item_unit_price = Convert.toBigDecimal(productItemMap.get("item_unit_price"));
Integer item_quantity = Convert.toInt(productItemMap.get("item_quantity"));
String is_open_automatic=Convert.toStr(productItemMap.get("is_open_automatic"),DicEnum.YESORNO_0.getCode());
if(is_open_automatic.equals(DicEnum.YESORNO_1.getCode())){
Integer automatic=Convert.toInt(productItemMap.get("automatic"),0);
if(automatic<item_quantity){
throw new ApiException("次日补全不能小于库存");
}
if(automatic<1){
throw new ApiException("次日补全必须大于0");
}
item.setAutomatic(automatic);
}
item.setIs_open_automatic(is_open_automatic);
Integer item_is_default = Convert.toInt(productItemMap.get("item_is_default"));
String item_image_default = Convert.toStr(productItemMap.get("main_color_img"), default_image); // 主图
List<String> item_image_other = Convert.toList(String.class, productItemMap.get("color_img"));

View File

@ -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;