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
04174a43
Commit
04174a43
authored
May 31, 2021
by
周晓航
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/20210519-v2.0.30-批量一键加购ID1029801-周晓航'
parents
24622022
c26f2924
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
389 additions
and
2 deletions
+389
-2
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
+3
-0
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/request/CheckCartRequest.java
+1
-1
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/ShoppingCartBaseService.java
+4
-0
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartController.java
+10
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShopGoodsReplaceVo.java
+44
-0
shopping-cart-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+2
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
+325
-1
No files found.
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
View file @
04174a43
package
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
adapter
;
package
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
adapter
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
...
@@ -79,6 +81,7 @@ public class ShoppingCartAdapter {
...
@@ -79,6 +81,7 @@ public class ShoppingCartAdapter {
productType
.
setMemberDiscount
(
cartGoods
.
getMemberDiscount
());
productType
.
setMemberDiscount
(
cartGoods
.
getMemberDiscount
());
validateShopProductRequest
.
getProductTypeList
().
add
(
productType
);
validateShopProductRequest
.
getProductTypeList
().
add
(
productType
);
}
}
ApiLog
.
info
(
"替换购物车数据检验结果 01 -->"
,
validateShopProductRequest
,
JSON
.
toJSON
(
checkCartRequest
.
getCartGoodsList
()));
return
validateShopProductRequest
;
return
validateShopProductRequest
;
}
}
...
...
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/request/CheckCartRequest.java
View file @
04174a43
...
@@ -19,7 +19,7 @@ import java.util.List;
...
@@ -19,7 +19,7 @@ import java.util.List;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
*/
@Data
@Data
public
class
CheckCartRequest
{
public
class
CheckCartRequest
{
private
List
<
CartGoods
>
cartGoodsList
;
private
List
<
CartGoods
>
cartGoodsList
;
private
String
partnerId
;
private
String
partnerId
;
private
String
storeId
;
private
String
storeId
;
...
...
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/service/ShoppingCartBaseService.java
View file @
04174a43
...
@@ -12,6 +12,7 @@ import com.freemud.application.sdk.api.couponcenter.online.request.PartnerReques
...
@@ -12,6 +12,7 @@ import com.freemud.application.sdk.api.couponcenter.online.request.PartnerReques
import
com.freemud.application.sdk.api.couponcenter.online.response.CouponDetailResponse
;
import
com.freemud.application.sdk.api.couponcenter.online.response.CouponDetailResponse
;
import
com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService
;
import
com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService
;
import
com.freemud.application.sdk.api.couponcenter.online.service.OnlineCouponSdkService
;
import
com.freemud.application.sdk.api.couponcenter.online.service.OnlineCouponSdkService
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
...
@@ -42,6 +43,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -42,6 +43,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.core.log.LogFormatUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
...
@@ -190,6 +192,7 @@ public interface ShoppingCartBaseService {
...
@@ -190,6 +192,7 @@ public interface ShoppingCartBaseService {
try
{
try
{
ValidateShopProductRequest
validateShopProductRequest
=
shoppingCartAdapter
.
getValidateShopProductRequest
(
checkCartRequest
);
ValidateShopProductRequest
validateShopProductRequest
=
shoppingCartAdapter
.
getValidateShopProductRequest
(
checkCartRequest
);
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
ValiadShopProductResponse
>
valiadResponse
=
productService
.
validateShopProduct
(
validateShopProductRequest
);
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
ValiadShopProductResponse
>
valiadResponse
=
productService
.
validateShopProduct
(
validateShopProductRequest
);
ApiLog
.
info
(
"替换购物车数据检验结果 1 -->"
,
validateShopProductRequest
,
valiadResponse
);
if
(
valiadResponse
==
null
||
!
CartResponseConstant
.
SUCCESS
.
getCode
().
equals
(
valiadResponse
.
getCode
())
||
valiadResponse
.
getData
()==
null
)
{
if
(
valiadResponse
==
null
||
!
CartResponseConstant
.
SUCCESS
.
getCode
().
equals
(
valiadResponse
.
getCode
())
||
valiadResponse
.
getData
()==
null
)
{
checkCartRequest
.
getCartGoodsList
().
clear
();
checkCartRequest
.
getCartGoodsList
().
clear
();
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
...
@@ -239,6 +242,7 @@ public interface ShoppingCartBaseService {
...
@@ -239,6 +242,7 @@ public interface ShoppingCartBaseService {
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setChanged
(
true
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
ShoppingCartConstant
.
SHOPPING_CART_MATERIAL_ERROR
);
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
setToastMsg
(
ShoppingCartConstant
.
SHOPPING_CART_MATERIAL_ERROR
);
}
}
ApiLog
.
info
(
"替换购物车数据检验结果 2 -->"
,
null
,
checkCartRequest
);
return
CartResponseUtil
.
success
(
checkCartRequest
);
return
CartResponseUtil
.
success
(
checkCartRequest
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
ErrorLog
.
printErrorLog
(
"assortment-shoppingcart-sdk"
,
checkCartRequest
.
getTrackingNo
(),
e
.
getMessage
(),
"checkAllCartGoods"
,
checkCartRequest
,
e
,
Level
.
ERROR
);
ErrorLog
.
printErrorLog
(
"assortment-shoppingcart-sdk"
,
checkCartRequest
.
getTrackingNo
(),
e
.
getMessage
(),
"checkAllCartGoods"
,
checkCartRequest
,
e
,
Level
.
ERROR
);
...
...
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartController.java
View file @
04174a43
...
@@ -255,4 +255,14 @@ public class ShoppingCartController {
...
@@ -255,4 +255,14 @@ public class ShoppingCartController {
public
BaseResponse
getCartInfoByUser
(
@LogParams
@RequestBody
@Validated
CouponAvailableRequestVo
request
)
{
public
BaseResponse
getCartInfoByUser
(
@LogParams
@RequestBody
@Validated
CouponAvailableRequestVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartNewServiceImpl
.
class
).
getCartInfoByUser
(
request
);
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartNewServiceImpl
.
class
).
getCartInfoByUser
(
request
);
}
}
/**
* 【C端服务端】批量一键加购
* 替换老门店的商品到切换的门店下
*/
@PostMapping
(
value
=
"/replaceGoodsByShop"
)
@LogIgnore
(
excludeStatusCodes
=
{
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
},
logMessage
=
"/replaceGoodsByShop"
)
public
BaseResponse
replaceGoodsByShop
(
@LogParams
@RequestBody
@Validated
ShopGoodsReplaceVo
request
)
{
return
SDKCommonBaseContextWare
.
getBean
(
ShoppingCartNewServiceImpl
.
class
).
replaceGoodsByShop
(
request
);
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShopGoodsReplaceVo.java
0 → 100644
View file @
04174a43
package
cn
.
freemud
.
entities
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/5/19 下午2:29
* @description : 老门店商品 替换到 新门店商品下的 vo对象
*/
@Data
public
class
ShopGoodsReplaceVo
extends
BaseRequestVo
{
/**
* 微信appId
*/
@NotEmpty
(
message
=
"appId不能为空"
)
private
String
appId
;
/**
* 购买类型 0=普通购买 1=立即购买 ,默认值为普通购买
*/
// @ApiModelProperty(value = "购买类型 0=普通购买 1=立即购买 ,默认值为普通购买")
// private int buyType = 0;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private
String
menuType
;
// 我需要的字段----------
@NotEmpty
(
message
=
"oldShopId不能为空"
)
private
String
oldShopId
;
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private
String
receiveId
;
// 测试的时候 使用
private
Integer
hook
;
}
shopping-cart-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
04174a43
...
@@ -105,6 +105,8 @@ public enum ResponseResult {
...
@@ -105,6 +105,8 @@ public enum ResponseResult {
SHOPPING_CART_MATERIA_QTY_LIMIT_ERR
(
"44038"
,
"商品加料超过最大限制"
),
SHOPPING_CART_MATERIA_QTY_LIMIT_ERR
(
"44038"
,
"商品加料超过最大限制"
),
SHOPPING_CART_QUERY_DELIVERY_TEMPLATE_ERR
(
"44039"
,
"获取配送模板异常"
),
SHOPPING_CART_QUERY_DELIVERY_TEMPLATE_ERR
(
"44039"
,
"获取配送模板异常"
),
SHOPPING_CART_USER_HAVE_NO_COUPON
(
"44039"
,
"使用的商品券已失效,请重新下单"
),
SHOPPING_CART_USER_HAVE_NO_COUPON
(
"44039"
,
"使用的商品券已失效,请重新下单"
),
SHOPPING_CART_REPLACE_GOODS
(
"44040"
,
"原有购物车没有商品"
),
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
(
"44041"
,
"因部分商品当前门店暂未售卖,将从购物车移除"
),
/**
/**
* 订单状态码
* 订单状态码
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
View file @
04174a43
...
@@ -2499,7 +2499,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -2499,7 +2499,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
qty
+=
goods
.
getQty
();
qty
+=
goods
.
getQty
();
}
}
}
}
qty
+=
cartGoods
.
getQty
();
if
(
Objects
.
nonNull
(
cartGoods
))
{
qty
+=
cartGoods
.
getQty
();
}
String
redisKey
=
limitCartKey
+
appid
;
String
redisKey
=
limitCartKey
+
appid
;
Object
value
=
redisCache
.
hashGet
(
redisKey
,
"2"
);
Object
value
=
redisCache
.
hashGet
(
redisKey
,
"2"
);
...
@@ -2975,4 +2977,326 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -2975,4 +2977,326 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
}
return
ResponseUtil
.
success
(
couponAvailableCartInfo
);
return
ResponseUtil
.
success
(
couponAvailableCartInfo
);
}
}
/**
* 切换门店 替换原门店的购物车信息
*
* @param replaceGoodsRequestVo
* @return
*/
public
BaseResponse
replaceGoodsByShop
(
ShopGoodsReplaceVo
replaceGoodsRequestVo
)
{
if
(
StringUtils
.
isEmpty
(
replaceGoodsRequestVo
.
getShopId
())
||
StringUtils
.
isEmpty
(
replaceGoodsRequestVo
.
getOldShopId
())){
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
if
(
replaceGoodsRequestVo
.
getShopId
().
equals
(
replaceGoodsRequestVo
.
getOldShopId
()))
{
return
ResponseUtil
.
success
();
}
// 获取用户登录信息
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
replaceGoodsRequestVo
.
getSessionId
());
UserLoginInfoDto
userLoginInfoDto
=
convert2UserLoginInfoDto
(
assortmentCustomerInfoVo
);
String
userId
=
userLoginInfoDto
.
getMemberId
();
String
partnerId
=
replaceGoodsRequestVo
.
getPartnerId
();
// 查询原店铺购物车缓存
List
<
CartGoods
>
allCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
replaceGoodsRequestVo
.
getOldShopId
(),
userId
,
replaceGoodsRequestVo
.
getSessionId
(),
null
,
shoppingCartBaseService
);
if
(
CollectionUtils
.
isEmpty
(
allCartGoodsList
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS
);
}
// 删除购物车中的不匹配商品 加购信息不包含营销促销活动和优惠券,价格以切换后的当前门店为准
List
<
Integer
>
excludeType
=
Arrays
.
asList
(
// 换购券
GoodsTypeEnum
.
HG_COUPON_GOODS
.
getGoodsType
(),
// 万能券商品
GoodsTypeEnum
.
ALL_COUPON_GOODS
.
getGoodsType
(),
// 虚拟商品
GoodsTypeEnum
.
VIRTUAL_GOODS
.
getGoodsType
(),
// 异常商品
GoodsTypeEnum
.
EXCEPTION_GOODS
.
getGoodsType
());
List
<
CartGoods
>
excludeGoods
=
allCartGoodsList
.
stream
().
filter
(
cartGoods
->
!
excludeType
.
contains
(
cartGoods
.
getGoodsType
())).
collect
(
toList
());
List
<
CartGoods
>
HGcouponGoods
=
allCartGoodsList
.
stream
().
filter
(
cartGoods
->
cartGoods
.
getGoodsType
().
equals
(
GoodsTypeEnum
.
HG_COUPON_GOODS
.
getGoodsType
())).
collect
(
toList
());
if
(!
CollectionUtils
.
isEmpty
(
HGcouponGoods
))
{
// 替换 换购券的商品 变成普通商品 --> 优惠券商品变成 普通商品带到其他门店去
List
<
CartGoods
>
goodsList
=
new
ArrayList
<>(
HGcouponGoods
.
size
());
HGcouponGoods
.
forEach
(
cartGoods
->
{
goodsList
.
add
(
replaceGoodsType
(
cartGoods
));
});
excludeGoods
.
addAll
(
goodsList
);
}
if
(
CollectionUtils
.
isEmpty
(
excludeGoods
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
);
}
boolean
fullReplace
=
true
;
if
(
excludeGoods
.
size
()!=
allCartGoodsList
.
size
())
{
fullReplace
=
false
;
}
// 拿出 spu sku 校验 当前店铺是否有 商品
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
fullReplace
=
updateCartGoodsLegal
(
excludeGoods
,
userId
,
replaceGoodsRequestVo
,
shoppingCartGoodsResponseVo
,
fullReplace
);
if
(!
fullReplace
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
);
}
return
ResponseUtil
.
success
();
}
/**
* 替换 优惠券商品 变成普通商品
* @param excludeGood
*/
private
CartGoods
replaceGoodsType
(
CartGoods
excludeGood
)
{
CartGoods
ret
=
new
CartGoods
();
String
skuId
=
excludeGood
.
getSkuId
();
// 优惠券换购商品 spuid:88608274545893050894 "goodsId": "spq88608274545893050894"
ret
.
setGoodsId
(
skuId
);
ret
.
setAddCartTime
(
System
.
currentTimeMillis
());
ret
.
setSpuId
(
skuId
);
ret
.
setSkuId
(
skuId
);
ret
.
setQty
(
excludeGood
.
getQty
());
ret
.
setCouponCode
(
null
);
ret
.
setGoodsType
(
GoodsTypeEnum
.
SPU_GOODS
.
getGoodsType
());
ret
.
setExtra
(
excludeGood
.
getExtra
());
ret
.
setNodeId
(
excludeGood
.
getNodeId
());
ret
.
setCategoryName
(
excludeGood
.
getCategoryName
());
ret
.
setProductComboList
(
excludeGood
.
getProductComboList
());
ret
.
setProductGroupList
(
excludeGood
.
getProductGroupList
());
ret
.
setProductMaterialList
(
excludeGood
.
getProductMaterialList
());
return
ret
;
}
private
void
testDemo
(
List
<
CartGoods
>
excludeGoods
,
ShopGoodsReplaceVo
replaceGoodsRequestVo
,
String
userId
)
{
String
partnerId
=
replaceGoodsRequestVo
.
getPartnerId
();
String
storeId
=
replaceGoodsRequestVo
.
getShopId
();
String
appId
=
replaceGoodsRequestVo
.
getAppId
();
String
menuType
=
replaceGoodsRequestVo
.
getMenuType
();
Integer
orderType
=
replaceGoodsRequestVo
.
getOrderType
();
String
receiveId
=
replaceGoodsRequestVo
.
getReceiveId
();
excludeGoods
.
forEach
(
oldCartGoods
->
{
String
spuId
=
oldCartGoods
.
getSpuId
();
String
skuId
=
oldCartGoods
.
getSkuId
();
String
goodsId
=
StringUtils
.
isEmpty
(
skuId
)
?
spuId
:
skuId
;
// String tableNumber = cartGoods.getTableNumber();
Integer
qty
=
oldCartGoods
.
getQty
();
CartGoods
cartGoods
=
new
CartGoods
();
cartGoods
.
setGoodsId
(
goodsId
);
cartGoods
.
setAddCartTime
(
System
.
currentTimeMillis
());
cartGoods
.
setSpuId
(
spuId
);
cartGoods
.
setSkuId
(
skuId
);
cartGoods
.
setQty
(
qty
);
Integer
goodsType
=
StringUtils
.
isEmpty
(
skuId
)||
ObjectUtils
.
equals
(
spuId
,
skuId
)
?
GoodsTypeEnum
.
SPU_GOODS
.
getGoodsType
()
:
GoodsTypeEnum
.
SKU_GOODS
.
getGoodsType
();
cartGoods
.
setGoodsType
(
goodsType
);
cartGoods
.
setExtra
(
oldCartGoods
.
getExtra
());
cartGoods
.
setNodeId
(
oldCartGoods
.
getNodeId
());
cartGoods
.
setCategoryName
(
oldCartGoods
.
getCategoryName
());
List
<
CartGoods
.
ComboxGoods
>
productComboList
=
new
ArrayList
<>();
List
<
CartGoods
.
ComboxGoods
>
productGroupList
=
new
ArrayList
<>();
List
<
CartGoods
.
MaterialGoods
>
materialGoodsList
=
new
ArrayList
<>();
//套餐
if
(
CollectionUtils
.
isNotEmpty
(
oldCartGoods
.
getProductComboList
()))
{
for
(
CartGoods
.
ComboxGoods
vo
:
oldCartGoods
.
getProductComboList
())
{
CartGoods
.
ComboxGoods
productCombox
=
new
CartGoods
.
ComboxGoods
();
productCombox
.
setGoodsId
(
vo
.
getSkuId
());
productCombox
.
setSkuId
(
vo
.
getSkuId
());
productCombox
.
setQty
(
vo
.
getQty
());
productCombox
.
setExtra
(
vo
.
getExtra
());
productComboList
.
add
(
productCombox
);
}
}
//固定商品组
if
(
CollectionUtils
.
isNotEmpty
(
oldCartGoods
.
getProductGroupList
()))
{
for
(
CartGoods
.
ComboxGoods
vo
:
oldCartGoods
.
getProductGroupList
())
{
CartGoods
.
ComboxGoods
productCombox
=
new
CartGoods
.
ComboxGoods
();
productCombox
.
setGoodsId
(
vo
.
getSkuId
());
productCombox
.
setSkuId
(
vo
.
getSkuId
());
productCombox
.
setQty
(
vo
.
getQty
());
productCombox
.
setExtra
(
vo
.
getExtra
());
productCombox
.
setProductGroupId
(
vo
.
getProductGroupId
()==
null
?
null
:
vo
.
getProductGroupId
());
productGroupList
.
add
(
productCombox
);
}
}
//加料商品集
if
(
CollectionUtils
.
isNotEmpty
(
oldCartGoods
.
getProductMaterialList
()))
{
for
(
CartGoods
.
MaterialGoods
materialRequestVo
:
oldCartGoods
.
getProductMaterialList
())
{
CartGoods
.
MaterialGoods
materialGoods
=
new
CartGoods
.
MaterialGoods
();
materialGoods
.
setSpuId
(
materialRequestVo
.
getSpuId
());
materialGoods
.
setQty
(
materialRequestVo
.
getQty
()
==
null
?
1
:
materialRequestVo
.
getQty
());
materialGoodsList
.
add
(
materialGoods
);
}
}
cartGoods
.
setProductComboList
(
productComboList
);
cartGoods
.
setProductGroupList
(
productGroupList
);
cartGoods
.
setProductMaterialList
(
materialGoodsList
);
// 获取商品详细信息
List
<
ProductBean
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfo
(
partnerId
,
storeId
,
Collections
.
singletonList
(
spuId
),
replaceGoodsRequestVo
.
getMenuType
(),
this
.
shoppingCartBaseService
);
List
<
Long
>
productIds
=
new
ArrayList
<>();
productIds
.
add
(
Long
.
parseLong
(
goodsId
));
List
<
CartGoods
>
allCartGoodsList
=
new
ArrayList
<>();
List
<
CartGoods
>
oldCartGoodsList
=
new
ArrayList
<>();
Integer
checkQty
=
this
.
checkSkuQty
(
allCartGoodsList
,
cartGoods
);
//购物车添加数量限制
Integer
productsCount
=
limitGoodsQty
(
allCartGoodsList
,
cartGoods
,
appId
);
//查询多个商品库存信息 TODO
queryManyGoodsStocks
(
replaceGoodsRequestVo
.
getMenuType
(),
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
productIds
,
productBeanListSpuClass
,
skuId
,
checkQty
);
updateCartGoodsLegal
(
cartGoods
,
userId
,
replaceGoodsRequestVo
,
new
ShoppingCartGoodsResponseVo
(),
oldCartGoodsList
);
});
}
private
void
updateCartGoodsLegal
(
CartGoods
cartGoods
,
String
userId
,
ShopGoodsReplaceVo
replaceGoodsRequestVo
,
ShoppingCartGoodsResponseVo
addShoppingCartGoodsRequestVo
,
List
<
CartGoods
>
oldAllCartGoodsList
)
{
//存储新添加的购物车信息
List
<
CartGoods
>
nowCartGoodsList
=
new
ArrayList
<>();
oldAllCartGoodsList
.
add
(
cartGoods
);
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
oldAllCartGoodsList
,
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
addShoppingCartGoodsRequestVo
,
replaceGoodsRequestVo
.
getOrderType
(),
""
,
replaceGoodsRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
addShoppingCartGoodsRequestVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
addShoppingCartGoodsRequestVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
}
List
<
CartGoods
>
allCartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
//判断当前商品在购物车是否已存在,存在则数量+1,不存在商品行 + 1
allCartGoodsList
.
forEach
(
oldCartGoods
->
{
int
index
;
if
((
index
=
nowCartGoodsList
.
indexOf
(
oldCartGoods
))
>=
0
)
{
nowCartGoodsList
.
get
(
index
).
setQty
(
nowCartGoodsList
.
get
(
index
).
getQty
()
+
cartGoods
.
getQty
());
}
else
{
nowCartGoodsList
.
add
(
oldCartGoods
);
}
});
// 重新set购物车信息到缓存中
assortmentSdkService
.
setShoppingCart
(
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
userId
,
nowCartGoodsList
,
replaceGoodsRequestVo
.
getSessionId
(),
null
,
this
.
shoppingCartBaseService
);
oldAllCartGoodsList
.
clear
();
oldAllCartGoodsList
.
addAll
(
nowCartGoodsList
);
}
private
void
queryManyGoodsStocks
(
String
menuType
,
String
partnerId
,
String
shopId
,
List
<
Long
>
productIds
,
List
<
ProductBean
>
productBeanListSpuClass
,
String
skuId
,
Integer
qty
)
{
GetProductStockRequestDto
requestDto
=
new
GetProductStockRequestDto
();
requestDto
.
setChannel
(
BusinessTypeEnum
.
getByType
(
menuType
).
getCode
());
requestDto
.
setPartnerId
(
partnerId
);
requestDto
.
setStoreId
(
shopId
);
requestDto
.
setProductIds
(
productIds
);
GetProductStockResponseDto
availableStocks
=
null
;
if
(
productBeanListSpuClass
.
get
(
0
).
getType
()
==
ProductType
.
NOSPEC
.
getCode
()
&&
productBeanListSpuClass
.
get
(
0
).
getStockLimit
()
==
1
)
{
availableStocks
=
stockClient
.
getAvailableStocks
(
requestDto
);
}
else
{
for
(
ProductBean
.
SkuProductBean
skuProductBean
:
productBeanListSpuClass
.
get
(
0
).
getSkuList
())
{
if
(
skuId
.
equals
(
skuProductBean
.
getSkuId
())
&&
skuProductBean
.
getStockLimit
()
==
1
)
{
availableStocks
=
stockClient
.
getAvailableStocks
(
requestDto
);
break
;
}
}
}
if
(
availableStocks
!=
null
&&
!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
availableStocks
.
getCode
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_STOCK_NOT_HAVE
);
}
if
(
availableStocks
!=
null
&&
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
availableStocks
.
getCode
())
&&
(
CollectionUtils
.
isEmpty
(
availableStocks
.
getResult
())
||
availableStocks
.
getResult
().
get
(
0
).
getQty
()
==
null
||
availableStocks
.
getResult
().
get
(
0
).
getQty
()
<
qty
))
{
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
);
}
}
private
boolean
updateCartGoodsLegal
(
List
<
CartGoods
>
excludeGoods
,
String
userId
,
ShopGoodsReplaceVo
replaceGoodsRequestVo
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
boolean
fullReplace
)
{
//存储新添加的购物车信息
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
// 删除商品价格 方便不校验商品价格
excludeGoods
.
forEach
(
cartGoods
->
cartGoods
.
setFinalPrice
(
null
));
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
excludeGoods
,
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
shoppingCartGoodsResponseVo
,
replaceGoodsRequestVo
.
getOrderType
(),
""
,
replaceGoodsRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
}
List
<
CartGoods
>
allCartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 如果查询出来的数据 为null 表示没有该商品 需要处理 fisherman
if
(
CollectionUtils
.
isEmpty
(
allCartGoodsList
))
{
fullReplace
=
false
;
return
fullReplace
;
}
if
(
allCartGoodsList
.
size
()
!=
excludeGoods
.
size
()){
// 表示有数据被删除
fullReplace
=
false
;
}
//校验库存
List
<
CartGoods
>
stockLimitGoods
=
allCartGoodsList
.
stream
().
filter
(
CartGoods:
:
isStockLimit
).
collect
(
toList
());
List
<
CartGoods
>
notCheckStock
=
allCartGoodsList
.
stream
().
filter
(
cartGoods
->
!
cartGoods
.
isStockLimit
()).
collect
(
toList
());
LogUtil
.
info
(
"request check stock limit 001 "
,
stockLimitGoods
,
notCheckStock
);
if
(!
CollectionUtils
.
isEmpty
(
stockLimitGoods
))
{
List
<
Long
>
goodsId
=
stockLimitGoods
.
stream
().
map
(
v
->
Long
.
parseLong
(
v
.
getGoodsId
())).
collect
(
toList
());
GetProductStockRequestDto
requestDto
=
new
GetProductStockRequestDto
();
requestDto
.
setChannel
(
BusinessTypeEnum
.
getByType
(
replaceGoodsRequestVo
.
getMenuType
()).
getCode
());
requestDto
.
setPartnerId
(
replaceGoodsRequestVo
.
getPartnerId
());
requestDto
.
setStoreId
(
replaceGoodsRequestVo
.
getShopId
());
requestDto
.
setProductIds
(
goodsId
);
GetProductStockResponseDto
availableStocks
=
stockClient
.
getAvailableStocks
(
requestDto
);
LogUtil
.
info
(
"request check stock begin"
,
requestDto
,
availableStocks
);
if
(
availableStocks
!=
null
)
{
if
(!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
availableStocks
.
getCode
())){
// 没有请求数据
fullReplace
=
false
;
}
if
(
CollectionUtils
.
isEmpty
(
availableStocks
.
getResult
())){
LogUtil
.
info
(
"request check stock limit fail result is null"
,
requestDto
,
availableStocks
);
fullReplace
=
false
;
}
List
<
GetProductStockResponseDto
.
DataBean
>
availableStocksResult
=
availableStocks
.
getResult
();
stockLimitGoods
.
forEach
(
cartGoods
->
{
});
availableStocksResult
.
forEach
(
dataBean
->
{
for
(
CartGoods
cartGoods
:
stockLimitGoods
)
{
if
(
cartGoods
.
getGoodsId
().
equals
(
dataBean
.
getPid
()+
""
))
{
Integer
qty
=
dataBean
.
getQty
();
if
(
qty
!=
null
&&
qty
.
compareTo
(
cartGoods
.
getQty
())
<
0
)
{
cartGoods
.
setQty
(
qty
);
}
}
}
});
// 获取到最新的 库存 stockLimitGoods 数据 放入 nowCartGoodsList 中
LogUtil
.
info
(
"request check stock limit 002 "
,
stockLimitGoods
,
notCheckStock
);
notCheckStock
.
addAll
(
stockLimitGoods
);
}
else
{
LogUtil
.
info
(
"request check stock limit fail"
,
requestDto
,
null
);
fullReplace
=
false
;
}
}
allCartGoodsList
=
notCheckStock
;
shoppingCartNewBaseService
.
clear
(
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
userId
);
// 重新set购物车信息到缓存中
assortmentSdkService
.
setShoppingCart
(
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
userId
,
allCartGoodsList
,
replaceGoodsRequestVo
.
getSessionId
(),
null
,
this
.
shoppingCartBaseService
);
excludeGoods
.
clear
();
excludeGoods
.
addAll
(
allCartGoodsList
);
return
fullReplace
;
}
}
}
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