商城业务:商品详情

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

商品详情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.         };


相关文章
|
7月前
|
XML JSON API
淘宝天猫API接入说明(淘宝天猫商品详情+关键词搜索商品列表)商品详情数据,商品sku数据,商品优惠券数据
业务场景:作为全球最大的 B2C 电子商务平台之一,淘宝天猫平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝天猫平台,淘宝天猫平台提供了丰富的 API 接口,其中历史价格接口是非常重要的一部分。大家有探讨稳定采集淘宝(天猫)京东阿里拼多多等平台整站实时商品详情历史价格数据接口,通过该接口开发者可以更好地了解商品的情况,商品详情数据详细信息查询,数据参数包括:商品链接,商品列表主图、价格、标题,sku,库存,销量,店铺昵称,店铺等级,商品详情SKU属性,商品视频,商品优惠券,促销信息,详情属性描述,宝贝ID,区域ID,发货地,发货至,快递费用,物流费用等页面上有的数据
|
3月前
|
API 开发者
淘宝店铺订单接口丨淘宝店铺订单交易接口技术文档
淘宝店铺订单接口丨淘宝店铺订单交易接口技术文档
56 0
|
28天前
|
监控 数据挖掘 API
淘宝商品详情数据(商品分析,竞品分析,代购商城建站与跨境电商,ERP系统商品数据选品)
淘宝商品详情数据在多个业务场景中发挥着关键作用,以下是一些主要的应用场景
|
1月前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项(淘宝商品详情店铺)
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
1月前
|
JSON API 数据格式
淘宝商品详情数据接口用于ERP选品
淘宝商品详情数据接口用于ERP选品
22 0
|
4月前
|
存储 JSON 数据挖掘
如何通过京东工业商品API接口获取商品详情
京东工业是一个专注于工业品采购和销售的电商平台,为工业领域的用户提供了一站式的采购解决方案。为了方便工业品供应商和开发者获取商品详情,京东工业提供了商品API接口。本文将详细介绍如何通过京东工业商品API接口来获取商品详情,并提供相应的代码示例。
|
4月前
|
存储 数据采集 搜索推荐
淘宝商品详情接口在电商运营中的应用实例
某电商企业A在运营过程中,发现手动更新商品信息效率低下,且容易出现信息不一致的情况。为了解决这个问题,企业A决定采用淘宝商品详情接口,实现商品信息的自动获取和更新。
|
4月前
|
存储 API 数据安全/隐私保护
淘宝详情API接口:一键获取商品信息的实践探索
淘宝作为中国最大的电商平台,拥有庞大的商品信息库。为了更好地利用这些数据,开发者可以通过淘宝提供的API接口来获取商品详情。本文将深入探讨如何使用淘宝详情API接口一键获取商品信息,通过实践操作和代码示例,带领读者深入了解该接口的使用方法和注意事项。
|
5月前
|
JSON JavaScript 前端开发
使用商品详情API接口获取商品数据
在电子商务领域,商品详情API接口是一种常用的工具,用于从服务器获取特定商品的详细信息。通过使用这些API接口,开发人员可以轻松地获取商品的名称、价格、描述、图片等数据,从而为用户提供更好的购物体验。本文将详细介绍如何使用商品详情API接口来获取想要的商品数据,并提供相关的代码示例。
|
8月前
|
SQL 前端开发
显示商品详情【项目 商城】
显示商品详情【项目 商城】
68 0