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
1e210723
Commit
1e210723
authored
Nov 01, 2022
by
周晓航
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/zxh/套餐商品库存新模式-20221018'
parents
b2144915
09584aaf
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
13 deletions
+46
-13
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
+26
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ProductServiceImpl.java
+19
-13
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
+1
-0
shopping-cart-application-service/src/test/spock/cn/freemud/service/impl/ShoppingCartOldDiscountSpock.groovy
+0
-0
No files found.
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
View file @
1e210723
...
...
@@ -25,6 +25,7 @@ import cn.freemud.enums.ActivityTypeEnum;
import
cn.freemud.enums.GoodsTypeEnum
;
import
cn.freemud.enums.ProductType
;
import
cn.freemud.utils.BeanUtil
;
import
cn.freemud.utils.LogUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
...
...
@@ -644,6 +645,31 @@ public class ShoppingCartConvertAdapter {
return
result
;
}
/**
* 只维护 套餐券的 model 和 库存限制
* @param cartGoods
* @param productBeans
*/
public
void
updateStockModelAndStockLimit
(
CartGoods
cartGoods
,
List
<
ProductTypeBeanDTO
>
productBeans
)
{
try
{
// LogUtil.info("fisherman 套餐券",JSON.toJSON(cartGoods),JSON.toJSONString(productBeans));
Optional
<
ProductTypeBeanDTO
>
firstProduct
=
productBeans
.
stream
().
filter
(
p
->
ObjectUtils
.
equals
(
p
.
getPid
(),
cartGoods
.
getSpuId
())).
findFirst
();
if
(!
firstProduct
.
isPresent
())
{
return
;
}
ProductTypeBeanDTO
spuProduct
=
firstProduct
.
get
();
boolean
isSkuProduct
=
ObjectUtils
.
equals
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
SKU_GOODS
.
getGoodsType
(),
cartGoods
.
getGoodsType
());
SkuProductBean
skuProduct
=
isSkuProduct
?
spuProduct
.
getSkuList
().
stream
().
filter
(
p
->
ObjectUtils
.
equals
(
cartGoods
.
getSkuId
(),
p
.
getSkuId
())).
findFirst
().
orElse
(
null
):
null
;
if
(
isSkuProduct
&&
skuProduct
==
null
){
//特殊场景前端传一个skuid非spuid下多规格商品
throw
new
ServiceException
(
CartResponseConstant
.
FAIL
);
}
cartGoods
.
setStockLimit
(
isSkuProduct
?
ObjectUtils
.
equals
(
1
,
skuProduct
.
getStockLimit
())
:
ObjectUtils
.
equals
(
1
,
spuProduct
.
getStockLimit
()));
cartGoods
.
setStockMode
(
spuProduct
.
getStockMode
());
}
catch
(
Exception
ex
)
{
ShoppingSdkLogUtil
.
errorLog
(
"updateCartGoodsInfoNew_Error cartGoods:{},productBeans:{}"
,
ex
,
JSONObject
.
toJSONString
(
cartGoods
),
JSONObject
.
toJSONString
(
productBeans
));
cartGoods
.
setCartGoodsUid
(
null
);
}
}
/**
* 更新当前购物车商品行信息
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ProductServiceImpl.java
View file @
1e210723
...
...
@@ -14,7 +14,10 @@ import cn.freemud.entities.vo.GetMemberCouponRequestVo;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.service.ProductService
;
import
cn.freemud.service.thirdparty.ProductClient
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.*
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.ActivityChannelEnum
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.GoodsTypeEnum
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.PropertyConvertUtil
;
...
...
@@ -55,7 +58,7 @@ public class ProductServiceImpl implements ProductService {
private
ShoppingCartConvertAdapter
shoppingCartConvertAdapter
;
@Override
public
boolean
hasRequiredProducts
(
String
partnerId
,
String
storeId
,
List
<
CartGoods
>
cartGoodsList
,
String
menuType
)
{
public
boolean
hasRequiredProducts
(
String
partnerId
,
String
storeId
,
List
<
CartGoods
>
cartGoodsList
,
String
menuType
)
{
RequiredProductRequest
request
=
RequiredProductRequest
.
builder
().
channel
(
menuType
).
partnerId
(
partnerId
).
shopId
(
storeId
).
build
();
ProductBaseResponse
<
List
<
String
>>
requiredProductList
=
productClient
.
getRequiredProductList
(
request
);
if
(
null
!=
requiredProductList
&&
ResponseCodeConstant
.
RESPONSE_SUCCESS
.
equals
(
requiredProductList
.
getErrcode
())
&&
...
...
@@ -76,15 +79,15 @@ public class ProductServiceImpl implements ProductService {
public
BaseResponse
<
CheckCartRequest
>
checkAllCartGoodsNew
(
CheckCartRequest
checkCartRequest
)
{
try
{
ValidateShopProductRequest
validateShopProductRequest
=
shoppingCartConvertAdapter
.
getValidateShopProductRequest
(
checkCartRequest
);
if
(
CollectionUtils
.
isEmpty
(
validateShopProductRequest
.
getProductTypeList
()))
{
if
(
CollectionUtils
.
isEmpty
(
validateShopProductRequest
.
getProductTypeList
()))
{
return
CartResponseUtil
.
success
(
checkCartRequest
);
}
ProductBaseResponse
<
ValiadShopProductResponse
>
valiadResponse
=
productClient
.
validateShopProduct
(
validateShopProductRequest
);
if
(
valiadResponse
==
null
||
!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
valiadResponse
.
getErrcode
())
||
valiadResponse
.
getData
()==
null
)
{
if
(
valiadResponse
==
null
||
!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
valiadResponse
.
getErrcode
())
||
valiadResponse
.
getData
()
==
null
)
{
checkCartRequest
.
getCartGoodsList
().
clear
();
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
return
CartResponseUtil
.
error
(
valiadResponse
.
getErrmsg
(),
checkCartRequest
);
return
CartResponseUtil
.
error
(
valiadResponse
.
getErrmsg
(),
checkCartRequest
);
}
ValiadShopProductResponse
valiadResult
=
valiadResponse
.
getData
();
if
(
CollectionUtils
.
isEmpty
(
valiadResult
.
getSuccessList
()))
{
...
...
@@ -96,21 +99,21 @@ public class ProductServiceImpl implements ProductService {
Map
<
String
,
ValiadShopProductResult
>
successMap
=
valiadResult
.
getSuccessList
().
stream
().
collect
(
Collectors
.
toMap
(
ValiadShopProductResult:
:
getUuid
,
Function
.
identity
(),
(
k1
,
k2
)
->
k1
));
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
boolean
hasChange
=
false
;
for
(
CartGoods
cartGoods
:
checkCartRequest
.
getCartGoodsList
())
{
for
(
CartGoods
cartGoods
:
checkCartRequest
.
getCartGoodsList
())
{
// 当goodsId为空或商品是商品券时直接跳过
if
(
StringUtils
.
isEmpty
(
cartGoods
.
getGoodsId
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
COUPON_GOODS
.
getGoodsType
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
HG_COUPON_GOODS
.
getGoodsType
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
BUY_M_SEND_N_COUPON
.
getGoodsType
()))
{
continue
;
}
if
(!
successMap
.
containsKey
(
cartGoods
.
getCartGoodsUid
())){
if
(!
successMap
.
containsKey
(
cartGoods
.
getCartGoodsUid
()))
{
hasChange
=
true
;
cartGoods
.
setCartGoodsUid
(
null
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
}
}
if
(
hasChange
){
if
(
hasChange
)
{
setToastMsgIfNotExist
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
(),
ShoppingCartConstant
.
SHOPPING_CART_GOODS_CHANGE
);
checkCartRequest
.
getCartGoodsList
().
removeIf
(
k
->
StringUtils
.
isEmpty
(
k
.
getCartGoodsUid
()));
}
...
...
@@ -122,6 +125,8 @@ public class ProductServiceImpl implements ProductService {
if
(
StringUtils
.
isEmpty
(
cartGoods
.
getGoodsId
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
COUPON_GOODS
.
getGoodsType
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
HG_COUPON_GOODS
.
getGoodsType
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
GoodsTypeEnum
.
BUY_M_SEND_N_COUPON
.
getGoodsType
()))
{
//商品券 如果是套餐 需要维护套餐的 stockMode stockLimit 用于库存扣减 【【礼赞】套餐商品创建页&编辑页新增库存模式选择】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001053416
shoppingCartConvertAdapter
.
updateStockModelAndStockLimit
(
cartGoods
,
productList
);
continue
;
}
// fisherman 添加原有商品类型
...
...
@@ -151,10 +156,11 @@ public class ProductServiceImpl implements ProductService {
}
catch
(
Exception
e
)
{
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
return
CartResponseUtil
.
error
(
e
.
getMessage
(),
checkCartRequest
);
return
CartResponseUtil
.
error
(
e
.
getMessage
(),
checkCartRequest
);
}
}
/**
* 当ToastMsg为空时才赋值
*
...
...
@@ -177,10 +183,10 @@ public class ProductServiceImpl implements ProductService {
private
CartGoodsStates
updateSpqCartGoodsInfo
(
List
<
CartGoods
>
cartGoodsList
,
Integer
orderWay
,
String
partnerId
,
String
trackingNo
,
CartGoodsStates
goodsStates
,
String
storeId
)
{
//获取所有商品券cartGoodsUid=sqp+code
List
<
String
>
couponIds
=
cartGoodsList
.
parallelStream
()
.
filter
(
k
->
StringUtils
.
isNotEmpty
(
k
.
getCartGoodsUid
())
&&
k
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
)).
map
(
CartGoods:
:
getSpuId
).
collect
(
Collectors
.
toList
());
.
filter
(
k
->
StringUtils
.
isNotEmpty
(
k
.
getCartGoodsUid
())
&&
k
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
)).
map
(
CartGoods:
:
getSpuId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
couponIds
))
{
couponIds
=
cartGoodsList
.
parallelStream
()
.
filter
(
k
->
StringUtils
.
isNotBlank
(
k
.
getCouponCode
())).
map
(
CartGoods:
:
getCouponCode
).
collect
(
Collectors
.
toList
());
.
filter
(
k
->
StringUtils
.
isNotBlank
(
k
.
getCouponCode
())).
map
(
CartGoods:
:
getCouponCode
).
collect
(
Collectors
.
toList
());
}
if
(
CollectionUtils
.
isEmpty
(
couponIds
))
{
return
goodsStates
;
...
...
@@ -194,7 +200,7 @@ public class ProductServiceImpl implements ProductService {
List
<
String
>
activityCode
;
Map
<
String
,
Boolean
>
couponOrderWayMap
;
detailsMap
=
detailVOList
.
stream
().
collect
(
Collectors
.
toMap
(
p
->
p
.
getCode
(),
(
p
)
->
p
,
(
v1
,
v2
)
->
v1
));
detailsMap
=
detailVOList
.
stream
().
collect
(
Collectors
.
toMap
(
p
->
p
.
getCode
(),
(
p
)
->
p
,
(
v1
,
v2
)
->
v1
));
activityCode
=
detailVOList
.
stream
().
map
(
p
->
p
.
getActiveCode
()).
collect
(
Collectors
.
toList
());
couponOrderWayMap
=
getCouponOrderWay
(
partnerId
,
activityCode
,
orderWay
,
trackingNo
);
//遍历商品券是否有当前点餐方式点餐
...
...
@@ -280,7 +286,7 @@ public class ProductServiceImpl implements ProductService {
List
<
CartGoods
>
cartGoodsByProduct
=
cartGoodsList
.
stream
()
.
filter
(
cartGoods
->
cartGoods
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
))
.
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
cartGoodsByProduct
)){
if
(
CollectionUtils
.
isEmpty
(
cartGoodsByProduct
))
{
cartGoodsByProduct
=
cartGoodsList
.
stream
()
.
filter
(
cartGoods
->
StringUtils
.
isNotBlank
(
cartGoods
.
getCouponCode
()))
.
collect
(
Collectors
.
toList
());
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
View file @
1e210723
...
...
@@ -1201,6 +1201,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo
.
setToastMsg
(
cartGoodsResponseVo
.
getToastMsg
());
}
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// LogUtil.info("fisherman 套餐券 002 ",JSON.toJSON(cartGoodsList),JSON.toJSONString(checkCartRequest));
boolean
cannotOrder
=
true
;
for
(
CartGoods
p
:
cartGoodsList
)
{
//singleOrder=1 表示为不可单点商品, 商品全部为不可单点商品时 不可下单
...
...
shopping-cart-application-service/src/test/spock/cn/freemud/service/impl/ShoppingCartOldDiscountSpock.groovy
View file @
1e210723
This diff is collapsed.
Click to expand it.
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