Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
order-group
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
order-group-application
order-group
Commits
fdb9daa6
Commit
fdb9daa6
authored
Nov 10, 2020
by
刘鹏飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
创建订单添加redis锁,防止重复创建订单
parent
59a95283
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
37 additions
and
1 deletions
+37
-1
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/util/LockUtils.java
+8
-0
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+1
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
+28
-1
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/util/LockUtils.java
View file @
fdb9daa6
...
@@ -53,4 +53,12 @@ public class LockUtils {
...
@@ -53,4 +53,12 @@ public class LockUtils {
});
});
}
}
/**
* 解锁 无论是否加锁成功,都需要调用unlock 应该以: lock(); try { doSomething(); } finally {
* unlock(); } 的方式调用
*/
public
static
void
unlock
(
RedisTemplate
redisTemplate
,
String
lockKey
)
{
redisTemplate
.
delete
(
lockKey
);
}
}
}
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
fdb9daa6
...
@@ -159,6 +159,7 @@ public enum ResponseResult {
...
@@ -159,6 +159,7 @@ public enum ResponseResult {
ORDER_TAKE_OUT_TIME_ERROR
(
"450062"
,
"你的外卖送达时间异常,请重新选择!"
),
ORDER_TAKE_OUT_TIME_ERROR
(
"450062"
,
"你的外卖送达时间异常,请重新选择!"
),
ORDER_TAKE_OUT_ADDRESS_NOT_VALID
(
"45063"
,
"收货地址校验失败"
),
ORDER_TAKE_OUT_ADDRESS_NOT_VALID
(
"45063"
,
"收货地址校验失败"
),
ORDER_PICK_UP_GOOD_NO
(
"45064"
,
"更新取餐码失败"
),
ORDER_PICK_UP_GOOD_NO
(
"45064"
,
"更新取餐码失败"
),
ORDER_NOT_CREATE_ERROR
(
"45065"
,
"请不要重复创建订单"
),
/**
/**
* 支付
* 支付
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
View file @
fdb9daa6
...
@@ -49,11 +49,22 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -49,11 +49,22 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private
final
String
PAY_SUCCESS_KEY
=
"pay_success_key:"
;
private
final
String
PAY_SUCCESS_KEY
=
"pay_success_key:"
;
/**
* 下单检查key,防止重复下单
*/
private
final
String
CREATE_ORDER_KEY
=
"create_order_key:"
;
private
static
Gson
gson
=
new
Gson
();
private
static
Gson
gson
=
new
Gson
();
@Value
(
"${mccafe.partner.id}"
)
@Value
(
"${mccafe.partner.id}"
)
private
String
mcCafePartnerId
;
private
String
mcCafePartnerId
;
/**
* 创单锁定的key
*/
@Value
(
"${create.order.key.expire}"
)
private
String
createOrderKeyExpire
;
@Autowired
@Autowired
private
EncircleOrderService
encircleOrderService
;
private
EncircleOrderService
encircleOrderService
;
@Autowired
@Autowired
...
@@ -129,7 +140,23 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -129,7 +140,23 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if
(
ObjectUtils
.
notEqual
(
baseResponse
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
())){
if
(
ObjectUtils
.
notEqual
(
baseResponse
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
())){
return
baseResponse
;
return
baseResponse
;
}
}
return
orderService
.
createOrderNew
(
createOrderVo
);
// 添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
// 锁定秒数从apollo获取,如果apollo没有设置,默认5秒
String
createOrderKey
=
CREATE_ORDER_KEY
+
assortmentCustomerInfoVo
.
getMemberId
();
try
{
Long
expire
=
StringUtils
.
isNotBlank
(
createOrderKeyExpire
)
?
Long
.
valueOf
(
createOrderKeyExpire
)
:
5L
;
if
(!
LockUtils
.
lock
(
redisCache
.
getRedisTemplate
(),
createOrderKey
,
expire
)){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_NOT_CREATE_ERROR
);
}
return
orderService
.
createOrderNew
(
createOrderVo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"创建订单失败,trackingNo:{}"
,
LogTreadLocal
.
getTrackingNo
());
}
finally
{
LockUtils
.
unlock
(
redisCache
.
getRedisTemplate
(),
createOrderKey
);
}
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_CREATE_ERROR
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment