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
f52b99a4
Commit
f52b99a4
authored
Sep 28, 2020
by
刘鹏飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
拼单购物车相关
parent
62c9047a
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
709 additions
and
30 deletions
+709
-30
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
+74
-8
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartCollageController.java
+40
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartClearRequestVo.java
+5
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartCollageClearRequestVo.java
+119
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartInfoRequestVo.java
+6
-1
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/UpdateShoppingCartGoodsQtyRequestVo.java
+6
-1
shopping-cart-application-service/src/main/java/cn/freemud/factory/AbstractShoppingCartImpl.java
+84
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/ShoppingCartCollageService.java
+48
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/AssortmentSdkService.java
+4
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
+323
-20
No files found.
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/impl/CollageCartBaseServiceImpl.java
View file @
f52b99a4
...
...
@@ -3,19 +3,15 @@ package com.freemud.sdk.api.assortment.shoppingcart.service.impl;
import
ch.qos.logback.classic.Level
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.redis.RedisCache
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
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.LogThreadLocal
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.MealClearOperationEnum
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.VersionUtils
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CartAddItem
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto
;
import
com.freemud.sdk.api.assortment.shoppingcart.exception.ServiceException
;
import
com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -23,13 +19,10 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.data.redis.core.BoundHashOperations
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
java.lang.reflect.Method
;
import
java.text.MessageFormat
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
...
...
@@ -115,8 +108,16 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
@Override
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
;
}
}
@Override
public
String
getCouponAppId
()
{
...
...
@@ -130,13 +131,38 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
@Override
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
;
}
}
@Override
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
;
}
}
/**
* 获取当前购物车版本
...
...
@@ -255,6 +281,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
* @param partnerId
* @param storeId
...
...
@@ -277,6 +329,20 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
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 @
f52b99a4
...
...
@@ -14,12 +14,16 @@ package cn.freemud.controller;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ResponseResult
;
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.log.ApiAnnotation
;
import
com.freemud.application.sdk.api.log.LogParams
;
import
io.swagger.annotations.Api
;
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.validation.annotation.Validated
;
...
...
@@ -42,4 +46,40 @@ public class ShoppingCartCollageController {
public
BaseResponse
addGoods
(
@Validated
@LogParams
@RequestBody
AddShoppingCartGoodsRequestVo
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/entities/vo/ShoppingCartClearRequestVo.java
View file @
f52b99a4
...
...
@@ -31,4 +31,9 @@ public class ShoppingCartClearRequestVo extends BaseRequestVo {
private
Integer
operationType
;
private
String
tableNumber
;
/**
* 拼单发起人userId(拼单)
*/
private
String
createCollageUserId
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartCollageClearRequestVo.java
0 → 100644
View file @
f52b99a4
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartClearRequestVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: ping.wu
* @date: 2018/5/22 11:16
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package
cn
.
freemud
.
entities
.
vo
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
@Data
public
class
ShoppingCartCollageClearRequestVo
extends
BaseRequestVo
{
@NotEmpty
(
message
=
"sessionId不能为空"
)
private
String
sessionId
;
private
String
version
;
/**
* 购物车版本号(围餐,拼单)
*/
private
Integer
carVer
;
/**
* 拼单发起人userId(拼单)
*/
private
String
createCollageUserId
;
@NotEmpty
(
message
=
"appId不能为空"
)
private
String
appId
;
/**
* 是否为结算页
* 1:结算页 0:点餐页
* 结算页会查询用户优惠券,点餐页不会查询用户优惠券
*/
private
Integer
flag
;
/**
* 优惠券code
*/
private
String
couponCode
;
/**
* 优惠券对应的活动号
*/
private
String
activityCode
;
/**
* 到店类型 orderType 传1的时候 如果reachStoreTyp为空转成订单类型4 如果不为空存储4(打包带走)和5(店内就餐)
*/
private
Integer
reachStoreType
;
/**
* 加价购商品
*/
private
List
<
ShoppingCartInfoRequestVo
.
SendGoods
>
sendGoods
;
/**
* 是否使用用户积分
* 1=不显示积分
* 2=显示积分但不扣减
* 3=显示积分且扣减
*/
private
Integer
useCustomerScore
;
/**
* svc 卡支付使用
*/
private
String
cardCode
;
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private
String
receiveId
;
/**
* 会员卡信息
*/
private
ShoppingCartInfoRequestVo
.
BuyMemberCard
buyMemberCard
;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private
String
menuType
;
@Data
public
final
static
class
SendGoods
{
/**
* 商品Id
*/
@NotNull
private
String
goodsId
;
private
Long
originalPrice
;
/**
* 商品数量
*/
@NotNull
private
Integer
qty
;
}
@Data
public
final
static
class
BuyMemberCard
{
/**
* 付费会员卡ID
*/
private
String
paidId
;
/**
* 规则ID
*/
private
String
ruleId
;
}
}
\ No newline at end of file
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartInfoRequestVo.java
View file @
f52b99a4
...
...
@@ -32,10 +32,15 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
private
String
version
;
/**
* 购物车版本号(围餐)
* 购物车版本号(围餐
,拼单
)
*/
private
Integer
carVer
;
/**
* 拼单发起人userId(拼单)
*/
private
String
createCollageUserId
;
@NotEmpty
(
message
=
"appId不能为空"
)
private
String
appId
;
/**
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/UpdateShoppingCartGoodsQtyRequestVo.java
View file @
f52b99a4
...
...
@@ -32,6 +32,11 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
private
String
cartGoodsUid
;
/**
* 拼单发起人userId(拼单)
*/
private
String
createCollageUserId
;
/**
* 更新后商品数量
*/
@NotNull
(
message
=
"qty不能为空"
)
...
...
@@ -39,7 +44,7 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
private
String
version
;
/**
* 购物车版本号(围餐)
* 购物车版本号(围餐
、拼单
)
*/
private
Integer
carVer
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/factory/AbstractShoppingCartImpl.java
View file @
f52b99a4
package
cn
.
freemud
.
factory
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.ShoppingCartConstant
;
...
...
@@ -14,6 +15,7 @@ import cn.freemud.interceptor.BizServiceException;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.ActivityService
;
import
cn.freemud.service.BuriedPointService
;
import
cn.freemud.service.ItemService
;
import
cn.freemud.service.ShoppingCartNewService
;
import
cn.freemud.service.impl.*
;
import
cn.freemud.service.thirdparty.CustomerApplicationClient
;
...
...
@@ -88,6 +90,9 @@ public abstract class AbstractShoppingCartImpl implements ShoppingCartNewService
@Autowired
private
BuriedPointService
buriedPointService
;
@Autowired
private
ItemService
itemService
;
// 配送费逻辑是否使用旧的
@Value
(
"${store.delivery.use.old:true}"
)
private
boolean
storeDeliveryUseOld
;
...
...
@@ -582,4 +587,83 @@ public abstract class AbstractShoppingCartImpl implements ShoppingCartNewService
buriedPointService
.
buriedPointAddShoppingCart
(
productVos
,
shoppingCartRequestDto
);
}
/**
* 检查购物车商品库存数量
*
* @param updateShoppingCartGoodsQtyRequestVo
* @param cartGoods
*/
public
void
checkUpdateStock
(
UpdateShoppingCartGoodsQtyRequestVo
updateShoppingCartGoodsQtyRequestVo
,
CartGoods
cartGoods
)
{
Integer
qty
=
updateShoppingCartGoodsQtyRequestVo
.
getQty
();
// 购物车商品数量减少
if
(
cartGoods
.
getQty
()
>
qty
)
{
return
;
}
String
partnerId
=
updateShoppingCartGoodsQtyRequestVo
.
getPartnerId
();
String
storeId
=
updateShoppingCartGoodsQtyRequestVo
.
getShopId
();
//查询商品信息
List
<
String
>
pids
=
new
ArrayList
<>();
pids
.
add
(
cartGoods
.
getGoodsId
());
Map
<
String
,
GetProductsVo
>
products
=
itemService
.
getProducts
(
pids
,
partnerId
,
storeId
,
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
GetProductsVo
getProductsVo
=
products
.
get
(
cartGoods
.
getGoodsId
());
// 商品没有库存限制
if
(
getProductsVo
==
null
||
getProductsVo
.
getStockLimit
()
!=
1
)
{
return
;
}
ShoppingCartConvertAdapter
.
setClassification
(
cartGoods
,
getProductsVo
);
GetProductStockRequestDto
requestDto
=
new
GetProductStockRequestDto
();
requestDto
.
setChannel
(
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
requestDto
.
setPartnerId
(
partnerId
);
requestDto
.
setStoreId
(
storeId
);
requestDto
.
setProductIds
(
Collections
.
singletonList
(
Long
.
parseLong
(
cartGoods
.
getGoodsId
())));
GetProductStockResponseDto
availableStocks
=
stockClient
.
getAvailableStocks
(
requestDto
);
if
((
availableStocks
!=
null
)
&&
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
availableStocks
.
getCode
())))
{
if
((
CollectionUtils
.
isEmpty
(
availableStocks
.
getResult
()))
||
(
availableStocks
.
getResult
().
get
(
0
).
getQty
()
!=
null
&&
qty
>
availableStocks
.
getResult
().
get
(
0
).
getQty
()))
{
Integer
stock
=
0
;
if
(!
CollectionUtils
.
isEmpty
(
availableStocks
.
getResult
())
&&
(
stock
=
availableStocks
.
getResult
().
get
(
0
).
getQty
())
>
0
)
{
throw
new
BizServiceException
(
ResponseResult
.
SHOPPING_CART_STOCK_NOT_HAVE
,
"仅剩"
+
stock
+
"件库存了"
);
}
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_STOCK_NOT_HAVE
);
}
}
}
/**
* 在原价、现价、折扣价上增加第一次使用会员卡的费用
*
* @param shoppingCartInfoRequestVo
* @param shoppingCartGoodsResponseVo
*/
public
void
addNeedCardAmount
(
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
ShoppingCartInfoRequestVo
.
BuyMemberCard
buyMemberCard
=
shoppingCartInfoRequestVo
.
getBuyMemberCard
();
if
(
shoppingCartInfoRequestVo
.
getBuyMemberCard
()
==
null
||
StringUtils
.
isEmpty
(
buyMemberCard
.
getPaidId
())
||
StringUtils
.
isEmpty
(
buyMemberCard
.
getRuleId
()))
{
return
;
}
GetPaidRuleRequestDto
getPaidRuleRequestDto
=
new
GetPaidRuleRequestDto
();
getPaidRuleRequestDto
.
setPartnerId
(
shoppingCartInfoRequestVo
.
getPartnerId
());
getPaidRuleRequestDto
.
setPaidId
(
buyMemberCard
.
getPaidId
());
getPaidRuleRequestDto
.
setRuleId
(
buyMemberCard
.
getRuleId
());
BaseResponse
<
GetPaidRuleResponseDto
>
baseResponse
=
customerApplicationClient
.
getPaidRule
(
getPaidRuleRequestDto
);
if
(
baseResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
())
||
baseResponse
.
getResult
()
==
null
||
baseResponse
.
getResult
().
getActivityPrice
()
==
null
)
{
return
;
}
// 购买会员卡的金额
Integer
activityPrice
=
baseResponse
.
getResult
().
getActivityPrice
();
// 首次使用会员卡享受的折扣金额
Integer
firstCouponAmount
=
baseResponse
.
getResult
().
getFirstCouponAmount
()
==
null
?
0
:
baseResponse
.
getResult
().
getFirstCouponAmount
();
Long
originalTotalAmount
=
shoppingCartGoodsResponseVo
.
getOriginalTotalAmount
()
+
activityPrice
;
Long
totalAmount
=
shoppingCartGoodsResponseVo
.
getTotalAmount
()
+
(
activityPrice
-
firstCouponAmount
);
Long
totalDiscountAmount
=
shoppingCartGoodsResponseVo
.
getTotalDiscountAmount
()
+
firstCouponAmount
;
shoppingCartGoodsResponseVo
.
setOriginalTotalAmount
(
originalTotalAmount
);
shoppingCartGoodsResponseVo
.
setTotalAmount
(
totalAmount
);
shoppingCartGoodsResponseVo
.
setTotalDiscountAmount
(
totalDiscountAmount
);
shoppingCartGoodsResponseVo
.
setCardOriginalAmount
(
activityPrice
);
shoppingCartGoodsResponseVo
.
setCardDiscountAmount
(
firstCouponAmount
);
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/ShoppingCartCollageService.java
0 → 100644
View file @
f52b99a4
package
cn
.
freemud
.
service
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.ShoppingCartConstant
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.activity.ActivityQueryDto
;
import
cn.freemud.entities.dto.activity.ActivityQueryResponseDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ActivityTypeEnum
;
import
cn.freemud.enums.GoodsTypeEnum
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title:
* @Package cn.freemud.service
* @Description:
* @author: pengfei.liu
* @date: 2020/9/28
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public
interface
ShoppingCartCollageService
{
/**
* 清空用户自己的购物车
*
* @param request
* @return
*/
BaseResponse
clearPartCarGoods
(
ShoppingCartCollageClearRequestVo
request
);
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/AssortmentSdkService.java
View file @
f52b99a4
...
...
@@ -54,6 +54,7 @@ public class AssortmentSdkService {
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
cartParamDto
=
getCartParamDto
(
partnerId
,
storeId
,
userId
);
cartParamDto
.
setCartGoodsUid
(
cartGoodsUid
);
cartParamDto
.
setTableNumber
(
tableNumber
);
cartParamDto
.
setUserId
(
userId
);
BaseResponse
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
>
baseResponse
=
shoppingCartService
.
getCartGoods
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
if
(
baseResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
())
||
baseResponse
.
getResult
()
==
null
)
{
ErrorLog
.
printLog
(
SDKCommonBaseContextWare
.
getAppName
(),
LogThreadLocal
.
getTrackingNo
(),
getClass
(),
"getCartGoods:"
+
JSONObject
.
toJSONString
(
baseResponse
),
cartParamDto
,
Level
.
ERROR
);
...
...
@@ -78,6 +79,7 @@ public class AssortmentSdkService {
cartParamDto
.
setCartGoodsUid
(
cartGoodsUid
);
cartParamDto
.
setQty
(
qty
);
cartParamDto
.
setTableNumber
(
tableNumber
);
cartParamDto
.
setUserId
(
userId
);
BaseResponse
<
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
>>
baseResponse
=
shoppingCartService
.
updateGoodsQty
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
if
(
baseResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
()))
{
return
null
;
...
...
@@ -98,6 +100,7 @@ public class AssortmentSdkService {
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
cartParamDto
=
getCartParamDto
(
partnerId
,
storeId
,
useId
);
cartParamDto
.
setSessionId
(
sessionId
);
cartParamDto
.
setTableNumber
(
tableNumber
);
cartParamDto
.
setUserId
(
useId
);
// 根据不同点餐类型获取不同购物车实例
BaseResponse
<
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
>>
baseResponse
=
shoppingCartService
.
getCartGoodsList
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
if
(
baseResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
())
||
CollectionUtils
.
isEmpty
(
baseResponse
.
getResult
()))
{
...
...
@@ -119,6 +122,7 @@ public class AssortmentSdkService {
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
cartParamDto
=
getCartParamDto
(
partnerId
,
storeId
,
useId
);
cartParamDto
.
setSessionId
(
sessionId
);
cartParamDto
.
setTableNumber
(
tableNumber
);
cartParamDto
.
setUserId
(
useId
);
cartParamDto
.
setCartGoodsList
(
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
cartGoodsList
),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
class
));
BaseResponse
<
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
>>
baseResponse
=
shoppingCartService
.
setCartGoodsList
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
if
(
baseResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
()))
{
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartCollageServiceImpl.java
View file @
f52b99a4
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.ResponseCodeConstant
;
...
...
@@ -11,12 +12,14 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import
cn.freemud.entities.dto.user.GetSessionUserInfoDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ActivityChannelEnum
;
import
cn.freemud.enums.OperationTypeEnum
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.factory.AbstractShoppingCartImpl
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.service.CommonService
;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.ShoppingCartCollageService
;
import
cn.freemud.service.ShoppingCartNewService
;
import
cn.freemud.service.thirdparty.ActivityClient
;
import
cn.freemud.service.thirdparty.CustomerApplicationClient
;
...
...
@@ -38,6 +41,7 @@ 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.ShoppingCartBaseServiceImpl
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -60,7 +64,7 @@ import java.util.stream.Collectors;
*/
@Service
public
class
ShoppingCartCollageServiceImpl
extends
AbstractShoppingCartImpl
implements
ShoppingCartNewService
{
public
class
ShoppingCartCollageServiceImpl
extends
AbstractShoppingCartImpl
implements
ShoppingCartNewService
,
ShoppingCartCollageService
{
@Autowired
private
AssortmentSdkService
assortmentSdkService
;
...
...
@@ -86,6 +90,9 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Autowired
private
ActivityClient
activityClient
;
@Autowired
private
CouponAdapter
couponAdapter
;
@Override
public
BaseResponse
addGoodsByCard
(
AddGoodsByWeixinCardRequestVo
request
)
{
return
null
;
...
...
@@ -106,6 +113,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
currentUserInfoVo
);
String
currentUserId
=
currentUserInfoVo
.
getMemberId
();
String
currentSessionId
=
addShoppingCartGoodsRequestVo
.
getSessionId
();
String
partnerId
=
addShoppingCartGoodsRequestVo
.
getPartnerId
();
String
storeId
=
addShoppingCartGoodsRequestVo
.
getShopId
();
String
appId
=
addShoppingCartGoodsRequestVo
.
getAppId
();
...
...
@@ -119,10 +127,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
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
.
setSessionId
(
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
cartGoods
.
setSessionId
(
currentSessionId
);
cartGoods
.
setUserId
(
currentUserId
);
List
<
Long
>
productIds
=
new
ArrayList
<>();
...
...
@@ -132,13 +140,13 @@ 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
);
dolock
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getCarVer
()
);
List
<
CartGoods
>
allCartGoodsList
=
null
;
String
productName
=
null
;
try
{
//缓存中获取购物车商品信息
allCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
,
null
,
collageCartBaseService
);
allCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
crateUserId
,
currentSessionId
,
null
,
collageCartBaseService
);
if
(
CollectionUtils
.
isEmpty
(
allCartGoodsList
))
{
allCartGoodsList
=
new
ArrayList
<>();
}
...
...
@@ -152,8 +160,8 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
List
<
CartGoods
>
cartGoodsRedisList
=
addNotProductCouponGoods
(
addShoppingCartGoodsRequestVo
,
cartGoods
,
goodsId
,
crateUserId
,
shoppingCartGoodsResponseVo
,
allCartGoodsList
);
// 更新拼单购物车人员缓存中的的购物车行id集合
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
List
<
String
>
cartGoodsUids
=
cartGoodsRedisList
.
stream
().
filter
(
cartGoods1
->
currentSessionId
.
equals
(
cartGoods1
.
getSessionId
())).
map
(
CartGoods:
:
getCartGoodsUid
).
collect
(
Collectors
.
toList
());
collageCartBaseService
.
updateCollageCartGoodsUids
(
cartGoodsUids
,
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
// 当商品数量被设为0时
if
(
Objects
.
equals
(
cartGoods
.
getQty
(),
0
))
{
...
...
@@ -194,12 +202,194 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Override
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
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
...
...
@@ -209,7 +399,29 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Override
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
...
...
@@ -379,22 +591,25 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param partnerId
* @param storeId
* @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不能为空
if
(
StringUtils
.
isEmpty
(
addShoppingCartGoodsRequestVo
.
getShopId
()
)){
if
(
StringUtils
.
isEmpty
(
shopId
)){
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
);
}
// 拼单发起人id不能为空
// 拼单购物相关的redis的key都需要拼单发起人id,所以这个值是不能为空的
if
(
StringUtils
.
isEmpty
(
addShoppingCartGoodsRequestVo
.
getCreateCollageUserId
()
)){
if
(
StringUtils
.
isEmpty
(
createCollageUserId
)){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_NOT_EXIST
);
}
...
...
@@ -415,14 +630,14 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
// 判单拼单的点餐位是否存在
// 发起拼单、加入拼单,都会给用户创建点餐位,用来存储用户的购物车行id
// 并设置其相应的购物车行id为空集合,没有点餐位,则认为该用户是没有加入拼单
List
<
String
>
cartGoodsUids
=
collageCartBaseService
.
getCollageMemberHashKey
(
partnerId
,
storeId
,
crateUserId
,
addShoppingCartGoodsRequestVo
.
getSessionId
()
);
List
<
String
>
cartGoodsUids
=
collageCartBaseService
.
getCollageMemberHashKey
(
partnerId
,
storeId
,
crateUserId
,
currentSessionId
);
if
(
cartGoodsUids
==
null
){
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
){
throw
new
ServiceException
(
ResponseResult
.
COLLAGE_ALREADY_CHOOSE
);
}
...
...
@@ -434,11 +649,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param partnerId
* @param storeId
* @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
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
...
...
@@ -574,4 +788,93 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
}
}
@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