电商第六天:
    回顾:

    1. spu,sku 保存! 注意事务!
    1. 2. 商品详情业务介绍!
    2. 3. 商品详情中需要开发的功能,以及扩展功能介绍!
    3. 4. 模板渲染Thymeleaf
    4. 必须要完成的是 后台得有商品!

    重点:

    1. 完成商品详情数据获取!
    a.    商品详情页面URL 分析!
            首页:https://www.jd.com/
            检索:https://list.jd.com/list.html?cat=9987,653,655
            详情:https://item.jd.com/100014348492.html
    
            https://item.jd.com/100014348492.html     skuId 如何传递进来的? 商品检索列表中获取!
    
            https://item.jd.com/{skuId}.html
    
            item.jd.com : 域名
            {skuId}.html:控制器
    
            @GetMapping("{skuId}.html")
            public String item(@Pathvariable Long skuId){
                SkuInfo skuInfo = getSkuInfo(skuId);
                //  skuInfo 存储!
                //    返回视图名称:
                return "item";
    
            }
    
    b.    商品详情相关模块划分
    
    
    c.    功能开发:
            创建一个service-item 微服务!    主要的作用?
    
    d.    在 service-prduct 中 数据提供!
    
            1.    分类信息数据
                    分析:
                        数据获取过程:
                        a.    商品详情页面中只有一个 skuId !
                        b.    分类名称 分别在 category1 category2 category3;
                                select category3_id from sku_info where id = 21; # category3_id = 61
                                select name,category2_id from base_category3 where id = 61; #
                                select name,category1_id from base_category2 where id = 13; #
                                select name from base_category1 where id = 2; #
    
                                view 视图 在电商中结合使用! 虚拟表!
                                create view v_name as sql;
    
    
            2.    商品的基本信息 skuInfo + skuImageList 
    
            3.    价格需要单独查询:保证数据是实时价格!
    
            4.    回显销售属性 + 销售属性值 + 锁定!
                    a.    根据 spuId 获取到销售属性 + 销售属性值!
                        select ssa.id,
                               ssa.spu_id,
                               ssa.base_sale_attr_id,
                               ssa.sale_attr_name,
                               ssav.id sale_attr_value_id,
                               ssav.sale_attr_value_name
                        from spu_sale_attr ssa
                                 inner join spu_sale_attr_value ssav on
                                ssa.spu_id = ssav.spu_id and ssa.base_sale_attr_id = ssav.base_sale_attr_id
                        where ssa.spu_id = 9;
    
                    b.    根据skuId 找到对应的销售属性值Id !
                            select * from sku_sale_attr_value where sku_id = 21;
    
                    c.    将以上两条sql 语句进行整合!
                            select ssa.id,
                                   ssa.spu_id,
                                   ssa.base_sale_attr_id,
                                   ssa.sale_attr_name,
                                   ssav.id sale_attr_value_id,
                                   ssav.sale_attr_value_name,
                                   sav.sku_id,
                                   if(sav.sku_id is null, 0 ,1) is_checked
                            from spu_sale_attr ssa
                                     inner join spu_sale_attr_value ssav on
                                        ssa.spu_id = ssav.spu_id and ssa.base_sale_attr_id = ssav.base_sale_attr_id
                                     left join sku_sale_attr_value sav on ssav.id = sav.sale_attr_value_id and sav.sku_id = 21
                            where ssa.spu_id = 9
                            order by ssav.base_sale_attr_id,ssav.id;
    
                                is_checked = 0 ; 不选中, is_checked = 1 选中!
    
            5.    切换功能:用户通过点击不同的销售属性值Id,来切换skuId!
                    分析:
                        a.    获取到前端点击的销售属性值Id!
                                skuId = 21
                                用户点击:valueId =  3729|3731  组成skuId = 21 
                                http://item.gmall.com/21.html
    
                                用户点击:valueId =  3729|3730 组成skuId = 22
                                http://item.gmall.com/22.html
    
    
                                用户点击:valueId =  3728|3730 组成skuId = null
                                http://item.gmall.com/22.html    不动!
    
                        b.    在后台将某个spuId 组成的valueId 与 skuId 生成一个Json 字符串!
                                spuId = 9 ; skuId = 21 ,22
                                Json 字符串:{"3729|3730":"22","3729|3731":"21"}
    
                                此时,用户如果点电击了 “3729|3731”
    
                    功能开发:
                        数据来源:
                            销售属性值Id ,skuId!
                            spu_sale_attr_value 销售属性值Id!
                            sku_sale_attr_value    销售属性值Id ,skuId!
    
                            关键点:
                                select group_concat(sale_attr_value_id order by base_sale_attr_id separator '|') value_ids, sku_id
                                from sku_sale_attr_value sav
                                         inner join spu_sale_attr_value ssav
                                                    on sav.sale_attr_value_id = ssav.id and sav.spu_id = 9
                                group by sav.sku_id;
    
                        获取数据:
                            //    第一种方式:
                                class ParamDTO{
                                    String valueIds = "";
                                    Long skuId = "";
                                }
    
                                List<ParamDTO> dtoList = xxx();
    
                            //    第二种方式:
                                从前有个实体类 ,承载数据的! 
                                Map 可以 代替实体类 KEY VALUE 
                                KEY -- valueIds
                                KEY -- skuId
    
                                VALUE -- value
                                VALUE -- value
    
                                结论:map 可以代替实体类!
    
    
    
    
            6.    海报
    
            7.    规格参数
                    SQL:
                    select * from base_attr_info bai
                        inner join base_attr_value bav on bai.id = bav.attr_id
                        inner join sku_attr_value sav on  bav.id = sav.value_id
                    where sav.sku_id = 21;