Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
63dd545c
提交
63dd545c
authored
3月 06, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加数据字典 tree 接口
上级
1ebc7492
显示空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
1042 行增加
和
76 行删除
+1042
-76
AdminController.java
.../admin/application/controller/admins/AdminController.java
+1
-1
DataDictController.java
...min/application/controller/admins/DataDictController.java
+24
-0
DataDictConvert.java
...coder/mall/admin/application/convert/DataDictConvert.java
+5
-0
DataDictEnumVO.java
.../cn/iocoder/mall/admin/application/vo/DataDictEnumVO.java
+35
-0
DataDictValueVO.java
...cn/iocoder/mall/admin/application/vo/DataDictValueVO.java
+33
-0
AdminsProductAttrController.java
...cation/controller/admins/AdminsProductAttrController.java
+75
-0
ProductAttrConvert.java
.../mall/product/application/convert/ProductAttrConvert.java
+26
-0
AdminsProductAttrAndValuePairVO.java
...pplication/vo/admins/AdminsProductAttrAndValuePairVO.java
+55
-0
AdminsProductAttrDetailVO.java
...duct/application/vo/admins/AdminsProductAttrDetailVO.java
+37
-23
AdminsProductAttrPageVO.java
...roduct/application/vo/admins/AdminsProductAttrPageVO.java
+35
-0
AdminsProductAttrSimpleVO.java
...duct/application/vo/admins/AdminsProductAttrSimpleVO.java
+46
-0
AdminsProductAttrVO.java
...ll/product/application/vo/admins/AdminsProductAttrVO.java
+21
-0
AdminsProductAttrValueDetailVO.java
...application/vo/admins/AdminsProductAttrValueDetailVO.java
+57
-0
AdminsProductAttrValueSimpleVO.java
...application/vo/admins/AdminsProductAttrValueSimpleVO.java
+33
-0
AdminsProductSkuDetailVO.java
...oduct/application/vo/admins/AdminsProductSkuDetailVO.java
+3
-3
AdminsProductSpuPageVO.java
...product/application/vo/admins/AdminsProductSpuPageVO.java
+3
-6
ProductAttrService.java
.../java/cn/iocoder/mall/product/api/ProductAttrService.java
+24
-0
ProductAttrAndValuePairBO.java
...ocoder/mall/product/api/bo/ProductAttrAndValuePairBO.java
+62
-0
ProductAttrDetailBO.java
...a/cn/iocoder/mall/product/api/bo/ProductAttrDetailBO.java
+39
-23
ProductAttrPageBO.java
...ava/cn/iocoder/mall/product/api/bo/ProductAttrPageBO.java
+38
-0
ProductAttrSimpleBO.java
...a/cn/iocoder/mall/product/api/bo/ProductAttrSimpleBO.java
+51
-0
ProductAttrValueDetailBO.java
...iocoder/mall/product/api/bo/ProductAttrValueDetailBO.java
+63
-0
ProductAttrValueSimpleBO.java
...iocoder/mall/product/api/bo/ProductAttrValueSimpleBO.java
+36
-0
ProductSkuDetailBO.java
...va/cn/iocoder/mall/product/api/bo/ProductSkuDetailBO.java
+3
-3
ProductAttrPageDTO.java
...a/cn/iocoder/mall/product/api/dto/ProductAttrPageDTO.java
+45
-0
ProductSpuPageDTO.java
...va/cn/iocoder/mall/product/api/dto/ProductSpuPageDTO.java
+3
-0
ProductAttrConvert.java
...a/cn/iocoder/mall/product/convert/ProductAttrConvert.java
+39
-0
ProductSpuConvert.java
...va/cn/iocoder/mall/product/convert/ProductSpuConvert.java
+5
-5
ProductAttrMapper.java
...n/java/cn/iocoder/mall/product/dao/ProductAttrMapper.java
+9
-0
ProductAttrValueMapper.java
...a/cn/iocoder/mall/product/dao/ProductAttrValueMapper.java
+5
-0
ProductAttrServiceImpl.java
.../iocoder/mall/product/service/ProductAttrServiceImpl.java
+59
-5
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+10
-7
ProductAttrMapper.xml
...vice-impl/src/main/resources/mapper/ProductAttrMapper.xml
+38
-0
ProductAttrValueMapper.xml
...impl/src/main/resources/mapper/ProductAttrValueMapper.xml
+24
-0
没有找到文件。
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/AdminController.java
浏览文件 @
63dd545c
...
...
@@ -113,7 +113,7 @@ public class AdminController {
@ApiImplicitParam
(
name
=
"id"
,
value
=
"管理员编号"
,
required
=
true
,
example
=
"1"
),
@ApiImplicitParam
(
name
=
"username"
,
value
=
"账号"
,
required
=
true
,
example
=
"15601691300"
),
@ApiImplicitParam
(
name
=
"nickname"
,
value
=
"昵称"
,
required
=
true
,
example
=
"小王"
),
@ApiImplicitParam
(
name
=
"password"
,
value
=
"密码"
,
required
=
true
,
example
=
"buzhidao"
),
@ApiImplicitParam
(
name
=
"password"
,
value
=
"密码"
,
example
=
"buzhidao"
),
})
public
CommonResult
<
Boolean
>
update
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"username"
)
String
username
,
...
...
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/DataDictController.java
浏览文件 @
63dd545c
...
...
@@ -6,15 +6,19 @@ import cn.iocoder.mall.admin.api.bo.DataDictBO;
import
cn.iocoder.mall.admin.api.dto.DataDictAddDTO
;
import
cn.iocoder.mall.admin.api.dto.DataDictUpdateDTO
;
import
cn.iocoder.mall.admin.application.convert.DataDictConvert
;
import
cn.iocoder.mall.admin.application.vo.DataDictEnumVO
;
import
cn.iocoder.mall.admin.application.vo.DataDictVO
;
import
cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
com.google.common.collect.ImmutableListMultimap
;
import
com.google.common.collect.Multimaps
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
@RestController
...
...
@@ -32,6 +36,26 @@ public class DataDictController {
return
DataDictConvert
.
INSTANCE
.
convert
(
result
);
}
@GetMapping
(
"/tree"
)
@ApiOperation
(
value
=
"数据字典树结构"
,
notes
=
"该接口返回的信息更为精简。一般用于前端缓存数据字典到本地。"
)
public
CommonResult
<
List
<
DataDictEnumVO
>>
tree
()
{
// 查询数据字典全列表
CommonResult
<
List
<
DataDictBO
>>
result
=
dataDictService
.
selectDataDictList
();
if
(
result
.
isError
())
{
return
CommonResult
.
error
(
result
);
}
// 构建基于 enumValue 聚合的 Multimap
ImmutableListMultimap
<
String
,
DataDictBO
>
dataDictMap
=
Multimaps
.
index
(
result
.
getData
(),
DataDictBO:
:
getEnumValue
);
// KEY 是 enumValue ,VALUE 是 DataDictBO 数组
// 构建返回结果
List
<
DataDictEnumVO
>
dataDictEnumVOs
=
new
ArrayList
<>(
dataDictMap
.
size
());
dataDictMap
.
keys
().
forEach
(
enumValue
->
{
DataDictEnumVO
dataDictEnumVO
=
new
DataDictEnumVO
().
setEnumValue
(
enumValue
)
.
setValues
(
DataDictConvert
.
INSTANCE
.
convert2
(
dataDictMap
.
get
(
enumValue
)));
dataDictEnumVOs
.
add
(
dataDictEnumVO
);
});
return
CommonResult
.
success
(
dataDictEnumVOs
);
}
@PostMapping
(
"/add"
)
@ApiOperation
(
value
=
"创建数据字典"
)
@ApiImplicitParams
({
...
...
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/convert/DataDictConvert.java
浏览文件 @
63dd545c
...
...
@@ -3,6 +3,7 @@ package cn.iocoder.mall.admin.application.convert;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.admin.api.bo.DataDictBO
;
import
cn.iocoder.mall.admin.application.vo.DataDictVO
;
import
cn.iocoder.mall.admin.application.vo.DataDictValueVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
...
...
@@ -26,4 +27,7 @@ public interface DataDictConvert {
@Mappings
({})
CommonResult
<
DataDictVO
>
convert2
(
CommonResult
<
DataDictBO
>
result
);
@Mappings
({})
List
<
DataDictValueVO
>
convert2
(
List
<
DataDictBO
>
dataDictBOs
);
}
\ No newline at end of file
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/DataDictEnumVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
admin
.
application
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
"数据字典枚举 VO"
)
public
class
DataDictEnumVO
{
@ApiModelProperty
(
value
=
"大类枚举值"
,
required
=
true
,
example
=
"gender"
)
private
String
enumValue
;
@ApiModelProperty
(
value
=
"小类数值数组"
,
required
=
true
)
private
List
<
DataDictValueVO
>
values
;
public
String
getEnumValue
()
{
return
enumValue
;
}
public
DataDictEnumVO
setEnumValue
(
String
enumValue
)
{
this
.
enumValue
=
enumValue
;
return
this
;
}
public
List
<
DataDictValueVO
>
getValues
()
{
return
values
;
}
public
DataDictEnumVO
setValues
(
List
<
DataDictValueVO
>
values
)
{
this
.
values
=
values
;
return
this
;
}
}
\ No newline at end of file
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/DataDictValueVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
admin
.
application
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
@ApiModel
(
"数据字典枚举值 VO"
)
public
class
DataDictValueVO
{
@ApiModelProperty
(
value
=
"小类数值"
,
required
=
true
,
example
=
"1"
)
private
String
value
;
@ApiModelProperty
(
value
=
"展示名"
,
required
=
true
,
example
=
"男"
)
private
String
displayName
;
public
String
getValue
()
{
return
value
;
}
public
DataDictValueVO
setValue
(
String
value
)
{
this
.
value
=
value
;
return
this
;
}
public
String
getDisplayName
()
{
return
displayName
;
}
public
DataDictValueVO
setDisplayName
(
String
displayName
)
{
this
.
displayName
=
displayName
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
admins
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductAttrService
;
import
cn.iocoder.mall.product.api.bo.ProductAttrPageBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.api.dto.ProductAttrPageDTO
;
import
cn.iocoder.mall.product.application.convert.ProductAttrConvert
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrPageVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrSimpleVO
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
io.swagger.annotations.Api
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"admins"
)
@Api
(
"商品规格"
)
public
class
AdminsProductAttrController
{
@Reference
(
validation
=
"true"
)
private
ProductAttrService
productAttrService
;
@GetMapping
(
"/attr/page"
)
public
CommonResult
<
AdminsProductAttrPageVO
>
attrPage
(
@RequestParam
(
value
=
"name"
,
required
=
false
)
String
name
,
@RequestParam
(
value
=
"pageNo"
,
defaultValue
=
"0"
)
Integer
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
defaultValue
=
"10"
)
Integer
pageSize
)
{
// 创建 ProductAttrPageDTO 对象
ProductAttrPageDTO
productAttrPageDTO
=
new
ProductAttrPageDTO
().
setName
(
name
).
setPageNo
(
pageNo
).
setPageSize
(
pageSize
);
// 查询分页
CommonResult
<
ProductAttrPageBO
>
result
=
productAttrService
.
getProductAttrPage
(
productAttrPageDTO
);
// 返回结果
return
ProductAttrConvert
.
INSTANCE
.
convert2
(
result
);
}
@GetMapping
(
"/attr/tree"
)
public
CommonResult
<
List
<
AdminsProductAttrSimpleVO
>>
tree
()
{
// 查询全列表
CommonResult
<
List
<
ProductAttrSimpleBO
>>
result
=
productAttrService
.
getProductAttrList
();
// 返回结果
return
ProductAttrConvert
.
INSTANCE
.
convert
(
result
);
}
@PostMapping
(
"/attr/add"
)
public
CommonResult
addAttr
()
{
return
null
;
}
public
CommonResult
<
Boolean
>
updateAttr
()
{
return
null
;
}
public
CommonResult
<
Boolean
>
updateAttrStatus
()
{
return
null
;
}
// TODO 芋艿 暂时不考虑 delete Attr 。因为关联逻辑比较多
public
CommonResult
addAttrValue
()
{
return
null
;
}
public
CommonResult
<
Boolean
>
updateAttrValue
()
{
return
null
;
}
public
CommonResult
<
Boolean
>
updateAttrValueStr
()
{
return
null
;
}
// TODO 芋艿 暂时不考虑 delete Attr Value 。因为关联逻辑比较多
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/convert/ProductAttrConvert.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
convert
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductAttrPageBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrPageVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrSimpleVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ProductAttrConvert
{
ProductAttrConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductAttrConvert
.
class
);
@Mappings
({})
CommonResult
<
AdminsProductAttrPageVO
>
convert2
(
CommonResult
<
ProductAttrPageBO
>
result
);
@Mappings
({})
CommonResult
<
List
<
AdminsProductAttrSimpleVO
>>
convert
(
CommonResult
<
List
<
ProductAttrSimpleBO
>>
result
);
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrAndValuePairVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
@ApiModel
(
value
=
"商品规格属性和值对 VO"
)
public
class
AdminsProductAttrAndValuePairVO
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
attrId
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
attrName
;
@ApiModelProperty
(
value
=
"规格值"
,
required
=
true
,
example
=
"10"
)
private
Integer
attrValueId
;
@ApiModelProperty
(
value
=
"规格值名"
,
required
=
true
,
example
=
"红色"
)
private
String
attrValueName
;
public
Integer
getAttrId
()
{
return
attrId
;
}
public
AdminsProductAttrAndValuePairVO
setAttrId
(
Integer
attrId
)
{
this
.
attrId
=
attrId
;
return
this
;
}
public
String
getAttrName
()
{
return
attrName
;
}
public
AdminsProductAttrAndValuePairVO
setAttrName
(
String
attrName
)
{
this
.
attrName
=
attrName
;
return
this
;
}
public
Integer
getAttrValueId
()
{
return
attrValueId
;
}
public
AdminsProductAttrAndValuePairVO
setAttrValueId
(
Integer
attrValueId
)
{
this
.
attrValueId
=
attrValueId
;
return
this
;
}
public
String
getAttrValueName
()
{
return
attrValueName
;
}
public
AdminsProductAttrAndValuePairVO
setAttrValueName
(
String
attrValueName
)
{
this
.
attrValueName
=
attrValueName
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrDetailVO.java
浏览文件 @
63dd545c
...
...
@@ -3,51 +3,65 @@ package cn.iocoder.mall.product.application.vo.admins;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
@ApiModel
(
value
=
"商品规格 VO"
)
import
java.util.Date
;
import
java.util.List
;
@ApiModel
(
value
=
"商品规格明细 VO"
,
description
=
"带有规格值数组"
)
public
class
AdminsProductAttrDetailVO
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
attrI
d
;
private
Integer
i
d
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
attrName
;
@ApiModelProperty
(
value
=
"规格值"
,
required
=
true
,
example
=
"10"
)
private
Integer
attrValueId
;
@ApiModelProperty
(
value
=
"规格值名"
,
required
=
true
,
example
=
"红色"
)
private
String
attrValueName
;
private
String
name
;
@ApiModelProperty
(
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"创建时间"
,
required
=
true
,
example
=
"时间戳"
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"规格值数组"
,
required
=
true
)
private
List
<
AdminsProductAttrValueDetailVO
>
values
;
public
Integer
getId
()
{
return
id
;
}
public
AdminsProductAttrDetailVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
Integer
getAttrId
()
{
return
attrId
;
public
String
getName
()
{
return
name
;
}
public
AdminsProductAttrDetailVO
set
AttrId
(
Integer
attrId
)
{
this
.
attrId
=
attrId
;
public
AdminsProductAttrDetailVO
set
Name
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getAttrName
()
{
return
attrName
;
public
Integer
getStatus
()
{
return
status
;
}
public
AdminsProductAttrDetailVO
set
AttrName
(
String
attrName
)
{
this
.
attrName
=
attrName
;
public
AdminsProductAttrDetailVO
set
Status
(
Integer
status
)
{
this
.
status
=
status
;
return
this
;
}
public
Integer
getAttrValueId
()
{
return
attrValueId
;
public
Date
getCreateTime
()
{
return
createTime
;
}
public
AdminsProductAttrDetailVO
set
AttrValueId
(
Integer
attrValueId
)
{
this
.
attrValueId
=
attrValueId
;
public
AdminsProductAttrDetailVO
set
CreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
return
this
;
}
public
String
getAttrValueName
()
{
return
attrValueName
;
public
List
<
AdminsProductAttrValueDetailVO
>
getValues
()
{
return
values
;
}
public
AdminsProductAttrDetailVO
set
AttrValueName
(
String
attrValueName
)
{
this
.
attrValueName
=
attrValueName
;
public
AdminsProductAttrDetailVO
set
Values
(
List
<
AdminsProductAttrValueDetailVO
>
values
)
{
this
.
values
=
values
;
return
this
;
}
...
...
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrPageVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
value
=
"商品规格明细分页 VO"
)
public
class
AdminsProductAttrPageVO
{
@ApiModelProperty
(
value
=
"规格数组"
,
required
=
true
)
private
List
<
AdminsProductAttrDetailVO
>
attrs
;
@ApiModelProperty
(
value
=
"总数"
,
required
=
true
)
private
Integer
count
;
public
List
<
AdminsProductAttrDetailVO
>
getAttrs
()
{
return
attrs
;
}
public
AdminsProductAttrPageVO
setAttrs
(
List
<
AdminsProductAttrDetailVO
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
public
Integer
getCount
()
{
return
count
;
}
public
AdminsProductAttrPageVO
setCount
(
Integer
count
)
{
this
.
count
=
count
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrSimpleVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
value
=
"商品规格精简 VO"
,
description
=
"带有规格值数组"
)
public
class
AdminsProductAttrSimpleVO
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
@ApiModelProperty
(
value
=
"规格值数组"
,
required
=
true
)
private
List
<
AdminsProductAttrValueSimpleVO
>
values
;
public
Integer
getId
()
{
return
id
;
}
public
AdminsProductAttrSimpleVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
AdminsProductAttrSimpleVO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
List
<
AdminsProductAttrValueSimpleVO
>
getValues
()
{
return
values
;
}
public
AdminsProductAttrSimpleVO
setValues
(
List
<
AdminsProductAttrValueSimpleVO
>
values
)
{
this
.
values
=
values
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.Date
;
@ApiModel
(
value
=
"商品规格 VO"
,
description
=
"不带有规格值数组"
)
public
class
AdminsProductAttrVO
{
@ApiModelProperty
(
value
=
"规格编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
@ApiModelProperty
(
value
=
"状态"
,
required
=
true
,
example
=
"1"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"创建时间"
,
required
=
true
,
example
=
"时间戳"
)
private
Date
createTime
;
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrValueDetailVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.Date
;
@ApiModel
(
value
=
"商品规格值 VO"
)
public
class
AdminsProductAttrValueDetailVO
{
@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
;
public
Integer
getId
()
{
return
id
;
}
public
AdminsProductAttrValueDetailVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
AdminsProductAttrValueDetailVO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
Integer
getStatus
()
{
return
status
;
}
public
AdminsProductAttrValueDetailVO
setStatus
(
Integer
status
)
{
this
.
status
=
status
;
return
this
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
AdminsProductAttrValueDetailVO
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductAttrValueSimpleVO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
@ApiModel
(
value
=
"商品规格值精简 VO"
)
public
class
AdminsProductAttrValueSimpleVO
{
@ApiModelProperty
(
value
=
"规格值编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"规格值名"
,
required
=
true
,
example
=
"颜色"
)
private
String
name
;
public
Integer
getId
()
{
return
id
;
}
public
AdminsProductAttrValueSimpleVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
AdminsProductAttrValueSimpleVO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductSkuDetailVO.java
浏览文件 @
63dd545c
...
...
@@ -16,7 +16,7 @@ public class AdminsProductSkuDetailVO {
@ApiModelProperty
(
value
=
"图片地址"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
String
picURL
;
@ApiModelProperty
(
value
=
"规格值数组"
,
required
=
true
)
private
List
<
AdminsProductAttr
Detail
VO
>
attrs
;
private
List
<
AdminsProductAttr
AndValuePair
VO
>
attrs
;
@ApiModelProperty
(
value
=
"价格,单位:分"
,
required
=
true
,
example
=
"100"
)
private
Integer
price
;
@ApiModelProperty
(
value
=
"库存数量"
,
required
=
true
,
example
=
"100"
)
...
...
@@ -68,11 +68,11 @@ public class AdminsProductSkuDetailVO {
return
this
;
}
public
List
<
AdminsProductAttr
Detail
VO
>
getAttrs
()
{
public
List
<
AdminsProductAttr
AndValuePair
VO
>
getAttrs
()
{
return
attrs
;
}
public
AdminsProductSkuDetailVO
setAttrs
(
List
<
AdminsProductAttr
Detail
VO
>
attrs
)
{
public
AdminsProductSkuDetailVO
setAttrs
(
List
<
AdminsProductAttr
AndValuePair
VO
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
...
...
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductSpuPageVO.java
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
"商品 SPU 分页 VO"
)
public
class
AdminsProductSpuPageVO
{
/**
* spu 数组
*/
@ApiModelProperty
(
value
=
"spu 数组"
,
required
=
true
)
private
List
<
AdminsProductSpuVO
>
spus
;
/**
* 总数
*/
@ApiModelProperty
(
value
=
"总数"
,
required
=
true
)
private
Integer
count
;
public
List
<
AdminsProductSpuVO
>
getSpus
()
{
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/ProductAttrService.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductAttrPageBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.api.dto.ProductAttrPageDTO
;
import
java.util.List
;
public
interface
ProductAttrService
{
CommonResult
<
ProductAttrPageBO
>
getProductAttrPage
(
ProductAttrPageDTO
productAttrPageDTO
);
/**
* 获得规格属性数组
*
* 注意,该方法过滤了禁用的规格
*
* @return 规格属性数组
*/
CommonResult
<
List
<
ProductAttrSimpleBO
>>
getProductAttrList
();
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrAndValuePairBO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
/**
* 商品规格明细 BO
*/
public
class
ProductAttrAndValuePairBO
{
/**
* 规格编号
*/
private
Integer
attrId
;
/**
* 规格名
*/
private
String
attrName
;
/**
* 规格值
*/
private
Integer
attrValueId
;
/**
* 规格值名
*/
private
String
attrValueName
;
public
Integer
getAttrId
()
{
return
attrId
;
}
public
ProductAttrAndValuePairBO
setAttrId
(
Integer
attrId
)
{
this
.
attrId
=
attrId
;
return
this
;
}
public
String
getAttrName
()
{
return
attrName
;
}
public
ProductAttrAndValuePairBO
setAttrName
(
String
attrName
)
{
this
.
attrName
=
attrName
;
return
this
;
}
public
Integer
getAttrValueId
()
{
return
attrValueId
;
}
public
ProductAttrAndValuePairBO
setAttrValueId
(
Integer
attrValueId
)
{
this
.
attrValueId
=
attrValueId
;
return
this
;
}
public
String
getAttrValueName
()
{
return
attrValueName
;
}
public
ProductAttrAndValuePairBO
setAttrValueName
(
String
attrValueName
)
{
this
.
attrValueName
=
attrValueName
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrDetailBO.java
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.Date
;
import
java.util.List
;
/**
* 商品规格明细
B
O
* 商品规格明细
V
O
*/
public
class
ProductAttrDetailBO
{
/**
* 规格编号
*/
private
Integer
attrI
d
;
private
Integer
i
d
;
/**
* 规格名
*/
private
String
attrName
;
private
String
name
;
/**
* 状态
*/
private
Integer
status
;
/**
*
规格值
*
创建时间
*/
private
Integer
attrValueId
;
private
Date
createTime
;
/**
* 规格值
名
* 规格值
数组
*/
private
String
attrValueName
;
private
List
<
ProductAttrValueDetailBO
>
values
;
public
Integer
get
Attr
Id
()
{
return
attrI
d
;
public
Integer
getId
()
{
return
i
d
;
}
public
ProductAttrDetailBO
set
AttrId
(
Integer
attrI
d
)
{
this
.
attrId
=
attrI
d
;
public
ProductAttrDetailBO
set
Id
(
Integer
i
d
)
{
this
.
id
=
i
d
;
return
this
;
}
public
String
get
Attr
Name
()
{
return
attrN
ame
;
public
String
getName
()
{
return
n
ame
;
}
public
ProductAttrDetailBO
set
AttrName
(
String
attrN
ame
)
{
this
.
attrName
=
attrN
ame
;
public
ProductAttrDetailBO
set
Name
(
String
n
ame
)
{
this
.
name
=
n
ame
;
return
this
;
}
public
Integer
get
AttrValueId
()
{
return
attrValueId
;
public
Integer
get
Status
()
{
return
status
;
}
public
ProductAttrDetailBO
set
AttrValueId
(
Integer
attrValueId
)
{
this
.
attrValueId
=
attrValueId
;
public
ProductAttrDetailBO
set
Status
(
Integer
status
)
{
this
.
status
=
status
;
return
this
;
}
public
String
getAttrValueNa
me
()
{
return
attrValueNa
me
;
public
Date
getCreateTi
me
()
{
return
createTi
me
;
}
public
ProductAttrDetailBO
set
AttrValueName
(
String
attrValueNa
me
)
{
this
.
attrValueName
=
attrValueNa
me
;
public
ProductAttrDetailBO
set
CreateTime
(
Date
createTi
me
)
{
this
.
createTime
=
createTi
me
;
return
this
;
}
public
List
<
ProductAttrValueDetailBO
>
getValues
()
{
return
values
;
}
public
ProductAttrDetailBO
setValues
(
List
<
ProductAttrValueDetailBO
>
values
)
{
this
.
values
=
values
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrPageBO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.List
;
/**
* 商品规格明细分页 BO
*/
public
class
ProductAttrPageBO
{
/**
* 规格数组
*/
private
List
<
ProductAttrDetailBO
>
attrs
;
/**
* 总数
*/
private
Integer
count
;
public
List
<
ProductAttrDetailBO
>
getAttrs
()
{
return
attrs
;
}
public
ProductAttrPageBO
setAttrs
(
List
<
ProductAttrDetailBO
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
public
Integer
getCount
()
{
return
count
;
}
public
ProductAttrPageBO
setCount
(
Integer
count
)
{
this
.
count
=
count
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrSimpleBO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.List
;
/**
* 商品规格精简 VO
*/
public
class
ProductAttrSimpleBO
{
/**
* 规格编号
*/
private
Integer
id
;
/**
* 规格名
*/
private
String
name
;
/**
* 规格值数组
*/
private
List
<
ProductAttrValueSimpleBO
>
values
;
public
Integer
getId
()
{
return
id
;
}
public
ProductAttrSimpleBO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
ProductAttrSimpleBO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
List
<
ProductAttrValueSimpleBO
>
getValues
()
{
return
values
;
}
public
ProductAttrSimpleBO
setValues
(
List
<
ProductAttrValueSimpleBO
>
values
)
{
this
.
values
=
values
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrValueDetailBO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.Date
;
/**
* 商品规格值 VO
*/
public
class
ProductAttrValueDetailBO
{
/**
* 规格值编号
*/
private
Integer
id
;
/**
* 规格值名
*/
private
String
name
;
/**
* 状态
*/
private
Integer
status
;
/**
* 创建时间
*/
private
Date
createTime
;
public
Integer
getId
()
{
return
id
;
}
public
ProductAttrValueDetailBO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
ProductAttrValueDetailBO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
Integer
getStatus
()
{
return
status
;
}
public
ProductAttrValueDetailBO
setStatus
(
Integer
status
)
{
this
.
status
=
status
;
return
this
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
ProductAttrValueDetailBO
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductAttrValueSimpleBO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
/**
* 商品规格值 VO
*/
public
class
ProductAttrValueSimpleBO
{
/**
* 规格值编号
*/
private
Integer
id
;
/**
* 规格值名
*/
private
String
name
;
public
Integer
getId
()
{
return
id
;
}
public
ProductAttrValueSimpleBO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
ProductAttrValueSimpleBO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductSkuDetailBO.java
浏览文件 @
63dd545c
...
...
@@ -22,7 +22,7 @@ public class ProductSkuDetailBO {
/**
* 规格值数组
*/
private
List
<
ProductAttr
Detail
BO
>
attrs
;
private
List
<
ProductAttr
AndValuePair
BO
>
attrs
;
/**
* 价格,单位:分
*/
...
...
@@ -60,11 +60,11 @@ public class ProductSkuDetailBO {
return
this
;
}
public
List
<
ProductAttr
Detail
BO
>
getAttrs
()
{
public
List
<
ProductAttr
AndValuePair
BO
>
getAttrs
()
{
return
attrs
;
}
public
ProductSkuDetailBO
setAttrs
(
List
<
ProductAttr
Detail
BO
>
attrs
)
{
public
ProductSkuDetailBO
setAttrs
(
List
<
ProductAttr
AndValuePair
BO
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductAttrPageDTO.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
javax.validation.constraints.NotNull
;
/**
* 商品规格分页 DTO
*/
public
class
ProductAttrPageDTO
{
private
String
name
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
public
String
getName
()
{
return
name
;
}
public
ProductAttrPageDTO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
Integer
getPageNo
()
{
return
pageNo
;
}
public
ProductAttrPageDTO
setPageNo
(
Integer
pageNo
)
{
this
.
pageNo
=
pageNo
;
return
this
;
}
public
Integer
getPageSize
()
{
return
pageSize
;
}
public
ProductAttrPageDTO
setPageSize
(
Integer
pageSize
)
{
this
.
pageSize
=
pageSize
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSpuPageDTO.java
浏览文件 @
63dd545c
...
...
@@ -2,6 +2,9 @@ package cn.iocoder.mall.product.api.dto;
import
javax.validation.constraints.NotNull
;
/**
* 商品 Spu 分页 DTO
*/
public
class
ProductSpuPageDTO
{
private
String
name
;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/convert/ProductAttrConvert.java
0 → 100644
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
convert
;
import
cn.iocoder.mall.product.api.bo.ProductAttrDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrValueDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrValueSimpleBO
;
import
cn.iocoder.mall.product.dataobject.ProductAttrDO
;
import
cn.iocoder.mall.product.dataobject.ProductAttrValueDO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@Mapper
public
interface
ProductAttrConvert
{
ProductAttrConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductAttrConvert
.
class
);
@Mappings
({})
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);
//
@Mappings
({})
List
<
ProductAttrValueSimpleBO
>
convert4
(
List
<
ProductAttrValueDO
>
values
);
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/convert/ProductSpuConvert.java
浏览文件 @
63dd545c
package
cn
.
iocoder
.
mall
.
product
.
convert
;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.mall.product.api.bo.ProductAttr
Detail
BO
;
import
cn.iocoder.mall.product.api.bo.ProductAttr
AndValuePair
BO
;
import
cn.iocoder.mall.product.api.bo.ProductSkuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
...
...
@@ -63,13 +63,13 @@ public interface ProductSpuConvert {
})
ProductSkuDetailBO
convert2
(
ProductSkuDO
sku
);
@Mappings
({})
default
ProductSpuDetailBO
convert2
(
ProductSpuDO
spu
,
List
<
ProductSkuDO
>
skus
,
List
<
ProductAttr
Detail
BO
>
productAttrDetailBOs
)
{
@Mappings
({})
// TODO 芋艿,后续细看下 mapstruct 的 API ,优化这块
default
ProductSpuDetailBO
convert2
(
ProductSpuDO
spu
,
List
<
ProductSkuDO
>
skus
,
List
<
ProductAttr
AndValuePair
BO
>
productAttrDetailBOs
)
{
// 创建并转换 ProductSpuDetailBO 对象
ProductSpuDetailBO
spuDetail
=
this
.
convert2
(
spu
).
setPicUrls
(
StringUtil
.
split
(
spu
.
getPicUrls
(),
","
));
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
Map
<
Integer
,
ProductAttr
Detail
BO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttr
Detail
BO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
Map
<
Integer
,
ProductAttr
AndValuePair
BO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttr
AndValuePair
BO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
// 创建并转换 ProductSpuDetailBO 数组
spuDetail
.
setSkus
(
new
ArrayList
<>());
skus
.
forEach
(
sku
->
{
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dao/ProductAttrMapper.java
浏览文件 @
63dd545c
...
...
@@ -14,4 +14,12 @@ public interface ProductAttrMapper {
List
<
ProductAttrDO
>
selectListByIds
(
@Param
(
"ids"
)
Collection
<
Integer
>
ids
);
List
<
ProductAttrDO
>
selectListByStatus
(
@Param
(
"status"
)
Integer
status
);
List
<
ProductAttrDO
>
selectListByNameLike
(
@Param
(
"name"
)
String
name
,
@Param
(
"offset"
)
Integer
offset
,
@Param
(
"limit"
)
Integer
limit
);
Integer
selectCountByNameLike
(
@Param
(
"name"
)
String
name
);
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dao/ProductAttrValueMapper.java
浏览文件 @
63dd545c
...
...
@@ -14,4 +14,8 @@ public interface ProductAttrValueMapper {
List
<
ProductAttrValueDO
>
selectListByIds
(
@Param
(
"ids"
)
Collection
<
Integer
>
ids
);
List
<
ProductAttrValueDO
>
selectListByStatus
(
@Param
(
"status"
)
Integer
status
);
List
<
ProductAttrValueDO
>
selectListByAttrIds
(
@Param
(
"attrIds"
)
Collection
<
Integer
>
attrIds
);
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java
浏览文件 @
63dd545c
...
...
@@ -2,16 +2,25 @@ package cn.iocoder.mall.product.service;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductAttrService
;
import
cn.iocoder.mall.product.api.bo.ProductAttrAndValuePairBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrPageBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO
;
import
cn.iocoder.mall.product.api.constant.ProductAttrConstants
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.api.dto.ProductAttrPageDTO
;
import
cn.iocoder.mall.product.convert.ProductAttrConvert
;
import
cn.iocoder.mall.product.dao.ProductAttrMapper
;
import
cn.iocoder.mall.product.dao.ProductAttrValueMapper
;
import
cn.iocoder.mall.product.dataobject.ProductAttrDO
;
import
cn.iocoder.mall.product.dataobject.ProductAttrValueDO
;
import
com.google.common.collect.ImmutableListMultimap
;
import
com.google.common.collect.Multimaps
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -24,41 +33,85 @@ import java.util.stream.Collectors;
* @see cn.iocoder.mall.product.dataobject.ProductAttrValueDO
*/
@Service
public
class
ProductAttrServiceImpl
{
@com
.
alibaba
.
dubbo
.
config
.
annotation
.
Service
(
validation
=
"true"
)
public
class
ProductAttrServiceImpl
implements
ProductAttrService
{
@Autowired
private
ProductAttrMapper
productAttrMapper
;
@Autowired
private
ProductAttrValueMapper
productValueMapper
;
private
ProductAttrValueMapper
product
Attr
ValueMapper
;
public
CommonResult
<
List
<
ProductAttr
DetailBO
>>
validProductAttrAndValue
(
Set
<
Integer
>
productAttrValueId
s
)
{
public
CommonResult
<
List
<
ProductAttr
AndValuePairBO
>>
validProductAttrAndValue
(
Set
<
Integer
>
productAttrValueIds
,
boolean
validStatu
s
)
{
// 首先,校验规格值
List
<
ProductAttrValueDO
>
attrValues
=
productValueMapper
.
selectListByIds
(
productAttrValueIds
);
List
<
ProductAttrValueDO
>
attrValues
=
product
Attr
ValueMapper
.
selectListByIds
(
productAttrValueIds
);
if
(
attrValues
.
size
()
!=
productAttrValueIds
.
size
())
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
for
(
ProductAttrValueDO
attrValue
:
attrValues
)
{
// 同时,校验下状态
if
(
ProductAttrConstants
.
ATTR_STATUS_DISABLE
.
equals
(
attrValue
.
getStatus
()))
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_VALUE_NOT_EXIST
.
getCode
());
}
}
}
// 然后,校验规格
Set
<
Integer
>
attrIds
=
attrValues
.
stream
().
map
(
ProductAttrValueDO:
:
getAttrId
).
collect
(
Collectors
.
toSet
());
List
<
ProductAttrDO
>
attrs
=
productAttrMapper
.
selectListByIds
(
attrIds
);
if
(
attrs
.
size
()
!=
attrIds
.
size
())
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
if
(
validStatus
)
{
for
(
ProductAttrDO
attr
:
attrs
)
{
// 同时,校验下状态
if
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_DISABLE
.
equals
(
attr
.
getStatus
()))
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_ATTR_NOT_EXIST
.
getCode
());
}
}
}
// 返回成功
Map
<
Integer
,
ProductAttrDO
>
attrMap
=
attrs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttrDO:
:
getId
,
productAttrDO
->
productAttrDO
));
// ProductAttrDO 的映射,方便查找。
List
<
ProductAttr
DetailBO
>
result
=
attrValues
.
stream
().
map
(
productAttrValueDO
->
new
ProductAttrDetail
BO
()
List
<
ProductAttr
AndValuePairBO
>
result
=
attrValues
.
stream
().
map
(
productAttrValueDO
->
new
ProductAttrAndValuePair
BO
()
.
setAttrId
(
productAttrValueDO
.
getAttrId
()).
setAttrName
(
attrMap
.
get
(
productAttrValueDO
.
getAttrId
()).
getName
())
.
setAttrValueId
(
productAttrValueDO
.
getId
()).
setAttrValueName
(
productAttrValueDO
.
getName
())).
collect
(
Collectors
.
toList
());
return
CommonResult
.
success
(
result
);
}
@Override
public
CommonResult
<
ProductAttrPageBO
>
getProductAttrPage
(
ProductAttrPageDTO
productAttrPageDTO
)
{
ProductAttrPageBO
productAttrPageBO
=
new
ProductAttrPageBO
();
// 查询分页数据
int
offset
=
productAttrPageDTO
.
getPageNo
()
*
productAttrPageDTO
.
getPageSize
();
productAttrPageBO
.
setAttrs
(
ProductAttrConvert
.
INSTANCE
.
convert
(
productAttrMapper
.
selectListByNameLike
(
productAttrPageDTO
.
getName
(),
offset
,
productAttrPageDTO
.
getPageSize
())));
// 查询分页总数
productAttrPageBO
.
setCount
(
productAttrMapper
.
selectCountByNameLike
(
productAttrPageDTO
.
getName
()));
// 将规格值拼接上去
if
(!
productAttrPageBO
.
getAttrs
().
isEmpty
())
{
Set
<
Integer
>
attrIds
=
productAttrPageBO
.
getAttrs
().
stream
().
map
(
ProductAttrDetailBO:
:
getId
).
collect
(
Collectors
.
toSet
());
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectListByAttrIds
(
attrIds
);
ImmutableListMultimap
<
Integer
,
ProductAttrValueDO
>
attrValueMap
=
Multimaps
.
index
(
attrValues
,
ProductAttrValueDO:
:
getAttrId
);
// KEY 是 attrId ,VALUE 是 ProductAttrValueDO 数组
for
(
ProductAttrDetailBO
productAttrDetailBO
:
productAttrPageBO
.
getAttrs
())
{
productAttrDetailBO
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convert2
(((
attrValueMap
).
get
(
productAttrDetailBO
.
getId
()))));
}
}
// 返回结果
return
CommonResult
.
success
(
productAttrPageBO
);
}
@Override
public
CommonResult
<
List
<
ProductAttrSimpleBO
>>
getProductAttrList
()
{
// 查询所有开启的规格数组
List
<
ProductAttrSimpleBO
>
attrs
=
ProductAttrConvert
.
INSTANCE
.
convert3
(
productAttrMapper
.
selectListByStatus
(
ProductAttrConstants
.
ATTR_STATUS_ENABLE
));
// 如果为空,则返回空
if
(
attrs
.
isEmpty
())
{
return
CommonResult
.
success
(
Collections
.
emptyList
());
}
// 将规格值拼接上去
List
<
ProductAttrValueDO
>
attrValues
=
productAttrValueMapper
.
selectListByStatus
(
ProductAttrConstants
.
ATTR_VALUE_STATUS_ENABLE
);
ImmutableListMultimap
<
Integer
,
ProductAttrValueDO
>
attrValueMap
=
Multimaps
.
index
(
attrValues
,
ProductAttrValueDO:
:
getAttrId
);
// KEY 是 attrId ,VALUE 是 ProductAttrValueDO 数组
for
(
ProductAttrSimpleBO
productAttrSimpleBO
:
attrs
)
{
productAttrSimpleBO
.
setValues
(
ProductAttrConvert
.
INSTANCE
.
convert4
(((
attrValueMap
).
get
(
productAttrSimpleBO
.
getId
()))));
}
return
CommonResult
.
success
(
attrs
);
}
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
63dd545c
...
...
@@ -6,7 +6,7 @@ import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductAttr
Detail
BO
;
import
cn.iocoder.mall.product.api.bo.ProductAttr
AndValuePair
BO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
...
...
@@ -61,7 +61,8 @@ public class ProductSpuServiceImpl implements ProductSpuService {
// 获得规格
Set
<
Integer
>
productAttrValueIds
=
new
HashSet
<>();
skus
.
forEach
(
sku
->
productAttrValueIds
.
addAll
(
StringUtil
.
splitToInt
(
sku
.
getAttrs
(),
","
)));
CommonResult
<
List
<
ProductAttrDetailBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
);
CommonResult
<
List
<
ProductAttrAndValuePairBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
,
false
);
// 读取规格时,不考虑规格是否被禁用
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
}
...
...
@@ -81,7 +82,8 @@ public class ProductSpuServiceImpl implements ProductSpuService {
// 校验规格是否存在
Set
<
Integer
>
productAttrValueIds
=
new
HashSet
<>();
productSpuAddDTO
.
getSkus
().
forEach
(
productSkuAddDTO
->
productAttrValueIds
.
addAll
(
productSkuAddDTO
.
getAttrs
()));
CommonResult
<
List
<
ProductAttrDetailBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
);
CommonResult
<
List
<
ProductAttrAndValuePairBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
,
true
);
// 读取规格时,需要考虑规格是否被禁用
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
}
...
...
@@ -126,7 +128,8 @@ public class ProductSpuServiceImpl implements ProductSpuService {
// 校验规格是否存在
Set
<
Integer
>
productAttrValueIds
=
new
HashSet
<>();
productSpuUpdateDTO
.
getSkus
().
forEach
(
productSkuAddDTO
->
productAttrValueIds
.
addAll
(
productSkuAddDTO
.
getAttrs
()));
CommonResult
<
List
<
ProductAttrDetailBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
);
CommonResult
<
List
<
ProductAttrAndValuePairBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
,
true
);
// 读取规格时,需要考虑规格是否被禁用
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
}
...
...
@@ -203,10 +206,10 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
CommonResult
.
success
(
productSpuPage
);
}
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddOrUpdateDTO
>
productSkuAddDTOs
,
List
<
ProductAttr
Detail
BO
>
productAttrDetailBOs
)
{
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddOrUpdateDTO
>
productSkuAddDTOs
,
List
<
ProductAttr
AndValuePair
BO
>
productAttrDetailBOs
)
{
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
Map
<
Integer
,
ProductAttr
Detail
BO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttr
Detail
BO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
Map
<
Integer
,
ProductAttr
AndValuePair
BO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttr
AndValuePair
BO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
// 1. 先校验,一个 Sku 下,没有重复的规格。校验方式是,遍历每个 Sku ,看看是否有重复的规格 attrId
for
(
ProductSkuAddOrUpdateDTO
sku
:
productSkuAddDTOs
)
{
Set
<
Integer
>
attrIds
=
sku
.
getAttrs
().
stream
().
map
(
attrValueId
->
productAttrDetailBOMap
.
get
(
attrValueId
).
getAttrId
()).
collect
(
Collectors
.
toSet
());
...
...
product/product-service-impl/src/main/resources/mapper/ProductAttrMapper.xml
浏览文件 @
63dd545c
...
...
@@ -70,4 +70,41 @@
AND deleted = 0
</select>
<select
id=
"selectListByNameLike"
resultType=
"ProductAttrDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_attr
<where>
<if
test=
"name != null"
>
name LIKE "%"#{name}"%"
</if>
AND deleted = 0
</where>
LIMIT #{offset}, #{limit}
</select>
<select
id=
"selectCountByNameLike"
resultType=
"Integer"
>
SELECT
COUNT(1)
FROM product_attr
<where>
<if
test=
"name != null"
>
name LIKE "%"#{name}"%"
</if>
AND deleted = 0
</where>
</select>
<select
id=
"selectListByStatus"
parameterType=
"Integer"
resultType=
"ProductAttrDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_attr
<where>
<if
test=
"status != null"
>
status = #{status}
</if>
AND deleted = 0
</where>
</select>
</mapper>
\ No newline at end of file
product/product-service-impl/src/main/resources/mapper/ProductAttrValueMapper.xml
浏览文件 @
63dd545c
...
...
@@ -70,4 +70,27 @@
AND deleted = 0
</select>
<select
id=
"selectListByAttrIds"
resultType=
"ProductAttrValueDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_attr_value
WHERE attr_id IN
<foreach
item=
"attrId"
collection=
"attrIds"
separator=
","
open=
"("
close=
")"
index=
""
>
#{attrId}
</foreach>
AND deleted = 0
</select>
<select
id=
"selectListByStatus"
resultType=
"ProductAttrValueDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_attr_value
<where>
<if
test=
"status != null"
>
status = #{status}
</if>
AND deleted = 0
</where>
</select>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论