Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
a4ca27d6
提交
a4ca27d6
authored
5月 11, 2020
作者:
q2118cs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
商品规格接口
上级
a00c4eb0
隐藏空白字符变更
内嵌
并排
正在显示
36 个修改的文件
包含
543 行增加
和
297 行删除
+543
-297
pom.xml
product/pom.xml
+1
-0
pom.xml
product/product-biz-api/pom.xml
+1
-1
pom.xml
product/product-biz/pom.xml
+1
-1
ProductAttrBO.java
...va/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java
+3
-6
ProductAttrSimpleBO.java
...iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java
+25
-0
ProductAttrSimpleWithValueBO.java
...all/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java
+18
-0
ProductAttrValueBO.java
.../iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java
+4
-0
ProductAttrValueSimpleBO.java
...er/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java
+24
-0
ProductAttrWithValueBO.java
...oder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java
+18
-0
ProductAttrConvert.java
...der/mall/product/biz/convert/attr/ProductAttrConvert.java
+27
-4
ProductAttrConvert2.java
...mall/product/biz/convert/product/ProductAttrConvert2.java
+0
-59
ProductAttrValueDO.java
...ll/product/biz/dataobject/product/ProductAttrValueDO.java
+3
-1
ProductAttrAddDTO.java
.../iocoder/mall/product/biz/dto/attr/ProductAttrAddDTO.java
+1
-1
ProductAttrUpdateDTO.java
...coder/mall/product/biz/dto/attr/ProductAttrUpdateDTO.java
+1
-1
ProductAttrValueAddDTO.java
...der/mall/product/biz/dto/attr/ProductAttrValueAddDTO.java
+1
-1
ProductAttrValueUpdateDTO.java
.../mall/product/biz/dto/attr/ProductAttrValueUpdateDTO.java
+1
-1
ProductAttrPageDTO.java
...oder/mall/product/biz/dto/product/ProductAttrPageDTO.java
+0
-22
ProductAttrService.java
.../mall/product/biz/service/product/ProductAttrService.java
+30
-13
ProductAttrServiceImpl.java
...duct/biz/service/product/impl/ProductAttrServiceImpl.java
+67
-79
pom.xml
product/product-rest/pom.xml
+1
-1
AdminsProductAttrController.java
...t/rest/controller/admins/AdminsProductAttrController.java
+95
-94
ProductAttrConvert.java
...er/mall/product/rest/convert/attr/ProductAttrConvert.java
+27
-1
ProductAttrAddRequest.java
...mall/product/rest/request/attr/ProductAttrAddRequest.java
+20
-0
ProductAttrUpdateRequest.java
...l/product/rest/request/attr/ProductAttrUpdateRequest.java
+26
-0
ProductAttrValueAddRequest.java
...product/rest/request/attr/ProductAttrValueAddRequest.java
+27
-0
ProductAttrValueUpdateRequest.java
...duct/rest/request/attr/ProductAttrValueUpdateRequest.java
+27
-0
AdminsProductAttrSimpleResponse.java
...t/rest/response/attr/AdminsProductAttrSimpleResponse.java
+38
-0
AdminsProductAttrVO.java
.../mall/product/rest/response/attr/AdminsProductAttrVO.java
+24
-0
AdminsProductAttrValueResponse.java
...ct/rest/response/attr/AdminsProductAttrValueResponse.java
+26
-0
pom.xml
product/product-rpc-api/pom.xml
+1
-1
pom.xml
product/product-rpc/pom.xml
+1
-1
AdminsProductAttrController.java
...cation/controller/admins/AdminsProductAttrController.java
+1
-2
AdminsProductBrandController.java
...ation/controller/admins/AdminsProductBrandController.java
+1
-2
AdminsProductCategoryController.java
...on/controller/admins/AdminsProductCategoryController.java
+1
-2
AdminsProductSpuController.java
...ication/controller/admins/AdminsProductSpuController.java
+1
-2
UserFavoriteController.java
.../application/controller/users/UserFavoriteController.java
+0
-1
没有找到文件。
product/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -12,6 +12,7 @@
<artifactId>
product
</artifactId>
<name>
product
</name>
<packaging>
pom
</packaging>
<modules>
<module>
product-application
</module>
<module>
product-rpc-api
</module>
...
...
product/product-biz-api/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
system
</artifactId>
<artifactId>
product
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
product/product-biz/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
system
</artifactId>
<artifactId>
product
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java
浏览文件 @
a4ca27d6
...
...
@@ -3,12 +3,12 @@ package cn.iocoder.mall.product.biz.bo.attr;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrBO
{
public
class
ProductAttrBO
implements
Serializable
{
/**
* 规格编号
...
...
@@ -26,8 +26,5 @@ public class ProductAttrBO {
* 创建时间
*/
private
Date
createTime
;
/**
* 规格值数组
*/
private
List
<
ProductAttrValueBO
>
values
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* 商品规格精简 VO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrSimpleBO
implements
Serializable
{
/**
* 规格编号
*/
private
Integer
id
;
/**
* 规格名
*/
private
String
name
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
attr
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductAttrSimpleWithValueBO
extends
ProductAttrSimpleBO
{
/**
* 规格值数组
*/
private
List
<
ProductAttrValueSimpleBO
>
values
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java
浏览文件 @
a4ca27d6
...
...
@@ -17,6 +17,10 @@ public class ProductAttrValueBO implements Serializable {
* 规格值编号
*/
private
Integer
id
;
/**
* 规格编号
*/
private
Integer
attrId
;
/**
* 规格值名
*/
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* 商品规格值 VO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueSimpleBO
implements
Serializable
{
/**
* 规格值编号
*/
private
Integer
id
;
/**
* 规格值名
*/
private
String
name
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
attr
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductAttrWithValueBO
extends
ProductAttrBO
{
/**
* 规格值数组
*/
private
List
<
ProductAttrValueBO
>
values
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
convert
.
attr
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.*
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO
;
import
cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.attr.ProductAttrValueAddDTO
;
import
cn.iocoder.mall.product.biz.dto.attr.ProductAttrValueUpdateDTO
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
...
...
@@ -19,8 +21,29 @@ public interface ProductAttrConvert {
ProductAttrConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductAttrConvert
.
class
);
@Mapping
(
source
=
"records"
,
target
=
"list"
)
PageResult
<
ProductAttrBO
>
convertPage
(
IPage
<
ProductAttrDO
>
bean
);
PageResult
<
ProductAttr
WithValue
BO
>
convertPage
(
IPage
<
ProductAttrDO
>
bean
);
@Mappings
({})
List
<
ProductAttrValueBO
>
convertAttrValue
(
List
<
ProductAttrValueDO
>
values
);
ProductAttrBO
convertAttr
(
ProductAttrDO
values
);
@Mappings
({})
ProductAttrValueBO
convertAttrValue
(
ProductAttrValueDO
productAttrValueDO
);
@Mappings
({})
List
<
ProductAttrValueBO
>
convertAttrValues
(
List
<
ProductAttrValueDO
>
values
);
@Mappings
({})
List
<
ProductAttrSimpleWithValueBO
>
convertAttrSimple
(
List
<
ProductAttrDO
>
attrs
);
@Mappings
({})
List
<
ProductAttrValueSimpleBO
>
convertAttrValueSimple
(
List
<
ProductAttrValueDO
>
values
);
@Mappings
({})
ProductAttrDO
convertUpdate
(
ProductAttrUpdateDTO
productAttrUpdateDTO
);
@Mappings
({})
ProductAttrValueDO
convertValueAdd
(
ProductAttrValueAddDTO
productAttrValueAddDTO
);
@Mappings
({})
ProductAttrValueDO
convertValueUpdate
(
ProductAttrValueUpdateDTO
productAttrValueUpdateDTO
);
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java
deleted
100644 → 0
浏览文件 @
a00c4eb0
package
cn
.
iocoder
.
mall
.
product
.
biz
.
convert
.
product
;
import
cn.iocoder.mall.product.biz.bo.product.*
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ProductAttrConvert2
{
ProductAttrConvert2
INSTANCE
=
Mappers
.
getMapper
(
ProductAttrConvert2
.
class
);
@Mappings
({})
List
<
ProductAttrDetailBO
>
convert
(
List
<
ProductAttrDO
>
attrs
);
@Mappings
({})
ProductAttrValueDetailBO
convert
(
ProductAttrValueDO
value
);
@Mappings
({})
List
<
ProductAttrValueDetailBO
>
convert2
(
List
<
ProductAttrValueDO
>
values
);
@Mappings
({})
List
<
ProductAttrSimpleBO
>
convert3
(
List
<
ProductAttrDO
>
attrs
);
@Mappings
({})
ProductAttrValueSimpleBO
convert3
(
ProductAttrValueDO
value
);
// 保证 convert4 能够映射到这个方法
@Mappings
({})
List
<
ProductAttrValueSimpleBO
>
convert4
(
List
<
ProductAttrValueDO
>
values
);
@Mappings
({})
ProductAttrDO
convert
(
ProductAttrAddDTO
productAttrAddDTO
);
@Mappings
({})
ProductAttrDO
convert
(
ProductAttrUpdateDTO
productAttrUpdateDTO
);
@Mappings
({})
ProductAttrValueDO
convert
(
ProductAttrValueAddDTO
productAttrValueAddDTO
);
@Mappings
({})
ProductAttrValueDO
convert
(
ProductAttrValueUpdateDTO
productAttrValueUpdateDTO
);
@Mappings
({})
ProductAttrBO2
convert
(
ProductAttrDO
productAttrDO
);
@Mappings
({})
ProductAttrValueBO
convert2
(
ProductAttrValueDO
productAttrValueDO
);
}
\ No newline at end of file
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java
浏览文件 @
a4ca27d6
...
...
@@ -2,12 +2,14 @@ package cn.iocoder.mall.product.biz.dataobject.product;
import
cn.iocoder.mall.mybatis.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* Product 规格值
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueDO
extends
DeletableDO
{
...
...
@@ -25,7 +27,7 @@ public class ProductAttrValueDO extends DeletableDO {
private
String
name
;
/**
* 状态
*
*
<p>
* 1-正常
* 2-禁用
*/
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductAttrAddDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
attr
/ProductAttrAddDTO.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductAttrUpdateDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
attr
/ProductAttrUpdateDTO.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductAttrValueAddDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
attr
/ProductAttrValueAddDTO.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductAttrValueUpdateDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
attr
/ProductAttrValueUpdateDTO.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
attr
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPageDTO.java
deleted
100644 → 0
浏览文件 @
a00c4eb0
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
/**
* 商品规格分页 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrPageDTO
{
private
String
name
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java
浏览文件 @
a4ca27d6
...
...
@@ -4,14 +4,10 @@ import cn.iocoder.common.framework.constant.CommonStatusEnum;
import
cn.iocoder.common.framework.validator.InEnum
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrBO2
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO
;
import
cn.iocoder.mall.product.biz.dto.attr.*
;
import
java.util.List
;
...
...
@@ -22,7 +18,7 @@ public interface ProductAttrService {
* @param productAttrPageDTO 查询参数
* @return 规格分页信息
*/
PageResult
<
ProductAttrBO
>
getProductAttrPage
(
AdminProductAttrPageDTO
productAttrPageDTO
);
PageResult
<
ProductAttr
WithValue
BO
>
getProductAttrPage
(
AdminProductAttrPageDTO
productAttrPageDTO
);
/**
* 获得规格属性数组
...
...
@@ -31,14 +27,35 @@ public interface ProductAttrService {
*
* @return 规格属性数组
*/
List
<
ProductAttrSimpleBO
>
getProductAttrList
();
List
<
ProductAttrSimple
WithValue
BO
>
getProductAttrList
();
ProductAttrBO2
addProductAttr
(
Integer
adminId
,
ProductAttrAddDTO
productAttrAddDTO
);
/**
* 添加商品规格
*
* @param adminId 操作人ID
* @param productAttrAddDTO 添加参数
* @return 添加的规格
*/
ProductAttrBO
addProductAttr
(
Integer
adminId
,
ProductAttrAddDTO
productAttrAddDTO
);
/**
* 更新规格
*
* @param adminId 操作人
* @param productAttrUpdateDTO 更新规格
* @return 成功标识
*/
Boolean
updateProductAttr
(
Integer
adminId
,
ProductAttrUpdateDTO
productAttrUpdateDTO
);
Boolean
updateProductAttrStatus
(
Integer
adminId
,
Integer
productAttrId
,
@InEnum
(
value
=
CommonStatusEnum
.
class
,
message
=
"修改状态必须是 {value}"
)
Integer
status
);
/**
* 更新规格状态
*
* @param adminId 操作人
* @param productAttrId 规格ID
* @param status 状态
* @return 成功标识
*/
Boolean
updateProductAttrStatus
(
Integer
adminId
,
Integer
productAttrId
,
Integer
status
);
ProductAttrValueBO
addProductAttrValue
(
Integer
adminId
,
ProductAttrValueAddDTO
productAttrValueAddDTO
);
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java
浏览文件 @
a4ca27d6
...
...
@@ -5,21 +5,16 @@ import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrAndValuePairBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrBO2
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.convert.attr.ProductAttrConvert
;
import
cn.iocoder.mall.product.biz.convert.product.ProductAttrConvert2
;
import
cn.iocoder.mall.product.biz.dao.product.ProductAttrMapper
;
import
cn.iocoder.mall.product.biz.dao.product.ProductAttrValueMapper
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO
;
import
cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.attr.*
;
import
cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.biz.enums.product.ProductAttrConstants
;
import
cn.iocoder.mall.product.biz.service.product.ProductAttrService
;
...
...
@@ -27,8 +22,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.google.common.collect.ImmutableListMultimap
;
import
com.google.common.collect.Multimaps
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -51,14 +44,14 @@ public class ProductAttrServiceImpl implements ProductAttrService {
private
ProductAttrValueMapper
productAttrValueMapper
;
@Override
public
PageResult
<
ProductAttrBO
>
getProductAttrPage
(
AdminProductAttrPageDTO
productAttrPageDTO
)
{
public
PageResult
<
ProductAttr
WithValue
BO
>
getProductAttrPage
(
AdminProductAttrPageDTO
productAttrPageDTO
)
{
//查询分页
Page
<
ProductAttrDO
>
page
=
new
Page
<>(
productAttrPageDTO
.
getPageNo
(),
productAttrPageDTO
.
getPageSize
());
LambdaQueryWrapper
<
ProductAttrDO
>
queryWrapper
=
Wrappers
.<
ProductAttrDO
>
query
().
lambda
()
.
like
(
StringUtils
.
isNotBlank
(
productAttrPageDTO
.
getName
()),
ProductAttrDO:
:
getName
,
productAttrPageDTO
.
getName
())
.
eq
(
ProductAttrDO:
:
getDeleted
,
false
);
IPage
<
ProductAttrDO
>
attrPage
=
productAttrMapper
.
selectPage
(
page
,
queryWrapper
);
PageResult
<
ProductAttrBO
>
productAttrPage
=
ProductAttrConvert
.
INSTANCE
.
convertPage
(
attrPage
);
PageResult
<
ProductAttr
WithValue
BO
>
productAttrPage
=
ProductAttrConvert
.
INSTANCE
.
convertPage
(
attrPage
);
// 将规格值拼接上去
if
(!
CollectionUtil
.
isEmpty
(
productAttrPage
.
getList
()))
{
Set
<
Integer
>
attrIds
=
productAttrPage
.
getList
().
stream
().
map
(
ProductAttrBO:
:
getId
).
collect
(
Collectors
.
toSet
());
...
...
@@ -66,77 +59,37 @@ public class ProductAttrServiceImpl implements ProductAttrService {
.
in
(
ProductAttrValueDO:
:
getAttrId
,
attrIds
)
.
eq
(
ProductAttrValueDO:
:
getDeleted
,
false
));
Map
<
Integer
,
List
<
ProductAttrValueDO
>>
attrValueMap
=
attrValues
.
stream
().
collect
(
Collectors
.
groupingBy
(
ProductAttrValueDO:
:
getAttrId
));
for
(
ProductAttr
BO
productAttrBO
:
productAttrPage
.
getList
())
{
productAttrBO
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convertAttrValue
(
attrValueMap
.
get
(
productAttrBO
.
getId
())));
for
(
ProductAttr
WithValueBO
item
:
productAttrPage
.
getList
())
{
item
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convertAttrValues
(
attrValueMap
.
get
(
item
.
getId
())));
}
}
// 返回结果
return
productAttrPage
;
}
public
List
<
ProductAttrAndValuePairBO
>
validProductAttrAndValue
(
Set
<
Integer
>
productAttrValueIds
,
boolean
validStatus
)
{
// 首先,校验规格值
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectBatchIds
(
productAttrValueIds
);
if
(
attrValues
.
size
()
!=
productAttrValueIds
.
size
())
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
// 同时,校验下状态
for
(
ProductAttrValueDO
attrValue
:
attrValues
)
{
if
(
ProductAttrConstants
.
ATTR_STATUS_DISABLE
.
equals
(
attrValue
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
}
}
// 然后,校验规格
Set
<
Integer
>
attrIds
=
attrValues
.
stream
().
map
(
ProductAttrValueDO:
:
getAttrId
).
collect
(
Collectors
.
toSet
());
List
<
ProductAttrDO
>
attrs
=
productAttrMapper
.
selectBatchIds
(
attrIds
);
if
(
attrs
.
size
()
!=
attrIds
.
size
())
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
// 同时,校验下状态
for
(
ProductAttrDO
attr
:
attrs
)
{
if
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_DISABLE
.
equals
(
attr
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
}
}
// 返回成功
// ProductAttrDO 的映射,方便查找。
Map
<
Integer
,
ProductAttrDO
>
attrMap
=
attrs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttrDO:
:
getId
,
productAttrDO
->
productAttrDO
));
return
attrValues
.
stream
().
map
(
productAttrValueDO
->
new
ProductAttrAndValuePairBO
()
.
setAttrId
(
productAttrValueDO
.
getAttrId
()).
setAttrName
(
attrMap
.
get
(
productAttrValueDO
.
getAttrId
()).
getName
())
.
setAttrValueId
(
productAttrValueDO
.
getId
()).
setAttrValueName
(
productAttrValueDO
.
getName
())).
collect
(
Collectors
.
toList
());
}
@Override
public
List
<
ProductAttrSimpleBO
>
getProductAttrList
()
{
public
List
<
ProductAttrSimple
WithValue
BO
>
getProductAttrList
()
{
// 查询所有开启的规格数组
List
<
ProductAttrDO
>
attrDos
=
productAttrMapper
.
selectList
(
Wrappers
.<
ProductAttrDO
>
query
().
lambda
()
.
in
(
ProductAttrDO:
:
getStatus
,
ProductAttrConstants
.
ATTR_STATUS_ENABLE
)
.
eq
(
ProductAttrDO:
:
getDeleted
,
false
));
List
<
ProductAttrSimpleBO
>
attrs
=
ProductAttrConvert2
.
INSTANCE
.
convert3
(
attrDos
);
// 如果为空,则返回空
if
(
attrs
.
isEmpty
())
{
if
(
attr
Do
s
.
isEmpty
())
{
return
Collections
.
emptyList
();
}
List
<
ProductAttrSimpleWithValueBO
>
attrs
=
ProductAttrConvert
.
INSTANCE
.
convertAttrSimple
(
attrDos
);
// 将规格值拼接上去
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectList
(
Wrappers
.<
ProductAttrValueDO
>
query
().
lambda
()
.
in
(
ProductAttrValueDO:
:
getStatus
,
ProductAttrConstants
.
ATTR_STATUS_ENABLE
)
.
eq
(
ProductAttrValueDO:
:
getDeleted
,
false
));
// KEY 是 attrId ,VALUE 是 ProductAttrValueDO 数组
ImmutableListMultimap
<
Integer
,
ProductAttrValueDO
>
attrValueMap
=
Multimaps
.
index
(
attrValues
,
ProductAttrValueDO:
:
getAttrId
);
for
(
ProductAttrSimpleBO
productAttrSimpleBO
:
attrs
)
{
productAttrSimpleBO
.
setValues
(
ProductAttrConvert2
.
INSTANCE
.
convert4
(((
attrValueMap
).
get
(
productAttrSimpleBO
.
getId
()))));
Map
<
Integer
,
List
<
ProductAttrValueDO
>>
attrValueMap
=
attrValues
.
stream
().
collect
(
Collectors
.
groupingBy
(
ProductAttrValueDO:
:
getAttrId
));
for
(
ProductAttrSimpleWithValueBO
item
:
attrs
)
{
item
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convertAttrValueSimple
(
attrValueMap
.
get
(
item
.
getId
())));
}
return
attrs
;
}
@Override
public
ProductAttrBO
2
addProductAttr
(
Integer
adminId
,
ProductAttrAddDTO
productAttrAddDTO
)
{
public
ProductAttrBO
addProductAttr
(
Integer
adminId
,
ProductAttrAddDTO
productAttrAddDTO
)
{
// 校验规格名不重复
int
count
=
productAttrMapper
.
selectCount
(
Wrappers
.<
ProductAttrDO
>
query
().
lambda
()
.
eq
(
ProductAttrDO:
:
getName
,
productAttrAddDTO
.
getName
())
...
...
@@ -145,13 +98,13 @@ public class ProductAttrServiceImpl implements ProductAttrService {
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_EXISTS
.
getCode
());
}
// 插入到数据库
ProductAttrDO
productAttrDO
=
ProductAttrConvert2
.
INSTANCE
.
convert
(
productAttrAddDTO
)
ProductAttrDO
productAttrDO
=
new
ProductAttrDO
().
setName
(
productAttrAddDTO
.
getName
()
)
.
setStatus
(
ProductAttrConstants
.
ATTR_STATUS_ENABLE
);
productAttrDO
.
setCreateTime
(
new
Date
());
productAttrDO
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
productAttrMapper
.
insert
(
productAttrDO
);
// 返回成功
return
ProductAttrConvert
2
.
INSTANCE
.
convert
(
productAttrDO
);
return
ProductAttrConvert
.
INSTANCE
.
convertAttr
(
productAttrDO
);
}
@Override
...
...
@@ -168,12 +121,14 @@ public class ProductAttrServiceImpl implements ProductAttrService {
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_EXISTS
.
getCode
());
}
// 更新到数据库
ProductAttrDO
updateProductAttr
=
ProductAttrConvert2
.
INSTANCE
.
convert
(
productAttrUpdateDTO
);
productAttrMapper
.
updateById
(
updateProductAttr
);
ProductAttrDO
updateProductAttr
=
ProductAttrConvert
.
INSTANCE
.
convertUpdate
(
productAttrUpdateDTO
);
updateProductAttr
.
setUpdateTime
(
new
Date
());
int
i
=
productAttrMapper
.
updateById
(
updateProductAttr
);
// 返回成功
return
true
;
return
i
>
0
;
}
@Override
public
Boolean
updateProductAttrStatus
(
Integer
adminId
,
Integer
productAttrId
,
Integer
status
)
{
// 校验存在
...
...
@@ -187,9 +142,8 @@ public class ProductAttrServiceImpl implements ProductAttrService {
}
// 更新到数据库
ProductAttrDO
updateProductAttr
=
new
ProductAttrDO
().
setId
(
productAttrId
).
setStatus
(
status
);
productAttrMapper
.
updateById
(
updateProductAttr
);
// 返回成功
return
true
;
int
i
=
productAttrMapper
.
updateById
(
updateProductAttr
);
return
i
>
0
;
}
@Override
...
...
@@ -203,13 +157,12 @@ public class ProductAttrServiceImpl implements ProductAttrService {
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_EXISTS
.
getCode
());
}
// 插入到数据库
ProductAttrValueDO
productAttrValueDO
=
ProductAttrConvert
2
.
INSTANCE
.
convert
(
productAttrValueAddDTO
)
ProductAttrValueDO
productAttrValueDO
=
ProductAttrConvert
.
INSTANCE
.
convertValueAdd
(
productAttrValueAddDTO
)
.
setStatus
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_ENABLE
);
productAttrValueDO
.
setCreateTime
(
new
Date
());
productAttrValueDO
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
productAttrValueMapper
.
insert
(
productAttrValueDO
);
// 返回成功
return
ProductAttrConvert2
.
INSTANCE
.
convert2
(
productAttrValueDO
);
return
ProductAttrConvert
.
INSTANCE
.
convertAttrValue
(
productAttrValueDO
);
}
@Override
...
...
@@ -228,10 +181,10 @@ public class ProductAttrServiceImpl implements ProductAttrService {
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_EXISTS
.
getCode
());
}
// 更新到数据库
ProductAttrValueDO
updateProductValue
=
ProductAttrConvert
2
.
INSTANCE
.
convert
(
productAttrValueUpdateDTO
);
productAttrValueMapper
.
updateById
(
updateProductValue
);
// 返回成功
return
true
;
ProductAttrValueDO
updateProductValue
=
ProductAttrConvert
.
INSTANCE
.
convertValueUpdate
(
productAttrValueUpdateDTO
);
updateProductValue
.
setUpdateTime
(
new
Date
()
);
int
i
=
productAttrValueMapper
.
updateById
(
updateProductValue
);
return
i
>
0
;
}
@Override
...
...
@@ -247,9 +200,44 @@ public class ProductAttrServiceImpl implements ProductAttrService {
}
// 更新到数据库
ProductAttrValueDO
updateProductAttrValue
=
new
ProductAttrValueDO
().
setId
(
productAttrValueId
).
setStatus
(
status
);
productAttrValueMapper
.
updateById
(
updateProductAttrValue
);
int
i
=
productAttrValueMapper
.
updateById
(
updateProductAttrValue
);
return
i
>
0
;
}
public
List
<
ProductAttrAndValuePairBO
>
validProductAttrAndValue
(
Set
<
Integer
>
productAttrValueIds
,
boolean
validStatus
)
{
// 首先,校验规格值
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectBatchIds
(
productAttrValueIds
);
if
(
attrValues
.
size
()
!=
productAttrValueIds
.
size
())
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
// 同时,校验下状态
for
(
ProductAttrValueDO
attrValue
:
attrValues
)
{
if
(
ProductAttrConstants
.
ATTR_STATUS_DISABLE
.
equals
(
attrValue
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
}
}
// 然后,校验规格
Set
<
Integer
>
attrIds
=
attrValues
.
stream
().
map
(
ProductAttrValueDO:
:
getAttrId
).
collect
(
Collectors
.
toSet
());
List
<
ProductAttrDO
>
attrs
=
productAttrMapper
.
selectBatchIds
(
attrIds
);
if
(
attrs
.
size
()
!=
attrIds
.
size
())
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
// 同时,校验下状态
for
(
ProductAttrDO
attr
:
attrs
)
{
if
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_DISABLE
.
equals
(
attr
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
}
}
// 返回成功
return
true
;
// ProductAttrDO 的映射,方便查找。
Map
<
Integer
,
ProductAttrDO
>
attrMap
=
attrs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttrDO:
:
getId
,
productAttrDO
->
productAttrDO
));
return
attrValues
.
stream
().
map
(
productAttrValueDO
->
new
ProductAttrAndValuePairBO
()
.
setAttrId
(
productAttrValueDO
.
getAttrId
()).
setAttrName
(
attrMap
.
get
(
productAttrValueDO
.
getAttrId
()).
getName
())
.
setAttrValueId
(
productAttrValueDO
.
getId
()).
setAttrValueName
(
productAttrValueDO
.
getName
())).
collect
(
Collectors
.
toList
());
}
}
product/product-rest/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
system
</artifactId>
<artifactId>
product
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java
浏览文件 @
a4ca27d6
...
...
@@ -3,17 +3,30 @@ package cn.iocoder.mall.product.rest.controller.admins;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO
;
import
cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO
;
import
cn.iocoder.mall.product.biz.dto.attr.*
;
import
cn.iocoder.mall.product.biz.service.product.ProductAttrService
;
import
cn.iocoder.mall.product.rest.convert.attr.ProductAttrConvert
;
import
cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest
;
import
cn.iocoder.mall.product.rest.request.attr.ProductAttrAddRequest
;
import
cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest
;
import
cn.iocoder.mall.product.rest.request.attr.ProductAttrValueAddRequest
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse
;
import
cn.iocoder.mall.security.core.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* 商品规格
...
...
@@ -34,100 +47,88 @@ public class AdminsProductAttrController {
@ApiOperation
(
"获得规格分页"
)
public
CommonResult
<
PageResult
<
AdminsProductAttrPageResponse
>>
attrPage
(
AdminProductAttrPageRequest
request
)
{
AdminProductAttrPageDTO
pageDTO
=
ProductAttrConvert
.
INSTANCE
.
convert
(
request
);
PageResult
<
ProductAttrBO
>
productAttrPage
=
productAttrService
.
getProductAttrPage
(
pageDTO
);
PageResult
<
ProductAttr
WithValue
BO
>
productAttrPage
=
productAttrService
.
getProductAttrPage
(
pageDTO
);
PageResult
<
AdminsProductAttrPageResponse
>
adminPageResponse
=
ProductAttrConvert
.
INSTANCE
.
convertPage
(
productAttrPage
);
return
CommonResult
.
success
(
adminPageResponse
);
}
// @GetMapping("/attr/tree")
// @ApiOperation(value = "获得规格树结构", notes = "该接口返回的信息更为精简。一般用于前端缓存数据字典到本地。")
// public CommonResult<List<AdminsProductAttrSimpleVO>> tree() {
// // 查询全列表
// List<ProductAttrSimpleBO> result = productAttrService.getProductAttrList();
// // 返回结果
// return success(ProductAttrConvert.INSTANCE.convert(result));
// }
//
// @PostMapping("/attr/add")
// @ApiOperation(value = "创建商品规格")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "name", value = "规格名", required = true, example = "颜色")
// })
// public CommonResult<AdminsProductAttrVO> addAttr(@RequestParam("name") String name) {
// // 创建 ProductAttrAddDTO 对象
// ProductAttrAddDTO productAttrAddDTO = new ProductAttrAddDTO().setName(name);
// // 添加
// ProductAttrBO result = productAttrService.addProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrAddDTO);
// // 返回结果
// return success(ProductAttrConvert.INSTANCE.convert3(result));
// }
//
// @PostMapping("/attr/update")
// @ApiOperation(value = "修改商品规格")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "1"),
// @ApiImplicitParam(name = "name", value = "规格名", required = true, example = "颜色")
// })
// public CommonResult<Boolean> updateAttr(@RequestParam("id") Integer id,
// @RequestParam("name") String name) {
// // 创建 ProductAttrUpdateDTO 对象
// ProductAttrUpdateDTO productAttrUpdateDTO = new ProductAttrUpdateDTO().setId(id).setName(name);
// // 更新
// return success(productAttrService.updateProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrUpdateDTO));
// }
//
// @PostMapping("/attr/update_status")
// @ApiOperation(value = "修改商品规格状态")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"),
// @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1")
// })
// public CommonResult<Boolean> updateAttrStatus(@RequestParam("id") Integer id,
// @RequestParam("status") Integer status) {
// return success(productAttrService.updateProductAttrStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status));
// }
//
// // TODO 芋艿 暂时不考虑 delete Attr 。因为关联逻辑比较多
//
// @PostMapping("/attr_value/add")
// @ApiOperation(value = "创建商品规格值")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "attrId", value = "规格编号", required = true, example = "100"),
// @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色")
// })
// public CommonResult<AdminsProductAttrValueVO> addAttrValue(@RequestParam("attrId") Integer attrId,
// @RequestParam("name") String name) {
// // 创建 ProductAttrValueAddDTO 对象
// ProductAttrValueAddDTO productAttrValueAddDTO = new ProductAttrValueAddDTO().setAttrId(attrId).setName(name);
// // 添加
// ProductAttrValueBO result = productAttrService.addProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueAddDTO);
// // 返回结果
// return success(ProductAttrConvert.INSTANCE.convert4(result));
// }
//
// @PostMapping("/attr_value/update")
// @ApiOperation(value = "修改商品规格值")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "规格值编号", required = true, example = "100"),
// @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色")
// })
// public CommonResult<Boolean> updateAttrValue(@RequestParam("id") Integer id,
// @RequestParam("name") String name) {
// // 创建 ProductAttrValueUpdateDTO 对象
// ProductAttrValueUpdateDTO productAttrValueUpdateDTO = new ProductAttrValueUpdateDTO().setId(id).setName(name);
// // 更新
// return success(productAttrService.updateProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueUpdateDTO));
// }
//
// @PostMapping("/attr_value/update_status")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"),
// @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1")
// })
// public CommonResult<Boolean> updateAttrValueStatus(@RequestParam("id") Integer id,
// @RequestParam("status") Integer status) {
// return success(productAttrService.updateProductAttrValueStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status));
// }
@GetMapping
(
"/attr/tree"
)
@ApiOperation
(
value
=
"获得规格树结构"
,
notes
=
"该接口返回的信息更为精简。一般用于前端缓存数据字典到本地。"
)
public
CommonResult
<
List
<
AdminsProductAttrSimpleResponse
>>
tree
()
{
// 查询全列表
List
<
ProductAttrSimpleWithValueBO
>
result
=
productAttrService
.
getProductAttrList
();
return
CommonResult
.
success
(
ProductAttrConvert
.
INSTANCE
.
convertSimple
(
result
));
}
@PostMapping
(
"/attr/add"
)
@ApiOperation
(
value
=
"创建商品规格"
)
public
CommonResult
<
AdminsProductAttrVO
>
addAttr
(
@Validated
ProductAttrAddRequest
addRequest
)
{
// 创建 ProductAttrAddDTO 对象
ProductAttrAddDTO
productAttrAddDTO
=
new
ProductAttrAddDTO
().
setName
(
addRequest
.
getName
());
// 添加
ProductAttrBO
result
=
productAttrService
.
addProductAttr
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productAttrAddDTO
);
return
CommonResult
.
success
(
ProductAttrConvert
.
INSTANCE
.
convertAttr
(
result
));
}
@PostMapping
(
"/attr/update"
)
@ApiOperation
(
value
=
"修改商品规格"
)
public
CommonResult
<
Boolean
>
updateAttr
(
@Validated
ProductAttrUpdateRequest
updateRequest
)
{
ProductAttrUpdateDTO
productAttrUpdateDTO
=
ProductAttrConvert
.
INSTANCE
.
convertUpdate
(
updateRequest
);
// 更新
return
CommonResult
.
success
(
productAttrService
.
updateProductAttr
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productAttrUpdateDTO
));
}
@PostMapping
(
"/attr/update_status"
)
@ApiOperation
(
value
=
"修改商品规格状态"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"规格编号"
,
required
=
true
,
example
=
"100"
),
@ApiImplicitParam
(
name
=
"status"
,
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
})
public
CommonResult
<
Boolean
>
updateAttrStatus
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"status"
)
Integer
status
)
{
return
CommonResult
.
success
(
productAttrService
.
updateProductAttrStatus
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
id
,
status
));
}
// TODO 芋艿 暂时不考虑 delete Attr 。因为关联逻辑比较多
@PostMapping
(
"/attr_value/add"
)
@ApiOperation
(
value
=
"创建商品规格值"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"attrId"
,
value
=
"规格编号"
,
required
=
true
,
example
=
"100"
),
@ApiImplicitParam
(
name
=
"name"
,
value
=
"规格值"
,
required
=
true
,
example
=
"蓝色"
)
})
public
CommonResult
<
AdminsProductAttrValueResponse
>
addAttrValue
(
@Validated
ProductAttrValueAddRequest
addRequest
)
{
// 创建 ProductAttrValueAddDTO 对象
ProductAttrValueAddDTO
productAttrValueAddDTO
=
new
ProductAttrValueAddDTO
().
setAttrId
(
addRequest
.
getAttrId
()).
setName
(
addRequest
.
getName
());
// 添加
ProductAttrValueBO
result
=
productAttrService
.
addProductAttrValue
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productAttrValueAddDTO
);
// 返回结果
return
CommonResult
.
success
(
ProductAttrConvert
.
INSTANCE
.
convertAddResponse
(
result
));
}
@PostMapping
(
"/attr_value/update"
)
@ApiOperation
(
value
=
"修改商品规格值"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"规格值编号"
,
required
=
true
,
example
=
"100"
),
@ApiImplicitParam
(
name
=
"name"
,
value
=
"规格值"
,
required
=
true
,
example
=
"蓝色"
)
})
public
CommonResult
<
Boolean
>
updateAttrValue
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"name"
)
String
name
)
{
// 创建 ProductAttrValueUpdateDTO 对象
ProductAttrValueUpdateDTO
productAttrValueUpdateDTO
=
new
ProductAttrValueUpdateDTO
().
setId
(
id
).
setName
(
name
);
// 更新
return
CommonResult
.
success
(
productAttrService
.
updateProductAttrValue
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productAttrValueUpdateDTO
));
}
@PostMapping
(
"/attr_value/update_status"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"规格编号"
,
required
=
true
,
example
=
"100"
),
@ApiImplicitParam
(
name
=
"status"
,
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
})
public
CommonResult
<
Boolean
>
updateAttrValueStatus
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"status"
)
Integer
status
)
{
return
CommonResult
.
success
(
productAttrService
.
updateProductAttrValueStatus
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
id
,
status
));
}
// TODO 芋艿 暂时不考虑 delete Attr Value 。因为关联逻辑比较多
...
...
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java
浏览文件 @
a4ca27d6
...
...
@@ -2,18 +2,44 @@ package cn.iocoder.mall.product.rest.convert.attr;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO
;
import
cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO
;
import
cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO
;
import
cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest
;
import
cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO
;
import
cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ProductAttrConvert
{
ProductAttrConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductAttrConvert
.
class
);
@Mappings
({})
AdminProductAttrPageDTO
convert
(
AdminProductAttrPageRequest
bean
);
PageResult
<
AdminsProductAttrPageResponse
>
convertPage
(
PageResult
<
ProductAttrBO
>
productAttrPage
);
@Mappings
({})
PageResult
<
AdminsProductAttrPageResponse
>
convertPage
(
PageResult
<
ProductAttrWithValueBO
>
productAttrPage
);
@Mappings
({})
List
<
AdminsProductAttrSimpleResponse
>
convertSimple
(
List
<
ProductAttrSimpleWithValueBO
>
simpleList
);
@Mappings
({})
AdminsProductAttrVO
convertAttr
(
ProductAttrBO
attrBO
);
@Mappings
({})
ProductAttrUpdateDTO
convertUpdate
(
ProductAttrUpdateRequest
updateRequest
);
@Mappings
({})
AdminsProductAttrValueResponse
convertAddResponse
(
ProductAttrValueBO
result
);
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
/**
* 规格添加
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrAddRequest
{
@ApiModelProperty
(
name
=
"name"
,
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* 规格修改
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrUpdateRequest
{
@ApiModelProperty
(
name
=
"id"
,
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"规格编号不能为空"
)
private
Integer
id
;
@ApiModelProperty
(
name
=
"name"
,
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* Product 规格值添加 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueAddRequest
{
@ApiModelProperty
(
name
=
"attrId"
,
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"规格编号不能为空"
)
private
Integer
attrId
;
/**
* 名称
*/
@ApiModelProperty
(
name
=
"name"
,
value
=
"规格值名"
,
required
=
true
,
example
=
"红色"
)
@NotEmpty
(
message
=
"规格值名不能为空"
)
private
String
name
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* Product 规格值修改 DTO
* <p>
* 注意,不允许修改所属规格
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrValueUpdateRequest
{
@ApiModelProperty
(
name
=
"id"
,
value
=
"规格值编号"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"规格值编号不能为空"
)
private
Integer
id
;
@ApiModelProperty
(
name
=
"id"
,
value
=
"规格值编号"
,
required
=
true
,
example
=
"1"
)
@NotEmpty
(
message
=
"规格名不能为空"
)
private
String
name
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
response
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
@ApiModel
(
value
=
"商品规格精简 VO"
,
description
=
"带有规格值数组"
)
@Data
@Accessors
(
chain
=
true
)
public
class
AdminsProductAttrSimpleResponse
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
@ApiModelProperty
(
value
=
"规格值数组"
,
required
=
true
)
private
List
<
ProductAttrValue
>
values
;
@ApiModel
(
"规格值"
)
@Data
@Accessors
(
chain
=
true
)
public
static
class
ProductAttrValue
{
/**
* 规格值编号
*/
@ApiModelProperty
(
value
=
"规格值编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
/**
* 规格值名
*/
@ApiModelProperty
(
value
=
"规格值名"
,
required
=
true
,
example
=
"小"
)
private
String
name
;
}
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
response
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
@ApiModel
(
value
=
"商品规格 VO"
,
description
=
"不带有规格值数组"
)
@Data
@Accessors
(
chain
=
true
)
public
class
AdminsProductAttrVO
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
@ApiModelProperty
(
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"创建时间"
,
required
=
true
,
example
=
"时间戳"
)
private
Date
createTime
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrValueResponse.java
0 → 100644
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
rest
.
response
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
@ApiModel
(
value
=
"商品规格值 VO"
)
@Data
@Accessors
(
chain
=
true
)
public
class
AdminsProductAttrValueResponse
{
@ApiModelProperty
(
value
=
"规格值编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
attrId
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
@ApiModelProperty
(
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"创建时间"
,
required
=
true
,
example
=
"时间戳"
)
private
Date
createTime
;
}
product/product-rpc-api/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
system
</artifactId>
<artifactId>
product
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
product/product-rpc/pom.xml
浏览文件 @
a4ca27d6
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
system
</artifactId>
<artifactId>
product
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductAttrService
;
import
cn.iocoder.mall.product.api.bo.ProductAttrBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrPageBO
;
...
...
@@ -13,12 +12,12 @@ import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrPageVO;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrSimpleVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrValueVO
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductBrandService
;
import
cn.iocoder.mall.product.api.bo.ProductBrandBO
;
import
cn.iocoder.mall.product.api.bo.ProductBrangPageBO
;
...
...
@@ -11,12 +10,12 @@ import cn.iocoder.mall.product.api.dto.ProductBrandUpdateDTO;
import
cn.iocoder.mall.product.application.convert.ProductBrandConvert
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductBrandVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductBrangPageVO
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.web.bind.annotation.*
;
import
static
cn
.
iocoder
.
common
.
framework
.
vo
.
CommonResult
.
success
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductCategoryService
;
import
cn.iocoder.mall.product.api.bo.ProductCategoryBO
;
import
cn.iocoder.mall.product.api.constant.ProductCategoryConstants
;
...
...
@@ -10,12 +9,12 @@ import cn.iocoder.mall.product.api.dto.ProductCategoryUpdateDTO;
import
cn.iocoder.mall.product.application.convert.ProductCategoryConvert
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryTreeNodeVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryVO
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java
浏览文件 @
a4ca27d6
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
...
...
@@ -11,13 +10,13 @@ import cn.iocoder.mall.product.application.convert.ProductSpuConvert;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuDetailVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuPageVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuVO
;
import
cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder
;
import
com.alibaba.fastjson.JSON
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Collection
;
import
java.util.List
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java
浏览文件 @
a4ca27d6
...
...
@@ -10,7 +10,6 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
/**
* 用户收藏
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论