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
ab505bec
Commit
ab505bec
authored
Oct 13, 2020
by
刘鹏飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
拼单购物车添加购物车的锁的控制
parent
c5cf201c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
40 deletions
+42
-40
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/constant/RedisKeyConstant.java
+6
-0
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
+14
-3
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
+22
-37
No files found.
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/constant/RedisKeyConstant.java
View file @
ab505bec
...
...
@@ -116,4 +116,10 @@ public class RedisKeyConstant {
*/
public
final
static
String
COLLAGE_STORE_MEMBER_KEY
=
"kgd:collage:store:member:{0}:{1}"
;
/**
* kgd:collage:cart:lock:{partnerId}:{storeId}:{邀请用户ID}
* 拼单购物车版本号key
*/
public
final
static
String
COLLAGE_CART_LOCK_KEY
=
"kgd:collage:cart:lock:{0}:{1}:{2}"
;
}
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
View file @
ab505bec
...
...
@@ -201,7 +201,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
/**
* 获取当前购物车版本
* 默认
1
* 默认
0
* @param key
* @return
*/
...
...
@@ -214,7 +214,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
request
.
put
(
"key"
,
key
);
ErrorLog
.
printErrorLog
(
"获取当前购物车版本信息异常"
,
"CollageCartBaseServiceImpl/getCartVersion"
,
request
,
e
);
}
return
value
==
null
?
1
:
value
;
return
value
==
null
?
0
:
value
;
}
/**
...
...
@@ -397,11 +397,22 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
* @param userId
* @return
*/
p
rivate
String
genCollageCarVerKey
(
String
partnerId
,
String
storeId
,
String
userId
)
{
p
ublic
String
genCollageCarVerKey
(
String
partnerId
,
String
storeId
,
String
userId
)
{
return
MessageFormat
.
format
(
RedisKeyConstant
.
COLLAGE_CART_VER_KEY
,
partnerId
,
storeId
,
userId
);
}
/**
* 构建拼单购物车加锁使用的key
* @param partnerId
* @param storeId
* @param userId
* @return
*/
public
String
genCollageCarLockKey
(
String
partnerId
,
String
storeId
,
String
userId
)
{
return
MessageFormat
.
format
(
RedisKeyConstant
.
COLLAGE_CART_LOCK_KEY
,
partnerId
,
storeId
,
userId
);
}
/**
* 增加购物车版本
*
* @param partnerId 商户号
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
View file @
ab505bec
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.CollageOrderAdapter
;
import
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
...
...
@@ -29,9 +28,7 @@ import com.freemud.application.sdk.api.log.LogThreadLocal;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.card.sdk.log.ErrorLog
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CollageMemberState
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto
;
import
com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum
;
import
com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest
;
...
...
@@ -39,16 +36,12 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseS
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageOrderBaseServiceImpl
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.text.MessageFormat
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collector
;
import
java.util.stream.Collectors
;
import
static
java
.
util
.
stream
.
Collectors
.
toList
;
...
...
@@ -152,7 +145,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
List
<
ProductBeanDTO
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfoSdk
(
partnerId
,
storeId
,
Collections
.
singletonList
(
spuId
),
addShoppingCartGoodsRequestVo
.
getMenuType
(),
this
.
shoppingCartBaseService
);
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getCarVer
());
dolock
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getCarVer
()
,
true
);
List
<
CartGoods
>
allCartGoodsList
=
null
;
String
productName
=
null
;
...
...
@@ -268,7 +261,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
throw
new
ServiceException
(
ResponseResult
.
NOT_LOGIN
);
}
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
currentUserInfoVo
);
//String currentSessionId = updateShoppingCartGoodsQtyRequestVo.getSessionId();
String
currentUserId
=
userLoginInfoDto
.
getMemberId
();
String
partnerId
=
updateShoppingCartGoodsQtyRequestVo
.
getPartnerId
();
String
storeId
=
updateShoppingCartGoodsQtyRequestVo
.
getShopId
();
...
...
@@ -292,7 +284,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
}
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
updateShoppingCartGoodsQtyRequestVo
.
getCarVer
());
dolock
(
partnerId
,
storeId
,
crateUserId
,
updateShoppingCartGoodsQtyRequestVo
.
getCarVer
()
,
true
);
List
<
CartGoods
>
cartGoodsList
=
null
;
try
{
...
...
@@ -408,7 +400,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
}
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartInfoRequestVo
.
getCarVer
());
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartInfoRequestVo
.
getCarVer
()
,
false
);
List
<
CartGoods
>
cartGoodsList
=
null
;
try
{
...
...
@@ -684,7 +676,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
System
.
out
.
println
(
JSON
.
toJSONString
(
activityCalculationDiscountRequestDto
));
activityCalculationDiscountResponseDto
=
activityClient
.
calculationDiscount
(
activityCalculationDiscountRequestDto
);
}
catch
(
Exception
ex
)
{
com
.
freemud
.
application
.
sdk
.
api
.
log
.
ErrorLog
.
printErrorLog
(
"calculation_discount_error"
,
"/calculation/discount"
,
activityCalculationDiscountRequestDto
,
ex
);
ErrorLog
.
errorConvertJson
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"shoppingCartCollageServiceImpl getActivityCalculationDiscountResponse:"
+
ex
.
getMessage
()
,
ex
);
throw
new
ServiceException
(
ResponseResult
.
OPERATE_TOO_OFTEN
);
}
// 返回成功
...
...
@@ -843,20 +835,23 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param storeId
* @param crateUserId
* @param carVer
* @param flag
*/
private
void
dolock
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
Integer
carVer
)
{
// 设置版本锁控制购物车只能一个人进行操作
if
(
carVer
==
null
||
carVer
<
1
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
// 构建拼单购物车版本号缓存key
String
collageCartVerKey
=
genCollageCarVerKey
(
partnerId
,
storeId
,
crateUserId
);
Integer
cartVersion
=
collageCartBaseService
.
getCartVersion
(
collageCartVerKey
);
if
(!
carVer
.
equals
(
cartVersion
))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
private
void
dolock
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
Integer
carVer
,
Boolean
flag
)
{
if
(
flag
){
// 设置版本锁控制购物车只能一个人进行操作
if
(
carVer
==
null
||
carVer
<
1
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
// 构建拼单购物车版本号缓存key
String
collageCartVerKey
=
collageCartBaseService
.
genCollageCarVerKey
(
partnerId
,
storeId
,
crateUserId
);
Integer
cartVersion
=
collageCartBaseService
.
getCartVersion
(
collageCartVerKey
);
if
(!
carVer
.
equals
(
cartVersion
))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
}
boolean
lock
=
RedisLock
.
getInstance
(
redisCache
.
getRedisTemplate
()).
lock
(
collageCart
VerKey
);
boolean
lock
=
RedisLock
.
getInstance
(
redisCache
.
getRedisTemplate
()).
lock
(
collageCart
BaseService
.
genCollageCarLockKey
(
partnerId
,
storeId
,
crateUserId
)
);
if
(!
lock
)
{
//加锁失败
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
...
...
@@ -871,23 +866,13 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
*/
private
void
doUnlock
(
String
partnerId
,
String
storeId
,
String
crateUserId
)
{
try
{
String
collageCart
VerKey
=
genCollageCarVer
Key
(
partnerId
,
storeId
,
crateUserId
);
RedisLock
.
getInstance
(
redisCache
.
getRedisTemplate
()).
unlock
(
collageCart
Ver
Key
);
String
collageCart
LockKey
=
collageCartBaseService
.
genCollageCarLock
Key
(
partnerId
,
storeId
,
crateUserId
);
RedisLock
.
getInstance
(
redisCache
.
getRedisTemplate
()).
unlock
(
collageCart
Lock
Key
);
}
catch
(
Exception
e
)
{
ErrorLog
.
errorConvertJson
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"购物车版本解锁解锁失败"
,
e
);
}
}
/**
* 构建拼单购物车版本号缓存key
* @param partnerId
* @param storeId
* @param userId
* @return
*/
private
String
genCollageCarVerKey
(
String
partnerId
,
String
storeId
,
String
userId
)
{
return
MessageFormat
.
format
(
RedisKeyConstant
.
COLLAGE_CART_VER_KEY
,
partnerId
,
storeId
,
userId
);
}
/**
* 构建 ActivityCalculationDiscountRequestDto
...
...
@@ -1034,7 +1019,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
}
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartCollageClearRequestVo
.
getCarVer
());
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartCollageClearRequestVo
.
getCarVer
()
,
true
);
List
<
CartGoods
>
cartGoodsList
=
new
ArrayList
<>();
try
{
...
...
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