Commit ab505bec by 刘鹏飞

拼单购物车添加购物车的锁的控制

parent c5cf201c
...@@ -116,4 +116,10 @@ public class RedisKeyConstant { ...@@ -116,4 +116,10 @@ public class RedisKeyConstant {
*/ */
public final static String COLLAGE_STORE_MEMBER_KEY = "kgd:collage:store:member:{0}:{1}"; public final static String COLLAGE_STORE_MEMBER_KEY = "kgd:collage:store:member:{0}:{1}";
/**
* kgd:collage:cart:lock:{partnerId}:{storeId}:{邀请用户ID}
* 拼单购物车版本号key
*/
public final static String COLLAGE_CART_LOCK_KEY = "kgd:collage:cart:lock:{0}:{1}:{2}";
} }
...@@ -201,7 +201,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService { ...@@ -201,7 +201,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
/** /**
* 获取当前购物车版本 * 获取当前购物车版本
* 默认1 * 默认0
* @param key * @param key
* @return * @return
*/ */
...@@ -214,7 +214,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService { ...@@ -214,7 +214,7 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
request.put("key",key); request.put("key",key);
ErrorLog.printErrorLog("获取当前购物车版本信息异常", "CollageCartBaseServiceImpl/getCartVersion", request, e); ErrorLog.printErrorLog("获取当前购物车版本信息异常", "CollageCartBaseServiceImpl/getCartVersion", request, e);
} }
return value == null ? 1 : value; return value == null ? 0 : value;
} }
/** /**
...@@ -397,11 +397,22 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService { ...@@ -397,11 +397,22 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
* @param userId * @param userId
* @return * @return
*/ */
private String genCollageCarVerKey(String partnerId, String storeId, String userId) { public String genCollageCarVerKey(String partnerId, String storeId, String userId) {
return MessageFormat.format(RedisKeyConstant.COLLAGE_CART_VER_KEY, partnerId, storeId, userId); return MessageFormat.format(RedisKeyConstant.COLLAGE_CART_VER_KEY, partnerId, storeId, userId);
} }
/** /**
* 构建拼单购物车加锁使用的key
* @param partnerId
* @param storeId
* @param userId
* @return
*/
public String genCollageCarLockKey(String partnerId, String storeId, String userId) {
return MessageFormat.format(RedisKeyConstant.COLLAGE_CART_LOCK_KEY, partnerId, storeId, userId);
}
/**
* 增加购物车版本 * 增加购物车版本
* *
* @param partnerId 商户号 * @param partnerId 商户号
......
package cn.freemud.service.impl; package cn.freemud.service.impl;
import cn.freemud.adapter.ActivityAdapter; import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.adapter.CollageOrderAdapter;
import cn.freemud.adapter.CouponAdapter; import cn.freemud.adapter.CouponAdapter;
import cn.freemud.adapter.ShoppingCartConvertAdapter; import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
...@@ -29,9 +28,7 @@ import com.freemud.application.sdk.api.log.LogThreadLocal; ...@@ -29,9 +28,7 @@ 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;
import com.freemud.card.sdk.log.ErrorLog; import com.freemud.card.sdk.log.ErrorLog;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant; import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageMemberState; import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageMemberState;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto; import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum; import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest; import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
...@@ -39,16 +36,12 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseS ...@@ -39,16 +36,12 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseS
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageOrderBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageOrderBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
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.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collector;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
...@@ -152,7 +145,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -152,7 +145,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId),addShoppingCartGoodsRequestVo.getMenuType(), this.shoppingCartBaseService); List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId),addShoppingCartGoodsRequestVo.getMenuType(), this.shoppingCartBaseService);
// 购物车版本加锁 // 购物车版本加锁
dolock(partnerId, storeId, crateUserId,addShoppingCartGoodsRequestVo.getCarVer()); dolock(partnerId, storeId, crateUserId,addShoppingCartGoodsRequestVo.getCarVer(),true);
List<CartGoods> allCartGoodsList = null; List<CartGoods> allCartGoodsList = null;
String productName = null; String productName = null;
...@@ -268,7 +261,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -268,7 +261,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
throw new ServiceException(ResponseResult.NOT_LOGIN); throw new ServiceException(ResponseResult.NOT_LOGIN);
} }
UserLoginInfoDto userLoginInfoDto = convert2UserLoginInfoDto(currentUserInfoVo); UserLoginInfoDto userLoginInfoDto = convert2UserLoginInfoDto(currentUserInfoVo);
//String currentSessionId = updateShoppingCartGoodsQtyRequestVo.getSessionId();
String currentUserId = userLoginInfoDto.getMemberId(); String currentUserId = userLoginInfoDto.getMemberId();
String partnerId = updateShoppingCartGoodsQtyRequestVo.getPartnerId(); String partnerId = updateShoppingCartGoodsQtyRequestVo.getPartnerId();
String storeId = updateShoppingCartGoodsQtyRequestVo.getShopId(); String storeId = updateShoppingCartGoodsQtyRequestVo.getShopId();
...@@ -292,7 +284,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -292,7 +284,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} }
// 购物车版本加锁 // 购物车版本加锁
dolock(partnerId, storeId, crateUserId,updateShoppingCartGoodsQtyRequestVo.getCarVer()); dolock(partnerId, storeId, crateUserId,updateShoppingCartGoodsQtyRequestVo.getCarVer(),true);
List<CartGoods> cartGoodsList = null; List<CartGoods> cartGoodsList = null;
try { try {
...@@ -408,7 +400,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -408,7 +400,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} }
// 购物车版本加锁 // 购物车版本加锁
dolock(partnerId, storeId, crateUserId,shoppingCartInfoRequestVo.getCarVer()); dolock(partnerId, storeId, crateUserId,shoppingCartInfoRequestVo.getCarVer(),false);
List<CartGoods> cartGoodsList = null; List<CartGoods> cartGoodsList = null;
try { try {
...@@ -684,7 +676,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -684,7 +676,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
System.out.println(JSON.toJSONString(activityCalculationDiscountRequestDto)); System.out.println(JSON.toJSONString(activityCalculationDiscountRequestDto));
activityCalculationDiscountResponseDto = activityClient.calculationDiscount(activityCalculationDiscountRequestDto); activityCalculationDiscountResponseDto = activityClient.calculationDiscount(activityCalculationDiscountRequestDto);
} catch (Exception ex) { } catch (Exception ex) {
com.freemud.application.sdk.api.log.ErrorLog.printErrorLog("calculation_discount_error", "/calculation/discount", activityCalculationDiscountRequestDto, ex); ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "shoppingCartCollageServiceImpl getActivityCalculationDiscountResponse:" + ex.getMessage(), ex);
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN); throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
} }
// 返回成功 // 返回成功
...@@ -843,20 +835,23 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -843,20 +835,23 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param storeId * @param storeId
* @param crateUserId * @param crateUserId
* @param carVer * @param carVer
* @param flag
*/ */
private void dolock(String partnerId,String storeId,String crateUserId,Integer carVer) { private void dolock(String partnerId,String storeId,String crateUserId,Integer carVer,Boolean flag) {
if(flag){
// 设置版本锁控制购物车只能一个人进行操作 // 设置版本锁控制购物车只能一个人进行操作
if (carVer == null || carVer < 1) { if (carVer == null || carVer < 1) {
throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR); throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
} }
// 构建拼单购物车版本号缓存key // 构建拼单购物车版本号缓存key
String collageCartVerKey = genCollageCarVerKey(partnerId, storeId, crateUserId); String collageCartVerKey = collageCartBaseService.genCollageCarVerKey(partnerId, storeId, crateUserId);
Integer cartVersion = collageCartBaseService.getCartVersion(collageCartVerKey); Integer cartVersion = collageCartBaseService.getCartVersion(collageCartVerKey);
if (!carVer.equals(cartVersion)) { if (!carVer.equals(cartVersion)) {
throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR); throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
} }
}
boolean lock = RedisLock.getInstance(redisCache.getRedisTemplate()).lock(collageCartVerKey); boolean lock = RedisLock.getInstance(redisCache.getRedisTemplate()).lock(collageCartBaseService.genCollageCarLockKey(partnerId, storeId, crateUserId));
if (!lock) { if (!lock) {
//加锁失败 //加锁失败
throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR); throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
...@@ -871,23 +866,13 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -871,23 +866,13 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
*/ */
private void doUnlock(String partnerId,String storeId,String crateUserId) { private void doUnlock(String partnerId,String storeId,String crateUserId) {
try { try {
String collageCartVerKey = genCollageCarVerKey(partnerId, storeId, crateUserId); String collageCartLockKey = collageCartBaseService.genCollageCarLockKey(partnerId, storeId, crateUserId);
RedisLock.getInstance(redisCache.getRedisTemplate()).unlock(collageCartVerKey); RedisLock.getInstance(redisCache.getRedisTemplate()).unlock(collageCartLockKey);
} catch (Exception e) { } catch (Exception e) {
ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "购物车版本解锁解锁失败" , e); ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "购物车版本解锁解锁失败" , e);
} }
} }
/**
* 构建拼单购物车版本号缓存key
* @param partnerId
* @param storeId
* @param userId
* @return
*/
private String genCollageCarVerKey(String partnerId, String storeId, String userId) {
return MessageFormat.format(RedisKeyConstant.COLLAGE_CART_VER_KEY, partnerId, storeId, userId);
}
/** /**
* 构建 ActivityCalculationDiscountRequestDto * 构建 ActivityCalculationDiscountRequestDto
...@@ -1034,7 +1019,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -1034,7 +1019,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} }
// 购物车版本加锁 // 购物车版本加锁
dolock(partnerId, storeId, crateUserId,shoppingCartCollageClearRequestVo.getCarVer()); dolock(partnerId, storeId, crateUserId,shoppingCartCollageClearRequestVo.getCarVer(),true);
List<CartGoods> cartGoodsList = new ArrayList<>(); List<CartGoods> cartGoodsList = new ArrayList<>();
try { try {
......
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