第11天-商品服务(销售属性维护,属性分组与属性关联)

1.销售属性-CRUD



1.1.数据表结构说明

  • 销售属性和规格参数(基本属性)共用同一张表 pms_attr
  • 通过 attr_type 来区分
    0:销售属性
    1:基本属性
    2:既是销售属性又是基本属性


2.属性分组与属性关联-查询



2.1.功能描述

属性分组页面 ,点击 关联 ,弹出 属性分组与属性关联列表 对话框

在这里插入图片描述



2.2.API

GET /product/attrgroup/{attrgroupId}/attr/relation



2.3.后台接口实现

AttrGroupController

	/**
     * 查询属性分组与属性关联关系
     * @param attrgroupId 属性分组ID
     * @return 当前属性分组的属性集合
     */
    @RequestMapping("{attrgroupId}/attr/relation")
    public R attrRelation(@PathVariable("attrgroupId") Long attrgroupId){
        List<AttrEntity> attrEntities = attrService.getAttrRelation(attrgroupId);
        return R.ok().put("data", attrEntities);
    }

AttrGroupServiceImpl

	/**
     * 查询属性分组与属性关联关系
     * @param attrgroupId 属性分组ID
     * @return 当前属性分组的属性集合
     */
    @Override
    public List<AttrEntity> getAttrRelation(Long attrgroupId) {
        // 从 pms_attr_attrgroup_relation 表中查找指定的属性分组
        List<AttrAttrgroupRelationEntity> relationEntities = relationDao.selectList(
                new QueryWrapper<AttrAttrgroupRelationEntity>()
                        .eq("attr_group_id", attrgroupId));

		// 根据属性分组查找到所有的属性ID
        List<Long> attrIds = relationEntities.stream().map(relationEntity-> {
            return relationEntity.getAttrId();
        }).collect(Collectors.toList());

		if (attrIds == null || attrIds.size() == 0) {
			return null;
		}
		// 批量查找所有的属性
		List<AttrEntity> attrEntities = this.listByIds(attrIds);
        return attrEntities;
    }


3.属性分组与属性关联-移除



3.1.API

POST /product/attrgroup/attr/relation/delete

//请求参数
[{"attrId":1, "attrGroupId":2}]

//响应数据
{
	"msg": "success",
	"code": 0
}


3.2.后台接口实现

AttrGroupRelationVO

package com.atguigu.gmall.product.vo;

import lombok.Data;

/**
 * @Description:属性分组与属性关联关系 VO 对象
 * @Auther: zhangwen
 * @Date: 2023-02-22 19:58
 * @version: 1.0
 */
@Data
public class AttrGroupRelationVO {
    /**
     * 属性Id
     */
    private Long attrId;

    /**
     * 属性分组Id
     */
    private Long attrGroupId;
}

AttrGroupController

	/**
     * 移除属性分组与属性关联关系
     * @param vos 属性分组与属性关联关系VO对象集合
     * @return
     */
    @PostMapping("/attr/relation/delete")
    public R deleteRelation(@RequestBody AttrGroupRelationVO[] vos){
        attrGroupService.deleteRelation(vos);
        return R.ok();
    }

AttrGroupServiceImpl

	/**
     * 删除属性与属性分组关联关系
     * @param vos 属性分组与属性关联关系VO对象集合
     */
    @Override
    public void deleteRelation(AttrGroupRelationVO[] vos) {
        List<AttrAttrgroupRelationEntity> entities =
                Arrays.asList(vos).stream().map(relationVO ->{
            AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
            BeanUtils.copyProperties(relationVO, relationEntity);
            return relationEntity;
        }).collect(Collectors.toList());
        relationDao.deleteRelation(entities);
    }

AttrAttrgroupRelationDao

package com.atguigu.gmall.product.dao;

import com.atguigu.gmall.product.entity.AttrAttrgroupRelationEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 属性&属性分组关联
 * 
 * @author zhangwen
 * @email 1466787185@qq.com
 * @date 2023-02-03 16:13:37
 */
@Mapper
public interface AttrAttrgroupRelationDao extends BaseMapper<AttrAttrgroupRelationEntity> {

    /**
     * 删除属性分组与属性关联关系
     * @param entities
     */
    void deleteRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
}

AttrAttrgroupRelationDao.xml

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


4.属性分组与属性关联 - 新增关联



4.1.获取属性分组没有关联的其他属性


4.1.1.功能描述

在这里插入图片描述

4.1.2.API

GET /product/attrgroup/{attrgroupId}/noattr/relation


4.1.3.后台接口实现

AttrGroupController

	/**
     * 查询属性分组未关联的属性
     * @param attrGroupId
     * @return
     */
    @GetMapping("/{attrGroupId}/noattr/relation")
    public R attrNoRelation(@PathVariable("attrGroupId") Long attrGroupId,@RequestParam Map<String,Object> params){
        PageUtils page = attrService.getNoAttrRelation(params,attrGroupId);
        return R.ok().put("page", page);
    }

AttrServiceImpl

	/**
     * 查询属性分组未关联的属性
     * @param params
     * @param attrGroupId
     * @return
     */
    @Override
    public PageUtils getNoAttrRelation(Map<String, Object> params, Long attrGroupId) {
        // 当前分组只能关联自己所属的分类里面的所有属性
        AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrGroupId);
        Long catelogId = attrGroupEntity.getCatelogId();

        // 当前分组只能关联别的分组没有引用的属性
        // 1. 查找当前分类下的所有属性分组
        List<AttrGroupEntity> attrGroupEntities = attrGroupDao.selectList(
                new QueryWrapper<AttrGroupEntity>()
                        .eq("catelog_id", catelogId));
        List<Long> attrGroupIds = attrGroupEntities.stream().map(groupEntity -> {
            return groupEntity.getAttrGroupId();
        }).collect(Collectors.toList());

        // 2. 查找分组关联的所有属性id
        List<AttrAttrgroupRelationEntity> relationEntities = relationDao.selectList(
                new QueryWrapper<AttrAttrgroupRelationEntity>()
                        .in("attr_group_id", attrGroupIds));
        List<Long> attrIds = relationEntities.stream().map(relationEntity -> {
            return relationEntity.getAttrId();
        }).collect(Collectors.toList());

        // 3. 从当前分类的所有属性中移除这些属性
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>()
                .eq("catelog_id", catelogId)
                .eq("attr_type", ProductConstant.attrEnum.ATTR_TYPE_BASE.getCode());
        if (attrIds != null && attrIds.size() > 0) {
            queryWrapper.notIn("attr_id", attrIds);
        }

        // 若带有查询条件,则需要拼装查询语句
        String key = (String) params.get("key");
        if (!StringUtils.isEmpty(key)) {
            queryWrapper.and(wrapper -> {
                wrapper.eq("attr_id", key).or().like("attr_name", key);
            });
        }

        IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params), queryWrapper);

        return new PageUtils(page);
    }


4.2.新增属性分组与属性关联关系


4.2.1.API

POST /product/attrgroup/attr/relation

//请求参数
[{
	"attrGroupId": 0, // 分组id
	"attrId": 0, // 属性id
}]

//响应数据
{
	"msg": "success",
	"code": 0
}

4.2.2.后台接口实现

AttrGroupController

	/**
     * 新增属性与分组关联关系
     * @param vos
     * @return
     */
    @RequestMapping("/attr/relation")
    public R addRelation(@RequestBody List<AttrGroupRelationVO> vos){
        relationService.addRelation(vos);
        return R.ok();
    }

AttrAttrgroupRelationServiceImpl

	/**
     * 新增属性与分组关联关系
     * @param vos
     * @return
     */
    @Override
    public void addRelation( List<AttrGroupRelationVO>  vos) {
        List<AttrAttrgroupRelationEntity> relationEntities = vos.stream().map(vo -> {
            AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
            BeanUtils.copyProperties(vo,relationEntity);
            return relationEntity;
        }).collect(Collectors.toList());

        //批量保存关联关系
        this.saveBatch(relationEntities);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值