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
72a57bf1
Commit
72a57bf1
authored
Sep 29, 2020
by
缪晖
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【ID1010972】多人拼单 处理冲突
parent
39f92567
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
554 additions
and
31 deletions
+554
-31
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
+115
-6
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartCollageController.java
+45
-5
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
+394
-20
No files found.
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
View file @
72a57bf1
...
@@ -5,11 +5,12 @@ import cn.freemud.base.entity.BaseResponse;
...
@@ -5,11 +5,12 @@ import cn.freemud.base.entity.BaseResponse;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.redis.RedisCache
;
import
com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService
;
import
com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.sdk.api.assortment.shoppingcart.adapter.CollageOrderSdkAdapter
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.
domain.CartAddItem
;
import
com.freemud.sdk.api.assortment.shoppingcart.
constant.ShoppingCartConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.
domain.CartGood
s
;
import
com.freemud.sdk.api.assortment.shoppingcart.
constant.VersionUtil
s
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.
CartParamDto
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.
*
;
import
com.freemud.sdk.api.assortment.shoppingcart.exception.ServiceException
;
import
com.freemud.sdk.api.assortment.shoppingcart.exception.ServiceException
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil
;
...
@@ -18,12 +19,14 @@ import org.springframework.beans.factory.annotation.Value;
...
@@ -18,12 +19,14 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.data.redis.core.BoundHashOperations
;
import
org.springframework.data.redis.core.BoundHashOperations
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.Comparator
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.time.ZoneOffset
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Function
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -109,8 +112,16 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
...
@@ -109,8 +112,16 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
@Override
@Override
public
BaseResponse
clear
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
public
BaseResponse
clear
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
try
{
// 构建缓存key
String
collageCartHashKey
=
genCollageCarHashKey
(
cartParamDto
.
getPartnerId
(),
cartParamDto
.
getStoreId
(),
cartParamDto
.
getUserId
());
redisCache
.
delete
(
collageCartHashKey
);
return
new
BaseResponse
(
VersionUtils
.
VER_1
,
CartResponseConstant
.
SUCCESS
.
getCode
(),
CartResponseConstant
.
SUCCESS
.
getMessage
());
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"assortment-shoppingcart-sdk"
,
trackingNo
,
e
.
getMessage
(),
"setCartGoodsList"
,
cartParamDto
,
e
,
Level
.
ERROR
);
return
null
;
return
null
;
}
}
}
@Override
@Override
public
String
getCouponAppId
()
{
public
String
getCouponAppId
()
{
...
@@ -124,13 +135,38 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
...
@@ -124,13 +135,38 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
@Override
@Override
public
BaseResponse
<
CartGoods
>
getCartGoods
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
public
BaseResponse
<
CartGoods
>
getCartGoods
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
try
{
String
redisKey
=
genCollageCarHashKey
(
cartParamDto
.
getPartnerId
(),
cartParamDto
.
getStoreId
(),
cartParamDto
.
getUserId
());
BoundHashOperations
<
String
,
String
,
CartGoods
>
operations
=
redisTemplate
.
boundHashOps
(
redisKey
);
CartGoods
cartGoods
=
operations
.
get
(
cartParamDto
.
getCartGoodsUid
());
return
CartResponseUtil
.
success
(
cartGoods
);
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"collageCartBaseServiceImpl"
,
trackingNo
,
e
.
getMessage
(),
"getCartGoods"
,
cartParamDto
,
e
,
Level
.
ERROR
);
return
null
;
return
null
;
}
}
}
@Override
@Override
public
BaseResponse
<
List
<
CartGoods
>>
updateGoodsQty
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
public
BaseResponse
<
List
<
CartGoods
>>
updateGoodsQty
(
CartParamDto
cartParamDto
,
String
trackingNo
)
{
try
{
String
redisKey
=
genCollageCarHashKey
(
cartParamDto
.
getPartnerId
(),
cartParamDto
.
getStoreId
(),
cartParamDto
.
getUserId
());
BoundHashOperations
<
String
,
String
,
CartGoods
>
operations
=
redisTemplate
.
boundHashOps
(
redisKey
);
CartGoods
cartGoods
=
operations
.
get
(
cartParamDto
.
getCartGoodsUid
());
if
(
cartGoods
!=
null
)
{
// 当数量为0时,移除
if
(
Objects
.
equals
(
cartParamDto
.
getQty
(),
0
))
{
operations
.
delete
(
cartParamDto
.
getCartGoodsUid
());
}
else
{
cartGoods
.
setQty
(
cartParamDto
.
getQty
());
operations
.
put
(
cartParamDto
.
getCartGoodsUid
(),
cartGoods
);
}
}
return
this
.
getCartGoodsList
(
cartParamDto
,
trackingNo
);
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"assortment-shoppingcart-sdk"
,
trackingNo
,
e
.
getMessage
(),
"updateGoodsQty"
,
cartParamDto
,
e
,
Level
.
ERROR
);
return
null
;
return
null
;
}
}
}
/**
/**
* 获取当前购物车版本
* 获取当前购物车版本
...
@@ -249,6 +285,32 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
...
@@ -249,6 +285,32 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
}
}
/**
/**
* 获取拼单人员缓存购物车行
* @param partnerId
* @param storeId
* @param crateUserId
* @param sessionId
* @return
*/
public
List
<
String
>
getCollageCartGoodsUids
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
String
sessionId
){
try
{
String
collageMemberKey
=
genCollageMemberHashKey
(
partnerId
,
storeId
,
crateUserId
);
BoundHashOperations
<
String
,
String
,
List
<
String
>>
operations
=
redisTemplate
.
boundHashOps
(
collageMemberKey
);
List
<
String
>
goodsUids
=
operations
.
get
(
sessionId
);
return
goodsUids
;
}
catch
(
Exception
e
)
{
Map
<
String
,
String
>
request
=
new
HashMap
<>();
request
.
put
(
"partnerId"
,
partnerId
);
request
.
put
(
"storeId"
,
storeId
);
request
.
put
(
"crateUserId"
,
crateUserId
);
request
.
put
(
"sessionId"
,
crateUserId
);
ErrorLog
.
printErrorLog
(
"获取拼单人员缓存购物车行异常"
,
"CollageCartBaseServiceImpl/getCollageCartGoodsUids"
,
request
,
e
);
return
null
;
}
}
/**
* 构建拼单购物车版本号缓存key
* 构建拼单购物车版本号缓存key
* @param partnerId
* @param partnerId
* @param storeId
* @param storeId
...
@@ -270,4 +332,51 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
...
@@ -270,4 +332,51 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
public
Integer
incrementCartVersion
(
String
partnerId
,
String
storeId
,
String
userId
)
{
public
Integer
incrementCartVersion
(
String
partnerId
,
String
storeId
,
String
userId
)
{
return
redisCache
.
opsForValue
().
increment
(
genCollageCarVerKey
(
partnerId
,
storeId
,
userId
),
1
).
intValue
();
return
redisCache
.
opsForValue
().
increment
(
genCollageCarVerKey
(
partnerId
,
storeId
,
userId
),
1
).
intValue
();
}
}
public
List
<
CartGoods
>
removeGoodsUids
(
String
partnerId
,
String
storeId
,
String
userId
,
List
<
String
>
goodsUids
)
{
String
redisKey
=
genCollageCarHashKey
(
partnerId
,
storeId
,
userId
);
BoundHashOperations
<
String
,
String
,
CartGoods
>
operations
=
redisTemplate
.
boundHashOps
(
redisKey
);
if
(
null
!=
goodsUids
&&
!
goodsUids
.
isEmpty
()){
operations
.
delete
(
goodsUids
.
toArray
());
}
List
<
CartGoods
>
cartGoodsList
=
operations
.
values
();
//对创建时间进行排序
cartGoodsList
.
sort
(
Comparator
.
comparingLong
(
CartGoods:
:
getCreateTimeMili
));
return
cartGoodsList
;
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartCollageController.java
View file @
72a57bf1
...
@@ -13,19 +13,23 @@
...
@@ -13,19 +13,23 @@
package
cn
.
freemud
.
controller
;
package
cn
.
freemud
.
controller
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.vo.AddShoppingCartGoodsRequestVo
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.service.impl.ShoppingCartCollageServiceImpl
;
import
cn.freemud.service.impl.ShoppingCartCollageServiceImpl
;
import
cn.freemud.utils.ResponseUtil
;
import
com.freemud.api.assortment.datamanager.enums.IappIdType
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
import
com.freemud.application.sdk.api.log.ApiAnnotation
;
import
com.freemud.application.sdk.api.log.ApiAnnotation
;
import
com.freemud.application.sdk.api.log.LogParams
;
import
com.freemud.application.sdk.api.log.LogParams
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.MediaType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RestController
@RequestMapping
(
value
=
"/shoppingCart/collage"
,
consumes
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
@RequestMapping
(
value
=
"/shoppingCart/collage"
,
consumes
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
...
@@ -40,4 +44,40 @@ public class ShoppingCartCollageController {
...
@@ -40,4 +44,40 @@ public class ShoppingCartCollageController {
public
BaseResponse
addGoods
(
@Validated
@LogParams
@RequestBody
AddShoppingCartGoodsRequestVo
request
)
{
public
BaseResponse
addGoods
(
@Validated
@LogParams
@RequestBody
AddShoppingCartGoodsRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
addGoods
(
request
);
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
addGoods
(
request
);
}
}
/**
* 修改拼单购物车中商品数量
*/
@ApiAnnotation
(
logMessage
=
"updateGoodsQty"
)
@PostMapping
(
value
=
"/updateGoodsQty"
)
public
BaseResponse
updateGoodsQty
(
@Validated
@LogParams
@RequestBody
UpdateShoppingCartGoodsQtyRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
updateGoodsQty
(
request
);
}
/**
* 查询购物车信息
*/
@ApiAnnotation
(
logMessage
=
"listCartGoods"
)
@PostMapping
(
value
=
"/listCartGoods"
)
public
BaseResponse
listCartGoods
(
@Validated
@LogParams
@RequestBody
ShoppingCartInfoRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
getGoodsList
(
request
);
}
/**
* 清空自己的购物车
*/
@ApiAnnotation
(
logMessage
=
"clearPartCartGoods"
)
@PostMapping
(
value
=
"/clearPartCartGoods"
)
public
BaseResponse
clearPartCartGoods
(
@Validated
@LogParams
@RequestBody
ShoppingCartCollageClearRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
clearPartCarGoods
(
request
);
}
/**
* 清空购物车
*/
@ApiAnnotation
(
logMessage
=
"clearCartGoods"
)
@PostMapping
(
value
=
"/clearCartGoods"
)
public
BaseResponse
clearCartGoods
(
@Validated
@LogParams
@RequestBody
ShoppingCartClearRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartCollageServiceImpl
.
class
).
clear
(
request
);
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
View file @
72a57bf1
...
@@ -2,6 +2,7 @@ package cn.freemud.service.impl;
...
@@ -2,6 +2,7 @@ package cn.freemud.service.impl;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.CollageOrderAdapter
;
import
cn.freemud.adapter.CollageOrderAdapter
;
import
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.ResponseCodeConstant
;
...
@@ -31,14 +32,16 @@ import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
...
@@ -31,14 +32,16 @@ import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import
com.freemud.card.sdk.log.ErrorLog
;
import
com.freemud.card.sdk.log.ErrorLog
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
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.constant.RedisKeyConstant
;
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.request.CheckCartRequest
;
import
com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseServiceImpl
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseServiceImpl
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -86,6 +89,80 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -86,6 +89,80 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Autowired
@Autowired
private
ActivityClient
activityClient
;
private
ActivityClient
activityClient
;
@Autowired
private
CouponAdapter
couponAdapter
;
/**
* 查询拼单订单信息(拼单基础信息 拼单参与人列表)
* @param request(partnerId shopId userId)
* @return
*/
@Override
public
BaseResponse
queryCollageOrder
(
CollageOrderRequestVo
request
)
{
CollageOrderDto
collageOrderDto
=
this
.
collageOrderAdapter
.
convert2CollageOrderDto
(
request
);
// 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息
if
(
StringUtils
.
isEmpty
(
request
.
getCreateCollageUserId
()))
{
CustomerInfoVo
currentUserInfoVo
=
this
.
getCustomerInfoVo
(
request
.
getSessionId
());
collageOrderDto
.
setCreateCollageUserId
(
currentUserInfoVo
.
getMemberId
());
}
BaseResponse
<
CollageOrder
>
queryCollageOrderResponse
=
this
.
collageCartBaseService
.
queryCollageOrder
(
collageOrderDto
);
CollageOrder
collageOrder
=
queryCollageOrderResponse
.
getResult
();
// 有个类引用冲突了,找不到,代码先注释了
/* if (ResponseResult.SUCCESS.getCode().equals(queryCollageOrderResponse.getCode()) && !ObjectUtils.isEmpty(collageOrder)) {
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
// 订单基础信息
collageOrderResponseVo.setOrder(collageOrder);
// TODO 订单参与人列表信息
return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_NOT_EXIST);
}*/
return
null
;
}
/**
* 创建拼单订单基础信息
* @param request(partnerId shopId sessionId)
* @return
*/
@Override
public
BaseResponse
createCollageOrder
(
CollageOrderRequestVo
request
)
{
CollageOrderDto
collageOrderDto
=
this
.
collageOrderAdapter
.
convert2CollageOrderDto
(
request
);
// 根据sessionId查询对应登录用户信息
CustomerInfoVo
currentUserInfoVo
=
this
.
getCustomerInfoVo
(
request
.
getSessionId
());
collageOrderDto
.
setCreateCollageUserId
(
currentUserInfoVo
.
getMemberId
());
// 创建拼单订单基础缓存信息
BaseResponse
<
CollageOrder
>
createCollageOrderResponse
=
this
.
collageCartBaseService
.
createCollageOrder
(
collageOrderDto
);
if
(
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
createCollageOrderResponse
.
getCode
()))
{
CollageOrderResponseVo
collageOrderResponseVo
=
new
CollageOrderResponseVo
();
collageOrderResponseVo
.
setOrder
(
createCollageOrderResponse
.
getResult
());
return
ResponseUtil
.
success
(
collageOrderResponseVo
);
}
else
{
return
ResponseUtil
.
error
(
ResponseResult
.
COLLAGE_ALREADY_EXIST
);
}
}
/**
* 取消拼单订单,删除相关缓存信息
* @param request
* @return
*/
@Override
public
BaseResponse
cancelCollageOrder
(
CollageOrderRequestVo
request
)
{
CollageOrderDto
collageOrderDto
=
this
.
collageOrderAdapter
.
convert2CollageOrderDto
(
request
);
// 根据sessionId查询对应登录用户信息
CustomerInfoVo
currentUserInfoVo
=
this
.
getCustomerInfoVo
(
request
.
getSessionId
());
collageOrderDto
.
setCreateCollageUserId
(
currentUserInfoVo
.
getMemberId
());
return
this
.
collageCartBaseService
.
cancelCollageOrder
(
collageOrderDto
);
}
@Override
@Override
public
BaseResponse
addGoodsByCard
(
AddGoodsByWeixinCardRequestVo
request
)
{
public
BaseResponse
addGoodsByCard
(
AddGoodsByWeixinCardRequestVo
request
)
{
return
null
;
return
null
;
...
@@ -106,6 +183,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -106,6 +183,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
currentUserInfoVo
);
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
currentUserInfoVo
);
String
currentUserId
=
currentUserInfoVo
.
getMemberId
();
String
currentUserId
=
currentUserInfoVo
.
getMemberId
();
String
currentSessionId
=
addShoppingCartGoodsRequestVo
.
getSessionId
();
String
partnerId
=
addShoppingCartGoodsRequestVo
.
getPartnerId
();
String
partnerId
=
addShoppingCartGoodsRequestVo
.
getPartnerId
();
String
storeId
=
addShoppingCartGoodsRequestVo
.
getShopId
();
String
storeId
=
addShoppingCartGoodsRequestVo
.
getShopId
();
String
appId
=
addShoppingCartGoodsRequestVo
.
getAppId
();
String
appId
=
addShoppingCartGoodsRequestVo
.
getAppId
();
...
@@ -119,10 +197,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -119,10 +197,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
String
crateUserId
=
addShoppingCartGoodsRequestVo
.
getCreateCollageUserId
();
String
crateUserId
=
addShoppingCartGoodsRequestVo
.
getCreateCollageUserId
();
// 拼单相关条件校验
// 拼单相关条件校验
check
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
);
check
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getShopId
(),
spuId
,
addShoppingCartGoodsRequestVo
.
getCreateCollageUserId
(),
currentSessionId
);
CartGoods
cartGoods
=
ShoppingCartConvertAdapter
.
convent2CartGoods
(
addShoppingCartGoodsRequestVo
);
CartGoods
cartGoods
=
ShoppingCartConvertAdapter
.
convent2CartGoods
(
addShoppingCartGoodsRequestVo
);
cartGoods
.
setSessionId
(
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
cartGoods
.
setSessionId
(
currentSessionId
);
cartGoods
.
setUserId
(
currentUserId
);
cartGoods
.
setUserId
(
currentUserId
);
List
<
Long
>
productIds
=
new
ArrayList
<>();
List
<
Long
>
productIds
=
new
ArrayList
<>();
...
@@ -132,13 +210,13 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -132,13 +210,13 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
List
<
ProductBeanDTO
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfoSdk
(
partnerId
,
storeId
,
Collections
.
singletonList
(
spuId
),
addShoppingCartGoodsRequestVo
.
getMenuType
(),
this
.
shoppingCartBaseService
);
List
<
ProductBeanDTO
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfoSdk
(
partnerId
,
storeId
,
Collections
.
singletonList
(
spuId
),
addShoppingCartGoodsRequestVo
.
getMenuType
(),
this
.
shoppingCartBaseService
);
// 购物车版本加锁
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
);
dolock
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getCarVer
()
);
List
<
CartGoods
>
allCartGoodsList
=
null
;
List
<
CartGoods
>
allCartGoodsList
=
null
;
String
productName
=
null
;
String
productName
=
null
;
try
{
try
{
//缓存中获取购物车商品信息
//缓存中获取购物车商品信息
allCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
,
null
,
collageCartBaseService
);
allCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
currentSessionId
,
null
,
collageCartBaseService
);
if
(
CollectionUtils
.
isEmpty
(
allCartGoodsList
))
{
if
(
CollectionUtils
.
isEmpty
(
allCartGoodsList
))
{
allCartGoodsList
=
new
ArrayList
<>();
allCartGoodsList
=
new
ArrayList
<>();
}
}
...
@@ -152,8 +230,8 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -152,8 +230,8 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
List
<
CartGoods
>
cartGoodsRedisList
=
addNotProductCouponGoods
(
addShoppingCartGoodsRequestVo
,
cartGoods
,
goodsId
,
crateUserId
,
shoppingCartGoodsResponseVo
,
allCartGoodsList
);
List
<
CartGoods
>
cartGoodsRedisList
=
addNotProductCouponGoods
(
addShoppingCartGoodsRequestVo
,
cartGoods
,
goodsId
,
crateUserId
,
shoppingCartGoodsResponseVo
,
allCartGoodsList
);
// 更新拼单购物车人员缓存中的的购物车行id集合
// 更新拼单购物车人员缓存中的的购物车行id集合
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
filter
(
cartGoods1
->
currentSessionId
.
equals
(
cartGoods1
.
getSessionId
())).
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
// 当商品数量被设为0时
// 当商品数量被设为0时
if
(
Objects
.
equals
(
cartGoods
.
getQty
(),
0
))
{
if
(
Objects
.
equals
(
cartGoods
.
getQty
(),
0
))
{
...
@@ -194,12 +272,194 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -194,12 +272,194 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Override
@Override
public
BaseResponse
updateGoodsQty
(
UpdateShoppingCartGoodsQtyRequestVo
updateShoppingCartGoodsQtyRequestVo
)
{
public
BaseResponse
updateGoodsQty
(
UpdateShoppingCartGoodsQtyRequestVo
updateShoppingCartGoodsQtyRequestVo
)
{
return
null
;
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
updateShoppingCartGoodsQtyRequestVo
.
getSessionId
());
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
assortmentCustomerInfoVo
);
String
currentSessionId
=
updateShoppingCartGoodsQtyRequestVo
.
getSessionId
();
String
currentUserId
=
userLoginInfoDto
.
getMemberId
();
String
partnerId
=
updateShoppingCartGoodsQtyRequestVo
.
getPartnerId
();
String
storeId
=
updateShoppingCartGoodsQtyRequestVo
.
getShopId
();
String
appId
=
updateShoppingCartGoodsQtyRequestVo
.
getAppId
();
String
cartGoodsUid
=
updateShoppingCartGoodsQtyRequestVo
.
getCartGoodsUid
();
Integer
qty
=
updateShoppingCartGoodsQtyRequestVo
.
getQty
();
String
menuType
=
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
();
Integer
orderType
=
updateShoppingCartGoodsQtyRequestVo
.
getOrderType
();
String
receiveId
=
updateShoppingCartGoodsQtyRequestVo
.
getReceiveId
();
// 获取拼单发起人id
String
crateUserId
=
updateShoppingCartGoodsQtyRequestVo
.
getCreateCollageUserId
();
// 拼单相关条件校验
check
(
partnerId
,
storeId
,
crateUserId
,
updateShoppingCartGoodsQtyRequestVo
.
getShopId
(),
null
,
crateUserId
,
currentSessionId
);
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
updateShoppingCartGoodsQtyRequestVo
.
getCarVer
());
List
<
CartGoods
>
cartGoodsList
=
null
;
try
{
// 先验证商品是否存在
CartGoods
cartGoods
=
assortmentSdkService
.
getCartGoodsBySdk
(
partnerId
,
crateUserId
,
storeId
,
cartGoodsUid
,
""
,
collageCartBaseService
);
if
(
cartGoods
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_UPDATE_ERROR
);
}
// 检查购物车商品库存数量
checkUpdateStock
(
updateShoppingCartGoodsQtyRequestVo
,
cartGoods
);
// 更新购物车中数量
cartGoodsList
=
assortmentSdkService
.
updateGoodsQtyBySdk
(
partnerId
,
crateUserId
,
storeId
,
cartGoodsUid
,
qty
<
0
?
0
:
qty
,
""
,
collageCartBaseService
);
// check购物车中所有商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
cartGoodsList
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
updateShoppingCartGoodsQtyRequestVo
.
getOrderType
(),
""
,
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
}
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新存储最新购物车
List
<
CartGoods
>
cartGoodsRedisList
=
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
cartGoodsList
,
currentSessionId
,
""
,
collageCartBaseService
);
// 更新拼单购物车人员缓存中的的购物车行id集合
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
filter
(
cartGoods1
->
currentSessionId
.
equals
(
cartGoods1
.
getSessionId
())).
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
}
catch
(
Exception
e
)
{
ErrorLog
.
errorConvertJson
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"shoppingCartCollageServiceImpl updateGoodsQty:"
+
e
.
getMessage
(),
e
);
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
,
"购物车商品有变动,请手动刷新再修改"
);
}
finally
{
// 购物车版本解锁
// 版本锁的粒度控制在检查购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock
(
partnerId
,
storeId
,
crateUserId
);
}
Long
deliveryAmount
=
calculateDeliveryAmount
(
receiveId
,
partnerId
,
storeId
,
userLoginInfoDto
.
getWxAppid
(),
shoppingCartGoodsResponseVo
);
// 获取优惠信息
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
=
getCalculationDiscountResult
(
menuType
,
partnerId
,
storeId
,
crateUserId
,
appId
,
userLoginInfoDto
.
getWxAppid
(),
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
cartGoodsList
,
new
ArrayList
(),
new
ArrayList
<>(),
null
,
deliveryAmount
);
if
(
calculationDiscountResult
==
null
)
{
shoppingCartGoodsResponseVo
.
setProducts
(
cartGoodsList
);
// return shoppingCartGoodsResponseVo;
}
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
crateUserId
,
appId
,
updateShoppingCartGoodsQtyRequestVo
.
getOrderType
());
// 促销活动的优惠金额计算
updateShoppingCartGoodsDiscount
(
null
,
activityQueryDto
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
,
null
,
userLoginInfoDto
,
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
(),
deliveryAmount
);
clearMsg
(
shoppingCartGoodsResponseVo
,
cartGoodsUid
);
//设置更新响应信息
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
.
getToastMsg
(),
partnerId
,
storeId
,
crateUserId
,
ShoppingCartConstant
.
ADD_AND_UPDATE
,
null
);
// 设置购物车版本号
shoppingCartGoodsResponseVo
.
setCarVer
(
collageCartBaseService
.
incrementCartVersion
(
partnerId
,
storeId
,
crateUserId
));
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
}
@Override
@Override
public
BaseResponse
getGoodsList
(
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
public
BaseResponse
getGoodsList
(
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
return
null
;
if
(
StringUtils
.
isEmpty
(
shoppingCartInfoRequestVo
.
getShopId
())){
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
// 获取用户信息
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
shoppingCartInfoRequestVo
.
getSessionId
());
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
assortmentCustomerInfoVo
);
String
currentUserId
=
userLoginInfoDto
.
getMemberId
();
String
currentSessionId
=
shoppingCartInfoRequestVo
.
getSessionId
();
String
partnerId
=
shoppingCartInfoRequestVo
.
getPartnerId
();
String
storeId
=
shoppingCartInfoRequestVo
.
getShopId
();
String
appId
=
shoppingCartInfoRequestVo
.
getAppId
();
String
couponCode
=
shoppingCartInfoRequestVo
.
getCouponCode
();
String
activityCode
=
shoppingCartInfoRequestVo
.
getActivityCode
();
String
menuType
=
shoppingCartInfoRequestVo
.
getMenuType
();
Integer
orderType
=
shoppingCartInfoRequestVo
.
getOrderType
();
String
receiveId
=
shoppingCartInfoRequestVo
.
getReceiveId
();
// 获取拼单发起人id
String
crateUserId
=
shoppingCartInfoRequestVo
.
getCreateCollageUserId
();
// 拼单发起人id不能为空
// 拼单购物相关的redis的key都需要拼单发起人id,所以这个值是不能为空的
if
(
StringUtils
.
isEmpty
(
crateUserId
)){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
// 获取不到拼单的基础信息,抛出异常
// 拼单的有效时间为1小时,当获取不到拼单的基础信息时,认为这个拼单没有发起、已经失效、已经结束
Map
<
String
,
String
>
collageBase
=
collageCartBaseService
.
getCollageBase
(
partnerId
,
storeId
,
crateUserId
);
if
(
collageBase
==
null
||
collageBase
.
isEmpty
()){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartInfoRequestVo
.
getCarVer
());
List
<
CartGoods
>
cartGoodsList
=
null
;
try
{
// 获取购物车商品
cartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
null
,
""
,
collageCartBaseService
);
// 如果购物车商品不为空, 则check购物车中所有商品
if
(
CollectionUtils
.
isNotEmpty
(
cartGoodsList
)){
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
cartGoodsList
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
shoppingCartInfoRequestVo
.
getOrderType
(),
""
,
shoppingCartInfoRequestVo
.
getMenuType
()
,
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
}
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新存储最新购物车
List
<
CartGoods
>
cartGoodsRedisList
=
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
cartGoodsList
,
assortmentCustomerInfoVo
.
getSessionId
(),
""
,
this
.
collageCartBaseService
);
// 更新拼单购物车人员缓存中的的购物车行id集合
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
filter
(
cartGoods1
->
currentSessionId
.
equals
(
cartGoods1
.
getSessionId
())).
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
}
}
catch
(
Exception
e
)
{
ErrorLog
.
errorConvertJson
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"shoppingCartCollageServiceImpl getGoodsList:"
+
e
.
getMessage
(),
e
);
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
,
"购物车商品有变动,请手动刷新再修改"
);
}
finally
{
// 购物车版本解锁
// 版本锁的粒度控制在检查购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock
(
partnerId
,
storeId
,
crateUserId
);
}
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
>
coupons
=
new
ArrayList
<>();
// 当couponCode不为空时,需参与价格计算
if
(
StringUtils
.
isNotEmpty
(
couponCode
))
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
coupon
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
();
coupon
.
setCode
(
couponCode
);
coupon
.
setActivityCode
(
activityCode
);
coupons
.
add
(
coupon
);
}
Long
deliveryAmount
=
calculateDeliveryAmount
(
receiveId
,
partnerId
,
storeId
,
userLoginInfoDto
.
getWxAppid
(),
shoppingCartGoodsResponseVo
);
// 获取优惠信息
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
=
getCalculationDiscountResult
(
menuType
,
partnerId
,
storeId
,
crateUserId
,
appId
,
userLoginInfoDto
.
getWxAppid
(),
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
cartGoodsList
,
coupons
,
null
,
shoppingCartInfoRequestVo
.
getReceiveId
(),
deliveryAmount
);
if
(
calculationDiscountResult
==
null
)
{
shoppingCartGoodsResponseVo
.
setProducts
(
cartGoodsList
);
}
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
crateUserId
,
appId
,
shoppingCartInfoRequestVo
.
getOrderType
());
CouponPromotionVO
couponPromotionVO
=
couponAdapter
.
getCouponPromotionVO
(
shoppingCartInfoRequestVo
,
userLoginInfoDto
);
// 促销活动的优惠金额计算
this
.
updateShoppingCartGoodsDiscount
(
couponPromotionVO
,
activityQueryDto
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
,
shoppingCartInfoRequestVo
,
userLoginInfoDto
,
shoppingCartInfoRequestVo
.
getMenuType
(),
deliveryAmount
);
//设置更新响应信息
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
.
getToastMsg
(),
partnerId
,
storeId
,
crateUserId
,
ShoppingCartConstant
.
QUERY_INFO
,
shoppingCartInfoRequestVo
);
// 在原价、现价、折扣价上增加第一次使用会员卡的费用
this
.
addNeedCardAmount
(
shoppingCartInfoRequestVo
,
shoppingCartGoodsResponseVo
);
// 设置购物车版本号
shoppingCartGoodsResponseVo
.
setCarVer
(
collageCartBaseService
.
incrementCartVersion
(
partnerId
,
storeId
,
crateUserId
));
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
}
@Override
@Override
...
@@ -209,7 +469,29 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -209,7 +469,29 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Override
@Override
public
BaseResponse
clear
(
ShoppingCartClearRequestVo
request
)
{
public
BaseResponse
clear
(
ShoppingCartClearRequestVo
request
)
{
return
null
;
// 拼单发起人
String
createCollageUserId
=
request
.
getCreateCollageUserId
();
if
(
StringUtils
.
isBlank
(
createCollageUserId
))
{
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
String
partnerId
=
request
.
getPartnerId
();
String
storeId
=
request
.
getShopId
();
if
(
StringUtils
.
isEmpty
(
partnerId
)
||
StringUtils
.
isEmpty
(
storeId
)){
throw
new
ServiceException
(
ResponseResult
.
PARAMETER_MISSING
);
}
CustomerInfoVo
userLoginInfoDto
=
getCustomerInfoVo
(
request
.
getSessionId
());
if
(
null
==
userLoginInfoDto
||
StringUtils
.
isEmpty
(
userLoginInfoDto
.
getMemberId
())){
throw
new
ServiceException
(
ResponseResult
.
NOT_LOGIN
);
}
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
cartParamDto
=
new
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
();
cartParamDto
.
setPartnerId
(
partnerId
);
cartParamDto
.
setStoreId
(
storeId
);
cartParamDto
.
setUserId
(
createCollageUserId
);
collageCartBaseService
.
clear
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
return
ResponseUtil
.
success
();
}
}
@Override
@Override
...
@@ -379,22 +661,25 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -379,22 +661,25 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param partnerId
* @param partnerId
* @param storeId
* @param storeId
* @param crateUserId
* @param crateUserId
* @param addShoppingCartGoodsRequestVo
* @param shopId
* @param spuId
* @param createCollageUserId
* @param currentSessionId
*/
*/
public
void
check
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
AddShoppingCartGoodsRequestVo
addShoppingCartGoodsRequestVo
){
public
void
check
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
String
shopId
,
String
spuId
,
String
createCollageUserId
,
String
currentSessionId
){
//店铺id不能为空
//店铺id不能为空
if
(
StringUtils
.
isEmpty
(
addShoppingCartGoodsRequestVo
.
getShopId
()
)){
if
(
StringUtils
.
isEmpty
(
shopId
)){
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
}
//拼单不支持用商品券、换购券
//拼单不支持用商品券、换购券
if
(
null
!=
addShoppingCartGoodsRequestVo
.
getSpuId
()
&&
addShoppingCartGoodsRequestVo
.
getSpuId
()
.
startsWith
(
CommonsConstant
.
COUPON_PREFIX
)){
if
(
null
!=
spuId
&&
spuId
.
startsWith
(
CommonsConstant
.
COUPON_PREFIX
)){
throw
new
ServiceException
(
ResponseResult
.
COUPON_SHOP_NOTSUPPORT
);
throw
new
ServiceException
(
ResponseResult
.
COUPON_SHOP_NOTSUPPORT
);
}
}
// 拼单发起人id不能为空
// 拼单发起人id不能为空
// 拼单购物相关的redis的key都需要拼单发起人id,所以这个值是不能为空的
// 拼单购物相关的redis的key都需要拼单发起人id,所以这个值是不能为空的
if
(
StringUtils
.
isEmpty
(
addShoppingCartGoodsRequestVo
.
getCreateCollageUserId
()
)){
if
(
StringUtils
.
isEmpty
(
createCollageUserId
)){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
}
...
@@ -415,14 +700,14 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -415,14 +700,14 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
// 判单拼单的点餐位是否存在
// 判单拼单的点餐位是否存在
// 发起拼单、加入拼单,都会给用户创建点餐位,用来存储用户的购物车行id
// 发起拼单、加入拼单,都会给用户创建点餐位,用来存储用户的购物车行id
// 并设置其相应的购物车行id为空集合,没有点餐位,则认为该用户是没有加入拼单
// 并设置其相应的购物车行id为空集合,没有点餐位,则认为该用户是没有加入拼单
List
<
String
>
cartGoodsUids
=
collageCartBaseService
.
getCollageMemberHashKey
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
List
<
String
>
cartGoodsUids
=
collageCartBaseService
.
getCollageMemberHashKey
(
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
if
(
cartGoodsUids
==
null
){
if
(
cartGoodsUids
==
null
){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_ADD
);
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_ADD
);
}
}
// 校验用户选好了状态
// 校验用户选好了状态
// 只有用户不是选好了状态的时候才能更改购物车
// 只有用户不是选好了状态的时候才能更改购物车
Boolean
memberState
=
collageCartBaseService
.
getCollageMemStateHashKey
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
Boolean
memberState
=
collageCartBaseService
.
getCollageMemStateHashKey
(
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
if
(
memberState
!=
null
&&
memberState
){
if
(
memberState
!=
null
&&
memberState
){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_ALREADY_CHOOSE
);
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_ALREADY_CHOOSE
);
}
}
...
@@ -434,11 +719,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -434,11 +719,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param partnerId
* @param partnerId
* @param storeId
* @param storeId
* @param crateUserId
* @param crateUserId
* @param
addShoppingCartGoodsRequestVo
* @param
carVer
*/
*/
private
void
dolock
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
AddShoppingCartGoodsRequestVo
addShoppingCartGoodsRequestVo
)
{
private
void
dolock
(
String
partnerId
,
String
storeId
,
String
crateUserId
,
Integer
carVer
)
{
// 设置版本锁控制购物车只能一个人进行操作
// 设置版本锁控制购物车只能一个人进行操作
Integer
carVer
=
addShoppingCartGoodsRequestVo
.
getCarVer
();
if
(
carVer
==
null
||
carVer
<
1
)
{
if
(
carVer
==
null
||
carVer
<
1
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
}
...
@@ -573,4 +857,94 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
...
@@ -573,4 +857,94 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
calculationDiscountGoodsList
.
add
(
calculationDiscountGoods
);
calculationDiscountGoodsList
.
add
(
calculationDiscountGoods
);
}
}
}
}
@Override
public
BaseResponse
clearPartCarGoods
(
ShoppingCartCollageClearRequestVo
shoppingCartCollageClearRequestVo
)
{
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
shoppingCartCollageClearRequestVo
.
getSessionId
());
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
assortmentCustomerInfoVo
);
String
currentUserId
=
userLoginInfoDto
.
getMemberId
();
String
currentSessionId
=
shoppingCartCollageClearRequestVo
.
getSessionId
();
String
partnerId
=
shoppingCartCollageClearRequestVo
.
getPartnerId
();
String
storeId
=
shoppingCartCollageClearRequestVo
.
getShopId
();
String
appId
=
shoppingCartCollageClearRequestVo
.
getAppId
();
String
menuType
=
shoppingCartCollageClearRequestVo
.
getMenuType
();
Integer
orderType
=
shoppingCartCollageClearRequestVo
.
getOrderType
();
String
receiveId
=
shoppingCartCollageClearRequestVo
.
getReceiveId
();
// 获取拼单发起人id
String
crateUserId
=
shoppingCartCollageClearRequestVo
.
getCreateCollageUserId
();
// 拼单发起人id不能为空
// 拼单购物相关的redis的key都需要拼单发起人id,所以这个值是不能为空的
if
(
StringUtils
.
isEmpty
(
crateUserId
)){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
// 获取不到拼单的基础信息,抛出异常
// 拼单的有效时间为1小时,当获取不到拼单的基础信息时,认为这个拼单没有发起、已经失效、已经结束
Map
<
String
,
String
>
collageBase
=
collageCartBaseService
.
getCollageBase
(
partnerId
,
storeId
,
crateUserId
);
if
(
collageBase
==
null
||
collageBase
.
isEmpty
()){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
// 购物车版本加锁
dolock
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartCollageClearRequestVo
.
getCarVer
());
List
<
CartGoods
>
cartGoodsList
=
null
;
try
{
// 获取用户的购物车行id
List
<
String
>
goodsUids
=
collageCartBaseService
.
getCollageCartGoodsUids
(
partnerId
,
storeId
,
crateUserId
,
shoppingCartCollageClearRequestVo
.
getSessionId
());
// 清除购物车中的购物车行信息
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
>
nowCartGoodsList
=
collageCartBaseService
.
removeGoodsUids
(
partnerId
,
storeId
,
crateUserId
,
goodsUids
);
if
(
null
!=
nowCartGoodsList
&&
!
nowCartGoodsList
.
isEmpty
()){
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
nowCartGoodsList
),
CartGoods
.
class
);
}
// check购物车中所有商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
cartGoodsList
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
shoppingCartCollageClearRequestVo
.
getOrderType
(),
""
,
shoppingCartCollageClearRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
}
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新存储最新购物车
List
<
CartGoods
>
cartGoodsRedisList
=
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
cartGoodsList
,
shoppingCartCollageClearRequestVo
.
getSessionId
(),
""
,
collageCartBaseService
);
// 更新拼单购物车人员缓存中的的购物车行id集合
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
filter
(
cartGoods1
->
currentSessionId
.
equals
(
cartGoods1
.
getSessionId
())).
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
shoppingCartCollageClearRequestVo
.
getSessionId
());
}
catch
(
Exception
e
)
{
ErrorLog
.
errorConvertJson
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"shoppingCartCollageServiceImpl updateGoodsQty:"
+
e
.
getMessage
(),
e
);
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
,
"购物车商品有变动,请手动刷新再修改"
);
}
finally
{
// 购物车版本解锁
// 版本锁的粒度控制在检查购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock
(
partnerId
,
storeId
,
crateUserId
);
}
Long
deliveryAmount
=
calculateDeliveryAmount
(
receiveId
,
partnerId
,
storeId
,
userLoginInfoDto
.
getWxAppid
(),
shoppingCartGoodsResponseVo
);
// 获取优惠信息
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
=
getCalculationDiscountResult
(
menuType
,
partnerId
,
storeId
,
crateUserId
,
appId
,
userLoginInfoDto
.
getWxAppid
(),
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
cartGoodsList
,
new
ArrayList
(),
new
ArrayList
<>(),
null
,
deliveryAmount
);
if
(
calculationDiscountResult
==
null
)
{
shoppingCartGoodsResponseVo
.
setProducts
(
cartGoodsList
);
}
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
crateUserId
,
appId
,
shoppingCartCollageClearRequestVo
.
getOrderType
());
// 促销活动的优惠金额计算
updateShoppingCartGoodsDiscount
(
null
,
activityQueryDto
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
,
null
,
userLoginInfoDto
,
shoppingCartCollageClearRequestVo
.
getMenuType
(),
deliveryAmount
);
//设置更新响应信息
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
cartGoodsList
,
shoppingCartGoodsResponseVo
.
getToastMsg
(),
partnerId
,
storeId
,
crateUserId
,
ShoppingCartConstant
.
ADD_AND_UPDATE
,
null
);
// 设置购物车版本号
shoppingCartGoodsResponseVo
.
setCarVer
(
collageCartBaseService
.
incrementCartVersion
(
partnerId
,
storeId
,
crateUserId
));
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
}
}
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