Commit 04174a43 by 周晓航

Merge branch 'feature/20210519-v2.0.30-批量一键加购ID1029801-周晓航'

parents 24622022 c26f2924
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;
} }
......
...@@ -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;
......
...@@ -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);
......
...@@ -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 ;
// 我需要的字段----------
@NotEmpty(message = "oldShopId不能为空")
private String oldShopId;
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private String receiveId;
// 测试的时候 使用
private Integer hook;
}
...@@ -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", "因部分商品当前门店暂未售卖,将从购物车移除"),
/** /**
* 订单状态码 * 订单状态码
......
...@@ -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;
}
} }
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