商城业务:商品详情

简介: 商城业务:商品详情

商品详情SkuItemVo

1. @Data
2. public class SkuItemVo {
3. 
4. /*** 1 sku基本信息的获取:如标题*/
5.     SkuInfoEntity info;
6. 
7. boolean hasStock = true;
8. 
9. /*** 2 sku的图片信息*/
10.     List<SkuImagesEntity> images;
11. 
12. /*** 3 获取spu的销售属性组合。每个attrName对应一个value-list*/
13.     List<SkuItemSaleAttrVo> saleAttr;
14. 
15. /*** 4 获取spu的介绍*/
16.     SpuInfoDescEntity desc;
17. 
18. /*** 5 获取spu的规格参数信息,每个分组的包含list*/
19.     List<SpuItemAttrGroupVo> groupAttrs;
20. 
21. 
22. }

SkuItemSaleAttrVo

1. @Data
2. public    class  SkuItemSaleAttrVo{
3. private  Long attrId;
4. private  String attrName;
5. private List<AttrValueWithSkuIdVo> attrValues;
6. }

SpuItemAttrGroupVo

1. @Data
2. public  class  SpuItemAttrGroupVo{
3. private  String groupName;
4. private List<SpuBaseAttrVo> attrs;
5. }

SpuBaseAttrVo

1. @Data
2. public   class  SpuBaseAttrVo{
3. private  String attrName;
4. private  String attrValue;
5. }

控制层Controller

1. @Controller
2. public class itemController {
3. 
4. 
5. @Autowired
6.     SkuInfoService skuInfoService;
7. 
8. /**
9.      * 展示当前sku的详情
10.      * @param skuId
11.      * @return
12.      */
13. @GetMapping("/{skuId}.html")
14. public String skuItem(@PathVariable("skuId") Long skuId, Model model){
15. 
16.         System.out.println("准备查询"+skuId+"详情");
17.          SkuItemVo vo= skuInfoService.item(skuId);
18.          model.addAttribute("item",vo);
19. return "item";
20.     }
21. }

配置类

ThreadPoolConfigProperties

1. @ConfigurationProperties(prefix = "gulimall.thread")
2. @Component
3. @Data
4. public class ThreadPoolConfigProperties {
5. private  Integer coreSize;
6. private Integer maxSize;
7. private  Integer keepAliveTime;
8. }

MyThreadConfig

1. @Configuration
2. public class MyThreadConfig {
3. 
4. @Bean
5. public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool){
6. return    new ThreadPoolExecutor(pool.getCoreSize(),pool.getMaxSize(),pool.getKeepAliveTime(),
7.                 TimeUnit.SECONDS,
8. new LinkedBlockingDeque<>(1000),
9.                 Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
10.     }
11. }

 

skuInfoService.item实现

1. @Override
2. public SkuItemVo item(Long skuId) {
3. SkuItemVo skuItemVo = new SkuItemVo();
4. //1.sku基本属性的获取 pms_sku_info
5.         CompletableFuture<SkuInfoEntity> infoFuture = CompletableFuture.supplyAsync(() -> {
6. SkuInfoEntity info = getById(skuId);
7.             skuItemVo.setInfo(info);
8. return info;
9.         }, executor);
10. //2.sku的图片信息 pms_sku_images
11. 
12.         CompletableFuture<Void> imgeFuture = CompletableFuture.runAsync(() -> {
13.             List<SkuImagesEntity> images = imagesService.getImagesBySKuId(skuId);
14.             skuItemVo.setImages(images);
15.         }, executor);
16. 
17. //3.获取spu的销售属性组合
18.         CompletableFuture<Void> attrFuture = infoFuture.thenAcceptAsync((res) -> {
19.             List<SkuItemSaleAttrVo> saleAttrVos = skuSaleAttrValueService.getSaleAttrsBySpuId(res.getSpuId());
20.             skuItemVo.setSaleAttr(saleAttrVos);
21.         }, executor);
22. 
23. //4.获取spu的介绍 pms_spu_info_desc
24.         CompletableFuture<Void> descFuture = infoFuture.thenAcceptAsync((res) -> {
25. SpuInfoDescEntity spuInfo = spuInfoDescService.getById(res.getSpuId());
26.             skuItemVo.setDesc(spuInfo);
27.         }, executor);
28. 
29. 
30. //5.获取spu的规格参数信息
31.         CompletableFuture<Void> spuFuture = infoFuture.thenAcceptAsync((res) -> {
32.             List<SpuItemAttrGroupVo> attrGroupVos = attrGroupService.getAttrGroupWithAttrsBySpuId(res.getSpuId(), res.getCatalogId());
33.             skuItemVo.setGroupAttrs(attrGroupVos);
34.         }, executor);
35. 
36. try {
37.             CompletableFuture.allOf(infoFuture,imgeFuture,descFuture,spuFuture,attrFuture).get();
38.         } catch (InterruptedException e) {
39.             e.printStackTrace();
40.         } catch (ExecutionException e) {
41.             e.printStackTrace();
42.         }
43. return  skuItemVo;
44.     }

imagesService.getImagesBySKuId

1. @Override
2. public List<SkuImagesEntity> getImagesBySKuId(Long skuId) {
3. SkuImagesDao imagesDao = this.baseMapper;
4.         List<SkuImagesEntity> imagesEntities = imagesDao.selectList(new QueryWrapper<SkuImagesEntity>().eq("sku_id", skuId));
5. 
6. return imagesEntities;
7.     }

skuSaleAttrValueService.getSaleAttrsBySpuId

1. @Override
2. public List<SkuItemSaleAttrVo> getSaleAttrsBySpuId(Long spuId) {
3. SkuSaleAttrValueDao dao = this.baseMapper;
4.         List<SkuItemSaleAttrVo> saleAttrVos= dao.getSaleAttrsBySpuId(spuId);
5. return saleAttrVos;
6.     }

dao.getSaleAttrsBySpuId

 

<resultMap id="SkuItemSaleAttrVo" type="com.atguigu.gulimall.product.vo.SkuItemSaleAttrVo">
    <result column="attr_id" property="attrId"></result>
    <result column="attr_name" property="attrName"></result>
    <collection property="attrValues" ofType="com.atguigu.gulimall.product.vo.AttrValueWithSkuIdVo">
        <result column="attr_value" property="attrValue"></result>
        <result column="sku_ids" property="skuIds"></result>
    </collection>
</resultMap>
<select id="getSaleAttrsBySpuId" resultMap="SkuItemSaleAttrVo">
    SELECT ssav.`attr_id`,ssav.`attr_name`,ssav.`attr_value`,
           GROUP_CONCAT(DISTINCT info.`sku_id`) sku_ids
    FROM `pms_sku_info` info LEFT JOIN `pms_sku_sale_attr_value` ssav
                                       ON ssav.`sku_id` = info.`sku_id`
    WHERE info.`spu_id` = #{spuId}
    GROUP BY ssav.`attr_id`,ssav.`attr_name`,ssav.`attr_value`
</select>

attrGroupService.getAttrGroupWithAttrsBySpuId

 

1. @Override
2. public List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(Long spuId, Long catalogId) {
3. //1.查出当前spu对应的所有属性的分组信息以及当前分组下所有属性对应的值
4. 
5. AttrGroupDao baseMapper = this.getBaseMapper();
6.         List<SpuItemAttrGroupVo> vos =   baseMapper.getAttrGroupWithAttrsBySpuId(spuId,catalogId);
7. return  vos;
8.     }

baseMapper.getAttrGroupWithAttrsBySpuId(spuId,catalogId)

  • pms_product_attr_value 根据spu_id获得spu相关属性
  • pms_attr_attrgroup_relation根据catelog_id获得属性的分组

 

<resultMap id="SpuItemAttrGroupVo" type="com.atguigu.gulimall.product.vo.SpuItemAttrGroupVo">
    <result column="attr_group_name" property="groupName" javaType="string"></result>
    <collection property="attrs" ofType="com.atguigu.gulimall.product.vo.SpuBaseAttrVo">
        <result column="attr_name" property="attrName" javaType="string"></result>
        <result column="attr_value" property="attrValue" javaType="string"></result>
    </collection>
</resultMap>

 

<select id="getAttrGroupWithAttrsBySpuId"
        resultMap="SpuItemAttrGroupVo">
    SELECT pav.`spu_id`, ag.`attr_group_name`, ag.`attr_group_id`, 
           aar.`attr_id`, attr.`attr_name`,pav.`attr_value`
    FROM `pms_attr_group` ag
             LEFT JOIN `pms_attr_attrgroup_relation` aar 
                 ON aar.`attr_group_id` = ag.`attr_group_id`
             LEFT JOIN `pms_attr` attr 
                 ON attr.`attr_id` = aar.`attr_id`
             LEFT JOIN `pms_product_attr_value` pav 
                 ON pav.`attr_id` = attr.`attr_id`
    WHERE ag.catelog_id = #{catalogId} AND pav.`spu_id` = #{spuId}
</select>

前端js代码

1.         $(".sku_attr_value").click(function () {
2. // 1、点击的元素添加上自定义的属性
3. let skus = new Array();
4. let curr = $(this).attr("skus").split(",");
5. //去掉同一行的所有的check标签
6.             $(this).parent().parent().find(".sku_attr_value").removeClass("checked");
7.             $(this).addClass("checked");
8.             changeCheckedStyle();
9. 
10.             $("a[class='sku_attr_value checked']").each(function () {
11.                 skus.push($(this).attr("skus").split(","));
12.             });
13. //取出交集得到skuId
14. let filterEle = skus[0];
15. for (let i = 1; i < skus.length; i++) {
16.                 filterEle = $(filterEle).filter(skus[i])[0];
17.             }
18. 
19.             location.href = "http://item.gulimall.com/" + filterEle + ".html";
20. 
21. return false;
22.         });
23.         $(function () {
24.             changeCheckedStyle();
25.         });
26. 
27.         function changeCheckedStyle() {
28.             $(".sku_attr_value").parent().css({"border": "solid 1px #ccc"});
29.             $("a[class='sku_attr_value checked']").parent().css({"border": "solid 1px red"});
30.         };


相关文章
|
XML JSON API
淘宝天猫API接入说明(淘宝天猫商品详情+关键词搜索商品列表)商品详情数据,商品sku数据,商品优惠券数据
业务场景:作为全球最大的 B2C 电子商务平台之一,淘宝天猫平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝天猫平台,淘宝天猫平台提供了丰富的 API 接口,其中历史价格接口是非常重要的一部分。大家有探讨稳定采集淘宝(天猫)京东阿里拼多多等平台整站实时商品详情历史价格数据接口,通过该接口开发者可以更好地了解商品的情况,商品详情数据详细信息查询,数据参数包括:商品链接,商品列表主图、价格、标题,sku,库存,销量,店铺昵称,店铺等级,商品详情SKU属性,商品视频,商品优惠券,促销信息,详情属性描述,宝贝ID,区域ID,发货地,发货至,快递费用,物流费用等页面上有的数据
|
2月前
|
XML JSON API
淘宝商品详情API接口:获取商品信息的指南
淘宝详情API接口是淘宝开放平台提供的一种API接口,它允许开发者通过编程方式获取淘宝商品的详细信息。这些信息包括商品的基本属性、价格、库存状态、销售策略、卖家信息等,对于电商分析、市场研究或者商品信息管理等场景非常有用。
104 1
|
4月前
|
数据采集 供应链 API
电商商品详情数据和店铺所有商品数据
电商商品详情数据和店铺所有商品数据是电商运营中至关重要的两部分数据,它们对于商家来说具有极高的商业价值。以下是对这两部分数据的详细解析:
|
3月前
|
JSON 数据挖掘 API
Lazada商品详情接口详解
Lazada是东南亚领先的电商平台,其API让开发者能自动化获取商品信息及分析数据。开发者需先注册获取API密钥,并阅读API文档了解接口使用方法。通过类似`item_get`的接口,可按商品ID请求详细信息。示例展示了使用Python和requests库获取商品详情的过程,包括设置参数和解析响应数据。注意API使用限制、数据安全及适时更新程序以应对API变动。
|
5月前
|
XML 监控 API
淘宝商品详情数据接口全攻略:如何高效获取与分析商品信息
【淘宝商品详情数据接口全攻略】:注册开发者账号,申请API权限,构建HTTP请求获取商品信息,包括基础属性、价格等。遵循规则,处理并分析数据,用于竞品分析、价格监控和用户行为洞察。利用接口高效获取数据,助力电商决策。#淘宝API #数据分析
|
6月前
|
监控 数据挖掘 API
淘宝商品详情数据(商品分析,竞品分析,代购商城建站与跨境电商,ERP系统商品数据选品)
淘宝商品详情数据在多个业务场景中发挥着关键作用,以下是一些主要的应用场景
|
6月前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项(淘宝商品详情店铺)
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
6月前
|
JSON API 数据格式
淘宝商品详情数据接口用于ERP选品
淘宝商品详情数据接口用于ERP选品
|
6月前
|
存储 JSON 数据挖掘
如何通过京东工业商品API接口获取商品详情
京东工业是一个专注于工业品采购和销售的电商平台,为工业领域的用户提供了一站式的采购解决方案。为了方便工业品供应商和开发者获取商品详情,京东工业提供了商品API接口。本文将详细介绍如何通过京东工业商品API接口来获取商品详情,并提供相应的代码示例。
|
6月前
|
存储 数据采集 搜索推荐
淘宝商品详情接口在电商运营中的应用实例
某电商企业A在运营过程中,发现手动更新商品信息效率低下,且容易出现信息不一致的情况。为了解决这个问题,企业A决定采用淘宝商品详情接口,实现商品信息的自动获取和更新。