Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
70bdb637
提交
70bdb637
authored
3月 06, 2019
作者:
sin
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
d7be2bfb
5af19f92
隐藏空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
476 行增加
和
106 行删除
+476
-106
AdminController.java
.../admin/application/controller/admins/AdminController.java
+1
-1
AdminPageDTO.java
...main/java/cn/iocoder/mall/admin/api/dto/AdminPageDTO.java
+4
-0
StringUtil.java
...ain/java/cn/iocoder/common/framework/util/StringUtil.java
+11
-0
AdminsProductSpuController.java
...ication/controller/admins/AdminsProductSpuController.java
+23
-9
ProductSpuController.java
...ct/application/controller/users/ProductSpuController.java
+2
-1
ProductSpuConvert.java
...r/mall/product/application/convert/ProductSpuConvert.java
+6
-0
AdminsProductSpuVO.java
...all/product/application/vo/admins/AdminsProductSpuVO.java
+95
-0
ProductSpuService.java
...n/java/cn/iocoder/mall/product/api/ProductSpuService.java
+7
-3
ProductSpuBO.java
...ain/java/cn/iocoder/mall/product/api/bo/ProductSpuBO.java
+110
-1
ProductSpuPageBO.java
...java/cn/iocoder/mall/product/api/bo/ProductSpuPageBO.java
+35
-0
ProductSkuAddOrUpdateDTO.java
...ocoder/mall/product/api/dto/ProductSkuAddOrUpdateDTO.java
+11
-4
ProductSkuUpdateDTO.java
.../cn/iocoder/mall/product/api/dto/ProductSkuUpdateDTO.java
+0
-51
ProductSpuAddDTO.java
...ava/cn/iocoder/mall/product/api/dto/ProductSpuAddDTO.java
+3
-3
ProductSpuPageDTO.java
...va/cn/iocoder/mall/product/api/dto/ProductSpuPageDTO.java
+42
-0
ProductSpuUpdateDTO.java
.../cn/iocoder/mall/product/api/dto/ProductSpuUpdateDTO.java
+3
-3
ProductSpuConvert.java
...va/cn/iocoder/mall/product/convert/ProductSpuConvert.java
+15
-9
ProductSpuMapper.java
...in/java/cn/iocoder/mall/product/dao/ProductSpuMapper.java
+10
-0
ProductSpuDO.java
...java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
+2
-5
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+62
-15
ProductSpuMapper.xml
...rvice-impl/src/main/resources/mapper/ProductSpuMapper.xml
+34
-1
没有找到文件。
admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/AdminController.java
浏览文件 @
70bdb637
...
@@ -82,7 +82,7 @@ public class AdminController {
...
@@ -82,7 +82,7 @@ public class AdminController {
@GetMapping
(
"/page"
)
@GetMapping
(
"/page"
)
@ApiOperation
(
value
=
"管理员分页"
)
@ApiOperation
(
value
=
"管理员分页"
)
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"nickname"
,
value
=
"昵称,模糊匹配"
,
required
=
true
,
example
=
"小王"
),
@ApiImplicitParam
(
name
=
"nickname"
,
value
=
"昵称,模糊匹配"
,
example
=
"小王"
),
@ApiImplicitParam
(
name
=
"pageNo"
,
value
=
"页码,从 0 开始"
,
example
=
"0"
),
@ApiImplicitParam
(
name
=
"pageNo"
,
value
=
"页码,从 0 开始"
,
example
=
"0"
),
@ApiImplicitParam
(
name
=
"pageSize"
,
value
=
"每页条数"
,
required
=
true
,
example
=
"10"
),
@ApiImplicitParam
(
name
=
"pageSize"
,
value
=
"每页条数"
,
required
=
true
,
example
=
"10"
),
})
})
...
...
admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/AdminPageDTO.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
admin
.
api
.
dto
;
package
cn
.
iocoder
.
mall
.
admin
.
api
.
dto
;
import
javax.validation.constraints.NotNull
;
public
class
AdminPageDTO
{
public
class
AdminPageDTO
{
private
String
nickname
;
private
String
nickname
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
private
Integer
pageSize
;
public
Integer
getPageNo
()
{
public
Integer
getPageNo
()
{
...
...
common/common-framework/src/main/java/cn/iocoder/common/framework/util/StringUtil.java
浏览文件 @
70bdb637
...
@@ -2,6 +2,7 @@ package cn.iocoder.common.framework.util;
...
@@ -2,6 +2,7 @@ package cn.iocoder.common.framework.util;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.List
;
...
@@ -17,4 +18,13 @@ public class StringUtil {
...
@@ -17,4 +18,13 @@ public class StringUtil {
return
Arrays
.
asList
(
stringArray
);
return
Arrays
.
asList
(
stringArray
);
}
}
public
static
List
<
Integer
>
splitToInt
(
String
toSplit
,
String
delim
)
{
String
[]
stringArray
=
StringUtils
.
tokenizeToStringArray
(
toSplit
,
delim
);
List
<
Integer
>
array
=
new
ArrayList
<>(
stringArray
.
length
);
for
(
String
string
:
stringArray
)
{
array
.
add
(
Integer
.
valueOf
(
string
));
}
return
array
;
}
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java
浏览文件 @
70bdb637
...
@@ -4,9 +4,10 @@ import cn.iocoder.common.framework.vo.CommonResult;
...
@@ -4,9 +4,10 @@ import cn.iocoder.common.framework.vo.CommonResult;
import
cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.
dto.ProductSkuAddDT
O
;
import
cn.iocoder.mall.product.api.
bo.ProductSpuPageB
O
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSku
AddOr
UpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuPageDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.application.convert.ProductSpuConvert
;
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.AdminsProductSpuDetailVO
;
...
@@ -57,7 +58,7 @@ public class AdminsProductSpuController {
...
@@ -57,7 +58,7 @@ public class AdminsProductSpuController {
// 创建 ProductSpuAddDTO 对象
// 创建 ProductSpuAddDTO 对象
ProductSpuAddDTO
productSpuAddDTO
=
new
ProductSpuAddDTO
().
setName
(
name
).
setSellPoint
(
sellPoint
)
ProductSpuAddDTO
productSpuAddDTO
=
new
ProductSpuAddDTO
().
setName
(
name
).
setSellPoint
(
sellPoint
)
.
setDescription
(
description
).
setCid
(
cid
).
setPicUrls
(
picUrls
).
setVisible
(
visible
)
.
setDescription
(
description
).
setCid
(
cid
).
setPicUrls
(
picUrls
).
setVisible
(
visible
)
.
setSkus
(
parseSkus
(
skuStr
,
ProductSkuAddDTO
.
class
));
.
setSkus
(
parseSkus
(
skuStr
,
ProductSkuAdd
OrUpdate
DTO
.
class
));
// 保存商品
// 保存商品
CommonResult
<
ProductSpuDetailBO
>
result
=
productSpuService
.
addProductSpu
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productSpuAddDTO
);
CommonResult
<
ProductSpuDetailBO
>
result
=
productSpuService
.
addProductSpu
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productSpuAddDTO
);
// 返回结果
// 返回结果
...
@@ -88,7 +89,7 @@ public class AdminsProductSpuController {
...
@@ -88,7 +89,7 @@ public class AdminsProductSpuController {
// 创建 ProductSpuUpdateDTO 对象
// 创建 ProductSpuUpdateDTO 对象
ProductSpuUpdateDTO
productSpuUpdateDTO
=
new
ProductSpuUpdateDTO
().
setId
(
id
).
setName
(
name
).
setSellPoint
(
sellPoint
)
ProductSpuUpdateDTO
productSpuUpdateDTO
=
new
ProductSpuUpdateDTO
().
setId
(
id
).
setName
(
name
).
setSellPoint
(
sellPoint
)
.
setDescription
(
description
).
setCid
(
cid
).
setPicUrls
(
picUrls
).
setVisible
(
visible
)
.
setDescription
(
description
).
setCid
(
cid
).
setPicUrls
(
picUrls
).
setVisible
(
visible
)
.
setSkus
(
parseSkus
(
skuStr
,
ProductSkuUpdateDTO
.
class
));
.
setSkus
(
parseSkus
(
skuStr
,
ProductSku
AddOr
UpdateDTO
.
class
));
// 更新商品
// 更新商品
return
productSpuService
.
updateProductSpu
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productSpuUpdateDTO
);
return
productSpuService
.
updateProductSpu
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
productSpuUpdateDTO
);
}
}
...
@@ -97,19 +98,32 @@ public class AdminsProductSpuController {
...
@@ -97,19 +98,32 @@ public class AdminsProductSpuController {
@ApiOperation
(
"更新商品的排序"
)
@ApiOperation
(
"更新商品的排序"
)
public
CommonResult
<
Boolean
>
updateSort
(
@RequestParam
(
"id"
)
Integer
id
,
public
CommonResult
<
Boolean
>
updateSort
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"sort"
)
Integer
sort
)
{
@RequestParam
(
"sort"
)
Integer
sort
)
{
return
null
;
return
productSpuService
.
updateProductSpuSort
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
id
,
sort
)
;
}
}
// TODO 芋艿,删除功能暂时不做。主要原因是,关联的数据太多。删除带来的问题会比较大
@GetMapping
(
"/spu/page"
)
@GetMapping
(
"/spu/page"
)
@ApiOperation
(
"商品 SPU 分页列表"
)
@ApiOperation
(
"商品 SPU 分页列表"
)
public
CommonResult
<
AdminsProductSpuPageVO
>
spuPage
()
{
@ApiImplicitParams
({
return
null
;
@ApiImplicitParam
(
name
=
"name"
,
value
=
"商品名称,模糊匹配"
,
example
=
"小王"
),
@ApiImplicitParam
(
name
=
"pageNo"
,
value
=
"页码,从 0 开始"
,
example
=
"0"
),
@ApiImplicitParam
(
name
=
"pageSize"
,
value
=
"每页条数"
,
required
=
true
,
example
=
"10"
),
})
public
CommonResult
<
AdminsProductSpuPageVO
>
spuPage
(
@RequestParam
(
value
=
"name"
,
required
=
false
)
String
name
,
@RequestParam
(
value
=
"pageNo"
,
defaultValue
=
"0"
)
Integer
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
defaultValue
=
"10"
)
Integer
pageSize
)
{
// 创建 ProductSpuPageDTO 对象
ProductSpuPageDTO
productSpuPageDTO
=
new
ProductSpuPageDTO
().
setName
(
name
).
setPageNo
(
pageNo
).
setPageSize
(
pageSize
);
CommonResult
<
ProductSpuPageBO
>
result
=
productSpuService
.
getProductSpuPage
(
productSpuPageDTO
);
return
ProductSpuConvert
.
INSTANCE
.
convert2
(
result
);
}
}
@GetMapping
(
"/spu/info"
)
@GetMapping
(
"/spu/info"
)
@ApiOperation
(
"商品 SPU 明细"
)
@ApiOperation
(
"商品 SPU 明细"
)
public
CommonResult
<
AdminsProductSpuDetailVO
>
info
()
{
@ApiImplicitParam
(
name
=
"id"
,
value
=
"SPU 编号"
,
required
=
true
,
example
=
"100"
)
return
null
;
public
CommonResult
<
AdminsProductSpuDetailVO
>
info
(
@RequestParam
(
"id"
)
Integer
id
)
{
return
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuService
.
getProductSpu
(
id
));
}
}
private
<
T
>
List
<
T
>
parseSkus
(
String
skuStr
,
Class
<
T
>
clazz
)
{
private
<
T
>
List
<
T
>
parseSkus
(
String
skuStr
,
Class
<
T
>
clazz
)
{
...
...
product/product-application/src/main/java/cn/iocoder/mall/product/application/controller/users/ProductSpuController.java
浏览文件 @
70bdb637
...
@@ -19,7 +19,8 @@ public class ProductSpuController {
...
@@ -19,7 +19,8 @@ public class ProductSpuController {
// TODO 详情
// TODO 详情
@GetMapping
(
"/info"
)
@GetMapping
(
"/info"
)
public
ProductSpuBO
info
(
@RequestParam
(
"id"
)
Integer
id
)
{
public
ProductSpuBO
info
(
@RequestParam
(
"id"
)
Integer
id
)
{
return
productSpuService
.
getProductSpu
(
id
);
// return productSpuService.getProductSpu(id);
return
null
;
}
}
// TODO 分页
// TODO 分页
...
...
product/product-application/src/main/java/cn/iocoder/mall/product/application/convert/ProductSpuConvert.java
浏览文件 @
70bdb637
...
@@ -2,7 +2,9 @@ package cn.iocoder.mall.product.application.convert;
...
@@ -2,7 +2,9 @@ package cn.iocoder.mall.product.application.convert;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuDetailVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuDetailVO
;
import
cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuPageVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
org.mapstruct.factory.Mappers
;
...
@@ -18,4 +20,7 @@ public interface ProductSpuConvert {
...
@@ -18,4 +20,7 @@ public interface ProductSpuConvert {
@Mappings
({})
@Mappings
({})
CommonResult
<
AdminsProductSpuDetailVO
>
convert
(
CommonResult
<
ProductSpuDetailBO
>
result
);
CommonResult
<
AdminsProductSpuDetailVO
>
convert
(
CommonResult
<
ProductSpuDetailBO
>
result
);
@Mappings
({})
CommonResult
<
AdminsProductSpuPageVO
>
convert2
(
CommonResult
<
ProductSpuPageBO
>
result
);
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/vo/admins/AdminsProductSpuVO.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
package
cn
.
iocoder
.
mall
.
product
.
application
.
vo
.
admins
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.List
;
@ApiModel
(
value
=
"商品 SPU VO"
,
description
=
"不包括 SKU 信息 VO"
)
@ApiModel
(
value
=
"商品 SPU VO"
,
description
=
"不包括 SKU 信息 VO"
)
public
class
AdminsProductSpuVO
{
public
class
AdminsProductSpuVO
{
@ApiModelProperty
(
value
=
"SPU 编号"
,
required
=
true
,
example
=
"1"
)
private
Integer
id
;
// ========== 基本信息 =========
@ApiModelProperty
(
value
=
"SPU 名字"
,
required
=
true
,
example
=
"厮大牛逼"
)
private
String
name
;
@ApiModelProperty
(
value
=
"卖点"
,
required
=
true
,
example
=
"各种 MQ 骚操作"
)
private
String
sellPoint
;
@ApiModelProperty
(
value
=
"描述"
,
required
=
true
,
example
=
"你就说强不强"
)
private
String
description
;
@ApiModelProperty
(
value
=
"分类编号"
,
required
=
true
,
example
=
"反正我是信了"
)
private
Integer
cid
;
@ApiModelProperty
(
value
=
"商品主图地址的数组"
,
required
=
true
,
example
=
"http://www.iocoder.cn"
)
private
List
<
String
>
picUrls
;
// ========== 其他信息 =========
@ApiModelProperty
(
value
=
"是否上架商品(是否可见)"
,
required
=
true
,
example
=
"true"
)
private
Boolean
visible
;
@ApiModelProperty
(
value
=
"排序字段"
,
required
=
true
,
example
=
"10"
)
private
Integer
sort
;
public
Integer
getId
()
{
return
id
;
}
public
AdminsProductSpuVO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
AdminsProductSpuVO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getSellPoint
()
{
return
sellPoint
;
}
public
AdminsProductSpuVO
setSellPoint
(
String
sellPoint
)
{
this
.
sellPoint
=
sellPoint
;
return
this
;
}
public
String
getDescription
()
{
return
description
;
}
public
AdminsProductSpuVO
setDescription
(
String
description
)
{
this
.
description
=
description
;
return
this
;
}
public
Integer
getCid
()
{
return
cid
;
}
public
AdminsProductSpuVO
setCid
(
Integer
cid
)
{
this
.
cid
=
cid
;
return
this
;
}
public
List
<
String
>
getPicUrls
()
{
return
picUrls
;
}
public
AdminsProductSpuVO
setPicUrls
(
List
<
String
>
picUrls
)
{
this
.
picUrls
=
picUrls
;
return
this
;
}
public
Boolean
getVisible
()
{
return
visible
;
}
public
AdminsProductSpuVO
setVisible
(
Boolean
visible
)
{
this
.
visible
=
visible
;
return
this
;
}
public
Integer
getSort
()
{
return
sort
;
}
public
AdminsProductSpuVO
setSort
(
Integer
sort
)
{
this
.
sort
=
sort
;
return
this
;
}
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/ProductSpuService.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
api
;
package
cn
.
iocoder
.
mall
.
product
.
api
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuPageDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
public
interface
ProductSpuService
{
public
interface
ProductSpuService
{
ProductSpuBO
getProductSpu
(
Integer
id
);
CommonResult
<
ProductSpuDetailBO
>
getProductSpu
(
Integer
id
);
CommonResult
<
ProductSpuDetailBO
>
addProductSpu
(
Integer
adminId
,
ProductSpuAddDTO
productSpuAddDTO
);
CommonResult
<
ProductSpuDetailBO
>
addProductSpu
(
Integer
adminId
,
ProductSpuAddDTO
productSpuAddDTO
);
CommonResult
<
Boolean
>
updateProductSpu
(
Integer
adminId
,
ProductSpuUpdateDTO
productSpuUpdateDTO
);
CommonResult
<
Boolean
>
updateProductSpu
(
Integer
adminId
,
ProductSpuUpdateDTO
productSpuUpdateDTO
);
CommonResult
<
Boolean
>
updateProductSpuSort
(
Integer
adminId
,
Integer
spuId
,
Integer
sort
);
CommonResult
<
ProductSpuPageBO
>
getProductSpuPage
(
ProductSpuPageDTO
productSpuPageDTO
);
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductSpuBO.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.List
;
public
class
ProductSpuBO
{
public
class
ProductSpuBO
{
/**
* SPU 编号
*/
private
Integer
id
;
private
Integer
id
;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private
String
name
;
/**
* 卖点
*/
private
String
sellPoint
;
/**
* 描述
*/
private
String
description
;
/**
* 分类编号
*/
private
Integer
cid
;
/**
* 商品主图地址
*
* 数组,以逗号分隔
*
* 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张
*/
private
List
<
String
>
picUrls
;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
*
* true 为已上架
* false 为已下架
*/
private
Boolean
visible
;
/**
* 排序字段
*/
private
Integer
sort
;
public
Integer
getId
()
{
public
Integer
getId
()
{
return
id
;
return
id
;
}
}
public
void
setId
(
Integer
id
)
{
public
ProductSpuBO
setId
(
Integer
id
)
{
this
.
id
=
id
;
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
ProductSpuBO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getSellPoint
()
{
return
sellPoint
;
}
public
ProductSpuBO
setSellPoint
(
String
sellPoint
)
{
this
.
sellPoint
=
sellPoint
;
return
this
;
}
public
String
getDescription
()
{
return
description
;
}
public
ProductSpuBO
setDescription
(
String
description
)
{
this
.
description
=
description
;
return
this
;
}
public
Integer
getCid
()
{
return
cid
;
}
public
ProductSpuBO
setCid
(
Integer
cid
)
{
this
.
cid
=
cid
;
return
this
;
}
public
List
<
String
>
getPicUrls
()
{
return
picUrls
;
}
public
ProductSpuBO
setPicUrls
(
List
<
String
>
picUrls
)
{
this
.
picUrls
=
picUrls
;
return
this
;
}
public
Boolean
getVisible
()
{
return
visible
;
}
public
ProductSpuBO
setVisible
(
Boolean
visible
)
{
this
.
visible
=
visible
;
return
this
;
}
public
Integer
getSort
()
{
return
sort
;
}
public
ProductSpuBO
setSort
(
Integer
sort
)
{
this
.
sort
=
sort
;
return
this
;
}
}
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/bo/ProductSpuPageBO.java
0 → 100644
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
api
.
bo
;
import
java.util.List
;
public
class
ProductSpuPageBO
{
/**
* Spu 数组
*/
private
List
<
ProductSpuBO
>
spus
;
/**
* 总量
*/
private
Integer
count
;
public
List
<
ProductSpuBO
>
getSpus
()
{
return
spus
;
}
public
ProductSpuPageBO
setSpus
(
List
<
ProductSpuBO
>
spus
)
{
this
.
spus
=
spus
;
return
this
;
}
public
Integer
getCount
()
{
return
count
;
}
public
ProductSpuPageBO
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/dto/ProductSkuAddDTO.java
→
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSkuAdd
OrUpdate
DTO.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
java.util.List
;
/**
/**
* 商品 Sku 添加 DTO
* 商品 Sku 添加 DTO
*/
*/
public
class
ProductSkuAddDTO
{
public
class
ProductSkuAdd
OrUpdate
DTO
{
/**
/**
* 规格值数组
* 规格值数组
*/
*/
@NotNull
(
message
=
"规格值数组不能为空"
)
private
List
<
Integer
>
attrs
;
private
List
<
Integer
>
attrs
;
/**
/**
* 价格,单位:分
* 价格,单位:分
*/
*/
@NotNull
(
message
=
"价格不能为空"
)
@Min
(
value
=
1L
,
message
=
"最小价格为 1"
)
private
Integer
price
;
private
Integer
price
;
/**
/**
* 库存数量
* 库存数量
*/
*/
@NotNull
(
message
=
"库存数量不能为空"
)
@Min
(
value
=
1L
,
message
=
"最小库存为 1"
)
private
Integer
quantity
;
private
Integer
quantity
;
public
List
<
Integer
>
getAttrs
()
{
public
List
<
Integer
>
getAttrs
()
{
return
attrs
;
return
attrs
;
}
}
public
ProductSkuAddDTO
setAttrs
(
List
<
Integer
>
attrs
)
{
public
ProductSkuAdd
OrUpdate
DTO
setAttrs
(
List
<
Integer
>
attrs
)
{
this
.
attrs
=
attrs
;
this
.
attrs
=
attrs
;
return
this
;
return
this
;
}
}
...
@@ -33,7 +40,7 @@ public class ProductSkuAddDTO {
...
@@ -33,7 +40,7 @@ public class ProductSkuAddDTO {
return
price
;
return
price
;
}
}
public
ProductSkuAddDTO
setPrice
(
Integer
price
)
{
public
ProductSkuAdd
OrUpdate
DTO
setPrice
(
Integer
price
)
{
this
.
price
=
price
;
this
.
price
=
price
;
return
this
;
return
this
;
}
}
...
@@ -42,7 +49,7 @@ public class ProductSkuAddDTO {
...
@@ -42,7 +49,7 @@ public class ProductSkuAddDTO {
return
quantity
;
return
quantity
;
}
}
public
ProductSkuAddDTO
setQuantity
(
Integer
quantity
)
{
public
ProductSkuAdd
OrUpdate
DTO
setQuantity
(
Integer
quantity
)
{
this
.
quantity
=
quantity
;
this
.
quantity
=
quantity
;
return
this
;
return
this
;
}
}
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSkuUpdateDTO.java
deleted
100644 → 0
浏览文件 @
d7be2bfb
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
java.util.List
;
/**
* 商品 Sku 更新 DTO
*/
public
class
ProductSkuUpdateDTO
{
/**
* 规格值数组
*/
private
List
<
Integer
>
attrs
;
/**
* 价格,单位:分
*/
private
Integer
price
;
/**
* 库存数量
*/
private
Integer
quantity
;
public
List
<
Integer
>
getAttrs
()
{
return
attrs
;
}
public
ProductSkuUpdateDTO
setAttrs
(
List
<
Integer
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
public
Integer
getPrice
()
{
return
price
;
}
public
ProductSkuUpdateDTO
setPrice
(
Integer
price
)
{
this
.
price
=
price
;
return
this
;
}
public
Integer
getQuantity
()
{
return
quantity
;
}
public
ProductSkuUpdateDTO
setQuantity
(
Integer
quantity
)
{
this
.
quantity
=
quantity
;
return
this
;
}
}
\ No newline at end of file
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSpuAddDTO.java
浏览文件 @
70bdb637
...
@@ -52,7 +52,7 @@ public class ProductSpuAddDTO {
...
@@ -52,7 +52,7 @@ public class ProductSpuAddDTO {
* SKU 数组
* SKU 数组
*/
*/
@NotNull
(
message
=
"SKU 不能为空"
)
@NotNull
(
message
=
"SKU 不能为空"
)
private
List
<
ProductSkuAddDTO
>
skus
;
private
List
<
ProductSkuAdd
OrUpdate
DTO
>
skus
;
public
String
getName
()
{
public
String
getName
()
{
return
name
;
return
name
;
...
@@ -108,11 +108,11 @@ public class ProductSpuAddDTO {
...
@@ -108,11 +108,11 @@ public class ProductSpuAddDTO {
return
this
;
return
this
;
}
}
public
List
<
ProductSkuAddDTO
>
getSkus
()
{
public
List
<
ProductSkuAdd
OrUpdate
DTO
>
getSkus
()
{
return
skus
;
return
skus
;
}
}
public
ProductSpuAddDTO
setSkus
(
List
<
ProductSkuAddDTO
>
skus
)
{
public
ProductSpuAddDTO
setSkus
(
List
<
ProductSkuAdd
OrUpdate
DTO
>
skus
)
{
this
.
skus
=
skus
;
this
.
skus
=
skus
;
return
this
;
return
this
;
}
}
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSpuPageDTO.java
0 → 100644
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
javax.validation.constraints.NotNull
;
public
class
ProductSpuPageDTO
{
private
String
name
;
@NotNull
(
message
=
"页码不能为空"
)
private
Integer
pageNo
;
@NotNull
(
message
=
"每页条数不能为空"
)
private
Integer
pageSize
;
public
String
getName
()
{
return
name
;
}
public
ProductSpuPageDTO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
Integer
getPageNo
()
{
return
pageNo
;
}
public
ProductSpuPageDTO
setPageNo
(
Integer
pageNo
)
{
this
.
pageNo
=
pageNo
;
return
this
;
}
public
Integer
getPageSize
()
{
return
pageSize
;
}
public
ProductSpuPageDTO
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/ProductSpuUpdateDTO.java
浏览文件 @
70bdb637
...
@@ -58,7 +58,7 @@ public class ProductSpuUpdateDTO {
...
@@ -58,7 +58,7 @@ public class ProductSpuUpdateDTO {
* SKU 数组
* SKU 数组
*/
*/
@NotNull
(
message
=
"SKU 不能为空"
)
@NotNull
(
message
=
"SKU 不能为空"
)
private
List
<
ProductSkuUpdateDTO
>
skus
;
private
List
<
ProductSku
AddOr
UpdateDTO
>
skus
;
public
String
getName
()
{
public
String
getName
()
{
return
name
;
return
name
;
...
@@ -114,11 +114,11 @@ public class ProductSpuUpdateDTO {
...
@@ -114,11 +114,11 @@ public class ProductSpuUpdateDTO {
return
this
;
return
this
;
}
}
public
List
<
ProductSkuUpdateDTO
>
getSkus
()
{
public
List
<
ProductSku
AddOr
UpdateDTO
>
getSkus
()
{
return
skus
;
return
skus
;
}
}
public
ProductSpuUpdateDTO
setSkus
(
List
<
ProductSkuUpdateDTO
>
skus
)
{
public
ProductSpuUpdateDTO
setSkus
(
List
<
ProductSku
AddOr
UpdateDTO
>
skus
)
{
this
.
skus
=
skus
;
this
.
skus
=
skus
;
return
this
;
return
this
;
}
}
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/convert/ProductSpuConvert.java
浏览文件 @
70bdb637
...
@@ -5,8 +5,7 @@ import cn.iocoder.mall.product.api.bo.ProductAttrDetailBO;
...
@@ -5,8 +5,7 @@ import cn.iocoder.mall.product.api.bo.ProductAttrDetailBO;
import
cn.iocoder.mall.product.api.bo.ProductSkuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSkuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddOrUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.dataobject.ProductSkuDO
;
import
cn.iocoder.mall.product.dataobject.ProductSkuDO
;
...
@@ -14,6 +13,7 @@ import cn.iocoder.mall.product.dataobject.ProductSpuDO;
...
@@ -14,6 +13,7 @@ import cn.iocoder.mall.product.dataobject.ProductSpuDO;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.Named
;
import
org.mapstruct.factory.Mappers
;
import
org.mapstruct.factory.Mappers
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -26,9 +26,14 @@ public interface ProductSpuConvert {
...
@@ -26,9 +26,14 @@ public interface ProductSpuConvert {
ProductSpuConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductSpuConvert
.
class
);
ProductSpuConvert
INSTANCE
=
Mappers
.
getMapper
(
ProductSpuConvert
.
class
);
@Mappings
({})
@Mappings
({
@Mapping
(
source
=
"picUrls"
,
target
=
"picUrls"
,
qualifiedByName
=
"translatePicUrlsFromString"
)
})
ProductSpuBO
convert
(
ProductSpuDO
spu
);
ProductSpuBO
convert
(
ProductSpuDO
spu
);
@Mappings
({})
List
<
ProductSpuBO
>
convert
(
List
<
ProductSpuDO
>
spus
);
@Mappings
({
@Mappings
({
@Mapping
(
source
=
"picUrls"
,
target
=
"picUrls"
,
ignore
=
true
)
@Mapping
(
source
=
"picUrls"
,
target
=
"picUrls"
,
ignore
=
true
)
})
})
...
@@ -37,7 +42,7 @@ public interface ProductSpuConvert {
...
@@ -37,7 +42,7 @@ public interface ProductSpuConvert {
@Mappings
({
@Mappings
({
@Mapping
(
source
=
"attrs"
,
target
=
"attrs"
,
ignore
=
true
)
@Mapping
(
source
=
"attrs"
,
target
=
"attrs"
,
ignore
=
true
)
})
})
ProductSkuDO
convert
(
ProductSkuAddDTO
productSkuAddDTO
);
ProductSkuDO
convert
(
ProductSkuAdd
OrUpdate
DTO
productSkuAddDTO
);
@Mappings
({
@Mappings
({
...
@@ -45,11 +50,6 @@ public interface ProductSpuConvert {
...
@@ -45,11 +50,6 @@ public interface ProductSpuConvert {
})
})
ProductSpuDO
convert
(
ProductSpuUpdateDTO
productSpuUpdateDTO
);
ProductSpuDO
convert
(
ProductSpuUpdateDTO
productSpuUpdateDTO
);
@Mappings
({
@Mapping
(
source
=
"attrs"
,
target
=
"attrs"
,
ignore
=
true
)
})
ProductSkuDO
convert
(
ProductSkuUpdateDTO
productSkuUpdateDTO
);
@Mappings
({})
@Mappings
({})
ProductSpuDetailBO
convert
(
ProductSpuBO
spu
);
ProductSpuDetailBO
convert
(
ProductSpuBO
spu
);
...
@@ -85,4 +85,9 @@ public interface ProductSpuConvert {
...
@@ -85,4 +85,9 @@ public interface ProductSpuConvert {
return
spuDetail
;
return
spuDetail
;
}
}
@Named
(
"translatePicUrlsFromString"
)
default
List
<
String
>
translatePicUrlsFromString
(
String
picUrls
)
{
return
StringUtil
.
split
(
picUrls
,
","
);
}
}
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dao/ProductSpuMapper.java
浏览文件 @
70bdb637
package
cn
.
iocoder
.
mall
.
product
.
dao
;
package
cn
.
iocoder
.
mall
.
product
.
dao
;
import
cn.iocoder.mall.product.dataobject.ProductSpuDO
;
import
cn.iocoder.mall.product.dataobject.ProductSpuDO
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
@Repository
public
interface
ProductSpuMapper
{
public
interface
ProductSpuMapper
{
...
@@ -12,4 +15,10 @@ public interface ProductSpuMapper {
...
@@ -12,4 +15,10 @@ public interface ProductSpuMapper {
void
update
(
ProductSpuDO
productSpuDO
);
void
update
(
ProductSpuDO
productSpuDO
);
List
<
ProductSpuDO
>
selectListByNameLikeOrderBySortAsc
(
@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/dataobject/ProductSpuDO.java
浏览文件 @
70bdb637
...
@@ -61,8 +61,9 @@ public class ProductSpuDO extends BaseDO {
...
@@ -61,8 +61,9 @@ public class ProductSpuDO extends BaseDO {
return
id
;
return
id
;
}
}
public
void
setId
(
Integer
id
)
{
public
ProductSpuDO
setId
(
Integer
id
)
{
this
.
id
=
id
;
this
.
id
=
id
;
return
this
;
}
}
public
String
getName
()
{
public
String
getName
()
{
...
@@ -127,7 +128,4 @@ public class ProductSpuDO extends BaseDO {
...
@@ -127,7 +128,4 @@ public class ProductSpuDO extends BaseDO {
this
.
sort
=
sort
;
this
.
sort
=
sort
;
return
this
;
return
this
;
}
}
}
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
70bdb637
...
@@ -7,13 +7,13 @@ import cn.iocoder.common.framework.util.StringUtil;
...
@@ -7,13 +7,13 @@ import cn.iocoder.common.framework.util.StringUtil;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductAttrDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductAttrDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuPageBO
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.api.constant.ProductSpuConstants
;
import
cn.iocoder.mall.product.api.constant.ProductSpuConstants
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddOrUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuPageDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.convert.ProductSpuConvert
;
import
cn.iocoder.mall.product.convert.ProductSpuConvert
;
import
cn.iocoder.mall.product.dao.ProductSkuMapper
;
import
cn.iocoder.mall.product.dao.ProductSkuMapper
;
...
@@ -42,11 +42,31 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -42,11 +42,31 @@ public class ProductSpuServiceImpl implements ProductSpuService {
@Autowired
@Autowired
private
ProductAttrServiceImpl
productAttrService
;
private
ProductAttrServiceImpl
productAttrService
;
// @Override
// public ProductSpuBO getProductSpu(Integer id) {
// ProductSpuDO productSpuDO = productSpuMapper.selectById(id);
// // 转换成 BO
// return ProductSpuConvert.INSTANCE.convert(productSpuDO);
// }
@Override
@Override
public
ProductSpuBO
getProductSpu
(
Integer
id
)
{
public
CommonResult
<
ProductSpuDetailBO
>
getProductSpu
(
Integer
id
)
{
ProductSpuDO
productSpuDO
=
productSpuMapper
.
selectById
(
id
);
// 校验商品 spu 存在
// 转换成 BO
ProductSpuDO
spu
=
productSpuMapper
.
selectById
(
id
);
return
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuDO
);
if
(
spu
==
null
)
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_NOT_EXISTS
.
getCode
());
}
// 获得商品 sku 数组
List
<
ProductSkuDO
>
skus
=
productSkuMapper
.
selectListBySpuIdAndStatus
(
id
,
ProductSpuConstants
.
SKU_STATUS_ENABLE
);
// 获得规格
Set
<
Integer
>
productAttrValueIds
=
new
HashSet
<>();
skus
.
forEach
(
sku
->
productAttrValueIds
.
addAll
(
StringUtil
.
splitToInt
(
sku
.
getAttrs
(),
","
)));
CommonResult
<
List
<
ProductAttrDetailBO
>>
validAttrResult
=
productAttrService
.
validProductAttrAndValue
(
productAttrValueIds
);
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
}
// 返回成功
return
CommonResult
.
success
(
ProductSpuConvert
.
INSTANCE
.
convert2
(
spu
,
skus
,
validAttrResult
.
getData
()));
}
}
@SuppressWarnings
(
"Duplicates"
)
@SuppressWarnings
(
"Duplicates"
)
...
@@ -110,6 +130,11 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -110,6 +130,11 @@ public class ProductSpuServiceImpl implements ProductSpuService {
if
(
validAttrResult
.
isError
())
{
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
return
CommonResult
.
error
(
validAttrResult
);
}
}
// 校验 Sku 规格
CommonResult
<
Boolean
>
validProductSkuResult
=
validProductSku
(
productSpuUpdateDTO
.
getSkus
(),
validAttrResult
.
getData
());
if
(
validProductSkuResult
.
isError
())
{
return
CommonResult
.
error
(
validProductSkuResult
);
}
// 更新 Spu
// 更新 Spu
ProductSpuDO
updateSpu
=
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuUpdateDTO
)
ProductSpuDO
updateSpu
=
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuUpdateDTO
)
.
setPicUrls
(
StringUtil
.
join
(
productSpuUpdateDTO
.
getPicUrls
(),
","
));
.
setPicUrls
(
StringUtil
.
join
(
productSpuUpdateDTO
.
getPicUrls
(),
","
));
...
@@ -119,7 +144,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -119,7 +144,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
List
<
ProductSkuDO
>
insertSkus
=
new
ArrayList
<>(
0
);
// 1、找不到,进行插入
List
<
ProductSkuDO
>
insertSkus
=
new
ArrayList
<>(
0
);
// 1、找不到,进行插入
List
<
Integer
>
deleteSkus
=
new
ArrayList
<>(
0
);
// 2、多余的,删除
List
<
Integer
>
deleteSkus
=
new
ArrayList
<>(
0
);
// 2、多余的,删除
List
<
ProductSkuDO
>
updateSkus
=
new
ArrayList
<>(
0
);
// 3、找的到,进行更新。
List
<
ProductSkuDO
>
updateSkus
=
new
ArrayList
<>(
0
);
// 3、找的到,进行更新。
for
(
ProductSkuUpdateDTO
skuUpdateDTO
:
productSpuUpdateDTO
.
getSkus
())
{
for
(
ProductSku
AddOr
UpdateDTO
skuUpdateDTO
:
productSpuUpdateDTO
.
getSkus
())
{
ProductSkuDO
existsSku
=
findProductSku
(
skuUpdateDTO
.
getAttrs
(),
existsSkus
);
ProductSkuDO
existsSku
=
findProductSku
(
skuUpdateDTO
.
getAttrs
(),
existsSkus
);
// 3、找的到,进行更新。
// 3、找的到,进行更新。
if
(
existsSku
!=
null
)
{
if
(
existsSku
!=
null
)
{
...
@@ -149,19 +174,41 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -149,19 +174,41 @@ public class ProductSpuServiceImpl implements ProductSpuService {
if
(!
deleteSkus
.
isEmpty
())
{
if
(!
deleteSkus
.
isEmpty
())
{
productSkuMapper
.
updateToDeleted
(
deleteSkus
);
productSkuMapper
.
updateToDeleted
(
deleteSkus
);
}
}
// if (true) {
// throw new RuntimeException("test");
// }
// 校验 Sku 规格
return
CommonResult
.
success
(
true
);
return
CommonResult
.
success
(
true
);
}
}
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddDTO
>
productSkuAddDTOs
,
List
<
ProductAttrDetailBO
>
productAttrDetailBOs
)
{
@Override
public
CommonResult
<
Boolean
>
updateProductSpuSort
(
Integer
adminId
,
Integer
spuId
,
Integer
sort
)
{
// 校验 Spu 是否存在
if
(
productSpuMapper
.
selectById
(
spuId
)
==
null
)
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_NOT_EXISTS
.
getCode
());
}
// 更新排序
ProductSpuDO
updateSpu
=
new
ProductSpuDO
().
setId
(
spuId
).
setSort
(
sort
);
productSpuMapper
.
update
(
updateSpu
);
// 返回成功
return
CommonResult
.
success
(
true
);
}
@Override
public
CommonResult
<
ProductSpuPageBO
>
getProductSpuPage
(
ProductSpuPageDTO
productSpuPageDTO
)
{
ProductSpuPageBO
productSpuPage
=
new
ProductSpuPageBO
();
// 查询分页数据
int
offset
=
productSpuPageDTO
.
getPageNo
()
*
productSpuPageDTO
.
getPageSize
();
productSpuPage
.
setSpus
(
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuMapper
.
selectListByNameLikeOrderBySortAsc
(
productSpuPageDTO
.
getName
(),
offset
,
productSpuPageDTO
.
getPageSize
())));
// 查询分页总数
productSpuPage
.
setCount
(
productSpuMapper
.
selectCountByNameLike
(
productSpuPageDTO
.
getName
()));
// 返回结果
return
CommonResult
.
success
(
productSpuPage
);
}
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddOrUpdateDTO
>
productSkuAddDTOs
,
List
<
ProductAttrDetailBO
>
productAttrDetailBOs
)
{
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
Map
<
Integer
,
ProductAttrDetailBO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Map
<
Integer
,
ProductAttrDetailBO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttrDetailBO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
Collectors
.
toMap
(
ProductAttrDetailBO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
// 1. 先校验,一个 Sku 下,没有重复的规格。校验方式是,遍历每个 Sku ,看看是否有重复的规格 attrId
// 1. 先校验,一个 Sku 下,没有重复的规格。校验方式是,遍历每个 Sku ,看看是否有重复的规格 attrId
for
(
ProductSkuAddDTO
sku
:
productSkuAddDTOs
)
{
for
(
ProductSkuAdd
OrUpdate
DTO
sku
:
productSkuAddDTOs
)
{
Set
<
Integer
>
attrIds
=
sku
.
getAttrs
().
stream
().
map
(
attrValueId
->
productAttrDetailBOMap
.
get
(
attrValueId
).
getAttrId
()).
collect
(
Collectors
.
toSet
());
Set
<
Integer
>
attrIds
=
sku
.
getAttrs
().
stream
().
map
(
attrValueId
->
productAttrDetailBOMap
.
get
(
attrValueId
).
getAttrId
()).
collect
(
Collectors
.
toSet
());
if
(
attrIds
.
size
()
!=
sku
.
getAttrs
().
size
())
{
if
(
attrIds
.
size
()
!=
sku
.
getAttrs
().
size
())
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE
.
getCode
());
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE
.
getCode
());
...
@@ -176,7 +223,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
...
@@ -176,7 +223,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
}
}
// 3. 最后校验,每个 Sku 之间不是重复的
// 3. 最后校验,每个 Sku 之间不是重复的
Set
<
Set
<
Integer
>>
skuAttrValues
=
new
HashSet
<>();
// 每个元素,都是一个 Sku 的 attrValueId 集合。这样,通过最外层的 Set ,判断是否有重复的.
Set
<
Set
<
Integer
>>
skuAttrValues
=
new
HashSet
<>();
// 每个元素,都是一个 Sku 的 attrValueId 集合。这样,通过最外层的 Set ,判断是否有重复的.
for
(
ProductSkuAddDTO
sku
:
productSkuAddDTOs
)
{
for
(
ProductSkuAdd
OrUpdate
DTO
sku
:
productSkuAddDTOs
)
{
if
(!
skuAttrValues
.
add
(
new
HashSet
<>(
sku
.
getAttrs
())))
{
// 添加失败,说明重复
if
(!
skuAttrValues
.
add
(
new
HashSet
<>(
sku
.
getAttrs
())))
{
// 添加失败,说明重复
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_SKU__NOT_DUPLICATE
.
getCode
());
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_SKU__NOT_DUPLICATE
.
getCode
());
}
}
...
...
product/product-service-impl/src/main/resources/mapper/ProductSpuMapper.xml
浏览文件 @
70bdb637
...
@@ -2,11 +2,17 @@
...
@@ -2,11 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"cn.iocoder.mall.product.dao.ProductSpuMapper"
>
<mapper
namespace=
"cn.iocoder.mall.product.dao.ProductSpuMapper"
>
<sql
id=
"FIELDS"
>
id, name, sell_point, description, cid,
pic_urls, visible, sort, create_time
</sql>
<select
id=
"selectById"
parameterType=
"Integer"
resultType=
"ProductSpuDO"
>
<select
id=
"selectById"
parameterType=
"Integer"
resultType=
"ProductSpuDO"
>
SELECT
SELECT
id
<include
refid=
"FIELDS"
/>
FROM product_spu
FROM product_spu
WHERE id = #{id}
WHERE id = #{id}
AND deleted = 0
</select>
</select>
<insert
id=
"insert"
parameterType=
"ProductSpuDO"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
<insert
id=
"insert"
parameterType=
"ProductSpuDO"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
...
@@ -50,4 +56,30 @@
...
@@ -50,4 +56,30 @@
WHERE id = #{id}
WHERE id = #{id}
</update>
</update>
<select
id=
"selectListByNameLikeOrderBySortAsc"
resultType=
"ProductSpuDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_spu
<where>
<if
test=
"name != null"
>
name LIKE "%"#{name}"%"
</if>
AND deleted = 0
</where>
ORDER BY sort ASC
LIMIT #{offset}, #{limit}
</select>
<select
id=
"selectCountByNameLike"
resultType=
"Integer"
>
SELECT
COUNT(1)
FROM product_spu
<where>
<if
test=
"name != null"
>
name LIKE "%"#{name}"%"
</if>
AND deleted = 0
</where>
</select>
</mapper>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论