Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
83fdf181
提交
83fdf181
authored
3月 05, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
商品更新接口
上级
be03d101
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
53 行增加
和
91 行删除
+53
-91
AdminsProductSpuController.java
...ication/controller/admins/AdminsProductSpuController.java
+6
-5
ProductSpuService.java
...n/java/cn/iocoder/mall/product/api/ProductSpuService.java
+3
-2
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
ProductSpuUpdateDTO.java
.../cn/iocoder/mall/product/api/dto/ProductSpuUpdateDTO.java
+3
-3
ProductSpuConvert.java
...va/cn/iocoder/mall/product/convert/ProductSpuConvert.java
+2
-8
ProductSpuDO.java
...java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
+2
-5
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+23
-10
没有找到文件。
product/product-application/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java
浏览文件 @
83fdf181
...
...
@@ -4,8 +4,7 @@ import cn.iocoder.common.framework.vo.CommonResult;
import
cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddOrUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.application.convert.ProductSpuConvert
;
...
...
@@ -57,7 +56,7 @@ public class AdminsProductSpuController {
// 创建 ProductSpuAddDTO 对象
ProductSpuAddDTO
productSpuAddDTO
=
new
ProductSpuAddDTO
().
setName
(
name
).
setSellPoint
(
sellPoint
)
.
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
);
// 返回结果
...
...
@@ -88,7 +87,7 @@ public class AdminsProductSpuController {
// 创建 ProductSpuUpdateDTO 对象
ProductSpuUpdateDTO
productSpuUpdateDTO
=
new
ProductSpuUpdateDTO
().
setId
(
id
).
setName
(
name
).
setSellPoint
(
sellPoint
)
.
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
);
}
...
...
@@ -97,9 +96,11 @@ public class AdminsProductSpuController {
@ApiOperation
(
"更新商品的排序"
)
public
CommonResult
<
Boolean
>
updateSort
(
@RequestParam
(
"id"
)
Integer
id
,
@RequestParam
(
"sort"
)
Integer
sort
)
{
return
null
;
return
productSpuService
.
updateProductSpuSort
(
AdminSecurityContextHolder
.
getContext
().
getAdminId
(),
id
,
sort
)
;
}
// TODO 芋艿,删除功能暂时不做。主要原因是,关联的数据太多。删除带来的问题会比较大
@GetMapping
(
"/spu/page"
)
@ApiOperation
(
"商品 SPU 分页列表"
)
public
CommonResult
<
AdminsProductSpuPageVO
>
spuPage
()
{
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/ProductSpuService.java
浏览文件 @
83fdf181
...
...
@@ -14,6 +14,6 @@ public interface ProductSpuService {
CommonResult
<
Boolean
>
updateProductSpu
(
Integer
adminId
,
ProductSpuUpdateDTO
productSpuUpdateDTO
);
CommonResult
<
Boolean
>
updateProductSpuSort
(
Integer
adminId
,
Integer
spuId
,
Integer
sort
);
}
}
\ 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
浏览文件 @
83fdf181
package
cn
.
iocoder
.
mall
.
product
.
api
.
dto
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
/**
* 商品 Sku 添加 DTO
*/
public
class
ProductSkuAddDTO
{
public
class
ProductSkuAdd
OrUpdate
DTO
{
/**
* 规格值数组
*/
@NotNull
(
message
=
"规格值数组不能为空"
)
private
List
<
Integer
>
attrs
;
/**
* 价格,单位:分
*/
@NotNull
(
message
=
"价格不能为空"
)
@Min
(
value
=
1L
,
message
=
"最小价格为 1"
)
private
Integer
price
;
/**
* 库存数量
*/
@NotNull
(
message
=
"库存数量不能为空"
)
@Min
(
value
=
1L
,
message
=
"最小库存为 1"
)
private
Integer
quantity
;
public
List
<
Integer
>
getAttrs
()
{
return
attrs
;
}
public
ProductSkuAddDTO
setAttrs
(
List
<
Integer
>
attrs
)
{
public
ProductSkuAdd
OrUpdate
DTO
setAttrs
(
List
<
Integer
>
attrs
)
{
this
.
attrs
=
attrs
;
return
this
;
}
...
...
@@ -33,7 +40,7 @@ public class ProductSkuAddDTO {
return
price
;
}
public
ProductSkuAddDTO
setPrice
(
Integer
price
)
{
public
ProductSkuAdd
OrUpdate
DTO
setPrice
(
Integer
price
)
{
this
.
price
=
price
;
return
this
;
}
...
...
@@ -42,7 +49,7 @@ public class ProductSkuAddDTO {
return
quantity
;
}
public
ProductSkuAddDTO
setQuantity
(
Integer
quantity
)
{
public
ProductSkuAdd
OrUpdate
DTO
setQuantity
(
Integer
quantity
)
{
this
.
quantity
=
quantity
;
return
this
;
}
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSkuUpdateDTO.java
deleted
100644 → 0
浏览文件 @
be03d101
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
浏览文件 @
83fdf181
...
...
@@ -52,7 +52,7 @@ public class ProductSpuAddDTO {
* SKU 数组
*/
@NotNull
(
message
=
"SKU 不能为空"
)
private
List
<
ProductSkuAddDTO
>
skus
;
private
List
<
ProductSkuAdd
OrUpdate
DTO
>
skus
;
public
String
getName
()
{
return
name
;
...
...
@@ -108,11 +108,11 @@ public class ProductSpuAddDTO {
return
this
;
}
public
List
<
ProductSkuAddDTO
>
getSkus
()
{
public
List
<
ProductSkuAdd
OrUpdate
DTO
>
getSkus
()
{
return
skus
;
}
public
ProductSpuAddDTO
setSkus
(
List
<
ProductSkuAddDTO
>
skus
)
{
public
ProductSpuAddDTO
setSkus
(
List
<
ProductSkuAdd
OrUpdate
DTO
>
skus
)
{
this
.
skus
=
skus
;
return
this
;
}
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSpuUpdateDTO.java
浏览文件 @
83fdf181
...
...
@@ -58,7 +58,7 @@ public class ProductSpuUpdateDTO {
* SKU 数组
*/
@NotNull
(
message
=
"SKU 不能为空"
)
private
List
<
ProductSkuUpdateDTO
>
skus
;
private
List
<
ProductSku
AddOr
UpdateDTO
>
skus
;
public
String
getName
()
{
return
name
;
...
...
@@ -114,11 +114,11 @@ public class ProductSpuUpdateDTO {
return
this
;
}
public
List
<
ProductSkuUpdateDTO
>
getSkus
()
{
public
List
<
ProductSku
AddOr
UpdateDTO
>
getSkus
()
{
return
skus
;
}
public
ProductSpuUpdateDTO
setSkus
(
List
<
ProductSkuUpdateDTO
>
skus
)
{
public
ProductSpuUpdateDTO
setSkus
(
List
<
ProductSku
AddOr
UpdateDTO
>
skus
)
{
this
.
skus
=
skus
;
return
this
;
}
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/convert/ProductSpuConvert.java
浏览文件 @
83fdf181
...
...
@@ -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.ProductSpuBO
;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddOrUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.dataobject.ProductSkuDO
;
...
...
@@ -37,7 +36,7 @@ public interface ProductSpuConvert {
@Mappings
({
@Mapping
(
source
=
"attrs"
,
target
=
"attrs"
,
ignore
=
true
)
})
ProductSkuDO
convert
(
ProductSkuAddDTO
productSkuAddDTO
);
ProductSkuDO
convert
(
ProductSkuAdd
OrUpdate
DTO
productSkuAddDTO
);
@Mappings
({
...
...
@@ -45,11 +44,6 @@ public interface ProductSpuConvert {
})
ProductSpuDO
convert
(
ProductSpuUpdateDTO
productSpuUpdateDTO
);
@Mappings
({
@Mapping
(
source
=
"attrs"
,
target
=
"attrs"
,
ignore
=
true
)
})
ProductSkuDO
convert
(
ProductSkuUpdateDTO
productSkuUpdateDTO
);
@Mappings
({})
ProductSpuDetailBO
convert
(
ProductSpuBO
spu
);
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java
浏览文件 @
83fdf181
...
...
@@ -61,8 +61,9 @@ public class ProductSpuDO extends BaseDO {
return
id
;
}
public
void
setId
(
Integer
id
)
{
public
ProductSpuDO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
String
getName
()
{
...
...
@@ -127,7 +128,4 @@ public class ProductSpuDO extends BaseDO {
this
.
sort
=
sort
;
return
this
;
}
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
83fdf181
...
...
@@ -11,8 +11,7 @@ import cn.iocoder.mall.product.api.bo.ProductSpuBO;
import
cn.iocoder.mall.product.api.bo.ProductSpuDetailBO
;
import
cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum
;
import
cn.iocoder.mall.product.api.constant.ProductSpuConstants
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSkuAddOrUpdateDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.convert.ProductSpuConvert
;
...
...
@@ -110,6 +109,11 @@ public class ProductSpuServiceImpl implements ProductSpuService {
if
(
validAttrResult
.
isError
())
{
return
CommonResult
.
error
(
validAttrResult
);
}
// 校验 Sku 规格
CommonResult
<
Boolean
>
validProductSkuResult
=
validProductSku
(
productSpuUpdateDTO
.
getSkus
(),
validAttrResult
.
getData
());
if
(
validProductSkuResult
.
isError
())
{
return
CommonResult
.
error
(
validProductSkuResult
);
}
// 更新 Spu
ProductSpuDO
updateSpu
=
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuUpdateDTO
)
.
setPicUrls
(
StringUtil
.
join
(
productSpuUpdateDTO
.
getPicUrls
(),
","
));
...
...
@@ -119,7 +123,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
List
<
ProductSkuDO
>
insertSkus
=
new
ArrayList
<>(
0
);
// 1、找不到,进行插入
List
<
Integer
>
deleteSkus
=
new
ArrayList
<>(
0
);
// 2、多余的,删除
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
);
// 3、找的到,进行更新。
if
(
existsSku
!=
null
)
{
...
...
@@ -149,19 +153,28 @@ public class ProductSpuServiceImpl implements ProductSpuService {
if
(!
deleteSkus
.
isEmpty
())
{
productSkuMapper
.
updateToDeleted
(
deleteSkus
);
}
// if (true) {
// throw new RuntimeException("test");
// }
// 校验 Sku 规格
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
);
}
private
CommonResult
<
Boolean
>
validProductSku
(
List
<
ProductSkuAddOrUpdateDTO
>
productSkuAddDTOs
,
List
<
ProductAttrDetailBO
>
productAttrDetailBOs
)
{
// 创建 ProductAttrDetailBO 的映射。其中,KEY 为 ProductAttrDetailBO.attrValueId ,即规格值的编号
Map
<
Integer
,
ProductAttrDetailBO
>
productAttrDetailBOMap
=
productAttrDetailBOs
.
stream
().
collect
(
Collectors
.
toMap
(
ProductAttrDetailBO:
:
getAttrValueId
,
productAttrDetailBO
->
productAttrDetailBO
));
// 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
());
if
(
attrIds
.
size
()
!=
sku
.
getAttrs
().
size
())
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE
.
getCode
());
...
...
@@ -176,7 +189,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
}
// 3. 最后校验,每个 Sku 之间不是重复的
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
())))
{
// 添加失败,说明重复
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_SKU__NOT_DUPLICATE
.
getCode
());
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论