谷粒商城实战笔记-80~83-商品服务-API-平台属性-查询分组关联属性&删除关联


这一节的主要内容是完成根据分组查询其所属的所有属性。

一,80-商品服务-API-平台属性-查询分组关联属性&删除关联

1,新增后台查询接口

这个接口的url是/product/attrgroup/1/attr/relation

后台没有对应的接口。

在AttrGroupController中增加接口。

	@GetMapping("/{attrgroupId}/attr/relation")
    public R attrRelation(@PathVariable("attrgroupId") Long attrgroupId){
        List<AttrEntity> entities =  attrService.getRelationAttr(attrgroupId);
        return R.ok().put("data",entities);
    }

对应的Service接口。

	@Override
    public List<AttrEntity> getRelationAttr(Long attrgroupId) {
        List<AttrAttrgroupRelationEntity> entities = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_group_id", attrgroupId));

        List<Long> attrIds = entities.stream().map((attr) -> {
            return attr.getAttrId();
        }).collect(Collectors.toList());

        if(attrIds == null || attrIds.size() == 0){
            return null;
        }
        Collection<AttrEntity> attrEntities = this.listByIds(attrIds);
        return (List<AttrEntity>) attrEntities;
    }

重启服务后,效果如下。

在这里插入图片描述

2,新增删除接口

Controller:

 	@PostMapping("/attr/relation/delete")
    public R deleteRelation(@RequestBody  AttrGroupRelationVo[] vos){
        attrService.deleteRelation(vos);
        return R.ok();
    }

Service:

  @Override
    public void deleteRelation(AttrGroupRelationVo[] vos) {

        List<AttrAttrgroupRelationEntity> entities = Arrays.asList(vos).stream().map((item) -> {
            AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
            BeanUtils.copyProperties(item, relationEntity);
            return relationEntity;
        }).collect(Collectors.toList());
        relationDao.deleteBatchRelation(entities);
    }

Dao:

@Mapper
public interface AttrAttrgroupRelationDao extends BaseMapper<AttrAttrgroupRelationEntity> {

    void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);

}

Mapper.xml文件:

<delete id="deleteBatchRelation">
        DELETE FROM pms_attr_attrgroup_relation WHERE
        <foreach collection="entities" item="item" separator=" OR ">
            (attr_id = #{item.attrId} AND attr_group_id = #{item.attrGroupId})
        </foreach>
    </delete>

二,81-商品服务-API-平台属性-查询分组未关联的属性

这一节的主要内容,是给分组关联属性,只能关联没有关联分组的属性,所以要先查询未关联分组的属性。

AttrGroupController中增加接口。

 @GetMapping("/{attrgroupId}/noattr/relation")
    public R attrNoRelation(@PathVariable("attrgroupId") Long attrgroupId,
                            @RequestParam Map<String, Object> params){
        PageUtils page = attrService.getNoRelationAttr(params,attrgroupId);
        return R.ok().put("page",page);
    }

对应的Service中的代码,这段代码的逻辑稍微有点长。

    public PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId) {
        //1、当前分组只能关联自己所属的分类里面的所有属性
        AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrgroupId);
        Long catelogId = attrGroupEntity.getCatelogId();
        //2、当前分组只能关联别的分组没有引用的属性
        //2.1)、当前分类下的其他分组
        List<AttrGroupEntity> group = attrGroupDao.selectList(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));
        List<Long> collect = group.stream().map(item -> {
            return item.getAttrGroupId();
        }).collect(Collectors.toList());

        //2.2)、这些分组关联的属性
        List<AttrAttrgroupRelationEntity> groupId = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().in("attr_group_id", collect));
        List<Long> attrIds = groupId.stream().map(item -> {
            return item.getAttrId();
        }).collect(Collectors.toList());

        //2.3)、从当前分类的所有属性中移除这些属性;
        QueryWrapper<AttrEntity> wrapper = new QueryWrapper<AttrEntity>().eq("catelog_id", catelogId).eq("attr_type",ProductConstant.AttrEnum.BASE.getCode());
        if(attrIds!=null && attrIds.size()>0){
            wrapper.notIn("attr_id", attrIds);
        }
        String key = (String) params.get("key");
        if(StrUtil.isNotEmpty(key)){
            wrapper.and((w)->{
                w.eq("attr_id",key).or().like("attr_name",key);
            });
        }
        IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params), wrapper);

        PageUtils pageUtils = new PageUtils(page);

        return pageUtils;
    }

三,82-商品服务-API-平台属性-新增分组与属性关联

这一节的是保持分组和属性的关联关系。

Controller中的接口。

	@PostMapping("/attr/relation")
    public R addRelation(@RequestBody List<AttrGroupRelationVo> vos){
        relationService.saveBatch(vos);
        return R.ok();
    }

对应的Service接口。

	@Override
    public void saveBatch(List<AttrGroupRelationVo> vos) {

        List<AttrAttrgroupRelationEntity> collect = vos.stream().map((item) -> {
            AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
            BeanUtils.copyProperties(item, relationEntity);
            return relationEntity;
        }).collect(Collectors.toList());

        this.saveBatch(collect);
        
    }

四,关键-83-商品服务-API-新增商品-调试会员等级相关接口

这一节的内容比较重要,是理解电商业务流程的很重要一环。

这一节的重要内容:

  • 发布商品的4个步骤
  • 会员服务的配置和启动

1,发布商品的四个步骤如下

  1. 录入商品基本信息

    • 商品名称、描述、所属分类、品牌等。
    • 商品重量(用于邮费计算)。
    • 商品积分(购买后赠送的金币和累积的成长值,用于提升用户等级)。
    • 商品介绍(通过上传大图形式展示商品图集)。
  2. 录入规格参数

    • 选择商品分类后,关联相应的规格参数。
    • 录入规格参数的相关信息。
  3. 选择销售属性

    • 根据商品分类,选择或自定义销售属性(如颜色、版本等)。
    • 例如,华为 Mate 30 Pro 可以选择颜色和内存存储组合(如8+128G、8+256G)。
  4. 设置 SKU 信息

    • 根据选择的销售属性,动态生成 SKU 信息。
    • 录入 SKU 的商品名称、副标题、价格等。
    • 设置每个 SKU 的满减信息、折扣信息等。
    • 选择并设置商品图片,包括默认图片。

2,会员member服务

打开会员等级页面,测试新增会员等级功能。

在这里插入图片描述

如下新增一条会员等级数据,代码生成工具生成的代码,已经足够完成这个任务。

继续新增4条数据。

在这里插入图片描述

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值