• gulimall基础篇回顾Day-11


    前言

    本文主要记录B站谷粒商城项目视频 P80-82 的内容,做到知识点的梳理和总结的作用,接口文档地址:gulimall接口文档

    一、查询分组关联属性与删除关联

    1.1 属性分组与属性关联关系

    (1)需求描述:每个属性分组可以关联多个属性例如:主体这个属性分组可以关联入网型号,品牌,上市年份等多个基本属性(也称规格参数)。如下图:点击关联前端带上属性分组id发送如下请求,能够查询出该分组下所有关联的基本属性(也称规格参数)。
    在这里插入图片描述
    (2)代码实现如下

    /**
     * 获取属性分组关联的所有属性
     * @param attrgroupId
     * @return
     */
    @GetMapping("/{attrgroupId}/attr/relation")
    public R attrRelation(@PathVariable("attrgroupId") Long attrgroupId){
        List<AttrEntity> entities =  attrService.getRelationAttr(attrgroupId);
        return R.ok().put("data",entities);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    /**
     * 根据分组id查找关联的所有基本属性
     * @param attrgroupId
     * @return
     */
    @Override
    public List<AttrEntity> getRelationAttr(Long attrgroupId) {
        //根据属性分组id查询属性与属性分组关联表 attr_group_id = attrgroupId的List集合
        List<AttrAttrgroupRelationEntity> entities = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_group_id", attrgroupId));
        //对entities过滤返回属性id封装成List集合
        List<Long> attrIds = entities.stream().map((attr) -> {
            return attr.getAttrId();
        }).collect(Collectors.toList());
        //集合为空,表明该属性分组没有关联基本属性
        if(attrIds == null || attrIds.size() == 0){
            return null;
        }
        //通过attrIds查找AttrEntity封装成List并返回
        Collection<AttrEntity> attrEntities = this.listByIds(attrIds);
        return (List<AttrEntity>) attrEntities;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1.2 属性分组与属性关联移除

    (1)需求描述:点击移除前端发送如下请求,能够移除属性分组与属性的关联关系。
    在这里插入图片描述
    (2)请求参数是个集合,能做到批量删除的效果

    [{“attrId”:1,“attrGroupId”:2}]

    (3)代码实现如下

    @Data
    public class AttrGroupRelationVo {
        //"attrId":1,"attrGroupId":2
        private Long attrId;
        private Long attrGroupId;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    /**
     * 删除属性与属性分组的关联关系
     * @param vos
     * @return
     */
    @PostMapping("/attr/relation/delete")
    public R deleteRelation(@RequestBody  AttrGroupRelationVo[] vos){
        attrService.deleteRelation(vos);
        return R.ok();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    @Override
    public void deleteRelation(AttrGroupRelationVo[] vos) {
        //relationDao.delete(new QueryWrapper<>().eq("attr_id",1L).eq("attr_group_id",1L));
        //
        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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    @Mapper
    public interface AttrAttrgroupRelationDao extends BaseMapper<AttrAttrgroupRelationEntity> {
        void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
    }
    
    • 1
    • 2
    • 3
    • 4
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、查询分组未关联的属性

    2.1 查询分组未关联的属性列表

    (1)需求描述:如下图点击新建关联,弹出对话框,我们可以根据该分类下没被其他属性分组关联的基本属性(也称规格参数)设置关联,让基本属性与属性分组产生关联关系。
    在这里插入图片描述
    (2)例如下图:属性名为AA的,所属分类为手机分类但是其属性分组为空即没有与其他属性分组关联。所以我们可以在上图点勾,让它与主体产生关联。
    在这里插入图片描述
    (3)代码实现如下

    /**
     * 获取属性分组里面还没有关联的本分类里面的其他基本属性
     * 方便添加新的关联
     * @param params
     * @param catelogId
     * @param type
     * @return
     */
    @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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    /**
     * 获取当前分组没有关联的所有属性
     * @param params
     * @param attrgroupId
     * @return
     */
    @Override
    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.ATTR_TYPE_BASE.getCode());
        if(attrIds!=null && attrIds.size()>0){
            wrapper.notIn("attr_id", attrIds);
        }
        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    三、新增分组与属性的关联

    3.1 新增分组与属性的关联关系

    (1)前面完成了查询属性分组未关联的基本属性列表,接下来完成属性分组新增基本属性的功能。需求描述:AA打勾确认新增,即可完成新增分组与属性的关联关系,如下图。
    在这里插入图片描述
    在这里插入图片描述
    (2)代码实现

    @Data
    public class AttrGroupRelationVo {
        //"attrId":1,"attrGroupId":2
        private Long attrId;
        private Long attrGroupId;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    /**
     * 方法参数为List vos 可批量新增
     * 新增基本属性与属性分组关联关系
     * @param vos
     * @return
     */
    @PostMapping("/attr/relation")
    public R addRelation(@RequestBody List<AttrGroupRelationVo> vos){
    
        relationService.saveBatch(vos);
        return R.ok();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    【C++】list基本接口+手撕 list(详解迭代器)
    【一起进大厂】最新Java并发面试题整理
    上半年Java面试真题整理,一共343道,每一题都很经典,上半年就有89人拿到offer
    “阿里巴巴API:获取商品详情,掌握市场动态,提升竞争力!“
    Linux环境搭配
    新考纲下的PMP考试有多难?全面解析
    Win11快捷复制粘贴不能用怎么办?Win11快捷复制粘贴不能用
    js高效函数库Lodash.js
    【Android面试八股文】在onResume中是否可以测量宽高?
    JQ完成模拟QQ好友分组案例(介绍JQ实现原理)
  • 原文地址:https://blog.csdn.net/m0_49692893/article/details/126815750