Commit 1e210723 by 周晓航

Merge branch 'feature/zxh/套餐商品库存新模式-20221018'

parents b2144915 09584aaf
...@@ -25,6 +25,7 @@ import cn.freemud.enums.ActivityTypeEnum; ...@@ -25,6 +25,7 @@ import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.GoodsTypeEnum; import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.enums.ProductType; import cn.freemud.enums.ProductType;
import cn.freemud.utils.BeanUtil; import cn.freemud.utils.BeanUtil;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
...@@ -644,6 +645,31 @@ public class ShoppingCartConvertAdapter { ...@@ -644,6 +645,31 @@ public class ShoppingCartConvertAdapter {
return result; return result;
} }
/**
* 只维护 套餐券的 model 和 库存限制
* @param cartGoods
* @param productBeans
*/
public void updateStockModelAndStockLimit(CartGoods cartGoods, List<ProductTypeBeanDTO> productBeans) {
try {
// LogUtil.info("fisherman 套餐券",JSON.toJSON(cartGoods),JSON.toJSONString(productBeans));
Optional<ProductTypeBeanDTO> firstProduct = productBeans.stream().filter(p -> ObjectUtils.equals(p.getPid(), cartGoods.getSpuId())).findFirst();
if (!firstProduct.isPresent()) {
return;
}
ProductTypeBeanDTO spuProduct = firstProduct.get();
boolean isSkuProduct = ObjectUtils.equals(com.freemud.sdk.api.assortment.shoppingcart.constant.GoodsTypeEnum.SKU_GOODS.getGoodsType(), cartGoods.getGoodsType());
SkuProductBean skuProduct = isSkuProduct ? spuProduct.getSkuList().stream().filter(p -> ObjectUtils.equals(cartGoods.getSkuId(), p.getSkuId())).findFirst().orElse(null): null;
if(isSkuProduct && skuProduct == null){//特殊场景前端传一个skuid非spuid下多规格商品
throw new ServiceException(CartResponseConstant.FAIL);
}
cartGoods.setStockLimit(isSkuProduct ? ObjectUtils.equals(1, skuProduct.getStockLimit()) : ObjectUtils.equals(1, spuProduct.getStockLimit()));
cartGoods.setStockMode(spuProduct.getStockMode());
} catch (Exception ex) {
ShoppingSdkLogUtil.errorLog("updateCartGoodsInfoNew_Error cartGoods:{},productBeans:{}", ex, JSONObject.toJSONString(cartGoods), JSONObject.toJSONString(productBeans));
cartGoods.setCartGoodsUid(null);
}
}
/** /**
* 更新当前购物车商品行信息 * 更新当前购物车商品行信息
......
...@@ -14,7 +14,10 @@ import cn.freemud.entities.vo.GetMemberCouponRequestVo; ...@@ -14,7 +14,10 @@ import cn.freemud.entities.vo.GetMemberCouponRequestVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo; import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.service.ProductService; import cn.freemud.service.ProductService;
import cn.freemud.service.thirdparty.ProductClient; import cn.freemud.service.thirdparty.ProductClient;
import com.freemud.sdk.api.assortment.shoppingcart.constant.*; import com.freemud.sdk.api.assortment.shoppingcart.constant.ActivityChannelEnum;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.GoodsTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates; import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.PropertyConvertUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.PropertyConvertUtil;
...@@ -55,7 +58,7 @@ public class ProductServiceImpl implements ProductService { ...@@ -55,7 +58,7 @@ public class ProductServiceImpl implements ProductService {
private ShoppingCartConvertAdapter shoppingCartConvertAdapter; private ShoppingCartConvertAdapter shoppingCartConvertAdapter;
@Override @Override
public boolean hasRequiredProducts(String partnerId, String storeId, List<CartGoods> cartGoodsList,String menuType) { public boolean hasRequiredProducts(String partnerId, String storeId, List<CartGoods> cartGoodsList, String menuType) {
RequiredProductRequest request = RequiredProductRequest.builder().channel(menuType).partnerId(partnerId).shopId(storeId).build(); RequiredProductRequest request = RequiredProductRequest.builder().channel(menuType).partnerId(partnerId).shopId(storeId).build();
ProductBaseResponse<List<String>> requiredProductList = productClient.getRequiredProductList(request); ProductBaseResponse<List<String>> requiredProductList = productClient.getRequiredProductList(request);
if (null != requiredProductList && ResponseCodeConstant.RESPONSE_SUCCESS.equals(requiredProductList.getErrcode()) && if (null != requiredProductList && ResponseCodeConstant.RESPONSE_SUCCESS.equals(requiredProductList.getErrcode()) &&
...@@ -76,15 +79,15 @@ public class ProductServiceImpl implements ProductService { ...@@ -76,15 +79,15 @@ public class ProductServiceImpl implements ProductService {
public BaseResponse<CheckCartRequest> checkAllCartGoodsNew(CheckCartRequest checkCartRequest) { public BaseResponse<CheckCartRequest> checkAllCartGoodsNew(CheckCartRequest checkCartRequest) {
try { try {
ValidateShopProductRequest validateShopProductRequest = shoppingCartConvertAdapter.getValidateShopProductRequest(checkCartRequest); ValidateShopProductRequest validateShopProductRequest = shoppingCartConvertAdapter.getValidateShopProductRequest(checkCartRequest);
if(CollectionUtils.isEmpty(validateShopProductRequest.getProductTypeList())){ if (CollectionUtils.isEmpty(validateShopProductRequest.getProductTypeList())) {
return CartResponseUtil.success(checkCartRequest); return CartResponseUtil.success(checkCartRequest);
} }
ProductBaseResponse<ValiadShopProductResponse> valiadResponse = productClient.validateShopProduct(validateShopProductRequest); ProductBaseResponse<ValiadShopProductResponse> valiadResponse = productClient.validateShopProduct(validateShopProductRequest);
if (valiadResponse == null || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS,valiadResponse.getErrcode()) || valiadResponse.getData()==null) { if (valiadResponse == null || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, valiadResponse.getErrcode()) || valiadResponse.getData() == null) {
checkCartRequest.getCartGoodsList().clear(); checkCartRequest.getCartGoodsList().clear();
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true); checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS); checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(valiadResponse.getErrmsg(),checkCartRequest); return CartResponseUtil.error(valiadResponse.getErrmsg(), checkCartRequest);
} }
ValiadShopProductResponse valiadResult = valiadResponse.getData(); ValiadShopProductResponse valiadResult = valiadResponse.getData();
if (CollectionUtils.isEmpty(valiadResult.getSuccessList())) { if (CollectionUtils.isEmpty(valiadResult.getSuccessList())) {
...@@ -96,21 +99,21 @@ public class ProductServiceImpl implements ProductService { ...@@ -96,21 +99,21 @@ public class ProductServiceImpl implements ProductService {
Map<String, ValiadShopProductResult> successMap = valiadResult.getSuccessList().stream().collect(Collectors.toMap(ValiadShopProductResult::getUuid, Function.identity(), (k1, k2) -> k1)); Map<String, ValiadShopProductResult> successMap = valiadResult.getSuccessList().stream().collect(Collectors.toMap(ValiadShopProductResult::getUuid, Function.identity(), (k1, k2) -> k1));
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示 //非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
boolean hasChange = false; boolean hasChange = false;
for (CartGoods cartGoods :checkCartRequest.getCartGoodsList()) { for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
// 当goodsId为空或商品是商品券时直接跳过 // 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType()) if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) { || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) {
continue; continue;
} }
if (!successMap.containsKey(cartGoods.getCartGoodsUid())){ if (!successMap.containsKey(cartGoods.getCartGoodsUid())) {
hasChange = true; hasChange = true;
cartGoods.setCartGoodsUid(null); cartGoods.setCartGoodsUid(null);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true); checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS); checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
} }
} }
if (hasChange){ if (hasChange) {
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE); setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid())); checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
} }
...@@ -122,6 +125,8 @@ public class ProductServiceImpl implements ProductService { ...@@ -122,6 +125,8 @@ public class ProductServiceImpl implements ProductService {
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType()) if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) { || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) {
//商品券 如果是套餐 需要维护套餐的 stockMode stockLimit 用于库存扣减 【【礼赞】套餐商品创建页&编辑页新增库存模式选择】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001053416
shoppingCartConvertAdapter.updateStockModelAndStockLimit(cartGoods, productList);
continue; continue;
} }
// fisherman 添加原有商品类型 // fisherman 添加原有商品类型
...@@ -151,10 +156,11 @@ public class ProductServiceImpl implements ProductService { ...@@ -151,10 +156,11 @@ public class ProductServiceImpl implements ProductService {
} catch (Exception e) { } catch (Exception e) {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true); checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS); checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(e.getMessage(),checkCartRequest); return CartResponseUtil.error(e.getMessage(), checkCartRequest);
} }
} }
/** /**
* 当ToastMsg为空时才赋值 * 当ToastMsg为空时才赋值
* *
...@@ -177,10 +183,10 @@ public class ProductServiceImpl implements ProductService { ...@@ -177,10 +183,10 @@ public class ProductServiceImpl implements ProductService {
private CartGoodsStates updateSpqCartGoodsInfo(List<CartGoods> cartGoodsList, Integer orderWay, String partnerId, String trackingNo, CartGoodsStates goodsStates, String storeId) { private CartGoodsStates updateSpqCartGoodsInfo(List<CartGoods> cartGoodsList, Integer orderWay, String partnerId, String trackingNo, CartGoodsStates goodsStates, String storeId) {
//获取所有商品券cartGoodsUid=sqp+code //获取所有商品券cartGoodsUid=sqp+code
List<String> couponIds = cartGoodsList.parallelStream() List<String> couponIds = cartGoodsList.parallelStream()
.filter(k ->StringUtils.isNotEmpty(k.getCartGoodsUid())&& k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)).map(CartGoods::getSpuId).collect(Collectors.toList()); .filter(k -> StringUtils.isNotEmpty(k.getCartGoodsUid()) && k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)).map(CartGoods::getSpuId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponIds)) { if (CollectionUtils.isEmpty(couponIds)) {
couponIds = cartGoodsList.parallelStream() couponIds = cartGoodsList.parallelStream()
.filter(k ->StringUtils.isNotBlank(k.getCouponCode())).map(CartGoods::getCouponCode).collect(Collectors.toList()); .filter(k -> StringUtils.isNotBlank(k.getCouponCode())).map(CartGoods::getCouponCode).collect(Collectors.toList());
} }
if (CollectionUtils.isEmpty(couponIds)) { if (CollectionUtils.isEmpty(couponIds)) {
return goodsStates; return goodsStates;
...@@ -194,7 +200,7 @@ public class ProductServiceImpl implements ProductService { ...@@ -194,7 +200,7 @@ public class ProductServiceImpl implements ProductService {
List<String> activityCode; List<String> activityCode;
Map<String, Boolean> couponOrderWayMap; Map<String, Boolean> couponOrderWayMap;
detailsMap = detailVOList.stream().collect(Collectors.toMap(p -> p.getCode(), (p) -> p, (v1, v2) ->v1)); detailsMap = detailVOList.stream().collect(Collectors.toMap(p -> p.getCode(), (p) -> p, (v1, v2) -> v1));
activityCode = detailVOList.stream().map(p -> p.getActiveCode()).collect(Collectors.toList()); activityCode = detailVOList.stream().map(p -> p.getActiveCode()).collect(Collectors.toList());
couponOrderWayMap = getCouponOrderWay(partnerId, activityCode, orderWay, trackingNo); couponOrderWayMap = getCouponOrderWay(partnerId, activityCode, orderWay, trackingNo);
//遍历商品券是否有当前点餐方式点餐 //遍历商品券是否有当前点餐方式点餐
...@@ -280,7 +286,7 @@ public class ProductServiceImpl implements ProductService { ...@@ -280,7 +286,7 @@ public class ProductServiceImpl implements ProductService {
List<CartGoods> cartGoodsByProduct = cartGoodsList.stream() List<CartGoods> cartGoodsByProduct = cartGoodsList.stream()
.filter(cartGoods -> cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) .filter(cartGoods -> cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtils.isEmpty(cartGoodsByProduct)){ if (CollectionUtils.isEmpty(cartGoodsByProduct)) {
cartGoodsByProduct = cartGoodsList.stream() cartGoodsByProduct = cartGoodsList.stream()
.filter(cartGoods -> StringUtils.isNotBlank(cartGoods.getCouponCode())) .filter(cartGoods -> StringUtils.isNotBlank(cartGoods.getCouponCode()))
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -1201,6 +1201,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1201,6 +1201,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo.setToastMsg(cartGoodsResponseVo.getToastMsg()); shoppingCartGoodsResponseVo.setToastMsg(cartGoodsResponseVo.getToastMsg());
} }
cartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class); cartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class);
// LogUtil.info("fisherman 套餐券 002 ",JSON.toJSON(cartGoodsList),JSON.toJSONString(checkCartRequest));
boolean cannotOrder = true; boolean cannotOrder = true;
for (CartGoods p : cartGoodsList) { for (CartGoods p : cartGoodsList) {
//singleOrder=1 表示为不可单点商品, 商品全部为不可单点商品时 不可下单 //singleOrder=1 表示为不可单点商品, 商品全部为不可单点商品时 不可下单
......
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