分布式电商项目四十三:发布商品功能-获取分类下所有分组&关联属性

发布商品功能-获取分类下所有分组&关联属性

本章来到发布商品功能的下一步,添加商品的规格参数:
在这里插入图片描述
对应的API文档:

17、获取分类下所有分组&关联属性
GET
/product/attrgroup/{catelogId}/withattr
响应数据
{
	"msg": "success",
	"code": 0,
	"data": [{
		"attrGroupId": 1,
		"attrGroupName": "主体",
		"sort": 0,
		"descript": "主体",
		"icon": "dd",
		"catelogId": 225,
		"attrs": [{
			"attrId": 7,
			"attrName": "入网型号",
			"searchType": 1,
			"valueType": 0,
			"icon": "xxx",
			"valueSelect": "aaa;bb",
			"attrType": 1,
			"enable": 1,
			"catelogId": 225,
			"showDesc": 1,
			"attrGroupId": null
			}, {
			"attrId": 8,
			"attrName": "上市年份",
			"searchType": 0,
			"valueType": 0,
			"icon": "xxx",
			"valueSelect": "2018;2019",
			"attrType": 1,
			"enable": 1,
			"catelogId": 225,
			"showDesc": 0,
			"attrGroupId": null
			}]
		},
		{
		"attrGroupId": 2,
		"attrGroupName": "基本信息",
		"sort": 0,
		"descript": "基本信息",
		"icon": "xx",
		"catelogId": 225,
		"attrs": [{
			"attrId": 11,
			"attrName": "机身颜色",
			"searchType": 0,
			"valueType": 0,
			"icon": "xxx",
			"valueSelect": "黑色;白色",
			"attrType": 1,
			"enable": 1,
			"catelogId": 225,
			"showDesc": 1,
			"attrGroupId": null
		}]
	}]
}

首先根据返回信息,创建一个对应的VO来保存所有信息,避免信息的遗漏:

package com.lastingwar.mall.product.vo;


import com.lastingwar.mall.product.entity.AttrEntity;
import lombok.Data;

import java.util.List;


@Data
public class AttrGroupWithAttrsVo {

    /**
     * 分组id
     */
    private Long attrGroupId;
    /**
     * 组名
     */
    private String attrGroupName;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 描述
     */
    private String descript;
    /**
     * 组图标
     */
    private String icon;
    /**
     * 所属分类id
     */
    private Long catelogId;

    private List<AttrEntity> attrs;
}

之后根据接口信息,来到对应的控制层:/product/attrgroup/{catelogId}/withattr:

    /**
     *  对应响应 product/attrgroup/{catelogId}/withattr
     *  获取分类下所有分组&关联属性
     * @param catelogId 分类ID
     * @return 分类下的分组和属性
     */
    @GetMapping("/{catelogId}/withattr")
    public R getAttrGroupWithAttrs(@PathVariable("catelogId")Long catelogId){

        //1、查出当前分类下的所有属性分组,
        //2、查出每个属性分组的所有属性
        List<AttrGroupWithAttrsVo> vos =  attrGroupService.getAttrGroupWithAttrsByCatelogId(catelogId);
        return R.ok().put("data",vos);
    }

之后实现方法getAttrGroupWithAttrsByCatelogId(catelogId),来完成根据分类ID,查找所以属性分组和属性:

    /**
     * 根据分类id查出所有的分组以及这些组里面的属性
     * @param catelogId 分类ID
     * @return  当前分类的所有属性分组下的所有属性
     */
    @Override
    public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long catelogId) {
        //com.atguigu.gulimall.product.vo
        //1、查询分组信息
        List<AttrGroupEntity> attrGroupEntities = this.list(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));

        //2、查询所有属性
        List<AttrGroupWithAttrsVo> collect = attrGroupEntities.stream().map(group -> {
            AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
            BeanUtils.copyProperties(group,attrsVo);
            List<AttrEntity> attrs = attrService.getRelationAttr(attrsVo.getAttrGroupId());
            attrsVo.setAttrs(attrs);
            return attrsVo;
        }).collect(Collectors.toList());

        return collect;


    }

之后重启服务来到前端测试:注意这里的前端代码有遍历的操作,如果属性分组中没有属性会报空指针异常
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天猫是中国最大的电商平台之一,其背后支撑的是一套高并发、分布式的架构设计。在天猫的架构设计中,Java作为主要的开发语言之一,扮演了重要的角色。 首先,天猫的架构设计采用了分布式的思想。在天猫的系统中,不同的功能模块被拆分为独立的服务,每个服务都运行在不同的服务器上,实现了内容的分布与并发处理。这种架构设计可以实现高可用性和横向扩展的特性,使得系统在面对亿级高并发时能够保持稳定。 其次,天猫的架构设计注重性能优化。在天猫的系统中,通过使用缓存技术和负载均衡技术,优化了系统的响应时间和吞吐量。同时,利用集群和分布式数据库等技术,实现了数据的高可靠性和快速读写。通过这些手段,天猫在高并发情况下能够有效地提供服务,保证用户的购物体验。 另外,天猫的架构设计还考虑了安全性和可扩展性。在安全方面,天猫采用了多层次的安全机制,包括数据加密、防火墙等,确保用户的信息和交易数据的安全。在可扩展性方面,天猫的系统可以随着用户数量的增加进行水平扩展,通过增加服务器数量和服务节点,提高系统的并发处理能力。 总的来说,天猫的架构设计在Java的支持下,通过分布式、性能优化、安全性和可扩展性等方面的设计,实现了对亿级高并发的支持。这个设计可以为电商行业提供参考,帮助其他电商平台构建具有高并发能力的系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值