diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java index c8c6ad12..3d8a25fa 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java @@ -73,6 +73,16 @@ public class GoodsSpuController { return R.ok(spuList); } + /** + * 翻页搜索 + * @return + */ + @GetMapping("/initSkuNum") + public R> initSkuNum(){ + goodsSpuService.initSkuNum(); + return R.ok(); + } + /** * 翻页搜索(组件接口) * @param param diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java index 2f0e0087..a784ed53 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java @@ -120,6 +120,8 @@ public class GoodsSpu implements Serializable { /** 商品销售类型:0-普通商品;1-赠品 */ private Integer goodsSaleType; + private String skuNumVal; + /** 展示的价格 */ @TableField(exist = false) private Double showPrice = 0D; diff --git a/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSpuSkuNum.java b/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSpuSkuNum.java new file mode 100644 index 00000000..50e1174b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSpuSkuNum.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.goods.entity.dto; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/12/20 + */ +@Data +public class GoodSpuSkuNum { + + private Long spuId; + + private Long countOrder; + + private Long countSpec; + + private Long countSku; + +} diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java index 05852ac1..76057117 100644 --- a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java +++ b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.common.model.dto.RowParam; import com.qs.serve.modules.goods.entity.GoodsSpu; +import com.qs.serve.modules.goods.entity.dto.GoodSpuSkuNum; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,5 +25,10 @@ public interface GoodsSpuMapper extends BaseMapper { @InterceptorIgnore(tenantLine = "1") List selectSkuJoinSpuList(@Param("query") GoodsSpu goodsSpu, @Param("pageInfo")RowParam rowParam); + @InterceptorIgnore(tenantLine = "1") + List selectLastChangeSpuId(); + + GoodSpuSkuNum getSpuSkuNumInfo(@Param("spuId") Long spuId); + } diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java index c5bac6bc..d1e138b5 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java @@ -52,5 +52,15 @@ public interface GoodsSpuService extends IService { */ List getSpuToSkuInfo(String placeName, List spuCodes); + /** + * 最近SKU或者SPU有更新的,更新skuNumVal字段 + */ + void updateSkuNumByLastChange(); + + void initSkuNum(); + + boolean updateSkuNumString(List spuIds); + + String getSkuNumString(Long spuId); } diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java index b14cf0da..9ea57e23 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java @@ -12,6 +12,7 @@ import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuEditBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuTasteBo; +import com.qs.serve.modules.goods.entity.dto.GoodSpuSkuNum; import com.qs.serve.modules.goods.entity.vo.*; import com.qs.serve.modules.goods.service.*; import com.qs.serve.modules.oms.entity.dto.OmsSpuToSkuKey; @@ -283,6 +284,61 @@ public class GoodsSpuServiceImpl extends ServiceImpl im return list(lqw); } + + @Override + public void updateSkuNumByLastChange() { + List spuIds = baseMapper.selectLastChangeSpuId(); + this.updateSkuNumString(spuIds); + } + + @Override + public void initSkuNum() { + AuthContextUtils.setTenant("001"); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.select(GoodsSpu::getId); + List goodsSpus = this.baseMapper.selectList(lqw); + List spuIds = goodsSpus.stream().map(GoodsSpu::getId).collect(Collectors.toList()); + updateSkuNumString(spuIds); + } + + @Override + public boolean updateSkuNumString(List spuIds) { + if(spuIds.size()<1){ + return false; + } + List updateList = new ArrayList<>(); + for (Long spuId : spuIds) { + String skuNum = this.getSkuNumString(spuId); + GoodsSpu spu = new GoodsSpu(); + spu.setId(spuId); + spu.setSkuNumVal(skuNum); + updateList.add(spu); + } + this.updateBatchById(updateList); + return true; + } + + @Override + public String getSkuNumString(Long spuId) { + /** + * 在SKU这里做一个统计,每个SKU显示一个字段:1/1/19 表示1个允许下单,1个特殊品,19个未启用 + */ + GoodSpuSkuNum goodSpuSkuNum = baseMapper.getSpuSkuNumInfo(spuId); + if(goodSpuSkuNum==null){ + return "0/0/0"; + } + if(goodSpuSkuNum.getCountOrder()==null){ + goodSpuSkuNum.setCountOrder(0L); + } + if(goodSpuSkuNum.getCountSpec()==null){ + goodSpuSkuNum.setCountSpec(0L); + } + if(goodSpuSkuNum.getCountSku()==null){ + goodSpuSkuNum.setCountSku(0L); + } + return goodSpuSkuNum.getCountOrder()+"/"+goodSpuSkuNum.getCountSpec()+"/"+goodSpuSkuNum.getCountSku(); + } + /** * 根据账套,获取spu对应的sku * @param placeName 账套 diff --git a/src/main/java/com/qs/serve/task/GoodsTask.java b/src/main/java/com/qs/serve/task/GoodsTask.java new file mode 100644 index 00000000..f06107e8 --- /dev/null +++ b/src/main/java/com/qs/serve/task/GoodsTask.java @@ -0,0 +1,27 @@ +package com.qs.serve.task; + +import com.qs.serve.modules.goods.service.GoodsSpuService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @author YenHex + * @since 2023/12/20 + */ +@Slf4j +@Component +@AllArgsConstructor +@ConditionalOnProperty(value = "project.task", havingValue = "true") +public class GoodsTask { + + private GoodsSpuService goodsSpuService; + + @Scheduled(cron="0 0 1 * * ?") + public void buildTempTable(){ + goodsSpuService.initSkuNum(); + } + +} diff --git a/src/main/resources/mapper/goods/GoodsSpuMapper.xml b/src/main/resources/mapper/goods/GoodsSpuMapper.xml index f0c32844..84313c26 100644 --- a/src/main/resources/mapper/goods/GoodsSpuMapper.xml +++ b/src/main/resources/mapper/goods/GoodsSpuMapper.xml @@ -64,6 +64,7 @@ goods_spu.`order_flag`, goods_spu.`del_flag`, goods_spu.`special_sku_id`, + goods_spu.`sku_num_val`, goods_spu.`belong` @@ -242,4 +243,25 @@ + + + +