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
d09cd2b8
Commit
d09cd2b8
authored
May 20, 2021
by
周晓航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
一键加购 需求
parent
ce0a614a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
197 additions
and
1 deletions
+197
-1
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
+40
-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
+145
-1
No files found.
shopping-cart-application-service/src/main/java/cn/freemud/controller/ShoppingCartController.java
View file @
d09cd2b8
...
@@ -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 @
d09cd2b8
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
;
// 我需要的字段----------
private
String
oldShopId
;
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private
String
receiveId
;
}
shopping-cart-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
d09cd2b8
...
@@ -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 @
d09cd2b8
...
@@ -2430,7 +2430,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -2430,7 +2430,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"
);
...
@@ -2906,4 +2908,146 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -2906,4 +2908,146 @@ 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
())){
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
// 获取用户登录信息
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
());
if
(
CollectionUtils
.
isEmpty
(
excludeGoods
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
);
}
// 拿出 spu sku 校验 当前店铺是否有 商品
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
String
storeId
=
replaceGoodsRequestVo
.
getShopId
();
String
menuType
=
replaceGoodsRequestVo
.
getMenuType
();
String
appId
=
replaceGoodsRequestVo
.
getAppId
();
List
<
String
>
spuIds
=
excludeGoods
.
stream
().
map
(
CartGoods:
:
getSpuId
).
collect
(
toList
());
String
receiveId
=
replaceGoodsRequestVo
.
getReceiveId
();
Integer
orderType
=
replaceGoodsRequestVo
.
getOrderType
();
List
<
ProductBean
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfo
(
partnerId
,
storeId
,
spuIds
,
menuType
,
this
.
shoppingCartBaseService
);
LogUtil
.
info
(
"productBeanListSpuClass"
,
spuIds
,
JSON
.
toJSONString
(
productBeanListSpuClass
));
// 没有查到商品 fisherman -> 给前端提示就行
if
(
productBeanListSpuClass
==
null
||
productBeanListSpuClass
.
isEmpty
()){
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
);
}
// 校验 获取到的商品数量 规格是否和 上家门店规格一直 sku spu
List
<
String
>
productIds
=
productBeanListSpuClass
.
stream
().
map
(
ProductBean:
:
getPid
).
collect
(
toList
());
boolean
fullReplace
=
true
;
if
(
productIds
.
containsAll
(
spuIds
))
{
// 全部包含的情况 再次校验 sku是否包含
List
<
ProductBean
.
SkuProductBean
>
skuListAll
=
new
ArrayList
<>();
productBeanListSpuClass
.
forEach
(
productBean
->
skuListAll
.
addAll
(
productBean
.
getSkuList
()));
List
<
String
>
productSkuIds
=
skuListAll
.
stream
().
map
(
ProductBean
.
SkuProductBean
::
getSkuId
).
collect
(
toList
());
List
<
String
>
excludeSkuList
=
excludeGoods
.
stream
().
map
(
CartGoods:
:
getSkuId
).
collect
(
toList
());
// 删除 不对等的sku存在
if
(!
productSkuIds
.
containsAll
(
excludeSkuList
))
{
List
<
String
>
skuList
=
new
ArrayList
<>();
excludeSkuList
.
forEach
(
sku
->{
if
(!
productSkuIds
.
contains
(
sku
))
{
skuList
.
add
(
sku
);
}
});
excludeGoods
=
excludeGoods
.
stream
().
filter
(
cartGoods
->
!
skuList
.
contains
(
cartGoods
.
getSpuId
())).
collect
(
Collectors
.
toList
());
fullReplace
=
false
;
}
// 全部包含,直接使用
}
else
{
// 不全部包含
List
<
String
>
spuList
=
new
ArrayList
<>();
productIds
.
forEach
(
s
->
{
if
(!
spuIds
.
contains
(
s
))
{
spuList
.
add
(
s
);
}
});
excludeGoods
=
excludeGoods
.
stream
().
filter
(
cartGoods
->
!
spuList
.
contains
(
cartGoods
.
getSpuId
())).
collect
(
Collectors
.
toList
());
fullReplace
=
false
;
}
// 商品小料数量 没校验
// 购物车添加数量限制
// Integer productsCount = limitGoodsQty(excludeGoods, null, appId);
//查询多个商品库存信息
//更新redis
fullReplace
=
updateCartGoodsLegal
(
excludeGoods
,
userId
,
replaceGoodsRequestVo
,
shoppingCartGoodsResponseVo
,
fullReplace
);
// Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,replaceGoodsRequestVo.getOrderType());
// ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, orderType);
// 丢弃 新门店的购物车数据
//String cartGoodsUid = replaceGoodsRequestVo.getCartGoodsUid();
if
(!
fullReplace
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_REPLACE_GOODS_AND_CLEAR
);
}
return
ResponseUtil
.
success
();
}
private
boolean
updateCartGoodsLegal
(
List
<
CartGoods
>
excludeGoods
,
String
userId
,
ShopGoodsReplaceVo
replaceGoodsRequestVo
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
boolean
fullReplace
)
{
//存储新添加的购物车信息
List
<
CartGoods
>
nowCartGoodsList
=
new
ArrayList
<>();
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
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
;
}
//判断当前商品在购物车是否已存在,存在则数量+1,不存在商品行 + 1
allCartGoodsList
.
forEach
(
oldCartGoods
->
{
int
index
;
if
((
index
=
nowCartGoodsList
.
indexOf
(
oldCartGoods
))
>=
0
)
{
nowCartGoodsList
.
get
(
index
).
setQty
(
nowCartGoodsList
.
get
(
index
).
getQty
());
}
else
{
nowCartGoodsList
.
add
(
oldCartGoods
);
}
});
// fisherman 删除 新门店的缓存数据 重新添加 测试 之后需要放开
//shoppingCartNewBaseService.clear(replaceGoodsRequestVo.getPartnerId(), replaceGoodsRequestVo.getShopId(), userId);
// 重新set购物车信息到缓存中
assortmentSdkService
.
setShoppingCart
(
replaceGoodsRequestVo
.
getPartnerId
(),
replaceGoodsRequestVo
.
getShopId
(),
userId
,
nowCartGoodsList
,
replaceGoodsRequestVo
.
getSessionId
(),
null
,
this
.
shoppingCartBaseService
);
excludeGoods
.
clear
();
excludeGoods
.
addAll
(
nowCartGoodsList
);
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