Commit d09cd2b8 by 周晓航

一键加购 需求

parent ce0a614a
...@@ -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);
}
} }
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;
}
...@@ -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", "因部分商品当前门店暂未售卖,将从购物车移除"),
/** /**
* 订单状态码 * 订单状态码
......
...@@ -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;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment