文章目录
这一节的主要内容是完成根据分组查询其所属的所有属性。
一,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,发布商品的四个步骤如下
-
录入商品基本信息:
- 商品名称、描述、所属分类、品牌等。
- 商品重量(用于邮费计算)。
- 商品积分(购买后赠送的金币和累积的成长值,用于提升用户等级)。
- 商品介绍(通过上传大图形式展示商品图集)。
-
录入规格参数:
- 选择商品分类后,关联相应的规格参数。
- 录入规格参数的相关信息。
-
选择销售属性:
- 根据商品分类,选择或自定义销售属性(如颜色、版本等)。
- 例如,华为 Mate 30 Pro 可以选择颜色和内存存储组合(如8+128G、8+256G)。
-
设置 SKU 信息:
- 根据选择的销售属性,动态生成 SKU 信息。
- 录入 SKU 的商品名称、副标题、价格等。
- 设置每个 SKU 的满减信息、折扣信息等。
- 选择并设置商品图片,包括默认图片。
2,会员member服务
打开会员等级页面,测试新增会员等级功能。
如下新增一条会员等级数据,代码生成工具生成的代码,已经足够完成这个任务。
继续新增4条数据。