Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
ce044f1b
提交
ce044f1b
authored
3月 05, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
商品更新接口
上级
1c134a20
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
158 行增加
和
6 行删除
+158
-6
ProductSpuService.java
...n/java/cn/iocoder/mall/product/api/ProductSpuService.java
+2
-0
ProductErrorCodeEnum.java
...coder/mall/product/api/constant/ProductErrorCodeEnum.java
+1
-1
ProductSpuUpdateDTO.java
.../cn/iocoder/mall/product/api/dto/ProductSpuUpdateDTO.java
+1
-1
ProductSkuMapper.java
...in/java/cn/iocoder/mall/product/dao/ProductSkuMapper.java
+8
-0
ProductSkuDO.java
...java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
+1
-1
ProductSpuServiceImpl.java
...n/iocoder/mall/product/service/ProductSpuServiceImpl.java
+61
-0
ProductSkuMapper.xml
...rvice-impl/src/main/resources/mapper/ProductSkuMapper.xml
+54
-1
ProductSpuMapper.xml
...rvice-impl/src/main/resources/mapper/ProductSpuMapper.xml
+30
-2
没有找到文件。
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/ProductSpuService.java
浏览文件 @
ce044f1b
...
...
@@ -14,4 +14,6 @@ public interface ProductSpuService {
CommonResult
<
Boolean
>
updateProductSpu
(
Integer
adminId
,
ProductSpuUpdateDTO
productSpuUpdateDTO
);
}
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/constant/ProductErrorCodeEnum.java
浏览文件 @
ce044f1b
...
...
@@ -19,7 +19,7 @@ public enum ProductErrorCodeEnum {
PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE
(
1003002000
,
"一个 Sku 下,不能有重复的规格"
),
PRODUCT_SPU_ATTR_NUMBERS_MUST_BE_EQUALS
(
1003002001
,
"一个 Spu 下的每个 Sku ,其规格数必须一致"
),
PRODUCT_SPU_SKU__NOT_DUPLICATE
(
1003002002
,
"一个 Spu 下的每个 Sku ,必须不重复"
),
PRODUCT_SPU_NOT_EXISTS
(
1003002003
,
"Spu 不存在"
),
// ========== PRODUCT ATTR + ATTR_VALUE 模块 ==========
PRODUCT_ATTR_VALUE_NOT_EXIST
(
1003003000
,
"商品属性值不存在"
),
...
...
product/product-service-api/src/main/java/cn/iocoder/mall/product/api/dto/ProductSpuUpdateDTO.java
浏览文件 @
ce044f1b
...
...
@@ -34,7 +34,7 @@ public class ProductSpuUpdateDTO {
/**
* 分类编号
*/
@Not
Empty
(
message
=
"分类不能为空"
)
@Not
Null
(
message
=
"分类不能为空"
)
private
Integer
cid
;
/**
* 商品主图地址
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dao/ProductSkuMapper.java
浏览文件 @
ce044f1b
...
...
@@ -11,6 +11,13 @@ public interface ProductSkuMapper {
ProductSkuDO
selectById
(
Integer
id
);
List
<
ProductSkuDO
>
selectListBySpuIdAndStatus
(
@Param
(
"spuId"
)
Integer
spuId
,
@Param
(
"status"
)
Integer
status
);
void
insertList
(
@Param
(
"productSkuDOs"
)
List
<
ProductSkuDO
>
productSkuDOs
);
int
update
(
ProductSkuDO
productSkuDO
);
int
updateToDeleted
(
@Param
(
"ids"
)
List
<
Integer
>
ids
);
}
\ No newline at end of file
product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java
浏览文件 @
ce044f1b
...
...
@@ -43,7 +43,7 @@ public class ProductSkuDO extends BaseDO {
* 库存数量
*/
private
Integer
quantity
;
// /**
// /**
// * 商品在付款减库存的状态下,该Sku上未付款的订单数量
// */
// private Integer withHoldQuantity;
...
...
product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java
浏览文件 @
ce044f1b
package
cn
.
iocoder
.
mall
.
product
.
service
;
import
cn.iocoder.common.framework.dataobject.BaseDO
;
import
cn.iocoder.common.framework.util.CollectionUtil
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.util.StringUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
...
...
@@ -11,6 +12,7 @@ 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.ProductSpuAddDTO
;
import
cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO
;
import
cn.iocoder.mall.product.convert.ProductSpuConvert
;
...
...
@@ -90,7 +92,12 @@ public class ProductSpuServiceImpl implements ProductSpuService {
@SuppressWarnings
(
"Duplicates"
)
@Override
@Transactional
public
CommonResult
<
Boolean
>
updateProductSpu
(
Integer
adminId
,
ProductSpuUpdateDTO
productSpuUpdateDTO
)
{
// 校验 Spu 是否存在
if
(
productSpuMapper
.
selectById
(
productSpuUpdateDTO
.
getId
())
==
null
)
{
return
ServiceExceptionUtil
.
error
(
ProductErrorCodeEnum
.
PRODUCT_SPU_NOT_EXISTS
.
getCode
());
}
// 校验商品分类分类存在
CommonResult
<
ProductCategoryDO
>
validCategoryResult
=
productCategoryService
.
validProductCategory
(
productSpuUpdateDTO
.
getCid
());
if
(
validCategoryResult
.
isError
())
{
...
...
@@ -107,6 +114,44 @@ public class ProductSpuServiceImpl implements ProductSpuService {
ProductSpuDO
updateSpu
=
ProductSpuConvert
.
INSTANCE
.
convert
(
productSpuUpdateDTO
)
.
setPicUrls
(
StringUtil
.
join
(
productSpuUpdateDTO
.
getPicUrls
(),
","
));
productSpuMapper
.
update
(
updateSpu
);
// 修改 Sku
List
<
ProductSkuDO
>
existsSkus
=
productSkuMapper
.
selectListBySpuIdAndStatus
(
productSpuUpdateDTO
.
getId
(),
ProductSpuConstants
.
SKU_STATUS_ENABLE
);
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
())
{
ProductSkuDO
existsSku
=
findProductSku
(
skuUpdateDTO
.
getAttrs
(),
existsSkus
);
// 3、找的到,进行更新。
if
(
existsSku
!=
null
)
{
// 移除
existsSkus
.
remove
(
existsSku
);
// 创建 ProductSkuDO
updateSkus
.
add
(
ProductSpuConvert
.
INSTANCE
.
convert
(
skuUpdateDTO
).
setId
(
existsSku
.
getId
()));
continue
;
}
// 1、找不到,进行插入
ProductSkuDO
insertSku
=
ProductSpuConvert
.
INSTANCE
.
convert
(
skuUpdateDTO
)
.
setSpuId
(
productSpuUpdateDTO
.
getId
()).
setStatus
(
ProductSpuConstants
.
SKU_STATUS_ENABLE
).
setAttrs
(
StringUtil
.
join
(
skuUpdateDTO
.
getAttrs
(),
","
));
insertSku
.
setCreateTime
(
new
Date
()).
setDeleted
(
BaseDO
.
DELETED_NO
);
insertSkus
.
add
(
insertSku
);
}
// 2、多余的,删除
if
(!
existsSkus
.
isEmpty
())
{
deleteSkus
.
addAll
(
existsSkus
.
stream
().
map
(
ProductSkuDO:
:
getId
).
collect
(
Collectors
.
toList
()));
}
// 执行修改 Sku
if
(!
insertSkus
.
isEmpty
())
{
productSkuMapper
.
insertList
(
insertSkus
);
}
if
(!
updateSkus
.
isEmpty
())
{
updateSkus
.
forEach
(
productSkuDO
->
productSkuMapper
.
update
(
productSkuDO
));
}
if
(!
deleteSkus
.
isEmpty
())
{
productSkuMapper
.
updateToDeleted
(
deleteSkus
);
}
// if (true) {
// throw new RuntimeException("test");
// }
// 校验 Sku 规格
return
CommonResult
.
success
(
true
);
}
...
...
@@ -140,4 +185,19 @@ public class ProductSpuServiceImpl implements ProductSpuService {
return
CommonResult
.
success
(
true
);
}
private
ProductSkuDO
findProductSku
(
Collection
<
Integer
>
attrs
,
List
<
ProductSkuDO
>
skus
)
{
if
(
CollectionUtil
.
isEmpty
(
skus
))
{
return
null
;
}
// 创建成 Set ,方便后面比较
attrs
=
new
HashSet
<>(
attrs
);
for
(
ProductSkuDO
sku
:
skus
)
{
Set
<
Integer
>
skuAttrs
=
StringUtil
.
split
(
sku
.
getAttrs
(),
","
).
stream
().
map
(
Integer:
:
parseInt
).
collect
(
Collectors
.
toSet
());
if
(
attrs
.
equals
(
skuAttrs
))
{
return
sku
;
}
}
return
null
;
}
}
\ No newline at end of file
product/product-service-impl/src/main/resources/mapper/ProductSkuMapper.xml
浏览文件 @
ce044f1b
...
...
@@ -2,11 +2,17 @@
<!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.ProductSkuMapper"
>
<sql
id=
"FIELDS"
>
id, spu_id, status, pic_url, attrs,
price, quantity, create_time
</sql>
<select
id=
"selectById"
parameterType=
"Integer"
resultType=
"ProductSkuDO"
>
SELECT
id
<include
refid=
"FIELDS"
/>
FROM product_sku
WHERE id = #{id}
AND delete = 0
</select>
<insert
id=
"insertList"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
...
...
@@ -21,4 +27,50 @@
</foreach>
</insert>
<select
id=
"selectListBySpuIdAndStatus"
resultType=
"ProductSkuDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM product_sku
WHERE spu_id = #{spuId}
AND status = #{status}
AND deleted = 0
</select>
<update
id=
"update"
parameterType=
"ProductSpuDO"
>
UPDATE product_sku
<set>
<if
test=
"spuId != null"
>
spu_id = #{spuId},
</if>
<if
test=
"status != null"
>
status = #{status},
</if>
<if
test=
"picUrl != null"
>
pic_url = #{picUrl},
</if>
<if
test=
"attrs != null"
>
attrs = #{attrs},
</if>
<if
test=
"price != null"
>
price = #{price},
</if>
<if
test=
"quantity != null"
>
quantity = #{quantity},
</if>
<if
test=
"deleted != null"
>
deleted = #{deleted}
</if>
</set>
WHERE id = #{id}
</update>
<update
id=
"updateToDeleted"
parameterType=
"Integer"
>
UPDATE product_sku
SET deleted = 1
WHERE id IN
<foreach
item=
"id"
collection=
"ids"
separator=
","
open=
"("
close=
")"
index=
""
>
#{id}
</foreach>
</update>
</mapper>
\ No newline at end of file
product/product-service-impl/src/main/resources/mapper/ProductSpuMapper.xml
浏览文件 @
ce044f1b
...
...
@@ -19,8 +19,35 @@
)
</insert>
<update
id=
"update"
>
<update
id=
"update"
parameterType=
"ProductSpuDO"
>
UPDATE product_spu
<set>
<if
test=
"name != null"
>
name = #{name},
</if>
<if
test=
"sellPoint != null"
>
sell_point = #{sellPoint},
</if>
<if
test=
"description != null"
>
description = #{description},
</if>
<if
test=
"cid != null"
>
cid = #{cid},
</if>
<if
test=
"picUrls != null"
>
pic_urls = #{picUrls},
</if>
<if
test=
"visible != null"
>
visible = #{visible},
</if>
<if
test=
"sort != null"
>
sort = #{sort},
</if>
<if
test=
"deleted != null"
>
deleted = #{deleted}
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论