Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
有来技术
youlai-mall
提交
2ed02b87
Y
youlai-mall
项目概览
有来技术
/
youlai-mall
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
youlai-mall
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2ed02b87
编写于
10月 20, 2021
作者:
有
有来技术
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
style(PmsSkuServiceImpl.class): 代码优化
上级
c85598ab
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
18 addition
and
24 deletion
+18
-24
mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java
...va/com/youlai/mall/oms/controller/app/CartController.java
+0
-2
mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSkuServiceImpl.java
...a/com/youlai/mall/pms/service/impl/PmsSkuServiceImpl.java
+18
-22
未找到文件。
mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java
浏览文件 @
2ed02b87
...
@@ -86,6 +86,4 @@ public class CartController {
...
@@ -86,6 +86,4 @@ public class CartController {
boolean
result
=
cartService
.
checkAll
(
checked
);
boolean
result
=
cartService
.
checkAll
(
checked
);
return
Result
.
judge
(
result
);
return
Result
.
judge
(
result
);
}
}
}
}
mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSkuServiceImpl.java
浏览文件 @
2ed02b87
...
@@ -9,36 +9,32 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
...
@@ -9,36 +9,32 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.youlai.common.result.Result
;
import
com.youlai.common.result.Result
;
import
com.youlai.common.web.exception.BizException
;
import
com.youlai.common.web.exception.BizException
;
import
com.youlai.mall.pms.common.constant.PmsConstants
;
import
com.youlai.mall.pms.mapper.PmsSkuMapper
;
import
com.youlai.mall.pms.mapper.PmsSkuMapper
;
import
com.youlai.mall.pms.pojo.entity.PmsSku
;
import
com.youlai.mall.pms.pojo.dto.app.SkuDTO
;
import
com.youlai.mall.pms.pojo.dto.app.LockStockDTO
;
import
com.youlai.mall.pms.pojo.dto.app.LockStockDTO
;
import
com.youlai.mall.pms.pojo.dto.app.SkuDTO
;
import
com.youlai.mall.pms.pojo.entity.PmsSku
;
import
com.youlai.mall.pms.service.IPmsSkuService
;
import
com.youlai.mall.pms.service.IPmsSkuService
;
import
com.youlai.mall.pms.tcc.service.SeataTccSkuService
;
import
com.youlai.mall.pms.tcc.service.SeataTccSkuService
;
import
io.seata.spring.annotation.GlobalTransactional
;
import
io.seata.spring.annotation.GlobalTransactional
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
static
com
.
youlai
.
mall
.
pms
.
common
.
constant
.
PmsConstants
.
LOCKED_STOCK_PREFIX
;
import
static
com
.
youlai
.
mall
.
pms
.
common
.
constant
.
PmsConstants
.
LOCK_SKU_PREFIX
;
@Service
@Service
@Slf4j
@Slf4j
@RequiredArgsConstructor
public
class
PmsSkuServiceImpl
extends
ServiceImpl
<
PmsSkuMapper
,
PmsSku
>
implements
IPmsSkuService
{
public
class
PmsSkuServiceImpl
extends
ServiceImpl
<
PmsSkuMapper
,
PmsSku
>
implements
IPmsSkuService
{
@Autowired
private
final
StringRedisTemplate
redisTemplate
;
private
StringRedisTemplate
redisTemplate
;
private
final
RedissonClient
redissonClient
;
@Autowired
private
final
SeataTccSkuService
seataTccSkuService
;
private
RedissonClient
redissonClient
;
@Autowired
private
SeataTccSkuService
seataTccSkuService
;
@Override
@Override
@GlobalTransactional
@GlobalTransactional
...
@@ -46,7 +42,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -46,7 +42,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
seataTccSkuService
.
prepareSkuLockList
(
null
,
skuLockList
);
seataTccSkuService
.
prepareSkuLockList
(
null
,
skuLockList
);
String
orderToken
=
skuLockList
.
get
(
0
).
getOrderToken
();
String
orderToken
=
skuLockList
.
get
(
0
).
getOrderToken
();
redisTemplate
.
opsForValue
().
set
(
LOCKED_STOCK_PREFIX
+
orderToken
,
JSONUtil
.
toJsonStr
(
skuLockList
));
redisTemplate
.
opsForValue
().
set
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
,
JSONUtil
.
toJsonStr
(
skuLockList
));
return
true
;
return
true
;
}
}
...
@@ -63,7 +59,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -63,7 +59,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
//prepareSkuLockList(null, skuLockList);
//prepareSkuLockList(null, skuLockList);
// 锁定商品
// 锁定商品
skuLockList
.
forEach
(
item
->
{
skuLockList
.
forEach
(
item
->
{
RLock
lock
=
redissonClient
.
getLock
(
LOCK_SKU_PREFIX
+
item
.
getSkuId
());
// 获取商品的分布式锁
RLock
lock
=
redissonClient
.
getLock
(
PmsConstants
.
LOCK_SKU_PREFIX
+
item
.
getSkuId
());
// 获取商品的分布式锁
lock
.
lock
();
lock
.
lock
();
boolean
result
=
this
.
update
(
new
LambdaUpdateWrapper
<
PmsSku
>()
boolean
result
=
this
.
update
(
new
LambdaUpdateWrapper
<
PmsSku
>()
.
setSql
(
"locked_stock = locked_stock + "
+
item
.
getCount
())
.
setSql
(
"locked_stock = locked_stock + "
+
item
.
getCount
())
...
@@ -89,13 +85,13 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -89,13 +85,13 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
.
setSql
(
"locked_stock = locked_stock - "
+
item
.
getCount
()))
.
setSql
(
"locked_stock = locked_stock - "
+
item
.
getCount
()))
);
);
// 提示订单哪些商品库存不足
// 提示订单哪些商品库存不足
String
ids
=
unlockSkuList
.
stream
().
map
(
sku
->
sku
.
getSkuId
().
toString
()).
collect
(
Collectors
.
joining
(
","
));
String
ids
=
unlockSkuList
.
stream
().
map
(
sku
->
sku
.
getSkuId
().
toString
()).
collect
(
Collectors
.
joining
(
","
));
return
Result
.
failed
(
"商品"
+
ids
+
"库存不足"
);
return
Result
.
failed
(
"商品"
+
ids
+
"库存不足"
);
}
}
// 将锁定的商品保存至Redis中
// 将锁定的商品保存至Redis中
String
orderToken
=
skuLockList
.
get
(
0
).
getOrderToken
();
String
orderToken
=
skuLockList
.
get
(
0
).
getOrderToken
();
redisTemplate
.
opsForValue
().
set
(
LOCKED_STOCK_PREFIX
+
orderToken
,
JSONUtil
.
toJsonStr
(
skuLockList
));
redisTemplate
.
opsForValue
().
set
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
,
JSONUtil
.
toJsonStr
(
skuLockList
));
return
Result
.
success
();
return
Result
.
success
();
}
}
...
@@ -106,7 +102,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -106,7 +102,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
@Override
@Override
public
boolean
unlockStock
(
String
orderToken
)
{
public
boolean
unlockStock
(
String
orderToken
)
{
log
.
info
(
"=======================订单超时未支付系统自动关单释放库存======================="
);
log
.
info
(
"=======================订单超时未支付系统自动关单释放库存======================="
);
String
json
=
redisTemplate
.
opsForValue
().
get
(
LOCKED_STOCK_PREFIX
+
orderToken
);
String
json
=
redisTemplate
.
opsForValue
().
get
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
);
log
.
info
(
"释放库存信息:{}"
,
json
);
log
.
info
(
"释放库存信息:{}"
,
json
);
if
(
StrUtil
.
isBlank
(
json
))
{
if
(
StrUtil
.
isBlank
(
json
))
{
return
true
;
return
true
;
...
@@ -121,7 +117,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -121,7 +117,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
);
);
// 删除redis中锁定的库存
// 删除redis中锁定的库存
redisTemplate
.
delete
(
LOCKED_STOCK_PREFIX
+
orderToken
);
redisTemplate
.
delete
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
);
return
true
;
return
true
;
}
}
...
@@ -131,7 +127,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -131,7 +127,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
@Override
@Override
public
boolean
deductStock
(
String
orderToken
)
{
public
boolean
deductStock
(
String
orderToken
)
{
log
.
info
(
"=======================支付成功扣减订单中商品库存======================="
);
log
.
info
(
"=======================支付成功扣减订单中商品库存======================="
);
String
json
=
redisTemplate
.
opsForValue
().
get
(
LOCKED_STOCK_PREFIX
+
orderToken
);
String
json
=
redisTemplate
.
opsForValue
().
get
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
);
log
.
info
(
"订单商品信息:{}"
,
json
);
log
.
info
(
"订单商品信息:{}"
,
json
);
if
(
StrUtil
.
isBlank
(
json
))
{
if
(
StrUtil
.
isBlank
(
json
))
{
return
true
;
return
true
;
...
@@ -151,7 +147,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -151,7 +147,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
});
});
// 删除redis中锁定的库存
// 删除redis中锁定的库存
redisTemplate
.
delete
(
LOCKED_STOCK_PREFIX
+
orderToken
);
redisTemplate
.
delete
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
orderToken
);
return
true
;
return
true
;
}
}
...
@@ -168,7 +164,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -168,7 +164,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
public
Integer
getStockById
(
Long
id
)
{
public
Integer
getStockById
(
Long
id
)
{
Integer
stock
=
0
;
Integer
stock
=
0
;
// 读->缓存
// 读->缓存
Object
cacheVal
=
redisTemplate
.
opsForValue
().
get
(
LOCKED_STOCK_PREFIX
+
id
);
Object
cacheVal
=
redisTemplate
.
opsForValue
().
get
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
id
);
if
(
cacheVal
!=
null
)
{
if
(
cacheVal
!=
null
)
{
stock
=
Convert
.
toInt
(
cacheVal
);
stock
=
Convert
.
toInt
(
cacheVal
);
return
stock
;
return
stock
;
...
@@ -182,7 +178,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
...
@@ -182,7 +178,7 @@ public class PmsSkuServiceImpl extends ServiceImpl<PmsSkuMapper, PmsSku> impleme
if
(
pmsSku
!=
null
)
{
if
(
pmsSku
!=
null
)
{
stock
=
pmsSku
.
getStock
();
stock
=
pmsSku
.
getStock
();
// 写->缓存
// 写->缓存
redisTemplate
.
opsForValue
().
set
(
LOCKED_STOCK_PREFIX
+
id
,
String
.
valueOf
(
stock
));
redisTemplate
.
opsForValue
().
set
(
PmsConstants
.
LOCKED_STOCK_PREFIX
+
id
,
String
.
valueOf
(
stock
));
}
}
return
stock
;
return
stock
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录