前言
谷粒商城的基础部分3/3
全笔记链接(链接给出)谷粒商城笔记(详细版) IDEA2021 基础篇(1/3).
谷粒商城笔记(详细版) IDEA2021 基础篇(2/3).
ES6 VUE 基础篇前端笔记
谷粒商城笔记(详细版) IDEA2021 基础篇(3/3).
正式部分 29 平台属性-规格参数新增与VO 1 VO简介
VO viewobject 就是接受页面传来的数据 封装对象
或者将业务处理完成的对象封装成页面要用的数据
我们前端在新增规格参数时还没有把传来的groupid
传到属性 分组 realation表当中
现在我们来进行代码编写
我们首先来到attr实体类
发现里面没有Groupid字段
如果新增一个字段并加上 @TableField(exist = false)
会和数据库不对应 并且很不规范
创建一个attrVo来接受前端传来数据
其中新建一个属性
因为其不和数据库绑定 所以不用加很多数据库注解
package com.atguigu.gulimall.product.vo;
import lombok.Data;
@Data
public class AttrVo {
/**
* 属性id
*/
private Long attrId;
/**
* 属性名
*/
private String attrName;
/**
* 是否需要检索[0-不需要,1-需要]
*/
private Integer searchType;
/**
* 值类型[0-为单个值,1-可以选择多个值]
*/
private Integer valueType;
/**
* 属性图标
*/
private String icon;
/**
* 可选值列表[用逗号分隔]
*/
private String valueSelect;
/**
* 属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]
*/
private Integer attrType;
/**
* 启用状态[0 - 禁用,1 - 启用]
*/
private Long enable;
/**
* 所属分类
*/
private Long catelogId;
/**
* 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整
*/
private Integer showDesc;
private Long attrGroupId;
}
我们的attr实体类属性就和数据库进行对应 不再进行更改
1 controller编写接受vo
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:attr:save")
public R save(@RequestBody AttrVo attr){
attrService.saveAttr(attr);
return R.ok();
}
2 service
package com.atguigu.gulimall.product.service;
import com.atguigu.gulimall.product.vo.AttrVo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.atguigu.common.utils.PageUtils;
import com.atguigu.gulimall.product.entity.AttrEntity;
import java.util.Map;
/**
* 商品属性
*
* @author yyl
* @email sunlightcs@gmail.com
* @date 2022-04-24 19:01:01
*/
public interface AttrService extends IService<AttrEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveAttr(AttrVo attr);
}
2 serviceimpl
@Transactional
@Override
public void saveAttr(AttrVo attr) {
//创建一个dao实体类
AttrEntity attrEntity = new AttrEntity();
// attrEntity.setAttrName(attr.getAttrName());
//把传来的基本数据传给dao实体类
BeanUtils.copyProperties(attr,attrEntity);
//1、保存基本数据
this.save(attrEntity);
//2、保存关联关系
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrGroupId(attr.getAttrGroupId());
relationEntity.setAttrId(attrEntity.getAttrId());
relationDao.insert(relationEntity);
}
最终测试
发现关系增加到了表中
思路 我们把规格参数的列表请求接口编写一下
能够把规格参数在前端展示出来
0
由于前端返回要求一些数据
我们创建一个返回的VO
在serviceimpl层会封装这个VO并且进行返回
package com.atguigu.gulimall.product.vo;
import lombok.Data;
@Data
public class AttrRespVo extends AttrVo {
/**
* "catelogName": "手机/数码/手机", //所属分类名字
* "groupName": "主体", //所属分组名字
*/
private String catelogName;
private String groupName;
private Long[] catelogPath;
}
1 AttrController
@GetMapping("/{attrType}/list/{catelogId}")
public R baseAttrList(@RequestParam Map<String, Object> params,
@PathVariable("catelogId") Long catelogId,
@PathVariable("attrType")String type){
//1 把传入的type 参数列表 要查询哪个目录下的目录ID 用其调用service层方法
PageUtils page = attrService.queryBaseAttrPage(params,catelogId,type);
return R.ok().put("page", page);
}
2 AttrService
public interface AttrService extends IService<AttrEntity> {
PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId, String type);
PageUtils queryPage(Map<String, Object> params);
void saveAttr(AttrVo attr);
}
3 AttrServiceImpl
@Override
public PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId, String type) {
QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().eq("attr_type","base".equalsIgnoreCase(type)? ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode():ProductConstant.AttrEnum.ATTR_TYPE_SALE.getCode());
//1 创建一个新的queryWrapper AttrEntity
// QueryWrapper queryWrapper = new QueryWrapper<>();
//2 如果传入的catelogId不为0 我们才查询catelogId
if(catelogId != 0){
queryWrapper.eq("catelog_id",catelogId);
}
//3 得到params参数列表中的Key 如果不为空 进行规则匹配(返回属性id等于Key或者是属性name like key)
String key = (String) params.get("key");
if(!StringUtils.isEmpty(key)){
//attr_id attr_name
queryWrapper.and((wrapper)->{
wrapper.eq("attr_id",key).or().like("attr_name",key);
});
}
//4 调用mybatis-plus serviceImpl层的page方法返回Ipage对象
// 其参数是根据Query工具类生成的Page对象 和 queryWrapper
IPage<AttrEntity> page = this.page(
new Query<AttrEntity>().getPage(params),
queryWrapper
);
//5 把生成的Ipage对象封装到pageUtils里
PageUtils pageUtils = new PageUtils(page);
//6 从Ipage得到记录
List<AttrEntity> records = page.getRecords();
List<AttrRespVo> respVos = records.stream().map((attrEntity) -> {
// 生成一个AttrRespVo的VO对象
AttrRespVo attrRespVo = new AttrRespVo();
// 先把原来的数据copy到其中
BeanUtils.copyProperties(attrEntity, attrRespVo);
//1、设置分类和分组的名字
if("base".equalsIgnoreCase(type)){
AttrAttrgroupRelationEntity attrId = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));
if (attrId != null && attrId.getAttrGroupId()!=null) {
AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrId.getAttrGroupId());
attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
}
}
CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCatelogId());
if (categoryEntity != null) {
attrRespVo.setCatelogName(categoryEntity.getName());
}
return attrRespVo;
}).collect(Collectors.toList());
pageUtils.setList(respVos);
return pageUtils;
}
后端postman发送请求观察回显
请求如下
http://localhost:88/api/product/attr/base/list/0?t=1652689194608&page=1&limit=10&key=
最后在前端查看显示效果
前端没数据可能是因为一个语法报错
(先把可选值这一列注释掉)
基础篇完结篇
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)