①. VO(value object)值对象
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。用new关键字创建,由GC回收的
②. DO(Domain 0bject)领域对象
就是从现实世界中推象出来的有形或无形的业务实体
③. TO(Transfer 0bject),数据传输对象传输的对象
不同的应用程序之间传输的对象。微服务
④. DTO(Data Transfer Obiect)数据传输对象
这个概念来源于J2EE的设汁模式,原来的目的是为了EJB的分布式应用握供粗粒度的数据实体,以减少分布式调用的次数,从而握分布式调用的性能和降低网络负载,但在这里,泛指用于示层与服务层之间的数据传输对象
⑤. PO持久对象
PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据的操作
⑥. POJO简单无规则java对象

//如在一些Entity中,为了让mybatis-plus知道某个字段不与数据库匹配,那么就加个@TableField(exist=false)
@TableField(exist=false)
private Long attrGroupId;

@Data
public class AttrVo implements Serializable {
private static final long serialVersionUID = 1L;
// 属性id
private Long attrId;
// 属性名
private String attrName;
// 是否需要检索[0-不需要,1-需要]
private Integer searchType;
// 属性图标
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;
// 参数分组id
private Long attrGroupId;
}
@Transactional
@Override
public void saveAttr(AttrVo attrVo) {
AttrEntity attrEntity = new AttrEntity();
BeanUtils.copyProperties(attrVo,attrEntity);
//1. 保存基本数据
this.save(attrEntity);
//2. 保存关联关系
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrGroupId(attrVo.getAttrGroupId());
relationEntity.setAttrId(attrEntity.getAttrId());
relationDao.insert(relationEntity);
}



@Data
public class AttrRespVo implements Serializable {
// 属性id
private Long attrId;
// 属性名
private String attrName;
// 是否需要检索[0-不需要,1-需要]
private Integer searchType;
// 属性图标
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 String catelogName;
// 所属分组名字
private String groupName;
}
@Override
public PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId) {
QueryWrapper<AttrEntity> wrapper = new QueryWrapper<>();
String key = (String)params.get("key");
if(!StringUtils.isEmpty(key)){
wrapper.and(item->item.eq("attr_id",key).or().like("attr_name",key));
}
if(catelogId!=0){
wrapper.eq("catelog_id",catelogId);
}
IPage<AttrEntity> page = this.page(
new Query<AttrEntity>().getPage(params),
wrapper);
PageUtils pageUtils = new PageUtils(page);
List<AttrEntity> records = page.getRecords();
List<AttrRespVo> respVos = records.stream().map((attrEntity) -> {
AttrRespVo attrRespVo = new AttrRespVo();
BeanUtils.copyProperties(attrEntity, attrRespVo);
//1. 设置分类的名字
CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCatelogId());
if (categoryEntity != null) {
attrRespVo.setCatelogName(categoryEntity.getName());
}
//2. 设置分组的名字
// 需要根据attr_id去参数分组关联表pms_attr_attrgroup_relation查询出分组attr_group_id,根据分组attr_group_id去pms_attr_group表中查询分组名称
AttrAttrgroupRelationEntity attrId = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));
if (attrId != null) {
AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrId.getAttrGroupId());
attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
}
return attrRespVo;
}).collect(Collectors.toList());
pageUtils.setList(respVos);
return pageUtils;
}


/**
* 信息
*/
@RequestMapping("/info/{attrId}")
public R info(@PathVariable("attrId") Long attrId){
AttrRespVo attr = attrService.getAttrInfo(attrId);
return R.ok().put("attr", attr);
}
/**
* 查询属性详情
* @param attrId
* @return
*/
@Override
public AttrRespVo getAttrInfo(Long attrId) {
AttrEntity attrEntity = this.getById(attrId);
AttrRespVo attrRespVo = new AttrRespVo();
BeanUtils.copyProperties(attrEntity,attrRespVo);
//1. 设置分组信息(获取attrGroupId)
AttrAttrgroupRelationEntity relationEntity = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrId));
if(relationEntity!=null){
attrRespVo.setAttrGroupId(relationEntity.getAttrGroupId());
}
//2. 设置分类信息(获取catelogPath)
Long[] categoryPath = categoryService.findCategoryPath(attrEntity.getCatelogId());
if(categoryPath!=null){
attrRespVo.setCatelogPath(categoryPath);
}
return attrRespVo;
}

/**
* 修改
* @param attr
*/
@Transactional
@Override
public void updateAttr(AttrVo attr) {
AttrEntity attrEntity = new AttrEntity();
BeanUtils.copyProperties(attr,attrEntity);
this.updateById(attrEntity);
// 级联修改属性分组表
Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>());
if(count>0){
// 如果有记录就修改
UpdateWrapper<AttrAttrgroupRelationEntity> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("attr_id",attrEntity.getAttrId());
updateWrapper.set("attr_group_id",attr.getAttrGroupId());
relationDao.update(null,updateWrapper);
}else{
// 如果没记录就新增
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrId(attrEntity.getAttrId());
relationEntity.setAttrGroupId(attr.getAttrGroupId());
relationDao.insert(relationEntity);
}
}


public class ProductConstant {
public enum AttrEnum{
ATTR_TYPE_BASE(1,"基本属性"),
ATTR_TYPE_SALE(0,"销售属性");
AttrEnum(int code,String msg){
this.code=code;
this.msg=msg;
}
private int code;
private String msg;
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
}
//@RequestMapping("/base/list/{catelogId}")
@RequestMapping("/{attrType}/list/{catelogId}")
public R baseAttrList(@RequestParam Map<String, Object> params,
@PathVariable("catelogId")Long catelogId,
@PathVariable("attrType")String type){
PageUtils page = attrService.queryBaseAttrPage(params,catelogId,type);
return R.ok().put("page", page);
}
/**
* 规则参数列表展示
* @param params
* @param catelogId
* @param type
* @return
*/
@Override
public PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId, String type) {
QueryWrapper<AttrEntity> wrapper = new QueryWrapper<AttrEntity>();
//销售属性和规格参数属性是同一张表,都记录在pms_attr表中
//如果attr_type=1表示的是规则参数属性(基本属性)、如果attr_type=0表示的是销售属性
wrapper.eq("attr_type","base".equalsIgnoreCase(type)?
ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode():
ProductConstant.AttrEnum.ATTR_TYPE_SALE.getCode());
String key = (String)params.get("key");
if(!StringUtils.isEmpty(key)){
wrapper.and(item->item.eq("attr_id",key).or().like("attr_name",key));
}
if(catelogId!=0){
wrapper.eq("catelog_id",catelogId);
}
IPage<AttrEntity> page = this.page(
new Query<AttrEntity>().getPage(params),
wrapper);
PageUtils pageUtils = new PageUtils(page);
List<AttrEntity> records = page.getRecords();
List<AttrRespVo> respVos = records.stream().map((attrEntity) -> {
AttrRespVo attrRespVo = new AttrRespVo();
BeanUtils.copyProperties(attrEntity, attrRespVo);
//1. 设置分类的名字
CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCatelogId());
if (categoryEntity != null) {
attrRespVo.setCatelogName(categoryEntity.getName());
}
//2. 设置分组的名字(只有是规格参数基本属性的时候才去设置分组的名字)
// 需要根据attr_id去参数分组关联表pms_attr_attrgroup_relation查询出分组attr_group_id,根据分组attr_group_id去pms_attr_group表中查询分组名称
if("base".equalsIgnoreCase(type)){
AttrAttrgroupRelationEntity attrId = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));
if (attrId != null) {
AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrId.getAttrGroupId());
attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
}
}
return attrRespVo;
}).collect(Collectors.toList());
pageUtils.setList(respVos);
return pageUtils;
}
/**
* 查询属性详情
* @param attrId
* @return
*/
@Override
public AttrRespVo getAttrInfo(Long attrId) {
AttrEntity attrEntity = this.getById(attrId);
AttrRespVo attrRespVo = new AttrRespVo();
BeanUtils.copyProperties(attrEntity,attrRespVo);
//1. 设置分组信息(获取attrGroupId)
if (attrEntity.getAttrType()==ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode()){
AttrAttrgroupRelationEntity relationEntity = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrId));
if(relationEntity!=null){
attrRespVo.setAttrGroupId(relationEntity.getAttrGroupId());
}
}
//2. 设置分类信息(获取catelogPath)
Long[] categoryPath = categoryService.findCategoryPath(attrEntity.getCatelogId());
if(categoryPath!=null){
attrRespVo.setCatelogPath(categoryPath);
}
return attrRespVo;
}
/**
* 修改
* @param attr
*/
@Transactional
@Override
public void updateAttr(AttrVo attr) {
AttrEntity attrEntity = new AttrEntity();
BeanUtils.copyProperties(attr,attrEntity);
this.updateById(attrEntity);
// 级联修改属性分组表
if(attrEntity.getAttrType()==ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode()){
Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>());
if(count>0){
// 如果有记录就修改
UpdateWrapper<AttrAttrgroupRelationEntity> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("attr_id",attrEntity.getAttrId());
updateWrapper.set("attr_group_id",attr.getAttrGroupId());
relationDao.update(null,updateWrapper);
}else{
// 如果没记录就新增
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrId(attrEntity.getAttrId());
relationEntity.setAttrGroupId(attr.getAttrGroupId());
relationDao.insert(relationEntity);
}
}
}
/**
* 查询属性详情
* @param attrId
* @return
*/
@Override
public AttrRespVo getAttrInfo(Long attrId) {
AttrEntity attrEntity = this.getById(attrId);
AttrRespVo attrRespVo = new AttrRespVo();
BeanUtils.copyProperties(attrEntity,attrRespVo);
//1. 设置分组信息(获取attrGroupId)
if (attrEntity.getAttrType()==ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode()){
AttrAttrgroupRelationEntity relationEntity = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrId));
if(relationEntity!=null){
attrRespVo.setAttrGroupId(relationEntity.getAttrGroupId());
}
}
//2. 设置分类信息(获取catelogPath)
Long[] categoryPath = categoryService.findCategoryPath(attrEntity.getCatelogId());
if(categoryPath!=null){
attrRespVo.setCatelogPath(categoryPath);
}
return attrRespVo;
}
/**
* 修改
* @param attr
*/
@Transactional
@Override
public void updateAttr(AttrVo attr) {
AttrEntity attrEntity = new AttrEntity();
BeanUtils.copyProperties(attr,attrEntity);
this.updateById(attrEntity);
// 级联修改属性分组表
if(attrEntity.getAttrType()==ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode()){
Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>());
if(count>0){
// 如果有记录就修改
UpdateWrapper<AttrAttrgroupRelationEntity> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("attr_id",attrEntity.getAttrId());
updateWrapper.set("attr_group_id",attr.getAttrGroupId());
relationDao.update(null,updateWrapper);
}else{
// 如果没记录就新增
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrId(attrEntity.getAttrId());
relationEntity.setAttrGroupId(attr.getAttrGroupId());
relationDao.insert(relationEntity);
}
}
}