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
ee4ac3f0
Commit
ee4ac3f0
authored
Sep 26, 2020
by
ping.wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
定制属性与套餐子商品加料
parent
8da760ad
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
749 additions
and
61 deletions
+749
-61
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/domain/CartGoods.java
+31
-0
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
+278
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ProductAttributeValueType.java
+23
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValiadShopProductResponse.java
+25
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValiadShopProductResult.java
+28
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateShopProductRequest.java
+27
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateShopProductType.java
+34
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateSkuProductType.java
+29
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
+14
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ComboxGoodsRequestVo.java
+10
-0
shopping-cart-application-service/src/main/java/cn/freemud/enums/GoodsTypeEnum.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
+232
-60
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/MCoffeeAddGoodsRequestVo.java
+11
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/ProductClient.java
+6
-0
No files found.
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/domain/CartGoods.java
View file @
ee4ac3f0
...
...
@@ -119,6 +119,11 @@ public class CartGoods {
private
List
<
CartGoodsExtra
>
extra
;
/**
* 麦咖啡定制属性
*/
private
List
<
CartGoodsExt
>
extra2
;
/**
* 创建时间(mili)
*/
private
long
createTimeMili
=
System
.
currentTimeMillis
();
...
...
@@ -200,6 +205,22 @@ public class CartGoods {
}
@Data
public
final
static
class
CartGoodsExt
{
/**
* 定制属性Id
*/
private
String
attributeId
;
/**
* 定制属性code
*/
private
String
attributeCode
;
/**
* 定制属性名称
*/
private
String
attributeName
;
}
@Data
public
final
static
class
ComboxGoods
{
/**
* 单规格spuId,多规格skuId
...
...
@@ -286,6 +307,16 @@ public class CartGoods {
private
List
<
CartGoodsExtra
>
extra
;
/**
* 麦咖啡定制属性
*/
private
List
<
CartGoodsExt
>
extra2
;
/**
* 麦咖啡套餐商品加料
*/
private
List
<
MaterialGoods
>
productMaterialList
;
/**
* 税率
*/
private
Double
tax
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
View file @
ee4ac3f0
...
...
@@ -15,14 +15,20 @@ package cn.freemud.adapter;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.activity.ActivityDiscountsDto
;
import
cn.freemud.entities.dto.openplatform.WeixinProductRequestDto
;
import
cn.freemud.entities.dto.product.ProductAttributeValueType
;
import
cn.freemud.entities.dto.product.ValidateShopProductRequest
;
import
cn.freemud.entities.dto.product.ValidateShopProductType
;
import
cn.freemud.entities.dto.product.ValidateSkuProductType
;
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.ProductType
;
import
cn.freemud.utils.BeanUtil
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
...
...
@@ -36,6 +42,9 @@ import java.util.stream.LongStream;
@Component
public
class
ShoppingCartConvertAdapter
{
private
static
final
String
ATTRIBUTEID
=
"attributeId"
;
private
static
final
String
ATTRIBUTENAME
=
"attributeName"
;
public
ShoppingCartGoodsDto
.
CartGoodsDetailDto
getCartGoodsDetailDto
(
CreateOrderVo
.
PremiumExchangeActivity
.
Product
product
,
GetProductsVo
getProductsVo
,
String
goodsId
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
SendActivity
.
SendGoods
sendGoods
)
{
ShoppingCartGoodsDto
.
CartGoodsDetailDto
cartGoodsDetailDto
=
new
ShoppingCartGoodsDto
.
CartGoodsDetailDto
();
cartGoodsDetailDto
.
setOriginalPrice
(
getProductsVo
.
getFinalPrice
());
...
...
@@ -456,4 +465,272 @@ public class ShoppingCartConvertAdapter {
StringBuffer
stringBuffer
=
new
StringBuffer
();
return
stringBuffer
.
append
(
a
).
append
(
b
).
toString
();
}
public
ValidateShopProductRequest
getValidateShopProductRequest
(
CheckCartRequest
checkCartRequest
)
{
ValidateShopProductRequest
validateShopProductRequest
=
new
ValidateShopProductRequest
();
validateShopProductRequest
.
setChannel
(
checkCartRequest
.
getMenuType
());
validateShopProductRequest
.
setPartnerId
(
checkCartRequest
.
getPartnerId
());
validateShopProductRequest
.
setStoreId
(
checkCartRequest
.
getStoreId
());
validateShopProductRequest
.
setProductTypeList
(
new
ArrayList
<>());
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
cartGoods
:
checkCartRequest
.
getCartGoodsList
())
{
// 过滤非商品券商品
if
(
cartGoods
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
))
{
continue
;
}
ValidateShopProductType
productType
=
new
ValidateShopProductType
();
productType
.
setSpuId
(
cartGoods
.
getSpuId
());
productType
.
setSkuId
(
ObjectUtils
.
equals
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
SKU_GOODS
.
getGoodsType
(),
cartGoods
.
getGoodsType
())
?
cartGoods
.
getSkuId
()
:
cartGoods
.
getSpuId
());
// 应产品要求
// 普通商品,取商品的finalePrice(普通商品售价);套餐商品,取originalPrice(套餐价格)
productType
.
setPrice
(
cartGoods
.
getFinalPrice
()
==
null
?
0
:
cartGoods
.
getFinalPrice
().
intValue
());
productType
.
setValidatePrice
(
productType
.
getPrice
()
==
0
?
0
:
1
);
productType
.
setValidateAttribute
(
1
);
productType
.
setValidateStatuses
(
Arrays
.
asList
(
2
));
productType
.
setUuid
(
cartGoods
.
getCartGoodsUid
());
//属性
productType
.
setAttributeList
(
getAttributes
(
cartGoods
.
getExtra
()));
//可选搭配&固定搭配
productType
.
setComboProductTypeList
(
getValidateSkuProductType
(
cartGoods
.
getProductComboList
()));
productType
.
setProductGroupTypeList
(
getValidateSkuProductType
(
cartGoods
.
getProductGroupList
()));
productType
.
setMemberDiscount
(
cartGoods
.
getMemberDiscount
());
validateShopProductRequest
.
getProductTypeList
().
add
(
productType
);
}
return
validateShopProductRequest
;
}
public
List
<
ProductAttributeValueType
>
getAttributes
(
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExtra
>
extra
)
{
List
<
ProductAttributeValueType
>
attributeValueTypes
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
extra
))
{
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExtra
cartGoodsExtra
:
extra
)
{
ProductAttributeValueType
productAttributeValueType
=
new
ProductAttributeValueType
();
productAttributeValueType
.
setAttributeId
(
cartGoodsExtra
.
getAttributeId
());
productAttributeValueType
.
setAttributeValue
(
cartGoodsExtra
.
getAttributeName
());
attributeValueTypes
.
add
(
productAttributeValueType
);
}
}
return
attributeValueTypes
;
}
public
List
<
ValidateSkuProductType
>
getValidateSkuProductType
(
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
ComboxGoods
>
productComboList
)
{
List
<
ValidateSkuProductType
>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
productComboList
))
{
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
ComboxGoods
comboxGoods
:
productComboList
)
{
ValidateSkuProductType
validateSkuProductType
=
new
ValidateSkuProductType
();
validateSkuProductType
.
setProductId
(
comboxGoods
.
getGoodsId
());
validateSkuProductType
.
setPrice
(
comboxGoods
.
getOriginalPrice
()
==
null
?
0
:
comboxGoods
.
getOriginalPrice
().
intValue
());
validateSkuProductType
.
setMarkUpPrice
(
comboxGoods
.
getFinalPrice
()
==
null
?
0
:
comboxGoods
.
getFinalPrice
().
intValue
());
validateSkuProductType
.
setQty
(
comboxGoods
.
getQty
());
validateSkuProductType
.
setAttributeList
(
getAttributes
(
comboxGoods
.
getExtra
()));
validateSkuProductType
.
setProductGroupId
(
comboxGoods
.
getProductGroupId
());
result
.
add
(
validateSkuProductType
);
}
}
return
result
;
}
/**
* 更新当前购物车商品行信息
*
* @param cartGoods 当前购物车商品行
* @param productBeans 购物车中所有的productId对应的商品详情
*/
public
void
updateCartGoodsInfoForMCoffee
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
cartGoods
,
List
<
ProductBeanDTO
>
productBeans
)
{
try
{
Optional
<
ProductBeanDTO
>
firstProduct
=
productBeans
.
stream
().
filter
(
p
->
ObjectUtils
.
equals
(
p
.
getPid
(),
cartGoods
.
getSpuId
())).
findFirst
();
if
(!
firstProduct
.
isPresent
())
{
return
;
}
ProductBeanDTO
spuProduct
=
firstProduct
.
get
();
//是否是sku商品
boolean
isSkuProduct
=
ObjectUtils
.
equals
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
SKU_GOODS
.
getGoodsType
(),
cartGoods
.
getGoodsType
());
// 如果是套餐商品,更新套餐内固定商品&可选商品的详细信息
boolean
isSetMealProduct
=
ObjectUtils
.
equals
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ProductType
.
SetMeal
.
getCode
(),
spuProduct
.
getType
())
||
ObjectUtils
.
equals
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ProductType
.
IncreasedPackage
.
getCode
(),
spuProduct
.
getType
());
ProductBeanDTO
.
SkuProductBean
skuProduct
=
isSkuProduct
?
spuProduct
.
getSkuList
().
stream
().
filter
(
p
->
ObjectUtils
.
equals
(
cartGoods
.
getSkuId
(),
p
.
getSkuId
())).
findFirst
().
get
()
:
null
;
Map
<
String
,
String
>
attributes
=
getAttributesNew
(
cartGoods
.
getExtra
());
if
(!
"早餐啡常搭"
.
equals
(
cartGoods
.
getName
())
&&
!
"早餐啡常搭"
.
equals
(
cartGoods
.
getSkuName
())
&&
!
"早餐啡常搭"
.
equals
(
cartGoods
.
getSpuName
())
&&
!
"啡常搭"
.
equals
(
cartGoods
.
getName
())
&&
!
"啡常搭"
.
equals
(
cartGoods
.
getSkuName
())
&&
!
"啡常搭"
.
equals
(
cartGoods
.
getSpuName
()))
{
cartGoods
.
setName
(
spuProduct
.
getName
());
cartGoods
.
setSpuName
(
spuProduct
.
getName
());
cartGoods
.
setSkuName
(
isSkuProduct
?
skuProduct
.
getProductName
()
:
spuProduct
.
getName
());
}
cartGoods
.
setSpecProductId
(
attributes
.
get
(
ATTRIBUTEID
));
cartGoods
.
setPic
(
spuProduct
.
getPicture
());
cartGoods
.
setPackPrice
(
isSkuProduct
?
skuProduct
.
getPackPrice
()
:
spuProduct
.
getPackPrice
());
cartGoods
.
setStockLimit
(
isSkuProduct
?
ObjectUtils
.
equals
(
1
,
skuProduct
.
getStockLimit
())
:
ObjectUtils
.
equals
(
1
,
spuProduct
.
getStockLimit
()));
cartGoods
.
setCustomerCode
(
isSkuProduct
?
skuProduct
.
getCustomerCode
()
:
spuProduct
.
getCustomerCode
());
cartGoods
.
setRiseSell
(
isSkuProduct
?
skuProduct
.
getRiseSell
()
:
spuProduct
.
getRiseSell
());
cartGoods
.
setMemberDiscount
(
spuProduct
.
getMemberDiscountResult
());
cartGoods
.
setClassificationId
(
spuProduct
.
getCategory
());
cartGoods
.
setClassificationName
(
spuProduct
.
getCategoryName
());
cartGoods
.
setTax
(
spuProduct
.
getTax
());
cartGoods
.
setTaxId
(
spuProduct
.
getTaxId
());
String
skuSpecName
=
""
;
if
(
isSkuProduct
&&
CollectionUtils
.
isNotEmpty
(
skuProduct
.
getSkuSpecValues
()))
{
List
<
String
>
skuSpecValus
=
skuProduct
.
getSkuSpecValues
().
stream
().
map
(
p
->
p
.
getSpecValue
()).
collect
(
Collectors
.
toList
());
skuSpecName
=
StringUtils
.
join
(
skuSpecValus
,
"/"
);
}
String
attributeName
=
attributes
.
get
(
ATTRIBUTENAME
)
==
null
?
""
:
attributes
.
get
(
ATTRIBUTENAME
);
//购物车小标题
cartGoods
.
setSubName
(
StringUtils
.
isNotEmpty
(
skuSpecName
)
&&
StringUtils
.
isNotEmpty
(
attributeName
)
?
skuSpecName
+
"/"
+
attributeName
:
skuSpecName
+
attributeName
);
if
(
isSetMealProduct
)
{
if
(
CollectionUtils
.
isNotEmpty
(
cartGoods
.
getProductComboList
()))
{
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
ComboxGoods
productCombo
:
cartGoods
.
getProductComboList
())
{
updateComboxGoodsInfoForMCoffee
(
productCombo
,
spuProduct
,
true
);
}
}
if
(
CollectionUtils
.
isNotEmpty
(
cartGoods
.
getProductGroupList
()))
{
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
ComboxGoods
productGroup
:
cartGoods
.
getProductGroupList
())
{
updateComboxGoodsInfoForMCoffee
(
productGroup
,
spuProduct
,
false
);
}
}
}
//更新当前商品行价格
Long
newOrigOriginalPrice
=
0L
;
if
(
isSetMealProduct
)
{
newOrigOriginalPrice
+=
cartGoods
.
getProductComboList
().
stream
().
mapToLong
(
t
->
t
.
getOriginalAmount
()).
sum
();
newOrigOriginalPrice
+=
cartGoods
.
getProductGroupList
().
stream
().
mapToLong
(
t
->
t
.
getOriginalAmount
()).
sum
();
}
else
{
newOrigOriginalPrice
=
isSkuProduct
?
skuProduct
.
getFinalPrice
()
:
spuProduct
.
getFinalPrice
();
}
cartGoods
.
setOriginalPrice
(
newOrigOriginalPrice
);
cartGoods
.
setOriginalAmount
(
newOrigOriginalPrice
*
cartGoods
.
getQty
());
cartGoods
.
setAmount
(
newOrigOriginalPrice
*
cartGoods
.
getQty
());
//咨询商品服务,套餐售价取originalPrice
cartGoods
.
setFinalPrice
(
isSetMealProduct
?
spuProduct
.
getOriginalPrice
()
:
isSkuProduct
?
skuProduct
.
getFinalPrice
()
:
spuProduct
.
getFinalPrice
());
cartGoods
.
setWeight
(
isSkuProduct
?
skuProduct
.
getWeight
()
:
spuProduct
.
getWeight
());
cartGoods
.
setUnit
(
isSkuProduct
?
skuProduct
.
getUnit
()
:
spuProduct
.
getUnit
());
cartGoods
.
setWeightType
(
CommonsConstant
.
WEIGHT_PRODUCT
.
equals
(
spuProduct
.
getWeightType
()));
cartGoods
.
setMaterialAmount
(
0L
);
cartGoods
.
setOriginalMaterialAmount
(
0L
);
// todo 设置加料
this
.
checkMaterialProductForMCoffee
(
cartGoods
,
spuProduct
);
}
catch
(
Exception
ex
)
{
ErrorLog
.
infoConvertJson
(
this
.
getClass
(),
"updateCartGoodsInfoForMCoffee_Error"
,
ex
);
cartGoods
.
setCartGoodsUid
(
null
);
}
}
/**
* 更新套餐固定商品、可选商品信息
*
* @param comboxGoods 固定商品或可选商品
* @param parentProductBean 套餐服商品
* @param isComboxGoods 是否是固定商品
* @return
*/
private
void
updateComboxGoodsInfoForMCoffee
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
ComboxGoods
comboxGoods
,
ProductBeanDTO
parentProductBean
,
boolean
isComboxGoods
)
{
ProductBeanDTO
.
ProductComboType
productComboType
=
new
ProductBeanDTO
.
ProductComboType
();
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
groupDetailType
=
new
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
();
if
(
isComboxGoods
)
{
productComboType
=
parentProductBean
.
getProductComboList
().
stream
().
filter
(
p
->
ObjectUtils
.
equals
(
comboxGoods
.
getGoodsId
(),
p
.
getProductId
())).
findFirst
().
orElse
(
new
ProductBeanDTO
.
ProductComboType
());
}
else
{
Map
<
String
,
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
map
=
new
HashMap
<>();
parentProductBean
.
getProductGroupList
().
stream
().
map
(
t
->
t
.
getGroupDetail
()).
forEach
(
group
->
group
.
forEach
(
detailType
->
map
.
put
(
detailType
.
getProductId
(),
detailType
)));
groupDetailType
=
map
.
get
(
comboxGoods
.
getGoodsId
());
}
// 若是固定商品则取商品详情的FinalPrice,若是可选商品则取MarkUpPrice
Long
finalPrice
=
isComboxGoods
?
productComboType
.
getFinalPrice
().
longValue
()
:
groupDetailType
.
getMarkUpPrice
().
longValue
();
// 设置商品详情
Map
<
String
,
String
>
attributes
=
getAttributesNew
(
comboxGoods
.
getExtra
());
comboxGoods
.
setName
(
isComboxGoods
?
productComboType
.
getProductName
()
:
groupDetailType
.
getProductName
());
comboxGoods
.
setSpuName
(
comboxGoods
.
getName
());
comboxGoods
.
setSpecProductId
(
attributes
.
get
(
ATTRIBUTEID
));
comboxGoods
.
setSubName
(
attributes
.
get
(
ATTRIBUTENAME
));
comboxGoods
.
setPic
(
isComboxGoods
?
productComboType
.
getPicture
()
:
groupDetailType
.
getPicture
());
comboxGoods
.
setOriginalPrice
(
isComboxGoods
?
productComboType
.
getFinalPrice
().
longValue
()
:
groupDetailType
.
getProductFinalPrice
().
longValue
());
comboxGoods
.
setOriginalAmount
(
comboxGoods
.
getOriginalPrice
()
*
comboxGoods
.
getQty
());
comboxGoods
.
setAmount
(
finalPrice
*
comboxGoods
.
getQty
());
comboxGoods
.
setCustomerCode
(
isComboxGoods
?
productComboType
.
getCustomerCode
()
:
groupDetailType
.
getCustomerCode
());
comboxGoods
.
setFinalPrice
(
finalPrice
);
comboxGoods
.
setWeightType
(
isComboxGoods
?
CommonsConstant
.
WEIGHT_PRODUCT
.
equals
(
productComboType
.
getWeightType
())
:
CommonsConstant
.
WEIGHT_PRODUCT
.
equals
(
groupDetailType
.
getWeightType
()));
comboxGoods
.
setUnit
(
isComboxGoods
?
productComboType
.
getUnit
()
:
groupDetailType
.
getUnit
());
comboxGoods
.
setWeight
(
isComboxGoods
?
productComboType
.
getWeight
()
:
groupDetailType
.
getWeight
());
comboxGoods
.
setTax
(
isComboxGoods
?
productComboType
.
getTax
()
:
groupDetailType
.
getTax
());
comboxGoods
.
setTaxId
(
isComboxGoods
?
productComboType
.
getTaxId
()
:
groupDetailType
.
getTaxId
());
//套餐定制属性
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExt
>
cartGoodsExts
=
new
ArrayList
<>();
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExt
cartGoodsExt
=
new
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExt
();
cartGoodsExts
.
add
(
cartGoodsExt
);
comboxGoods
.
setExtra2
(
cartGoodsExts
);
//套餐内商品加料
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
>
productMaterialList
=
new
ArrayList
<>();
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
materialGoods
=
new
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
();
productMaterialList
.
add
(
materialGoods
);
comboxGoods
.
setProductMaterialList
(
productMaterialList
);
}
private
Map
<
String
,
String
>
getAttributesNew
(
List
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExtra
>
extra
)
{
if
(
CollectionUtils
.
isEmpty
(
extra
))
{
return
new
HashMap
<>();
}
List
<
String
>
attributeIds
=
extra
.
stream
().
map
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExtra
::
getAttributeId
).
collect
(
Collectors
.
toList
());
List
<
String
>
attributeNames
=
extra
.
stream
().
map
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
CartGoodsExtra
::
getAttributeName
).
collect
(
Collectors
.
toList
());
Map
<
String
,
String
>
result
=
new
HashMap
<>();
result
.
put
(
ATTRIBUTEID
,
StringUtils
.
join
(
attributeIds
,
"/"
));
result
.
put
(
ATTRIBUTENAME
,
StringUtils
.
join
(
attributeNames
,
"/"
));
return
result
;
}
private
void
checkMaterialProductForMCoffee
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
cartGoods
,
ProductBeanDTO
spuProduct
)
{
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
return
;
//加料信息为空
if
(
CollectionUtils
.
isEmpty
(
spuProduct
.
getAdditionalGroupList
()))
{
cartGoods
.
setGoodsType
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
EXCEPTION_GOODS
.
getGoodsType
());
cartGoods
.
setProductMaterialList
(
new
ArrayList
<>());
return
;
}
//提取加料信息
List
<
String
>
materialSpu
=
new
ArrayList
<>();
List
<
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
groupDetail
=
spuProduct
.
getAdditionalGroupList
().
get
(
0
).
getGroupDetail
();
HashMap
<
String
,
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
materialHash
=
new
HashMap
<>();
for
(
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
groupDetailType
:
groupDetail
)
{
materialHash
.
put
(
groupDetailType
.
getProductId
(),
groupDetailType
);
materialSpu
.
add
(
groupDetailType
.
getProductId
());
}
//加车小料和商品小料没有交集则提示商品信息有异常
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
().
stream
().
filter
(
e
->
materialSpu
.
contains
(
e
.
getSpuId
())).
collect
(
Collectors
.
toList
())))
{
cartGoods
.
setGoodsType
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
EXCEPTION_GOODS
.
getGoodsType
());
cartGoods
.
setProductMaterialList
(
new
ArrayList
<>());
return
;
}
ArrayList
<
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
>
materialGoodsList
=
new
ArrayList
<>();
Long
materialAmount
=
0L
;
Long
originalMaterAmount
=
0L
;
String
materialSubName
=
cartGoods
.
getSubName
();
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
detail
=
materialHash
.
get
(
materialGoods
.
getSpuId
());
if
(
detail
==
null
)
continue
;
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
material
=
new
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
MaterialGoods
();
material
.
setSpuName
(
detail
.
getProductName
());
material
.
setSpuId
(
detail
.
getProductId
());
//行单价 \ 行总价
material
.
setFinalPrice
(
detail
.
getProductFinalPrice
().
longValue
());
material
.
setAmount
(
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
());
//原行单价*数量
material
.
setOriginalAmount
(
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
());
material
.
setOriginalPrice
(
detail
.
getProductFinalPrice
().
longValue
());
materialGoodsList
.
add
(
material
);
materialAmount
+=
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
();
originalMaterAmount
+=
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
();
;
materialSubName
=
materialSubName
+
"/"
+
detail
.
getProductName
();
}
//设置购物车行记录
cartGoods
.
setProductMaterialList
(
materialGoodsList
);
//加料行记录现价总价
cartGoods
.
setMaterialAmount
(
materialAmount
);
//加料行记录原价总价
cartGoods
.
setOriginalMaterialAmount
(
originalMaterAmount
);
}
}
\ No newline at end of file
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ProductAttributeValueType.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
lombok.Data
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ProductAttributeValueType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:03
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ProductAttributeValueType
{
private
String
attributeId
;
private
String
attributeValue
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValiadShopProductResponse.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValiadShopProductResponse
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ValiadShopProductResponse
{
private
List
<
ValiadShopProductResult
>
failureList
;
private
List
<
ValiadShopProductResult
>
successList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValiadShopProductResult.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
lombok.Data
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValiadShopProductResult
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ValiadShopProductResult
{
private
int
code
;
private
String
message
;
private
String
skuId
;
private
String
spuId
;
private
ProductBeanDTO
productType
;
private
String
uuid
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateShopProductRequest.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateShopProductRequest
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ValidateShopProductRequest
{
private
String
partnerId
;
private
String
storeId
;
private
String
channel
;
private
List
<
ValidateShopProductType
>
productTypeList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateShopProductType.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateShopProductType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ValidateShopProductType
{
private
String
uuid
;
private
String
spuId
;
private
String
skuId
;
private
List
<
ValidateSkuProductType
>
comboProductTypeList
;
private
List
<
ValidateSkuProductType
>
productGroupTypeList
;
private
Integer
price
;
private
Integer
memberDiscount
;
private
List
<
ProductAttributeValueType
>
attributeList
;
private
List
<
Integer
>
validateStatuses
;
private
Integer
validatePrice
=
1
;
private
Integer
validateAttribute
=
1
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/product/ValidateSkuProductType.java
0 → 100644
View file @
ee4ac3f0
package
cn
.
freemud
.
entities
.
dto
.
product
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateSkuProductType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:02
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
ValidateSkuProductType
{
private
String
productId
;
private
Integer
price
;
private
Integer
markUpPrice
;
private
Integer
qty
;
private
Long
productGroupId
;
private
List
<
ProductAttributeValueType
>
attributeList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
View file @
ee4ac3f0
...
...
@@ -193,6 +193,11 @@ public class CartGoods {
*/
private
List
<
MaterialGoods
>
productMaterialList
;
/**
* 麦咖啡特定属性入机code
*/
private
String
specialCode
;
@Data
public
final
static
class
CartGoodsExtra
{
/**
...
...
@@ -203,6 +208,11 @@ public class CartGoods {
* 属性名
*/
private
String
attributeName
;
/**
* 麦咖啡特定属性入机code
*/
private
String
specialCode
;
}
@Data
...
...
@@ -295,6 +305,10 @@ public class CartGoods {
* 费率代码
*/
private
String
taxId
;
/**
* 商品原始加料数据
*/
private
List
<
MaterialGoods
>
productMaterialList
;
@Override
public
int
hashCode
()
{
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ComboxGoodsRequestVo.java
View file @
ee4ac3f0
...
...
@@ -19,6 +19,11 @@ import java.util.List;
@Data
public
class
ComboxGoodsRequestVo
{
/**
* 麦咖啡多规格商品spuid
*/
private
String
spuId
;
private
String
skuId
;
private
Integer
qty
;
/**
...
...
@@ -30,4 +35,9 @@ public class ComboxGoodsRequestVo {
*/
List
<
CartGoods
.
CartGoodsExtra
>
extra
;
/**
* 麦咖啡多规格商品加料
*/
private
List
<
MaterialRequestVo
>
productMaterialList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/enums/GoodsTypeEnum.java
View file @
ee4ac3f0
...
...
@@ -20,7 +20,7 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS
(
3
,
"套餐商品"
),
SKU_GOODS
(
4
,
"sku商品"
),
SPU_GOODS
(
5
,
"spu商品"
),
REDUCE_PRICE_GOODS
(
6
,
"
加价
购商品"
),
REDUCE_PRICE_GOODS
(
6
,
"
超值加
购商品"
),
MATERIAL
(
88
,
"有加料的商品"
),
EXCEPTION_GOODS
(
99
,
"异常商品:商品菜单变化导致和购物车不商品匹配"
);
private
Integer
goodsType
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
View file @
ee4ac3f0
package
cn
.
freemud
.
service
.
impl
.
mcoffee
;
import
ch.qos.logback.classic.Level
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
...
...
@@ -7,6 +8,9 @@ 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.product.ValiadShopProductResponse
;
import
cn.freemud.entities.dto.product.ValiadShopProductResult
;
import
cn.freemud.entities.dto.product.ValidateShopProductRequest
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.dto.user.GetSessionUserInfoDto
;
import
cn.freemud.entities.vo.*
;
...
...
@@ -22,10 +26,12 @@ import cn.freemud.service.impl.mcoffee.entity.CopyShoppingCartRequestVo;
import
cn.freemud.service.impl.mcoffee.entity.MCoffeeAddGoodsRequestVo
;
import
cn.freemud.service.impl.mcoffee.entity.SwitchShoppingCartRequestVo
;
import
cn.freemud.service.thirdparty.CustomerApplicationClient
;
import
cn.freemud.service.thirdparty.ProductClient
;
import
cn.freemud.utils.ResponseUtil
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs
;
...
...
@@ -33,10 +39,15 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemR
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse
;
import
com.freemud.application.sdk.api.ordercenter.service.OrderSdkService
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.application.sdk.api.productcenter.service.ProductService
;
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.domain.CartGoodsStates
;
import
com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum
;
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.service.impl.ShoppingCartBaseServiceImpl
;
import
com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
...
...
@@ -45,11 +56,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
static
cn
.
freemud
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_EMPTY_GOODS_LIST
;
import
static
cn
.
freemud
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
;
import
static
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.*;
/**
* All rights Reserved, Designed By www.freemud.cn
...
...
@@ -85,6 +96,11 @@ public class ShoppingCartMCoffeeServiceImpl {
@Autowired
private
OrderSdkService
orderSdkService
;
@Autowired
private
ProductClient
productClient
;
@Autowired
private
ShoppingCartConvertAdapter
shoppingCartConvertAdapter
;
private
static
final
String
nullSeat
=
"508106"
;
/**
...
...
@@ -143,9 +159,6 @@ public class ShoppingCartMCoffeeServiceImpl {
addCartGoods
.
setSpuName
(
addShoppingCartGoodsRequestVo
.
getGroupName
());
addCartGoods
.
setName
(
addShoppingCartGoodsRequestVo
.
getGroupName
());
}
//查询多个商品库存信息
// Integer checkQty = this.checkSkuQty(oldCartGoodsList, addCartGoods);
// queryManyGoodsStocks(partnerId, storeId, menuType, productIds, productBeanListSpuClass, skuId, checkQty);
// 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
boolean
haveCouponProduct
=
oldCartGoodsList
.
parallelStream
().
anyMatch
(
k
->
k
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
));
...
...
@@ -834,49 +847,49 @@ public class ShoppingCartMCoffeeServiceImpl {
return
qty
;
}
/**
* 套餐空键位处理
*/
private
Map
<
String
,
String
>
checkNewCartGoods
(
List
<
CartGoods
>
newCartGoods
,
Integer
oper
,
Map
<
String
,
String
>
result
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
//删除套餐空键位
if
(
oper
==
1
){
for
(
CartGoods
goods
:
newCartGoods
)
{
if
(
CollectionUtils
.
isNotEmpty
(
goods
.
getProductGroupList
()))
{
List
<
CartGoods
.
ComboxGoods
>
productGroupList
=
new
ArrayList
<>();
for
(
CartGoods
.
ComboxGoods
comboxGoods
:
goods
.
getProductGroupList
())
{
if
(
nullSeat
.
equals
(
comboxGoods
.
getGoodsId
()))
{
map
.
put
(
goods
.
getCartGoodsUid
(),
goods
.
getGoodsId
());
}
else
{
productGroupList
.
add
(
comboxGoods
);
}
}
goods
.
setProductGroupList
(
productGroupList
);
}
}
return
map
;
}
//恢复套餐空键位
if
(
oper
==
2
&&
result
.
size
()
!=
0
){
for
(
CartGoods
cartGoods
:
newCartGoods
)
{
if
(
result
.
get
(
cartGoods
.
getCartGoodsUid
())
!=
null
)
{
CartGoods
.
ComboxGoods
comboxGoods
=
new
CartGoods
.
ComboxGoods
();
comboxGoods
.
setGoodsId
(
nullSeat
);
comboxGoods
.
setSkuId
(
nullSeat
);
comboxGoods
.
setCustomerCode
(
nullSeat
);
comboxGoods
.
setQty
(
1
);
comboxGoods
.
setOriginalPrice
(
0L
);
comboxGoods
.
setFinalPrice
(
0L
);
cartGoods
.
getProductGroupList
().
add
(
comboxGoods
);
}
}
}
return
map
;
}
//
/**
//
* 套餐空键位处理
//
*/
//
private Map<String, String> checkNewCartGoods(List<CartGoods> newCartGoods,Integer oper,Map<String, String> result) {
//
//
Map<String, String> map = new HashMap<>();
//
//
//删除套餐空键位
//
if(oper == 1){
//
for (CartGoods goods : newCartGoods) {
//
if (CollectionUtils.isNotEmpty(goods.getProductGroupList())) {
//
List<CartGoods.ComboxGoods> productGroupList = new ArrayList<>();
//
for (CartGoods.ComboxGoods comboxGoods : goods.getProductGroupList()) {
//
if (nullSeat.equals(comboxGoods.getGoodsId())) {
//
map.put(goods.getCartGoodsUid(), goods.getGoodsId());
//
} else {
//
productGroupList.add(comboxGoods);
//
}
//
}
//
goods.setProductGroupList(productGroupList);
//
}
//
}
//
return map;
//
}
//
//
//恢复套餐空键位
//
if(oper == 2 && result.size() != 0){
//
for (CartGoods cartGoods : newCartGoods) {
//
if (result.get(cartGoods.getCartGoodsUid()) != null) {
//
CartGoods.ComboxGoods comboxGoods = new CartGoods.ComboxGoods();
//
comboxGoods.setGoodsId(nullSeat);
//
comboxGoods.setSkuId(nullSeat);
//
comboxGoods.setCustomerCode(nullSeat);
//
comboxGoods.setQty(1);
//
comboxGoods.setOriginalPrice(0L);
//
comboxGoods.setFinalPrice(0L);
//
cartGoods.getProductGroupList().add(comboxGoods);
//
}
//
}
//
}
//
//
return map;
//
}
private
void
setToastMsgIfNotExist
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
String
message
)
{
...
...
@@ -990,6 +1003,7 @@ public class ShoppingCartMCoffeeServiceImpl {
cartGoods
.
setCategoryName
(
addShoppingCartGoodsRequestVo
.
getCategoryName
());
List
<
CartGoods
.
ComboxGoods
>
productComboList
=
new
ArrayList
<>();
List
<
CartGoods
.
ComboxGoods
>
productGroupList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
addShoppingCartGoodsRequestVo
.
getProductComboList
()))
{
for
(
ComboxGoodsRequestVo
vo
:
addShoppingCartGoodsRequestVo
.
getProductComboList
())
{
CartGoods
.
ComboxGoods
productCombox
=
new
CartGoods
.
ComboxGoods
();
...
...
@@ -997,6 +1011,16 @@ public class ShoppingCartMCoffeeServiceImpl {
productCombox
.
setSkuId
(
vo
.
getSkuId
());
productCombox
.
setQty
(
vo
.
getQty
());
productCombox
.
setExtra
(
vo
.
getExtra
());
//加料商品集
if
(
CollectionUtils
.
isNotEmpty
(
vo
.
getProductMaterialList
()))
{
List
<
CartGoods
.
MaterialGoods
>
comboxMaterialGoodsList
=
new
ArrayList
<>();
for
(
MaterialRequestVo
materialRequestVo
:
vo
.
getProductMaterialList
())
{
CartGoods
.
MaterialGoods
materialGoods
=
new
CartGoods
.
MaterialGoods
();
materialGoods
.
setSpuId
(
materialRequestVo
.
getSpuId
());
comboxMaterialGoodsList
.
add
(
materialGoods
);
}
productCombox
.
setProductMaterialList
(
comboxMaterialGoodsList
);
}
productComboList
.
add
(
productCombox
);
}
}
...
...
@@ -1008,9 +1032,30 @@ public class ShoppingCartMCoffeeServiceImpl {
productCombox
.
setQty
(
vo
.
getQty
());
productCombox
.
setExtra
(
vo
.
getExtra
());
productCombox
.
setProductGroupId
(
StringUtils
.
isEmpty
(
vo
.
getProductGroupId
())
?
null
:
Long
.
parseLong
(
vo
.
getProductGroupId
()));
//加料商品集
if
(
CollectionUtils
.
isNotEmpty
(
vo
.
getProductMaterialList
()))
{
List
<
CartGoods
.
MaterialGoods
>
comboxMaterialGoodsList
=
new
ArrayList
<>();
for
(
MaterialRequestVo
materialRequestVo
:
vo
.
getProductMaterialList
())
{
CartGoods
.
MaterialGoods
materialGoods
=
new
CartGoods
.
MaterialGoods
();
materialGoods
.
setSpuId
(
materialRequestVo
.
getSpuId
());
comboxMaterialGoodsList
.
add
(
materialGoods
);
}
productCombox
.
setProductMaterialList
(
comboxMaterialGoodsList
);
}
productGroupList
.
add
(
productCombox
);
}
}
//加料商品集
if
(
CollectionUtils
.
isNotEmpty
(
addShoppingCartGoodsRequestVo
.
getProductMaterialList
()))
{
List
<
CartGoods
.
MaterialGoods
>
materialGoodsList
=
new
ArrayList
<>();
for
(
MaterialRequestVo
materialRequestVo
:
addShoppingCartGoodsRequestVo
.
getProductMaterialList
())
{
CartGoods
.
MaterialGoods
materialGoods
=
new
CartGoods
.
MaterialGoods
();
materialGoods
.
setSpuId
(
materialRequestVo
.
getSpuId
());
materialGoodsList
.
add
(
materialGoods
);
}
cartGoods
.
setProductMaterialList
(
materialGoodsList
);
}
cartGoods
.
setProductComboList
(
productComboList
);
cartGoods
.
setProductGroupList
(
productGroupList
);
return
cartGoods
;
...
...
@@ -1022,21 +1067,18 @@ public class ShoppingCartMCoffeeServiceImpl {
private
List
<
CartGoods
>
checkCartGoods
(
String
partnerId
,
String
storeId
,
Integer
orderType
,
String
menuType
,
ShoppingCartGoodsBaseResponseVo
shoppingCartGoodsResponseVo
,
List
<
CartGoods
>
cartGoodsList
)
{
//去除套餐商品空键位
// Map<String, String> map = checkNewCartGoods(cartGoodsList,1,null);
//筛选数量不为0商品
cartGoodsList
=
cartGoodsList
.
stream
().
filter
(
cartGoods
->
cartGoods
.
getQty
()
!=
0
).
collect
(
Collectors
.
toList
());
//筛选非
加购商品--加价购
商品不校验是否在菜单,不调用validateShopProduct
//筛选非
超值加购活动商品--超值加购活动
商品不校验是否在菜单,不调用validateShopProduct
List
<
CartGoods
>
checkGoods
=
cartGoodsList
.
stream
().
filter
(
cartGoods
->
cartGoods
.
getGoodsType
()
!=
GoodsTypeEnum
.
REDUCE_PRICE_GOODS
.
getGoodsType
()).
collect
(
Collectors
.
toList
());
//
加价购
商品
//
超值加购活动
商品
List
<
CartGoods
>
reduceGoods
=
cartGoodsList
.
stream
().
filter
(
cartGoods
->
cartGoods
.
getGoodsType
()
==
GoodsTypeEnum
.
REDUCE_PRICE_GOODS
.
getGoodsType
()).
collect
(
Collectors
.
toList
());
List
<
CartGoods
>
allCartGoodsList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
checkGoods
))
{
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdkForMCoffee
(
checkGoods
,
partnerId
,
CheckCartRequest
checkCartRequest
=
checkShoppingCartSdkForMCoffee
(
checkGoods
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
orderType
,
""
,
menuType
,
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
...
...
@@ -1045,12 +1087,10 @@ public class ShoppingCartMCoffeeServiceImpl {
allCartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
}
//添加商品为
加价购
商品
//添加商品为
超值加购活动
商品
if
(
CollectionUtils
.
isNotEmpty
(
reduceGoods
))
{
allCartGoodsList
.
addAll
(
reduceGoods
);
}
//恢复套餐商品空键位
// checkNewCartGoods(allCartGoodsList,2,map);
return
allCartGoodsList
;
}
...
...
@@ -1061,9 +1101,6 @@ public class ShoppingCartMCoffeeServiceImpl {
private
CheckCartRequest
checkCartGoodsForToPay
(
String
partnerId
,
String
storeId
,
Integer
orderType
,
String
menuType
,
ShoppingCartGoodsBaseResponseVo
shoppingCartGoodsResponseVo
,
List
<
CartGoods
>
cartGoodsList
)
{
//去除套餐商品空键位
// Map<String, String> map = checkNewCartGoods(cartGoodsList,1,null);
//筛选数量不为0商品
cartGoodsList
=
cartGoodsList
.
stream
().
filter
(
cartGoods
->
cartGoods
.
getQty
()
!=
0
).
collect
(
Collectors
.
toList
());
...
...
@@ -1072,7 +1109,7 @@ public class ShoppingCartMCoffeeServiceImpl {
CheckCartRequest
checkCartRequest
=
null
;
if
(
CollectionUtils
.
isNotEmpty
(
checkGoods
))
{
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdkForMCoffee
(
checkGoods
,
partnerId
,
checkCartRequest
=
checkShoppingCartSdkForMCoffee
(
checkGoods
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
orderType
,
""
,
menuType
,
shoppingCartBaseService
);
}
return
checkCartRequest
;
...
...
@@ -1102,5 +1139,140 @@ public class ShoppingCartMCoffeeServiceImpl {
return
coupons
;
}
/**
* 【麦咖啡】调用SDK校验购物车
*
* @param oldAllCartGoodsList
* @param partnerId
* @param storeId
* @param shoppingCartGoodsResponseVo
* @param orderType
*/
public
CheckCartRequest
checkShoppingCartSdkForMCoffee
(
List
<
CartGoods
>
oldAllCartGoodsList
,
String
partnerId
,
String
storeId
,
ShoppingCartGoodsBaseResponseVo
shoppingCartGoodsResponseVo
,
Integer
orderType
,
String
tableNumber
,
String
menuType
,
ShoppingCartBaseService
shoppingCartService
)
{
CheckCartRequest
checkCartRequest
=
new
CheckCartRequest
();
checkCartRequest
.
setCartGoodsList
(
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
oldAllCartGoodsList
),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
.
class
));
checkCartRequest
.
setOrderWay
(
orderType
);
checkCartRequest
.
setPartnerId
(
partnerId
);
checkCartRequest
.
setShoppingCartGoodsResponseVo
(
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
shoppingCartGoodsResponseVo
),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
ShoppingCartGoodsResponseVo
.
class
));
checkCartRequest
.
setStoreId
(
storeId
);
checkCartRequest
.
setTableNumber
(
tableNumber
);
checkCartRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
checkCartRequest
.
setMenuType
(
BusinessTypeEnum
.
getByType
(
menuType
).
getCode
());
BaseResponse
<
CheckCartRequest
>
baseResponse
;
baseResponse
=
checkAllCartGoodsForMCoffee
(
checkCartRequest
);
if
(
baseResponse
==
null
)
{
return
null
;
}
return
baseResponse
.
getResult
();
}
private
BaseResponse
<
CheckCartRequest
>
checkAllCartGoodsForMCoffee
(
CheckCartRequest
checkCartRequest
)
{
// ShoppingCartAdapter shoppingCartAdapter = SDKCommonBaseContextWare.getBean(ShoppingCartAdapter.class);
ProductService
productService
=
SDKCommonBaseContextWare
.
getBean
(
ProductService
.
class
);
try
{
ValidateShopProductRequest
validateShopProductRequest
=
shoppingCartConvertAdapter
.
getValidateShopProductRequest
(
checkCartRequest
);
ProductBaseResponse
<
ValiadShopProductResponse
>
valiadResponse
=
productClient
.
validateShopProductAboutReason
(
validateShopProductRequest
);
if
(
valiadResponse
==
null
||
!
CartResponseConstant
.
SUCCESS
.
getCode
().
equals
(
valiadResponse
.
getErrcode
())
||
valiadResponse
.
getData
()==
null
)
{
checkCartRequest
.
getCartGoodsList
().
clear
();
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
return
CartResponseUtil
.
error
(
valiadResponse
.
getErrmsg
(),
checkCartRequest
);
}
ValiadShopProductResponse
validateResult
=
valiadResponse
.
getData
();
CartGoodsStates
cartGoodsStates
=
new
CartGoodsStates
();
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
if
(
CollectionUtils
.
isNotEmpty
(
validateResult
.
getFailureList
())){
List
<
String
>
invalidSpu
=
new
ArrayList
<>();
List
<
String
>
notFoundSpu
=
new
ArrayList
<>();
List
<
String
>
changePriceSpu
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
validateResult
.
getFailureList
().
size
();
i
++)
{
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
ValiadShopProductResult
validaProduct
=
validateResult
.
getFailureList
().
get
(
i
);
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
cartGoods
:
checkCartRequest
.
getCartGoodsList
())
{
if
(
cartGoods
.
getSkuId
().
equals
(
validaProduct
.
getSkuId
()))
{
String
spuName
=
null
==
validaProduct
.
getProductType
()
?
cartGoods
.
getSpuName
()
:
validaProduct
.
getProductType
().
getName
();
if
(
PRODUCT_DOWN
==
validaProduct
.
getCode
())
{
invalidSpu
.
add
(
spuName
);
cartGoodsStates
.
setHasInvalidGoods
(
true
);
cartGoods
.
setCartGoodsUid
(
null
);
break
;
}
if
(
PRODUCT_NOTFOUND
==
validaProduct
.
getCode
())
{
notFoundSpu
.
add
(
spuName
);
cartGoodsStates
.
setHasInvalidGoods
(
true
);
cartGoods
.
setCartGoodsUid
(
null
);
break
;
}
if
(
PRODUCT_PRICE_CHANGE
==
validaProduct
.
getCode
())
{
changePriceSpu
.
add
(
spuName
);
List
<
ProductBeanDTO
>
productList
=
validateResult
.
getFailureList
().
stream
().
map
(
ValiadShopProductResult:
:
getProductType
).
collect
(
Collectors
.
toList
());
shoppingCartConvertAdapter
.
updateCartGoodsInfoForMCoffee
(
cartGoods
,
productList
);
}
}
}
}
String
toastMsg
=
""
;
if
(
CollectionUtils
.
isNotEmpty
(
invalidSpu
)){
toastMsg
=
toastMsg
.
concat
(
CART_PRODUCT_INVALID_STATE
.
replace
(
"$spuName"
,
StringUtils
.
join
(
invalidSpu
,
","
)));
}
if
(
CollectionUtils
.
isNotEmpty
(
notFoundSpu
)){
toastMsg
=
toastMsg
.
concat
(
CART_PRODUCT_NOT_FOUND
.
replace
(
"$spuName"
,
StringUtils
.
join
(
notFoundSpu
,
","
)));
}
if
(
CollectionUtils
.
isNotEmpty
(
changePriceSpu
)){
toastMsg
=
toastMsg
.
concat
(
CART_PRODUCT_PRICE_CHANGE
.
replace
(
"$spuName"
,
StringUtils
.
join
(
changePriceSpu
,
","
)));
}
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
toastMsg
);
setToastMsgIfNotExist
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
(),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_GOODS_CHANGE
);
checkCartRequest
.
getCartGoodsList
().
removeIf
(
k
->
StringUtils
.
isEmpty
(
k
.
getCartGoodsUid
()));
}
List
<
ProductBeanDTO
>
productList
=
validateResult
.
getSuccessList
().
stream
().
map
(
ValiadShopProductResult:
:
getProductType
).
collect
(
Collectors
.
toList
());
for
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartGoods
cartGoods
:
checkCartRequest
.
getCartGoodsList
())
{
// 当goodsId为空或商品是商品券时直接跳过
if
(
StringUtils
.
isEmpty
(
cartGoods
.
getGoodsId
())
||
Objects
.
equals
(
cartGoods
.
getGoodsType
(),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
GoodsTypeEnum
.
COUPON_GOODS
.
getGoodsType
()))
{
continue
;
}
shoppingCartConvertAdapter
.
updateCartGoodsInfoForMCoffee
(
cartGoods
,
productList
);
}
//校验商品券是否有当前点餐方式
// cartGoodsStates = updateSpqCartGoodsInfo(checkCartRequest.getCartGoodsList(), checkCartRequest.getOrderWay(), checkCartRequest.getPartnerId(), checkCartRequest.getTrackingNo(), cartGoodsStates
// , checkCartRequest.getStoreId());
// 点餐方式改变商品券发生变动
if
(
cartGoodsStates
!=
null
&&
cartGoodsStates
.
isOrderWayFlag
())
{
setToastMsgIfNotExist
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
(),
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.
ORDER_WAY_CHANGE
);
}
//若商品详情赋值有异常,直接移除购物车
if
(
checkCartRequest
.
getCartGoodsList
().
stream
().
anyMatch
(
cart
->
StringUtils
.
isEmpty
(
cart
.
getCartGoodsUid
())))
{
checkCartRequest
.
getCartGoodsList
().
removeIf
(
k
->
StringUtils
.
isEmpty
(
k
.
getCartGoodsUid
()));
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
}
// if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> cart.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()))) {
// checkCartRequest.getCartGoodsList().removeIf(k -> k.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()));
// checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
// checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_MATERIAL_ERROR);
// }
return
CartResponseUtil
.
success
(
checkCartRequest
);
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"assortment-shoppingcart-sdk"
,
checkCartRequest
.
getTrackingNo
(),
e
.
getMessage
(),
"checkAllCartGoods"
,
checkCartRequest
,
e
,
Level
.
ERROR
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
);
return
CartResponseUtil
.
error
(
e
.
getMessage
(),
checkCartRequest
);
}
}
private
void
setToastMsgIfNotExist
(
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
String
message
)
{
if
(
StringUtils
.
isEmpty
(
shoppingCartGoodsResponseVo
.
getToastMsg
()))
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
message
);
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/MCoffeeAddGoodsRequestVo.java
View file @
ee4ac3f0
...
...
@@ -2,6 +2,7 @@ package cn.freemud.service.impl.mcoffee.entity;
import
cn.freemud.entities.vo.CartGoods
;
import
cn.freemud.entities.vo.ComboxGoodsRequestVo
;
import
cn.freemud.entities.vo.MaterialRequestVo
;
import
cn.freemud.entities.vo.ShoppingCartInfoRequestVo
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotEmpty
;
...
...
@@ -83,6 +84,16 @@ public class MCoffeeAddGoodsRequestVo {
*/
private
List
<
ComboxGoodsRequestVo
>
productGroupList
;
/**
* 加料
*/
private
List
<
MaterialRequestVo
>
productMaterialList
;
/**
* 麦咖啡特定属性入机code
*/
private
String
specialCode
;
private
String
appType
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/ProductClient.java
View file @
ee4ac3f0
...
...
@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty;
import
cn.freemud.entities.dto.ProductBaseResponse
;
import
cn.freemud.entities.dto.RequiredProductRequest
;
import
cn.freemud.entities.dto.product.ValiadShopProductResponse
;
import
cn.freemud.entities.dto.product.ValidateShopProductRequest
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -29,4 +31,8 @@ public interface ProductClient {
@PostMapping
({
"/Shop/ListMenuMustProduct"
})
ProductBaseResponse
<
List
<
String
>>
getRequiredProductList
(
@RequestBody
RequiredProductRequest
request
);
@PostMapping
({
"/Shop/ValidateShopProduct/Reason"
})
ProductBaseResponse
<
ValiadShopProductResponse
>
validateShopProductAboutReason
(
@RequestBody
ValidateShopProductRequest
request
);
}
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