Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
cce62c43
提交
cce62c43
authored
5月 11, 2020
作者:
wuwenbin
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
e21d1950
23251cb1
隐藏空白字符变更
内嵌
并排
正在显示
117 个修改的文件
包含
2076 行增加
和
384 行删除
+2076
-384
OrderApplication.java
...a/cn/iocoder/mall/order/application/OrderApplication.java
+1
-0
OrderReturnApplyRequest.java
...all/order/rest/request/users/OrderReturnApplyRequest.java
+6
-3
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
ProductBrandBO.java
.../cn/iocoder/mall/product/biz/bo/brand/ProductBrandBO.java
+1
-1
ProductCategoryBO.java
...coder/mall/product/biz/bo/category/ProductCategoryBO.java
+1
-2
ProductBrangPageBO.java
...coder/mall/product/biz/bo/product/ProductBrangPageBO.java
+1
-0
ProductAttrConvert.java
...der/mall/product/biz/convert/attr/ProductAttrConvert.java
+27
-4
ProductBrandConvert.java
...r/mall/product/biz/convert/brand/ProductBrandConvert.java
+10
-6
ProductAttrConvert2.java
...mall/product/biz/convert/product/ProductAttrConvert2.java
+0
-59
ProductSpuConvert.java
...r/mall/product/biz/convert/product/ProductSpuConvert.java
+0
-2
ProductBrandMapper.java
...oder/mall/product/biz/dao/product/ProductBrandMapper.java
+16
-3
ProductSkuMapper.java
...ocoder/mall/product/biz/dao/product/ProductSkuMapper.java
+11
-2
ProductSpuMapper.java
...ocoder/mall/product/biz/dao/product/ProductSpuMapper.java
+2
-2
ProductAttrValueDO.java
...ll/product/biz/dataobject/product/ProductAttrValueDO.java
+3
-1
ProductBrandDO.java
...r/mall/product/biz/dataobject/product/ProductBrandDO.java
+3
-1
ProductAttrAddDTO.java
.../iocoder/mall/product/biz/dto/attr/ProductAttrAddDTO.java
+1
-1
ProductAttrPageDTO.java
...iocoder/mall/product/biz/dto/attr/ProductAttrPageDTO.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
ProductBrandAddDTO.java
...ocoder/mall/product/biz/dto/brand/ProductBrandAddDTO.java
+1
-1
ProductBrandPageDTO.java
...coder/mall/product/biz/dto/brand/ProductBrandPageDTO.java
+5
-10
ProductBrandUpdateDTO.java
...der/mall/product/biz/dto/brand/ProductBrandUpdateDTO.java
+1
-1
ProductCategoryAddDTO.java
.../mall/product/biz/dto/category/ProductCategoryAddDTO.java
+0
-1
ProductAttrService.java
.../mall/product/biz/service/product/ProductAttrService.java
+33
-13
ProductBrandService.java
...mall/product/biz/service/product/ProductBrandService.java
+45
-0
ProductSpuService.java
...r/mall/product/biz/service/product/ProductSpuService.java
+15
-0
ProductAttrServiceImpl.java
...duct/biz/service/product/impl/ProductAttrServiceImpl.java
+68
-79
ProductBrandServiceImpl.java
...uct/biz/service/product/impl/ProductBrandServiceImpl.java
+67
-0
ProductCategoryServiceImpl.java
.../biz/service/product/impl/ProductCategoryServiceImpl.java
+3
-3
ProductSpuServiceImpl.java
...oduct/biz/service/product/impl/ProductSpuServiceImpl.java
+59
-0
pom.xml
product/product-rest/pom.xml
+1
-1
AdminsProductAttrController.java
...t/rest/controller/admins/AdminsProductAttrController.java
+98
-97
AdminsProductBrandController.java
.../rest/controller/admins/AdminsProductBrandController.java
+93
-0
UserFavoriteController.java
...product/rest/controller/users/UserFavoriteController.java
+1
-0
ProductAttrConvert.java
...er/mall/product/rest/convert/attr/ProductAttrConvert.java
+30
-4
ProductBrandConvert.java
.../mall/product/rest/convert/brand/ProductBrandConvert.java
+36
-0
ProductAttrAddRequest.java
...mall/product/rest/request/attr/ProductAttrAddRequest.java
+19
-0
ProductAttrPageRequest.java
...all/product/rest/request/attr/ProductAttrPageRequest.java
+1
-1
ProductAttrUpdateRequest.java
...l/product/rest/request/attr/ProductAttrUpdateRequest.java
+25
-0
ProductAttrValueAddRequest.java
...product/rest/request/attr/ProductAttrValueAddRequest.java
+26
-0
ProductAttrValueUpdateRequest.java
...duct/rest/request/attr/ProductAttrValueUpdateRequest.java
+29
-0
ProductBrandAddRequest.java
...ll/product/rest/request/brand/ProductBrandAddRequest.java
+27
-0
ProductBrandPageRequest.java
...l/product/rest/request/brand/ProductBrandPageRequest.java
+24
-0
ProductBrandUpdateRequest.java
...product/rest/request/brand/ProductBrandUpdateRequest.java
+32
-0
AdminsProductCategoryAddRequest.java
...est/request/category/AdminsProductCategoryAddRequest.java
+0
-1
AdminsProductAttrSimpleResponse.java
...t/rest/response/attr/AdminsProductAttrSimpleResponse.java
+38
-0
AdminsProductAttrValueResponse.java
...ct/rest/response/attr/AdminsProductAttrValueResponse.java
+26
-0
AdminsProdutAttrResponse.java
.../product/rest/response/attr/AdminsProdutAttrResponse.java
+20
-0
AdminsProductBrandResponse.java
...oduct/rest/response/brand/AdminsProductBrandResponse.java
+36
-0
pom.xml
product/product-rpc-api/pom.xml
+1
-1
ProductSpuRpc.java
...n/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java
+12
-0
ProductSpuDetailResponse.java
...r/mall/product/rpc/response/ProductSpuDetailResponse.java
+127
-0
pom.xml
product/product-rpc/pom.xml
+1
-1
ProductSpuConvert.java
...n/iocoder/mall/product/rpc/convert/ProductSpuConvert.java
+16
-0
ProductSpuRpcImpl.java
...va/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java
+24
-0
rpc.yaml
product/product-rpc/src/main/resources/rpc.yaml
+4
-22
pom.xml
product/product-service-impl/pom.xml
+12
-0
ProductAttrDO.java
...ava/cn/iocoder/mall/product/dataobject/ProductAttrDO.java
+1
-1
ProductAttrValueDO.java
...n/iocoder/mall/product/dataobject/ProductAttrValueDO.java
+1
-1
ProductBrandDO.java
...va/cn/iocoder/mall/product/dataobject/ProductBrandDO.java
+1
-1
ProductCategoryDO.java
...cn/iocoder/mall/product/dataobject/ProductCategoryDO.java
+1
-1
ProductSkuDO.java
...java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
+1
-1
ProductSpuDO.java
...java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
+1
-1
UserProductSpuCollectionsConsumer.java
...ll/product/message/UserProductSpuCollectionsConsumer.java
+2
-2
ProductAttrServiceImpl.java
.../iocoder/mall/product/service/ProductAttrServiceImpl.java
+1
-1
ProductCategoryServiceImpl.java
...oder/mall/product/service/ProductCategoryServiceImpl.java
+1
-1
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+1
-1
UserProductSpuCollectionsServiceImpl.java
...product/service/UserProductSpuCollectionsServiceImpl.java
+1
-1
pom.xml
product/product-start/pom.xml
+8
-6
AdminsProductAttrController.java
...cation/controller/admins/AdminsProductAttrController.java
+1
-1
AdminsProductBrandController.java
...ation/controller/admins/AdminsProductBrandController.java
+1
-1
AdminsProductCategoryController.java
...on/controller/admins/AdminsProductCategoryController.java
+1
-1
AdminsProductSpuController.java
...ication/controller/admins/AdminsProductSpuController.java
+1
-1
UserFavoriteController.java
.../application/controller/users/UserFavoriteController.java
+1
-5
UsersProductSpuCollectionController.java
...controller/users/UsersProductSpuCollectionController.java
+1
-3
pom.xml
promotion/promotion-service-impl/pom.xml
+1
-1
ProductRecommendServiceImpl.java
...ll/promotion/biz/service/ProductRecommendServiceImpl.java
+4
-4
SystemErrorCodeEnum.java
...cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java
+5
-0
ErrorCodeTypeEnum.java
...er/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java
+26
-0
ErrorCodeBO.java
.../cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java
+31
-0
ServiceExceptionConfiguration.java
...mall/system/biz/config/ServiceExceptionConfiguration.java
+13
-0
ErrorCodeConvert.java
...r/mall/system/biz/convert/errorcode/ErrorCodeConvert.java
+34
-0
ErrorCodeMapper.java
...ocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java
+31
-0
ErrorCodeDO.java
...der/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java
+37
-0
ErrorCodeAddDTO.java
...ocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java
+21
-0
ErrorCodeDTO.java
...n/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java
+28
-0
ErrorCodeDeleteDTO.java
...der/mall/system/biz/dto/errorcode/ErrorCodeDeleteDTO.java
+6
-11
ErrorCodeGetListDTO.java
...er/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java
+21
-0
ErrorCodePageDTO.java
...coder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java
+10
-0
ErrorCodeUpdateDTO.java
...der/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java
+32
-0
ErrorCodeService.java
...r/mall/system/biz/service/errorcode/ErrorCodeService.java
+60
-0
ErrorCodeServiceImpl.java
...ll/system/biz/service/errorcode/ErrorCodeServiceImpl.java
+142
-0
SystemErrorCodeController.java
.../rest/controller/errorCode/SystemErrorCodeController.java
+71
-0
ErrorCodeConvert.java
.../mall/system/rest/convert/errorcode/ErrorCodeConvert.java
+29
-0
ErrorCodeAddRequest.java
...ll/system/rest/request/errorcode/ErrorCodeAddRequest.java
+23
-0
ErrorCodePageRequest.java
...l/system/rest/request/errorcode/ErrorCodePageRequest.java
+18
-0
ErrorCodeUpdateRequest.java
...system/rest/request/errorcode/ErrorCodeUpdateRequest.java
+30
-0
ErrorCodePageResponse.java
...system/rest/response/errorcode/ErrorCodePageResponse.java
+33
-0
ErrorCodeRPC.java
...n/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java
+16
-0
ErrorCodeResponse.java
...mall/system/rpc/response/errorcode/ErrorCodeResponse.java
+33
-0
ErrorCodeConvert.java
...r/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java
+16
-0
ErrorCodeRPCImpl.java
...coder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java
+30
-0
rpc.yaml
system/system-rpc/src/main/resources/rpc.yaml
+4
-0
SystemLogService.java
...ain/java/cn/iocoder/mall/system/api/SystemLogService.java
+0
-2
UsersUserAddressDO.java
...der/mall/user/biz/dataobject/user/UsersUserAddressDO.java
+1
-0
UserAddressUpdateDTO.java
.../iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java
+1
-0
UserErrorCodeEnum.java
...ava/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java
+4
-0
UsersUserAddressController.java
...user/rest/controller/user/UsersUserAddressController.java
+1
-1
没有找到文件。
order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java
浏览文件 @
cce62c43
...
...
@@ -35,6 +35,7 @@ public class OrderApplication {
* @return
*/
@Bean
// TODO FROM 芋艿 to 芋艿:这个不太了解,可能后续要放到 starter 里,统一处理。
public
ConfigurableServletWebServerFactory
webServerFactory
()
{
TomcatServletWebServerFactory
factory
=
new
TomcatServletWebServerFactory
();
factory
.
addConnectorCustomizers
(
new
TomcatConnectorCustomizer
()
{
...
...
order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
order
.
rest
.
request
.
users
;
import
java.io.Serializable
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Size
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Size
;
import
java.io.Serializable
;
/**
* 订单售后
*
...
...
@@ -26,6 +27,8 @@ public class OrderReturnApplyRequest implements Serializable {
*
* - 1、退货退款
* - 2、退款
*
* / TODO FROM 芋艿 to xiaofeng:可以瞅瞅 @InEnum 注解,直接校验退货类型
*/
@NotNull
(
message
=
"退货类型不能为空!"
)
private
Integer
returnType
;
...
...
product/pom.xml
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
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
浏览文件 @
cce62c43
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
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
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
浏览文件 @
cce62c43
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/bo/
product
/ProductBrandBO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/
brand
/ProductBrandBO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
brand
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java
浏览文件 @
cce62c43
...
...
@@ -2,7 +2,7 @@ package cn.iocoder.mall.product.biz.bo.category;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
...
...
@@ -12,7 +12,6 @@ import java.util.Date;
*/
@Data
@Accessors
(
chain
=
true
)
// TODO FROM 芋艿 to 伟帆,BO 可以不加 Serializable 接口,因为没序列化的诉求哈。一般 BO 可以创建一个统一的 ProductCategory,可以把 ProductCategoryAllListBO 合并过来 [DONE]
public
class
ProductCategoryBO
{
/**
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrangPageBO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
bo
.
product
;
import
cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java
浏览文件 @
cce62c43
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
/ProductBrandConvert.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/
brand
/ProductBrandConvert.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
convert
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
convert
.
brand
;
import
cn.iocoder.mall.product.biz.bo.product.ProductBrandBO
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.product.ProductBrandUpdateDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
...
...
@@ -15,6 +18,9 @@ public interface ProductBrandConvert {
ProductBrandConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductBrandConvert
.
class
);
@Mapping
(
source
=
"records"
,
target
=
"list"
)
PageResult
<
ProductBrandBO
>
convertPage
(
IPage
<
ProductBrandDO
>
bean
);
@Mappings
({})
List
<
ProductBrandBO
>
convert
(
List
<
ProductBrandDO
>
brands
);
...
...
@@ -26,5 +32,4 @@ public interface ProductBrandConvert {
@Mappings
({})
ProductBrandDO
convert
(
ProductBrandAddDTO
brand
);
}
\ No newline at end of file
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java
deleted
100644 → 0
浏览文件 @
e21d1950
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/convert/product/ProductSpuConvert.java
浏览文件 @
cce62c43
...
...
@@ -130,6 +130,4 @@ public interface ProductSpuConvert {
return
spuDetailList
;
}
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dao
.
product
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Repository
;
@Repository
public
interface
ProductBrandMapper
extends
BaseMapper
<
ProductBrandDO
>
{
}
\ No newline at end of file
default
IPage
<
ProductBrandDO
>
selectPageByParams
(
ProductBrandPageDTO
productBrandPageDTO
)
{
Page
<
ProductBrandDO
>
page
=
new
Page
<>(
productBrandPageDTO
.
getPageNo
(),
productBrandPageDTO
.
getPageSize
());
LambdaQueryWrapper
<
ProductBrandDO
>
queryWrapper
=
Wrappers
.<
ProductBrandDO
>
query
().
lambda
()
.
like
(
StringUtils
.
isNotBlank
(
productBrandPageDTO
.
getName
()),
ProductBrandDO:
:
getName
,
productBrandPageDTO
.
getName
())
.
like
(
StringUtils
.
isNotBlank
(
productBrandPageDTO
.
getDescription
()),
ProductBrandDO:
:
getName
,
productBrandPageDTO
.
getDescription
())
.
eq
(
null
!=
productBrandPageDTO
.
getStatus
(),
ProductBrandDO:
:
getName
,
productBrandPageDTO
.
getStatus
())
.
eq
(
ProductBrandDO:
:
getDeleted
,
false
);
return
selectPage
(
page
,
queryWrapper
);
}
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSkuMapper.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dao
.
product
;
import
cn.iocoder.mall.product.biz.dataobject.product.Product
Brand
DO
;
import
cn.iocoder.mall.product.biz.dataobject.product.Product
Sku
DO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
public
interface
ProductSkuMapper
extends
BaseMapper
<
Product
Brand
DO
>
{
public
interface
ProductSkuMapper
extends
BaseMapper
<
Product
Sku
DO
>
{
default
List
<
ProductSkuDO
>
selectListBySpuIdAndStatus
(
Integer
spuId
,
Integer
status
)
{
return
selectList
(
Wrappers
.<
ProductSkuDO
>
query
().
lambda
()
.
eq
(
ProductSkuDO:
:
getSpuId
,
spuId
)
.
eq
(
ProductSkuDO:
:
getStatus
,
status
)
.
eq
(
ProductSkuDO:
:
getDeleted
,
false
));
}
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSpuMapper.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dao
.
product
;
import
cn.iocoder.mall.product.biz.dataobject.product.Product
Brand
DO
;
import
cn.iocoder.mall.product.biz.dataobject.product.Product
Spu
DO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
@Repository
public
interface
ProductSpuMapper
extends
BaseMapper
<
Product
Brand
DO
>
{
public
interface
ProductSpuMapper
extends
BaseMapper
<
Product
Spu
DO
>
{
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java
浏览文件 @
cce62c43
...
...
@@ -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/dataobject/product/ProductBrandDO.java
浏览文件 @
cce62c43
...
...
@@ -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
ProductBrandDO
extends
DeletableDO
{
...
...
@@ -32,7 +34,7 @@ public class ProductBrandDO extends DeletableDO {
/**
* 状态
*
*
<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
浏览文件 @
cce62c43
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/attr/
Admin
ProductAttrPageDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrPageDTO.java
浏览文件 @
cce62c43
...
...
@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
public
class
Admin
ProductAttrPageDTO
extends
PageParam
{
public
class
ProductAttrPageDTO
extends
PageParam
{
/**
* 商品规格名字
*/
...
...
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
浏览文件 @
cce62c43
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
浏览文件 @
cce62c43
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
浏览文件 @
cce62c43
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
/ProductBrandAddDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
brand
/ProductBrandAddDTO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
brand
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductBrandPageDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
brand
/ProductBrandPageDTO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
brand
;
import
cn.iocoder.common.framework.vo.PageParam
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
/**
* 商品品牌分页 DTO
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductBrandPageDTO
{
public
class
ProductBrandPageDTO
extends
PageParam
{
/**
* 名称
...
...
@@ -27,10 +28,4 @@ public class ProductBrandPageDTO {
*/
private
Integer
status
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
product
/ProductBrandUpdateDTO.java
→
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/
brand
/ProductBrandUpdateDTO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
brand
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java
浏览文件 @
cce62c43
...
...
@@ -17,7 +17,6 @@ public class ProductCategoryAddDTO {
/**
* 管理员id
*/
// TODO FROM 芋艿 to 伟帆:传入 Service 的,要加下 Validation 的注解,虽然 Controller 那也添加了 Validation,但是相比来说,Service 更应该被保护,嘿嘿。因为一些时候,Service 也会被别人所调用,所以要保护好自己。[DONE]
@NotNull
(
message
=
"管理员id不能为空"
)
private
Integer
adminId
;
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java
浏览文件 @
cce62c43
...
...
@@ -4,16 +4,14 @@ 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.bo.product.ProductAttrAndValuePairBO
;
import
cn.iocoder.mall.product.biz.dto.attr.*
;
import
java.util.List
;
import
java.util.Set
;
public
interface
ProductAttrService
{
/**
...
...
@@ -22,7 +20,7 @@ public interface ProductAttrService {
* @param productAttrPageDTO 查询参数
* @return 规格分页信息
*/
PageResult
<
ProductAttr
BO
>
getProductAttrPage
(
Admin
ProductAttrPageDTO
productAttrPageDTO
);
PageResult
<
ProductAttr
WithValueBO
>
getProductAttrPage
(
ProductAttrPageDTO
productAttrPageDTO
);
/**
* 获得规格属性数组
...
...
@@ -31,14 +29,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
);
...
...
@@ -47,4 +66,5 @@ public interface ProductAttrService {
Boolean
updateProductAttrValueStatus
(
Integer
adminId
,
Integer
productAttrValueId
,
@InEnum
(
value
=
CommonStatusEnum
.
class
,
message
=
"修改状态必须是 {value}"
)
Integer
status
);
List
<
ProductAttrAndValuePairBO
>
validProductAttrAndValue
(
Set
<
Integer
>
productAttrValueIds
,
boolean
validStatus
);
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductBrandService.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
service
.
product
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO
;
public
interface
ProductBrandService
{
/**
* 获取品牌分页数据
*
* @param productBrandPageDTO 翻页参数
* @return
*/
PageResult
<
ProductBrandBO
>
getProductBrandPage
(
ProductBrandPageDTO
productBrandPageDTO
);
/**
* 获取品牌明细
*
* @param id 主键
* @return
*/
ProductBrandBO
getProductBrand
(
Integer
id
);
/**
* 添加品牌
*
* @param productBrandAddDTO 添加参数
* @return
*/
ProductBrandBO
addProductBrand
(
Integer
adminId
,
ProductBrandAddDTO
productBrandAddDTO
);
/**
* 更新品牌
*
* @param productBrandUpdateDTO 更新参数
* @return
*/
Boolean
updateProductBrand
(
Integer
adminId
,
ProductBrandUpdateDTO
productBrandUpdateDTO
);
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductSpuService.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
service
.
product
;
import
cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO
;
public
interface
ProductSpuService
{
/**
* 获取SPU明细
*
* @param id spuId
* @return SPU明细
*/
ProductSpuDetailBO
getProductSpuDetail
(
Integer
id
);
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java
浏览文件 @
cce62c43
...
...
@@ -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
<
ProductAttr
BO
>
getProductAttrPage
(
Admin
ProductAttrPageDTO
productAttrPageDTO
)
{
public
PageResult
<
ProductAttr
WithValueBO
>
getProductAttrPage
(
ProductAttrPageDTO
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,45 @@ public class ProductAttrServiceImpl implements ProductAttrService {
}
// 更新到数据库
ProductAttrValueDO
updateProductAttrValue
=
new
ProductAttrValueDO
().
setId
(
productAttrValueId
).
setStatus
(
status
);
productAttrValueMapper
.
updateById
(
updateProductAttrValue
);
int
i
=
productAttrValueMapper
.
updateById
(
updateProductAttrValue
);
return
i
>
0
;
}
@Override
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-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
service
.
product
.
impl
;
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.brand.ProductBrandBO
;
import
cn.iocoder.mall.product.biz.convert.brand.ProductBrandConvert
;
import
cn.iocoder.mall.product.biz.dao.product.ProductBrandMapper
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO
;
import
cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.biz.service.product.ProductBrandService
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
/**
* 商品规格 Service 实现类
*
* @see ProductBrandDO
*/
@Service
public
class
ProductBrandServiceImpl
implements
ProductBrandService
{
@Autowired
private
ProductBrandMapper
productBrandMapper
;
@Override
public
PageResult
<
ProductBrandBO
>
getProductBrandPage
(
ProductBrandPageDTO
productBrandPageDTO
)
{
IPage
<
ProductBrandDO
>
brandPage
=
productBrandMapper
.
selectPageByParams
(
productBrandPageDTO
);
return
ProductBrandConvert
.
INSTANCE
.
convertPage
(
brandPage
);
}
@Override
public
ProductBrandBO
getProductBrand
(
Integer
brandId
)
{
return
ProductBrandConvert
.
INSTANCE
.
convert
(
productBrandMapper
.
selectById
(
brandId
));
}
@Override
public
ProductBrandBO
addProductBrand
(
Integer
adminId
,
ProductBrandAddDTO
productBrandAddDTO
)
{
// 校验品牌名不重复
int
count
=
productBrandMapper
.
selectCount
(
Wrappers
.<
ProductBrandDO
>
query
().
lambda
()
.
eq
(
ProductBrandDO:
:
getName
,
productBrandAddDTO
.
getName
())
.
eq
(
ProductBrandDO:
:
getDeleted
,
false
));
if
(
count
>
0
)
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_BRAND_EXIST
.
getCode
());
}
ProductBrandDO
productBrandDO
=
ProductBrandConvert
.
INSTANCE
.
convert
(
productBrandAddDTO
);
productBrandDO
.
setCreateTime
(
new
Date
());
productBrandDO
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
productBrandMapper
.
insert
(
productBrandDO
);
return
ProductBrandConvert
.
INSTANCE
.
convert
(
productBrandDO
);
}
@Override
public
Boolean
updateProductBrand
(
Integer
adminId
,
ProductBrandUpdateDTO
productBrandUpdateDTO
)
{
ProductBrandDO
productBrandDO
=
ProductBrandConvert
.
INSTANCE
.
convert
(
productBrandUpdateDTO
);
productBrandDO
.
setUpdateTime
(
new
Date
());
productBrandMapper
.
updateById
(
productBrandDO
);
return
true
;
}
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java
浏览文件 @
cce62c43
...
...
@@ -16,11 +16,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
import
static
cn
.
iocoder
.
mall
.
product
.
biz
.
enums
.
ProductErrorCodeEnum
.*;
import
javax.validation.Valid
;
import
java.util.Date
;
import
java.util.List
;
import
static
cn
.
iocoder
.
mall
.
product
.
biz
.
enums
.
ProductErrorCodeEnum
.*;
/**
* @Author: jiangweifan
* @Date: 2020/5/6
...
...
@@ -166,7 +167,6 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
}
// 父分类必须是一级分类
if
(!
ProductCategoryConstants
.
PID_ROOT
.
equals
(
parentCategory
.
getPid
()))
{
// TODO FROM 芋艿 to 伟帆,ProductErrorCodeEnum 去实现下 ServiceExceptionUtil.Enumerable 接口,酱紫就不用 .getCode() 方法,代码会更简洁。同时,可以把 ProductErrorCodeEnum static import 下,[DONE]
throw
ServiceExceptionUtil
.
exception
(
PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2
);
}
}
...
...
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductSpuServiceImpl.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
service
.
product
.
impl
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.mall.product.biz.bo.product.ProductAttrAndValuePairBO
;
import
cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.biz.convert.product.ProductSpuConvert
;
import
cn.iocoder.mall.product.biz.dao.product.ProductCategoryMapper
;
import
cn.iocoder.mall.product.biz.dao.product.ProductSkuMapper
;
import
cn.iocoder.mall.product.biz.dao.product.ProductSpuMapper
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductCategoryDO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductSkuDO
;
import
cn.iocoder.mall.product.biz.dataobject.product.ProductSpuDO
;
import
cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.biz.enums.product.ProductSpuConstants
;
import
cn.iocoder.mall.product.biz.service.product.ProductAttrService
;
import
cn.iocoder.mall.product.biz.service.product.ProductSpuService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
@Service
public
class
ProductSpuServiceImpl
implements
ProductSpuService
{
@Autowired
private
ProductSpuMapper
productSpuMapper
;
@Autowired
private
ProductSkuMapper
productSkuMapper
;
@Autowired
private
ProductCategoryMapper
productCategoryMapper
;
@Autowired
private
ProductAttrService
productAttrService
;
@Override
public
ProductSpuDetailBO
getProductSpuDetail
(
Integer
spuId
)
{
// 校验商品 spu 存在
ProductSpuDO
spu
=
productSpuMapper
.
selectById
(
spuId
);
if
(
spu
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
ProductErrorCodeEnum
.
PRODUCT_SPU_NOT_EXISTS
.
getCode
());
}
// 获得商品分类分类
ProductCategoryDO
category
=
productCategoryMapper
.
selectById
(
spu
.
getCid
());
Assert
.
notNull
(
category
,
String
.
format
(
"分类编号(%d) 对应"
,
spu
.
getCid
()));
// 获得商品 sku 数组
List
<
ProductSkuDO
>
skus
=
productSkuMapper
.
selectListBySpuIdAndStatus
(
spuId
,
ProductSpuConstants
.
SKU_STATUS_ENABLE
);
// 获得规格
Set
<
Integer
>
productAttrValueIds
=
new
HashSet
<>();
skus
.
forEach
(
sku
->
productAttrValueIds
.
addAll
(
StringUtil
.
splitToInt
(
sku
.
getAttrs
(),
","
)));
// 读取规格时,不考虑规格是否被禁用
List
<
ProductAttrAndValuePairBO
>
attrAndValuePairList
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
,
false
);
// 返回成功
return
ProductSpuConvert
.
INSTANCE
.
convert2
(
spu
,
skus
,
attrAndValuePairList
,
category
);
}
}
product/product-rest/pom.xml
浏览文件 @
cce62c43
...
...
@@ -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
浏览文件 @
cce62c43
...
...
@@ -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.ProductAttrPageRequest
;
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.AdminsProdutAttrResponse
;
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
;
/**
* 商品规格
...
...
@@ -32,102 +45,90 @@ public class AdminsProductAttrController {
@GetMapping
(
"/attr/page"
)
@ApiOperation
(
"获得规格分页"
)
public
CommonResult
<
PageResult
<
AdminsProductAttrPageResponse
>>
attrPage
(
Admin
ProductAttrPageRequest
request
)
{
Admin
ProductAttrPageDTO
pageDTO
=
ProductAttrConvert
.
INSTANCE
.
convert
(
request
);
PageResult
<
ProductAttrBO
>
productAttrPage
=
productAttrService
.
getProductAttrPage
(
pageDTO
);
public
CommonResult
<
PageResult
<
AdminsProductAttrPageResponse
>>
attrPage
(
ProductAttrPageRequest
request
)
{
ProductAttrPageDTO
pageDTO
=
ProductAttrConvert
.
INSTANCE
.
convert
(
request
);
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
<
AdminsProdutAttrResponse
>
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/controller/admins/AdminsProductBrandController.java
0 → 100644
浏览文件 @
cce62c43
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.brand.ProductBrandBO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO
;
import
cn.iocoder.mall.product.biz.service.product.ProductBrandService
;
import
cn.iocoder.mall.product.rest.convert.brand.ProductBrandConvert
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandAddRequest
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandPageRequest
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandUpdateRequest
;
import
cn.iocoder.mall.product.rest.response.brand.AdminsProductBrandResponse
;
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
lombok.AllArgsConstructor
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
static
cn
.
iocoder
.
common
.
framework
.
vo
.
CommonResult
.
success
;
@RestController
@RequestMapping
(
"admins/brand"
)
@Api
(
"管理员 - 商品品牌 API"
)
@AllArgsConstructor
public
class
AdminsProductBrandController
{
private
final
ProductBrandService
productBrandService
;
@PostMapping
(
"/add"
)
@ApiOperation
(
"创建品牌"
)
public
CommonResult
<
AdminsProductBrandResponse
>
add
(
@Validated
ProductBrandAddRequest
addRequest
)
{
// 创建 ProductBrandAddDTO 对象
ProductBrandAddDTO
productBrandAddDTO
=
ProductBrandConvert
.
INSTANCE
.
convertAdd
(
addRequest
);
// 保存品牌
ProductBrandBO
result
=
productBrandService
.
addProductBrand
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productBrandAddDTO
);
// 返回结果
return
success
(
ProductBrandConvert
.
INSTANCE
.
convert
(
result
));
}
@PostMapping
(
"/update"
)
@ApiOperation
(
"更新商品"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"品牌主键"
,
required
=
true
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"name"
,
value
=
"品牌名称"
,
required
=
true
,
example
=
"安踏"
),
@ApiImplicitParam
(
name
=
"description"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
),
@ApiImplicitParam
(
name
=
"picUrl"
,
value
=
"品牌图片"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
),
@ApiImplicitParam
(
name
=
"status"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
)
})
// TODO FROM 芋艿 to q2118cs:只要改成了 bean 接收,就不用在写 @ApiImplicitParam 注解啦,直接在 bean 里写就 ok 啦
public
CommonResult
<
Boolean
>
update
(
@Validated
ProductBrandUpdateRequest
updateRequest
)
{
// 创建 productBrandUpdateDTO 对象
ProductBrandUpdateDTO
productBrandUpdateDTO
=
ProductBrandConvert
.
INSTANCE
.
convertUpdate
(
updateRequest
);
// 更新商品
return
success
(
productBrandService
.
updateProductBrand
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productBrandUpdateDTO
));
}
@GetMapping
(
"/get"
)
@ApiOperation
(
"获取品牌"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"品牌主键"
,
required
=
true
,
example
=
"1"
)
})
public
CommonResult
<
AdminsProductBrandResponse
>
add
(
@RequestParam
(
"id"
)
Integer
id
)
{
// 保存商品
ProductBrandBO
result
=
productBrandService
.
getProductBrand
(
id
);
// 返回结果
return
success
(
ProductBrandConvert
.
INSTANCE
.
convert
(
result
));
}
@GetMapping
(
"/page"
)
@ApiOperation
(
"获得品牌分页"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"name"
,
value
=
"品牌名称"
,
required
=
true
,
example
=
"安踏"
),
@ApiImplicitParam
(
name
=
"description"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
),
@ApiImplicitParam
(
name
=
"status"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"pageNo"
,
value
=
"页码"
,
required
=
true
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"pageSize"
,
value
=
"页面大小"
,
required
=
true
,
example
=
"10"
)
})
public
CommonResult
<
PageResult
<
AdminsProductBrandResponse
>>
attrPage
(
ProductBrandPageRequest
pageRequest
)
{
// 创建 ProductBrandPageDTO 对象
ProductBrandPageDTO
productBrandPageDTO
=
ProductBrandConvert
.
INSTANCE
.
convertPageRequest
(
pageRequest
);
// 查询分页
PageResult
<
ProductBrandBO
>
productBrandPage
=
productBrandService
.
getProductBrandPage
(
productBrandPageDTO
);
PageResult
<
AdminsProductBrandResponse
>
adminPageResponse
=
ProductBrandConvert
.
INSTANCE
.
convertPage
(
productBrandPage
);
return
CommonResult
.
success
(
adminPageResponse
);
}
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/users/UserFavoriteController.java
浏览文件 @
cce62c43
...
...
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
(
"users/favorite"
)
@Api
(
"用户收藏"
)
// TODO FROM 芋艿 to ilnhj:controller 分包的话,还是按照模块。然后通过 Admins 和 Users 前缀,区分不同的 Controlller
public
class
UserFavoriteController
{
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java
浏览文件 @
cce62c43
...
...
@@ -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.dto.attr.AdminProductAttrPageDTO
;
import
cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest
;
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.ProductAttrPageDTO
;
import
cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO
;
import
cn.iocoder.mall.product.rest.request.attr.ProductAttrPageRequest
;
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.AdminsProdutAttrResponse
;
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
);
AdminProductAttrPageDTO
convert
(
AdminProductAttrPageRequest
bean
);
@Mappings
({})
ProductAttrPageDTO
convert
(
ProductAttrPageRequest
bean
);
@Mappings
({})
PageResult
<
AdminsProductAttrPageResponse
>
convertPage
(
PageResult
<
ProductAttrWithValueBO
>
productAttrPage
);
@Mappings
({})
List
<
AdminsProductAttrSimpleResponse
>
convertSimple
(
List
<
ProductAttrSimpleWithValueBO
>
simpleList
);
PageResult
<
AdminsProductAttrPageResponse
>
convertPage
(
PageResult
<
ProductAttrBO
>
productAttrPage
);
@Mappings
({})
AdminsProdutAttrResponse
convertAttr
(
ProductAttrBO
attrBO
);
@Mappings
({})
ProductAttrUpdateDTO
convertUpdate
(
ProductAttrUpdateRequest
updateRequest
);
@Mappings
({})
AdminsProductAttrValueResponse
convertAddResponse
(
ProductAttrValueBO
result
);
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/brand/ProductBrandConvert.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
convert
.
brand
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO
;
import
cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandAddRequest
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandPageRequest
;
import
cn.iocoder.mall.product.rest.request.brand.ProductBrandUpdateRequest
;
import
cn.iocoder.mall.product.rest.response.brand.AdminsProductBrandResponse
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
@Mapper
public
interface
ProductBrandConvert
{
ProductBrandConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductBrandConvert
.
class
);
@Mappings
({})
AdminsProductBrandResponse
convert
(
ProductBrandBO
brand
);
@Mappings
({})
ProductBrandAddDTO
convertAdd
(
ProductBrandAddRequest
addRequest
);
@Mappings
({})
ProductBrandUpdateDTO
convertUpdate
(
ProductBrandUpdateRequest
updateRequest
);
@Mappings
({})
ProductBrandPageDTO
convertPageRequest
(
ProductBrandPageRequest
pageRequest
);
@Mappings
({})
PageResult
<
AdminsProductBrandResponse
>
convertPage
(
PageResult
<
ProductBrandBO
>
productBrandPage
);
}
\ No newline at end of file
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
@ApiModel
(
"商品 - 规格模块 - 商品规格添加 Request"
)
@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/
Admin
ProductAttrPageRequest.java
→
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrPageRequest.java
浏览文件 @
cce62c43
...
...
@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
Admin
ProductAttrPageRequest
extends
PageParam
{
public
class
ProductAttrPageRequest
extends
PageParam
{
@ApiModelProperty
(
value
=
"商品规格名字,模糊匹配"
,
example
=
"材料"
)
private
String
name
;
...
...
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
@ApiModel
(
"商品 - 规格模块 - 商品规格修改 Request"
)
@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
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
@ApiModel
(
"商品 - 规格模块 - 商品规格值添加 Request"
)
@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
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
attr
;
import
io.swagger.annotations.ApiModel
;
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>
* 注意,不允许修改所属规格
*/
@ApiModel
(
"商品 - 规格模块 - 商品规格值修改 Request"
)
@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/request/brand/ProductBrandAddRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
brand
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
@ApiModel
(
"商品 - 品牌模块 - 商品品牌新增 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ProductBrandAddRequest
{
@ApiModelProperty
(
name
=
"name"
,
value
=
"品牌名称"
,
required
=
true
,
example
=
"安踏"
)
@NotEmpty
(
message
=
"品牌名称不能为空"
)
private
String
name
;
@ApiModelProperty
(
name
=
"description"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
)
private
String
description
;
@ApiModelProperty
(
name
=
"picUrl"
,
value
=
"品牌图片"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
String
picUrl
;
@ApiModelProperty
(
name
=
"status"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandPageRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
brand
;
import
cn.iocoder.common.framework.vo.PageParam
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
@ApiModel
(
"商品 - 品牌模块 - 品牌分页 Request"
)
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ProductBrandPageRequest
extends
PageParam
{
@ApiModelProperty
(
name
=
"name"
,
value
=
"品牌名称"
,
required
=
true
,
example
=
"安踏"
)
private
String
name
;
@ApiModelProperty
(
name
=
"name"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
)
private
String
description
;
@ApiModelProperty
(
name
=
"name"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
)
private
String
status
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandUpdateRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
request
.
brand
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
@ApiModel
(
"商品 - 品牌模块 - 商品品牌更新 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ProductBrandUpdateRequest
{
@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
;
@ApiModelProperty
(
name
=
"description"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
)
private
String
description
;
@ApiModelProperty
(
name
=
"picUrl"
,
value
=
"品牌图片"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
String
picUrl
;
@ApiModelProperty
(
name
=
"status"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
}
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java
浏览文件 @
cce62c43
...
...
@@ -17,7 +17,6 @@ import javax.validation.constraints.NotNull;
@Accessors
(
chain
=
true
)
public
class
AdminsProductCategoryAddRequest
{
// TODO FROM 芋艿 to 伟帆:写了 swagger 注解,我们可以少写一份 Java 注释。[DONE]
@ApiModelProperty
(
name
=
"pid"
,
value
=
"父级分类编号"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"父分类编号不能为空"
)
private
Integer
pid
;
...
...
product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java
0 → 100644
浏览文件 @
cce62c43
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/AdminsProductAttrValueResponse.java
0 → 100644
浏览文件 @
cce62c43
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-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProdutAttrResponse.java
浏览文件 @
cce62c43
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
AdminsProdutAttrResponse
{
@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/brand/AdminsProductBrandResponse.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rest
.
response
.
brand
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
/**
* VO
*/
@ApiModel
(
value
=
"商品品牌"
,
description
=
"商品品牌"
)
@Data
@Accessors
(
chain
=
true
)
public
class
AdminsProductBrandResponse
{
/**
* 规格编号
*/
@ApiModelProperty
(
value
=
"品牌编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
name
=
"name"
,
value
=
"品牌名称"
,
required
=
true
,
example
=
"安踏"
)
@NotEmpty
(
message
=
"品牌名称不能为空"
)
private
String
name
;
@ApiModelProperty
(
name
=
"description"
,
value
=
"品牌描述"
,
required
=
true
,
example
=
"安踏拖鞋"
)
private
String
description
;
@ApiModelProperty
(
name
=
"picUrl"
,
value
=
"品牌图片"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
String
picUrl
;
@ApiModelProperty
(
name
=
"status"
,
value
=
"状态 1开启 2禁用"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
}
product/product-rpc-api/pom.xml
浏览文件 @
cce62c43
...
...
@@ -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-api/src/main/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rpc
.
api
;
import
cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse
;
/**
* @author Rai
*/
public
interface
ProductSpuRpc
{
ProductSpuDetailResponse
getProductSpuDetail
(
Integer
spuId
);
}
product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/response/ProductSpuDetailResponse.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rpc
.
response
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 商品 Spu 明细 BO(包括 Sku 明细)
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductSpuDetailResponse
implements
Serializable
{
/**
* SPU 编号
*/
private
Integer
id
;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private
String
name
;
/**
* 卖点
*/
private
String
sellPoint
;
/**
* 描述
*/
private
String
description
;
/**
* 分类编号
*/
private
Integer
cid
;
/**
* 分类名
*/
private
String
categoryName
;
/**
* 商品主图地址
* <p>
* 数组,以逗号分隔
* <p>
* 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张
*/
private
List
<
String
>
picUrls
;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
* <p>
* true 为已上架
* false 为已下架
*/
private
Boolean
visible
;
/**
* 排序字段
*/
private
Integer
sort
;
// ========== SKU =========
/**
* SKU 数组
*/
private
List
<
Sku
>
skus
;
/**
* 商品 Sku 明细 BO
*/
@Data
@Accessors
(
chain
=
true
)
public
static
class
Sku
implements
Serializable
{
/**
* sku 编号
*/
private
Integer
id
;
/**
* 商品编号
*/
private
Integer
spuId
;
/**
* 图片地址
*/
private
String
picURL
;
/**
* 规格值数组
*/
private
List
<
ProductAttrAndValuePair
>
attrs
;
/**
* 价格,单位:分
*/
private
Integer
price
;
/**
* 库存数量
*/
private
Integer
quantity
;
}
@Data
@Accessors
(
chain
=
true
)
public
static
class
ProductAttrAndValuePair
implements
Serializable
{
/**
* 规格编号
*/
private
Integer
attrId
;
/**
* 规格名
*/
private
String
attrName
;
/**
* 规格值
*/
private
Integer
attrValueId
;
/**
* 规格值名
*/
private
String
attrValueName
;
}
}
product/product-rpc/pom.xml
浏览文件 @
cce62c43
...
...
@@ -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/src/main/java/cn/iocoder/mall/product/rpc/convert/ProductSpuConvert.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rpc
.
convert
;
import
cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
@Mapper
public
interface
ProductSpuConvert
{
ProductSpuConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductSpuConvert
.
class
);
@Mappings
({})
ProductSpuDetailResponse
convertDetail
(
ProductSpuDetailBO
productSpuDetail
);
}
product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
rpc
.
rpc
;
import
cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.biz.service.product.ProductSpuService
;
import
cn.iocoder.mall.product.rpc.api.ProductSpuRpc
;
import
cn.iocoder.mall.product.rpc.convert.ProductSpuConvert
;
import
cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse
;
import
org.apache.dubbo.config.annotation.Service
;
import
org.springframework.beans.factory.annotation.Autowired
;
@Service
(
validation
=
"true"
,
version
=
"${dubbo.provider.ProductSpuService.version}"
)
public
class
ProductSpuRpcImpl
implements
ProductSpuRpc
{
@Autowired
private
ProductSpuService
productSpuService
;
@Override
public
ProductSpuDetailResponse
getProductSpuDetail
(
Integer
spuId
)
{
ProductSpuDetailBO
productSpuDetail
=
productSpuService
.
getProductSpuDetail
(
spuId
);
return
ProductSpuConvert
.
INSTANCE
.
convertDetail
(
productSpuDetail
);
}
}
product/product-rpc/src/main/resources/rpc.yaml
浏览文件 @
cce62c43
...
...
@@ -2,39 +2,21 @@
dubbo
:
# Spring Cloud Alibaba Dubbo 专属配置
cloud
:
subscribed-services
:
'
system
-application'
# 设置订阅的应用列表,默认为 * 订阅所有应用
subscribed-services
:
'
product
-application'
# 设置订阅的应用列表,默认为 * 订阅所有应用
# Dubbo 提供者的协议
protocol
:
name
:
dubbo
port
:
-1
# Dubbo 提供服务的扫描基础包
scan
:
base-packages
:
cn.iocoder.mall.
system
.rpc.rpc
base-packages
:
cn.iocoder.mall.
product
.rpc.rpc
# Dubbo 服务提供者的配置
provider
:
filter
:
-exception
SystemLogRPC
:
version
:
1.0.0
OAuth2RPC
:
version
:
1.0.0
AuthorizationRPC
:
version
:
1.0.0
AdminRPC
:
version
:
1.0.0
UserRPC
:
version
:
1.0.0
UserAddressRPC
:
ProductSpuService
:
version
:
1.0.0
# Dubbo 服务消费者的配置
consumer
:
SystemLogRPC
:
# 用于 AccessLogInterceptor 等拦截器,记录 HTTP API 请求的访问日志
version
:
1.0.0
OAuth2RPC
:
# 用于 AccountAuthInterceptor 拦截器,执行认证
version
:
1.0.0
AuthorizationRPC
:
# 用于 AccountAuthInterceptor 拦截器,执行鉴权(权限验证)
version
:
1.0.0
AdminRPC
:
version
:
1.0.0
UserRPC
:
ProductSpuService
:
version
:
1.0.0
product/product-service-impl/pom.xml
浏览文件 @
cce62c43
...
...
@@ -49,6 +49,12 @@
<artifactId>
mybatis-plus-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-spring-boot-starter-mybatis
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<!-- RPC 相关 -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
...
...
@@ -78,6 +84,12 @@
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
user-biz
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductBrandDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
dataobject
;
import
cn.iocoder.
common.framework
.dataobject.DeletableDO
;
import
cn.iocoder.
mall.mybatis
.dataobject.DeletableDO
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/UserProductSpuCollectionsConsumer.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
message
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.api.UserProductSpuCollectionsService
;
import
cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsBO
;
import
cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsAddDTO
;
...
...
@@ -10,7 +10,7 @@ import cn.iocoder.mall.product.api.message.ProductSpuCollectionMessage;
import
cn.iocoder.mall.product.convert.UserProductSpuCollectionsConvert
;
import
cn.iocoder.mall.user.api.UserService
;
import
cn.iocoder.mall.user.api.bo.UserBO
;
import
cn.iocoder.mall.user.
api.constant
.UserErrorCodeEnum
;
import
cn.iocoder.mall.user.
biz.enums
.UserErrorCodeEnum
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.apache.rocketmq.spring.annotation.RocketMQMessageListener
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
service
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.api.ProductAttrService
;
import
cn.iocoder.mall.product.api.bo.*
;
import
cn.iocoder.mall.product.api.constant.ProductAttrConstants
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
service
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.api.ProductCategoryService
;
import
cn.iocoder.mall.product.api.bo.ProductCategoryBO
;
import
cn.iocoder.mall.product.api.constant.ProductCategoryConstants
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
service
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.util.CollectionUtil
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.*
;
import
cn.iocoder.mall.product.api.constant.ProductCategoryConstants
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/UserProductSpuCollectionsServiceImpl.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
service
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.api.UserProductSpuCollectionsService
;
import
cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsBO
;
import
cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsPageBO
;
...
...
product/product-start/pom.xml
浏览文件 @
cce62c43
...
...
@@ -33,14 +33,10 @@
<artifactId>
product-service-impl
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
user-sdk
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
system-sdk
</artifactId>
<artifactId>
mall-spring-boot-starter-mybatis
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
...
...
@@ -82,6 +78,12 @@
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-spring-boot-starter-security
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java
浏览文件 @
cce62c43
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,6 +12,7 @@ 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.security.core.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java
浏览文件 @
cce62c43
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,6 +10,7 @@ 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.security.core.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java
浏览文件 @
cce62c43
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,6 +9,7 @@ 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.security.core.context.AdminSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java
浏览文件 @
cce62c43
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,6 +10,7 @@ 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.security.core.context.AdminSecurityContextHolder
;
import
com.alibaba.fastjson.JSON
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java
浏览文件 @
cce62c43
...
...
@@ -4,8 +4,7 @@ import cn.iocoder.common.framework.vo.CommonResult;
import
cn.iocoder.mall.product.api.UserProductSpuCollectionsService
;
import
cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsPageBO
;
import
cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsPageDTO
;
import
cn.iocoder.mall.user.sdk.annotation.RequiresLogin
;
import
cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder
;
import
cn.iocoder.mall.security.core.context.UserSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
...
...
@@ -27,7 +26,6 @@ public class UserFavoriteController {
private
UserProductSpuCollectionsService
userProductSpuCollectionsService
;
@GetMapping
(
"page"
)
@RequiresLogin
@ApiOperation
(
"用户商品收藏列表"
)
public
CommonResult
<
UserProductSpuCollectionsPageBO
>
getUserProductSpuCollectionsPage
(
@Validated
UserProductSpuCollectionsPageDTO
userProductSpuCollectionsPageDTO
)
{
...
...
@@ -37,7 +35,6 @@ public class UserFavoriteController {
}
@DeleteMapping
(
"remove"
)
@RequiresLogin
@ApiOperation
(
value
=
"用户商品收藏-删除"
)
public
CommonResult
<
Boolean
>
removeUserFavorite
(
@RequestParam
(
"spuId"
)
final
Integer
spuId
)
{
final
Integer
userId
=
UserSecurityContextHolder
.
getContext
().
getUserId
();
...
...
@@ -45,7 +42,6 @@ public class UserFavoriteController {
}
@GetMapping
(
"hasUserFavorite"
)
@RequiresLogin
@ApiOperation
(
value
=
"用户商品收藏-是否收藏"
)
public
CommonResult
<
Boolean
>
hasUserSpuFavorite
(
@RequestParam
(
"spuId"
)
final
Integer
spuId
)
{
final
Integer
userId
=
UserSecurityContextHolder
.
getContext
().
getUserId
();
...
...
product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductSpuCollectionController.java
浏览文件 @
cce62c43
...
...
@@ -2,8 +2,7 @@ package cn.iocoder.mall.product.application.controller.users;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuCollectionService
;
import
cn.iocoder.mall.user.sdk.annotation.RequiresLogin
;
import
cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder
;
import
cn.iocoder.mall.security.core.context.UserSecurityContextHolder
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.dubbo.config.annotation.Reference
;
...
...
@@ -30,7 +29,6 @@ public class UsersProductSpuCollectionController {
@PostMapping
(
"/collection/{spuId}/{hasCollectionType}"
)
@ApiOperation
(
"商品收藏"
)
@RequiresLogin
public
CommonResult
<
Boolean
>
productSpuCollection
(
@PathVariable
(
"spuId"
)
Integer
spuId
,
@PathVariable
(
"hasCollectionType"
)
Integer
hasCollectionType
)
{
final
Integer
userId
=
UserSecurityContextHolder
.
getContext
().
getUserId
();
...
...
promotion/promotion-service-impl/pom.xml
浏览文件 @
cce62c43
...
...
@@ -25,7 +25,7 @@
</dependency>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
product-
service
-api
</artifactId>
<artifactId>
product-
rpc
-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
...
...
promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java
浏览文件 @
cce62c43
...
...
@@ -3,7 +3,7 @@ package cn.iocoder.mall.promotion.biz.service;
import
cn.iocoder.common.framework.constant.CommonStatusEnum
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.product.
api.ProductSpuService
;
import
cn.iocoder.mall.product.
rpc.api.ProductSpuRpc
;
import
cn.iocoder.mall.promotion.api.ProductRecommendService
;
import
cn.iocoder.mall.promotion.api.bo.ProductRecommendBO
;
import
cn.iocoder.mall.promotion.api.bo.ProductRecommendPageBO
;
...
...
@@ -26,7 +26,7 @@ import java.util.List;
public
class
ProductRecommendServiceImpl
implements
ProductRecommendService
{
@Reference
(
validation
=
"true"
,
version
=
"${dubbo.consumer.ProductSpuService.version}"
)
private
ProductSpu
Service
productSpuService
;
private
ProductSpu
Rpc
productSpuRpc
;
@Autowired
private
ProductRecommendMapper
productRecommendMapper
;
...
...
@@ -52,7 +52,7 @@ public class ProductRecommendServiceImpl implements ProductRecommendService {
@Override
public
ProductRecommendBO
addProductRecommend
(
Integer
adminId
,
ProductRecommendAddDTO
productRecommendAddDTO
)
{
// 校验商品不存在
if
(
productSpu
Service
.
getProductSpuDetail
(
productRecommendAddDTO
.
getProductSpuId
())
==
null
)
{
if
(
productSpu
Rpc
.
getProductSpuDetail
(
productRecommendAddDTO
.
getProductSpuId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCodeEnum
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
}
// 校验商品是否已经推荐
...
...
@@ -74,7 +74,7 @@ public class ProductRecommendServiceImpl implements ProductRecommendService {
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCodeEnum
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
}
// 校验商品不存在
if
(
productSpu
Service
.
getProductSpuDetail
(
productRecommendUpdateDTO
.
getProductSpuId
())
==
null
)
{
if
(
productSpu
Rpc
.
getProductSpuDetail
(
productRecommendUpdateDTO
.
getProductSpuId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCodeEnum
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
}
// 校验商品是否已经推荐
...
...
system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java
浏览文件 @
cce62c43
...
...
@@ -87,6 +87,11 @@ public enum SystemErrorCodeEnum implements ServiceExceptionUtil.Enumerable {
USER_ADDRESS_NOT_EXISTENT
(
1001004000
,
"用户地址不存在!"
),
USER_ADDRESS_IS_DELETED
(
1001004001
,
"用户地址已被删除!"
),
USER_GET_ADDRESS_NOT_EXISTS
(
1001004002
,
"获取的地址不存在!"
),
// ========== 错误码模块 1002009000 ==========
ERROR_CODE_NOT_EXISTS
(
1002009000
,
"错误码不存在"
),
ERROR_CODE_DUPLICATE
(
1002009001
,
"已经存在编码为【{}}】的错误码"
),
ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR
(
1002004003
,
"不能修改类型为系统内置的错误码"
),
;
...
...
system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
enums
.
errorcode
;
/**
* 错误码枚举,内置错误码是在 枚举中
* @author ding
*/
public
enum
ErrorCodeTypeEnum
{
/**
* 内置错误码
*/
SYSTEM
(
1
),
/**
* 自定义错误码
*/
CUSTOM
(
2
);
private
final
Integer
type
;
ErrorCodeTypeEnum
(
Integer
type
)
{
this
.
type
=
type
;
}
public
Integer
getType
()
{
return
type
;
}
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
bo
.
errorcode
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 错误码模块 - 错误码信息 BO
* @author ding
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeBO
{
/**
* 错误码编号
*/
private
Integer
id
;
/**
* 错误码编码
*/
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 添加时间
*/
private
Date
createTime
;
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
config
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum
;
import
cn.iocoder.mall.system.biz.service.errorcode.ErrorCodeService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.context.event.ApplicationReadyEvent
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.event.EventListener
;
import
java.util.List
;
@Configuration
public
class
ServiceExceptionConfiguration
{
// TODO FROM 芋艿 to 鱿鱼须:这块的实现,微信一起沟通下哈。大体是说,要调用 RPC 接口,不然别的模块无法使用哟。最终,我们是要做成 starter,提供给各个模块用。
@Autowired
private
ErrorCodeService
errorCodeService
;
@EventListener
(
ApplicationReadyEvent
.
class
)
// 可参考 https://www.cnblogs.com/ssslinppp/p/7607509.html
public
void
initMessages
()
{
List
<
ErrorCodeBO
>
list
=
errorCodeService
.
getErrorCodeList
();
for
(
SystemErrorCodeEnum
item
:
SystemErrorCodeEnum
.
values
())
{
ServiceExceptionUtil
.
put
(
item
.
getCode
(),
item
.
getMessage
());
}
for
(
ErrorCodeBO
bo
:
list
)
{
ServiceExceptionUtil
.
put
(
bo
.
getCode
(),
bo
.
getMessage
());
}
}
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/errorcode/ErrorCodeConvert.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
convert
.
errorcode
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
/**
* @author ding
*/
@Mapper
public
interface
ErrorCodeConvert
{
ErrorCodeConvert
INSTANCE
=
Mappers
.
getMapper
(
ErrorCodeConvert
.
class
);
ErrorCodeDO
convert
(
ErrorCodeDTO
bean
);
ErrorCodeBO
convert
(
ErrorCodeDO
bean
);
List
<
ErrorCodeBO
>
convertList
(
List
<
ErrorCodeDO
>
beans
);
// @Mapping(source = "records", target = "list")
// PageResult<ErrorCodeBO> convertPage(IPage<ErrorCodeDO> page);
ErrorCodeDO
convert
(
ErrorCodeAddDTO
bean
);
ErrorCodeDO
convert
(
ErrorCodeUpdateDTO
bean
);
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dao
.
errorcode
;
import
cn.iocoder.mall.mybatis.query.QueryWrapperX
;
import
cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO
;
import
cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum
;
import
cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author ding
*/
@Repository
public
interface
ErrorCodeMapper
extends
BaseMapper
<
ErrorCodeDO
>
{
default
ErrorCodeDO
selectByCode
(
Integer
code
){
//从db查询
ErrorCodeDO
errorCodeDO
=
selectOne
(
new
QueryWrapperX
<
ErrorCodeDO
>().
eqIfPresent
(
"code"
,
code
));
if
(
null
==
errorCodeDO
){
//从enum查询
for
(
SystemErrorCodeEnum
item
:
SystemErrorCodeEnum
.
values
())
{
if
(
code
.
equals
(
item
.
getCode
())){
return
new
ErrorCodeDO
().
setCode
(
item
.
getCode
()).
setId
(
0
).
setType
(
ErrorCodeTypeEnum
.
SYSTEM
.
getType
());
}
}
}
return
null
;
}
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dataobject
.
errorcode
;
import
cn.iocoder.mall.mybatis.dataobject.DeletableDO
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* 错误码实体
*/
@TableName
(
value
=
"error_code"
)
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
public
class
ErrorCodeDO
extends
DeletableDO
{
/**
* 错误码编号
*/
private
Integer
id
;
/**
* 错误码编码
*/
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 错误码类型
*/
private
Integer
type
;
// TODO FROM 芋艿 to 鱿鱼丝:增加一个分组字段。方便做归类
// TODO FROM 芋艿 to 鱿鱼丝:增加个备注字段,方便做备注哈。
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* 角色模块 - 添加角色 DTO
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeAddDTO
{
@NotNull
(
message
=
"错误码编码"
)
private
Integer
code
;
@NotEmpty
(
message
=
"错误码错误信息"
)
private
String
message
;
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
* @author ding
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeDTO
{
/**
* 错误码编号
*/
private
Integer
id
;
/**
* 错误码编码
*/
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 错误码类型
*/
private
Integer
type
;
}
product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPag
eDTO.java
→
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDelet
eDTO.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
product
.
biz
.
dto
.
product
;
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
...
...
@@ -6,17 +6,12 @@ import lombok.experimental.Accessors;
import
javax.validation.constraints.NotNull
;
/**
* 商品规格分页 DTO
* 只可以删除自定义错误码
* @author ding
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ProductAttrPageDTO
{
private
String
name
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
public
class
ErrorCodeDeleteDTO
{
@NotNull
(
message
=
"错误码编号不能为空"
)
private
Integer
id
;
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Collection
;
/**
* todo 考虑是否删除
* @author ding
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeGetListDTO
{
/**
* 错误码编号数组
*
* 如果传入空,则不进行错误码编号的过滤
*/
private
Collection
<
Integer
>
codes
;
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
cn.iocoder.common.framework.vo.PageParam
;
/**
* @author ding
*/
public
class
ErrorCodePageDTO
extends
PageParam
{
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
dto
.
errorcode
;
import
cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
/**
* @author ding
*/
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeUpdateDTO
{
/**
* 错误码编号,内置错误码的id是没有的
*/
// TODO FROM 芋艿 to 鱿鱼丝:必要的参数校验噢
private
Integer
id
;
@NotNull
(
message
=
"错误码编码不能为空"
)
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 错误码类型 {@link ErrorCodeTypeEnum}
*/
private
Integer
type
;
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeService.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
service
.
errorcode
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDeleteDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO
;
import
java.util.List
;
/**
* @author ding
*/
public
interface
ErrorCodeService
{
/**
* 根据code查询错误码
* @param code code
* @return 错误码信息
*/
ErrorCodeBO
getErrorCode
(
Integer
code
);
/**
* 从db取出错误码列表数据
* @return db错误码列表
*/
List
<
ErrorCodeBO
>
getErrorCodeList
();
/**
* 取出所有错误码列表数据
* @return 所有错误码列表
*/
List
<
ErrorCodeBO
>
getErrorCodeListAll
();
/**
* 分页取出所有错误码列表数据
* @param pageDTO 分页数据
* @return 错误码列表
*/
PageResult
<
ErrorCodeBO
>
getErrorCodePage
(
ErrorCodePageDTO
pageDTO
);
/**
* 新增
* @param errorCodeAddDTO 错误码信息,默认类型为自定义错误码
* @return
*/
Integer
addErrorCode
(
ErrorCodeAddDTO
errorCodeAddDTO
);
/**
* 更新错误码,系统内置错误码是不允许更新
* @param errorCodeUpdateDTO 错误码信息
*/
void
updateErrorCode
(
ErrorCodeUpdateDTO
errorCodeUpdateDTO
);
/**
* 删除错误码
* @param errorCodeDeleteDTO 只允许删除自定义错误码
*/
void
deleteErrorCode
(
ErrorCodeDeleteDTO
errorCodeDeleteDTO
);
}
system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
biz
.
service
.
errorcode
;
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.mybatis.query.QueryWrapperX
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.convert.errorcode.ErrorCodeConvert
;
import
cn.iocoder.mall.system.biz.dao.errorcode.ErrorCodeMapper
;
import
cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDeleteDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO
;
import
cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum
;
import
cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author ding
*/
@Service
public
class
ErrorCodeServiceImpl
implements
ErrorCodeService
{
@Autowired
private
ErrorCodeMapper
errorCodeMapper
;
@Override
public
ErrorCodeBO
getErrorCode
(
Integer
code
)
{
return
ErrorCodeConvert
.
INSTANCE
.
convert
(
errorCodeMapper
.
selectByCode
(
code
));
}
@Override
public
List
<
ErrorCodeBO
>
getErrorCodeList
()
{
// TODO FROM 芋艿 to 鱿鱼丝:QueryWrapperX 只存在 mapper 里,不直接体现在 Service
List
<
ErrorCodeDO
>
list
=
errorCodeMapper
.
selectList
(
new
QueryWrapperX
<
ErrorCodeDO
>());
return
ErrorCodeConvert
.
INSTANCE
.
convertList
(
list
);
}
@Override
public
List
<
ErrorCodeBO
>
getErrorCodeListAll
()
{
List
<
ErrorCodeDO
>
list
=
errorCodeMapper
.
selectList
(
new
QueryWrapperX
<
ErrorCodeDO
>());
// TODO FROM 芋艿 to 鱿鱼丝:这块微信交流一波哈。
for
(
SystemErrorCodeEnum
item
:
SystemErrorCodeEnum
.
values
())
{
list
.
add
(
new
ErrorCodeDO
().
setId
(
0
).
setCode
(
item
.
getCode
()).
setMessage
(
item
.
getMessage
()).
setType
(
ErrorCodeTypeEnum
.
SYSTEM
.
getType
()));
}
return
ErrorCodeConvert
.
INSTANCE
.
convertList
(
list
);
}
@Override
public
PageResult
<
ErrorCodeBO
>
getErrorCodePage
(
ErrorCodePageDTO
pageDTO
)
{
List
<
ErrorCodeDO
>
list
=
errorCodeMapper
.
selectList
(
new
QueryWrapperX
<
ErrorCodeDO
>());
for
(
SystemErrorCodeEnum
item
:
SystemErrorCodeEnum
.
values
())
{
list
.
add
(
new
ErrorCodeDO
().
setId
(
0
).
setCode
(
item
.
getCode
()).
setMessage
(
item
.
getMessage
()).
setType
(
ErrorCodeTypeEnum
.
SYSTEM
.
getType
()));
}
return
listToPageList
(
pageDTO
.
getPageNo
(),
pageDTO
.
getPageSize
(),
list
);
}
@Override
public
Integer
addErrorCode
(
ErrorCodeAddDTO
errorCodeAddDTO
)
{
// 校验错误码
checkDuplicateErrorCode
(
errorCodeAddDTO
.
getCode
(),
null
);
// 保存到数据库
ErrorCodeDO
errorCode
=
ErrorCodeConvert
.
INSTANCE
.
convert
(
errorCodeAddDTO
);
errorCode
.
setType
(
ErrorCodeTypeEnum
.
CUSTOM
.
getType
());
errorCode
.
setCreateTime
(
new
Date
());
errorCode
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
errorCodeMapper
.
insert
(
errorCode
);
// TODO 插入操作日志
// 返回成功
return
errorCode
.
getId
();
}
@Override
public
void
updateErrorCode
(
ErrorCodeUpdateDTO
errorCodeUpdateDTO
)
{
// 校验错误码是否存在
ErrorCodeDO
errorCodeDO
=
errorCodeMapper
.
selectByCode
(
errorCodeUpdateDTO
.
getCode
());
if
(
errorCodeDO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ERROR_CODE_NOT_EXISTS
);
}
// 内置错误码,写死在枚举类中,不允许修改
if
(
ErrorCodeTypeEnum
.
SYSTEM
.
getType
().
equals
(
errorCodeDO
.
getType
()))
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR
);
}
// 校验角色的唯一字段是否重复
checkDuplicateErrorCode
(
errorCodeDO
.
getCode
(),
errorCodeDO
.
getId
());
// 更新到数据库
ErrorCodeDO
updateRole
=
ErrorCodeConvert
.
INSTANCE
.
convert
(
errorCodeUpdateDTO
);
errorCodeMapper
.
updateById
(
updateRole
);
// TODO 插入操作日志
}
@Override
public
void
deleteErrorCode
(
ErrorCodeDeleteDTO
errorCodeDeleteDTO
)
{
// 校验错误码是否存在
ErrorCodeDO
errorCodeDO
=
errorCodeMapper
.
selectById
(
errorCodeDeleteDTO
.
getId
());
if
(
errorCodeDO
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ERROR_CODE_NOT_EXISTS
);
}
// TODO FROM 芋艿 to 鱿鱼丝:不能删除内置错误码
// 更新到数据库,标记删除
errorCodeMapper
.
deleteById
(
errorCodeDO
.
getId
());
// TODO: 2020-05-10 刷新对外提供的错误码列表
// TODO: 2020-05-10 ServiceExceptionUtil中未提供去除错误码操作,后续新增此接口是否影响?
}
/**
* 校验错误码的唯一字段是否重复
*
* 是否存在相同编码的错误码
*
* @param code 错误码编码
* @param id 错误码编号
*/
private
void
checkDuplicateErrorCode
(
Integer
code
,
Integer
id
)
{
ErrorCodeDO
errorCodeDO
=
errorCodeMapper
.
selectByCode
(
code
);
if
(
errorCodeDO
!=
null
&&
!
errorCodeDO
.
getId
().
equals
(
id
))
{
throw
ServiceExceptionUtil
.
exception
(
SystemErrorCodeEnum
.
ERROR_CODE_DUPLICATE
,
errorCodeDO
.
getCode
());
}
}
private
PageResult
listToPageList
(
int
currentPage
,
int
rows
,
List
list
){
// TODO FROM 芋艿 to 鱿鱼须:可以直接使用数据库分页哇
currentPage
=
currentPage
*
rows
;
Integer
sum
=
list
.
size
();
// TODO FROM 芋艿 to 鱿鱼须:这里 int 就可以啦。一般情况下,如果 IDEA 提示警告,要尽量去掉噢。
if
(
currentPage
+
rows
>
sum
){
list
=
list
.
subList
(
currentPage
,
sum
);
}
else
{
list
=
list
.
subList
(
currentPage
,
currentPage
+
rows
);
}
// TODO FROM 芋艿 to 鱿鱼丝:泛型噢
return
new
PageResult
().
setList
(
list
).
setTotal
(
sum
);
}
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
controller
.
errorCode
;
import
cn.iocoder.common.framework.constant.MallConstants
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.security.core.annotation.RequiresPermissions
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDeleteDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO
;
import
cn.iocoder.mall.system.biz.service.errorcode.ErrorCodeService
;
import
cn.iocoder.mall.system.rest.convert.errorcode.ErrorCodeConvert
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest
;
import
cn.iocoder.mall.system.rest.response.errorcode.ErrorCodePageResponse
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
/**
* 错误码
*
* @author youyusi
*/
@RestController
@RequestMapping
(
MallConstants
.
ROOT_PATH_ADMIN
+
"/errorcode"
)
// TODO FROM 芋艿 to 鱿鱼须:error-code
@Api
(
"错误码"
)
public
class
SystemErrorCodeController
{
// TODO FROM 芋艿 to 鱿鱼须:变量要空行
@Autowired
private
ErrorCodeService
errorCodeService
;
@GetMapping
(
"/page"
)
@ApiOperation
(
value
=
"错误码分页"
)
@RequiresPermissions
(
"system:errorcode:page"
)
public
CommonResult
<
PageResult
<
ErrorCodePageResponse
>>
page
(
ErrorCodePageRequest
request
)
{
ErrorCodePageDTO
pageDTO
=
ErrorCodeConvert
.
INSTANCE
.
convert
(
request
);
PageResult
<
ErrorCodeBO
>
pageResult
=
errorCodeService
.
getErrorCodePage
(
pageDTO
);
return
CommonResult
.
success
(
ErrorCodeConvert
.
INSTANCE
.
convertPage
(
pageResult
));
}
@PostMapping
(
"/add"
)
@ApiOperation
(
value
=
"创建错误码"
)
@RequiresPermissions
(
"system:errorcode:add"
)
public
CommonResult
<
Integer
>
add
(
ErrorCodeAddRequest
request
)
{
ErrorCodeAddDTO
addDTO
=
ErrorCodeConvert
.
INSTANCE
.
convert
(
request
);
return
CommonResult
.
success
(
errorCodeService
.
addErrorCode
(
addDTO
));
}
@PostMapping
(
"/update"
)
@ApiOperation
(
value
=
"更新错误码"
)
@RequiresPermissions
(
"system:errorcode:update"
)
public
CommonResult
<
Boolean
>
update
(
ErrorCodeUpdateRequest
request
)
{
ErrorCodeUpdateDTO
updateDTO
=
ErrorCodeConvert
.
INSTANCE
.
convert
(
request
);
errorCodeService
.
updateErrorCode
(
updateDTO
);
return
CommonResult
.
success
(
true
);
}
@PostMapping
(
"/delete"
)
@ApiOperation
(
value
=
"删除错误码"
)
@RequiresPermissions
(
"system:errorcode:delete"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"错误码编号"
,
required
=
true
,
example
=
"1"
)
public
CommonResult
<
Boolean
>
delete
(
@RequestParam
(
"id"
)
Integer
id
)
{
ErrorCodeDeleteDTO
deleteDTO
=
new
ErrorCodeDeleteDTO
().
setId
(
id
);
errorCodeService
.
deleteErrorCode
(
deleteDTO
);
return
CommonResult
.
success
(
true
);
}
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
convert
.
errorcode
;
import
cn.iocoder.common.framework.vo.PageResult
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO
;
import
cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest
;
import
cn.iocoder.mall.system.rest.response.errorcode.ErrorCodePageResponse
;
import
cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
/**
* @author ding
*/
@Mapper
public
interface
ErrorCodeConvert
{
ErrorCodeConvert
INSTANCE
=
Mappers
.
getMapper
(
ErrorCodeConvert
.
class
);
ErrorCodeAddDTO
convert
(
ErrorCodeAddRequest
bean
);
ErrorCodeUpdateDTO
convert
(
ErrorCodeUpdateRequest
bean
);
ErrorCodePageDTO
convert
(
ErrorCodePageRequest
bean
);
PageResult
<
ErrorCodePageResponse
>
convertPage
(
PageResult
<
ErrorCodeBO
>
bean
);
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeAddRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
request
.
errorcode
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
@ApiModel
(
"管理员 - 错误码模块 - 添加错误码 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeAddRequest
{
@ApiModelProperty
(
value
=
"错误码信息"
,
required
=
true
,
example
=
"系统管理员"
)
@NotEmpty
(
message
=
"错误码信息不能为空"
)
private
String
message
;
@ApiModelProperty
(
value
=
"错误码编码"
,
example
=
"SUPER_ADMIN"
)
@NotEmpty
(
message
=
"错误码编码不能为空"
)
private
Integer
code
;
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
request
.
errorcode
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
* @author ding
*/
@ApiModel
(
"管理员 - 错误码模块 - 错误码分页 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodePageRequest
{
// TODO FROM 芋艿 to 鱿鱼须:分页参数?
// TODO FROM 芋艿 to 鱿鱼须:对于 rest 的接口,要区分下是给 Admins 管理员还是 Users 用户的
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeUpdateRequest.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
request
.
errorcode
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* 类 描 述:错误码模块
* @author ding
*/
@ApiModel
(
"管理员 - 错误码模块 - 修改错误码 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeUpdateRequest
{
@ApiModelProperty
(
value
=
"错误码编号"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"错误码不能为空"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"错误码信息"
,
required
=
true
,
example
=
"系统管理员"
)
@NotEmpty
(
message
=
"错误码信息不能为空"
)
private
String
message
;
@ApiModelProperty
(
value
=
"错误码编码"
,
example
=
"SUPER_ADMIN"
)
@NotEmpty
(
message
=
"错误码编码不能为空"
)
private
Integer
code
;
}
system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/errorcode/ErrorCodePageResponse.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rest
.
response
.
errorcode
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 类 描 述:错误码模块
* @author ding
*/
@ApiModel
(
"管理员 - 错误码模块 - 查询错误码 Request"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodePageResponse
{
/**
* 错误码编号
*/
private
Integer
id
;
/**
* 错误码编码
*/
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 添加时间
*/
private
Date
createTime
;
}
system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rpc
.
api
.
errorcode
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse
;
import
java.util.List
;
/**
* ErrorCode RPC 接口
* @author ding
*/
public
interface
ErrorCodeRPC
{
CommonResult
<
List
<
ErrorCodeResponse
>>
getErrorCode
();
}
system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/response/errorcode/ErrorCodeResponse.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rpc
.
response
.
errorcode
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 类 描 述:错误码模块
* @author ding
*/
@ApiModel
(
"管理员 - 错误码模块 - 查询错误码"
)
@Data
@Accessors
(
chain
=
true
)
public
class
ErrorCodeResponse
{
/**
* 错误码编号
*/
private
Integer
id
;
/**
* 错误码编码
*/
private
Integer
code
;
/**
* 错误码错误信息
*/
private
String
message
;
/**
* 添加时间
*/
private
Date
createTime
;
}
system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rpc
.
convert
.
errorcode
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ErrorCodeConvert
{
ErrorCodeConvert
INSTANCE
=
Mappers
.
getMapper
(
ErrorCodeConvert
.
class
);
List
<
ErrorCodeResponse
>
convert
(
List
<
ErrorCodeBO
>
bean
);
}
system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java
0 → 100644
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
rpc
.
rpc
.
errorcode
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO
;
import
cn.iocoder.mall.system.biz.service.errorcode.ErrorCodeService
;
import
cn.iocoder.mall.system.rpc.api.errorcode.ErrorCodeRPC
;
import
cn.iocoder.mall.system.rpc.convert.errorcode.ErrorCodeConvert
;
import
cn.iocoder.mall.system.rpc.convert.user.UserConvert
;
import
cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse
;
import
org.apache.dubbo.config.annotation.Service
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
java.util.List
;
/**
*
* @author ding
*/
@Service
(
version
=
"${dubbo.provider.ErrorCodeRPC.version}"
,
validation
=
"true"
)
public
class
ErrorCodeRPCImpl
implements
ErrorCodeRPC
{
@Autowired
private
ErrorCodeService
errorCodeService
;
@Override
public
CommonResult
<
List
<
ErrorCodeResponse
>>
getErrorCode
()
{
List
<
ErrorCodeBO
>
list
=
errorCodeService
.
getErrorCodeListAll
();
return
CommonResult
.
success
(
ErrorCodeConvert
.
INSTANCE
.
convert
(
list
));
}
}
system/system-rpc/src/main/resources/rpc.yaml
浏览文件 @
cce62c43
...
...
@@ -25,6 +25,8 @@ dubbo:
version
:
1.0.0
UserAddressRPC
:
version
:
1.0.0
ErrorCodeRPC
:
version
:
1.0.0
# Dubbo 服务消费者的配置
consumer
:
...
...
@@ -38,3 +40,5 @@ dubbo:
version
:
1.0.0
UserRPC
:
version
:
1.0.0
ErrorCodeRPC
:
version
:
1.0.0
system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SystemLogService.java
浏览文件 @
cce62c43
package
cn
.
iocoder
.
mall
.
system
.
api
;
import
cn.iocoder.mall.system.api.bo.systemlog.AccessLogPageBO
;
import
cn.iocoder.mall.system.api.dto.systemlog.AccessLogAddDTO
;
import
cn.iocoder.mall.system.api.dto.systemlog.AccessLogPageDTO
;
import
cn.iocoder.mall.system.api.dto.systemlog.ExceptionLogAddDTO
;
/**
* 系统日志 Service 接口
...
...
user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java
浏览文件 @
cce62c43
...
...
@@ -11,6 +11,7 @@ import lombok.experimental.Accessors;
* @time 2019-04-06 13:22
*/
@Data
// TODO FROM 芋艿 to 小范:如果继承了,需要添加 @EqualsAndHashCode(callSuper = true) 注解
@Accessors
(
chain
=
true
)
public
class
UsersUserAddressDO
extends
DeletableDO
{
...
...
user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java
浏览文件 @
cce62c43
...
...
@@ -13,6 +13,7 @@ import java.io.Serializable;
*/
@Data
@Accessors
(
chain
=
true
)
// TODO FROM 芋艿 to 小范:service 要做 validation 哈。其它同理
public
class
UserAddressUpdateDTO
implements
Serializable
{
/**
...
...
user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java
浏览文件 @
cce62c43
...
...
@@ -13,6 +13,10 @@ public enum UserErrorCodeEnum implements ServiceExceptionUtil.Enumerable {
USER_ADDRESS_NOT_EXISTENT
(
1001004000
,
"用户地址不存在!"
),
USER_ADDRESS_IS_DELETED
(
1001004001
,
"用户地址已被删除!"
),
USER_GET_ADDRESS_NOT_EXISTS
(
1001004002
,
"获取的地址不存在!"
),
// ========== 用户 ==========
// TODO FROM 芋艿 to linhj:是不是提示不对呀
USER_NOT_EXISTS
(
1001004003
,
"获取的地址不存在!"
),
;
private
final
int
code
;
...
...
user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java
浏览文件 @
cce62c43
...
...
@@ -24,7 +24,7 @@ import java.util.List;
* time: 2020/5/8 9:50
*/
@RestController
@Api
(
tags
=
"用户地址(user API)"
)
@Api
(
tags
=
"用户地址(user API)"
)
// TODO FROM 芋艿 to 小范:"管理员 - 管理员 API" 按照类似酱紫的格式哈。= = 虽然我也没想太好格式。
@RequestMapping
(
"/users/user-address"
)
public
class
UsersUserAddressController
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论