document
API test

保存属性

POST
http://localhost:88/api/product/attr/save

API description

保存销售属性或规格参数

Request Parameters

parameter
type
description
required
attrGroupId
long
示例:分组ID
optional
attrName
string
示例:属性名字
required
attrType
int
示例:0
required
catelogId
int
示例:225
required
enable
int
示例:1
required
icon
string
示例:图标
required
searchType
int
示例:0
required
showDesc
int
示例:0
required
valueSelect
string
示例:
required
valueType
int
示例:1
required

Response Parameters

parameter
type
description
required
msg
string
示例:success
required
code
int
示例:0
required

Description or Example

# Bug修复 > 1. 关联关系的合法性 `attrVO.getAttrGroupId() != null`添加关联关系时, 还需要添加该条件, 因为规格参数不一定有和属性分组的关联关系, 如果没有还添加, 就会有错误的记录添加到数据库中 ## # 核心代码 ```java @RequestMapping("/save") // @RequiresPermissions("product:attr:save") public R save(@RequestBody AttrVO attrVO){ attrService.saveSync(attrVO); return R.ok(); } ``` ```java @Override @Transactional public void saveSync(AttrVO attrVO) { AttrEntity attrEntity = new AttrEntity(); // 创建PO对象, 用于记录数据 AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity(); // 创建PO对象, 用于记录关联关系 // 1. 保存基本的信息 BeanUtils.copyProperties(attrVO, attrEntity); // 拷贝数值 this.save(attrEntity); // 规格参数或既是规格参数又是销售属性才添加关联 if ((ProductConstant.Attr.ATTR_BASE.getCode() == attrEntity.getAttrType() || ProductConstant.Attr.ATTR_SALE$BASE.getCode() == attrEntity.getAttrType()) && attrVO.getAttrGroupId() != null) { // 2. 保存与属性分组的关联关系 relationEntity.setAttrId(attrEntity.getAttrId()).setAttrGroupId(attrVO.getAttrGroupId()); relationService.save(relationEntity); } } ``` # 拓展知识 ## 为什么不直接注入DAO, 直接在该service添加? > 首先, 一个表一个service, 如果盲目注入他人的dao, 就会操作他人的表, 不符合规范, 而且这样做会提高代码冗余度, 达不到代码复用 ## 为什么需要事务? > 因为需要将规格参数添加到属性表的同时, 在属性和属性分组表维护规格参数和属性分组的关系, 如果不加事务, 很可能造成数据一致性问题