Commit 9dc58a30 by 刘鹏飞

拼单购物车改造

parent 091f0a79
......@@ -127,4 +127,11 @@ public interface CollageOrderBaseService {
* 清除用户在店铺下的拼单时间
*/
BaseResponse cleanCollageMemberAddTime(CollageOrderDto collageOrderDto);
/**
* 修改用户加购状态 加购完毕
* @param collageOrderDto
* @return
*/
BaseResponse getOneCollageMemberState(CollageOrderDto collageOrderDto);
}
......@@ -219,7 +219,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
return CartResponseUtil.success();
} catch (Exception e) {
ErrorLog.printErrorLog("修改拼单用户加购状态为继续选购异常", "CollageOrderBaseServiceImpl/shoppingCollageMemberState", this.collageOrderRequest(collageOrderDto), e);
return CartResponseUtil.success("修改拼单用户加购状态为继续选购异常");
return CartResponseUtil.error("修改拼单用户加购状态为继续选购异常");
}
}
......@@ -287,6 +287,17 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
return CartResponseUtil.success();
}
@Override
public BaseResponse<CollageMemberState> getOneCollageMemberState(CollageOrderDto collageOrderDto) {
try {
String collageMemberStateKey = this.genCollageMemberStateHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
return CartResponseUtil.success(this.getCollageMemberState(collageMemberStateKey,collageOrderDto.getCurrentUserId()));
} catch (Exception e) {
ErrorLog.printErrorLog("获取拼单用户状态异常", "CollageOrderBaseServiceImpl/getOneCollageMemberState", this.collageOrderRequest(collageOrderDto), e);
return CartResponseUtil.error("获取拼单用户状态异常");
}
}
/**
* 构建门店下拼单人员hashKey
* @param partnerId
......@@ -442,7 +453,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
collageMemberState.setUserId(collageOrderDto.getCurrentUserId());
collageMemberState.setNickName(collageOrderDto.getNickName());
collageMemberState.setPhotoUrl(collageOrderDto.getPhotoUrl());
collageMemberState.setState(CollageMemberStateType.READY.getValue());
collageMemberState.setState(CollageMemberStateType.SHOPPING.getValue());
redisTemplate.boundHashOps(collageMemberStateHashKey).put(collageOrderDto.getCurrentUserId(), collageMemberState);
redisTemplate.boundHashOps(collageMemberStateHashKey).expire(1, TimeUnit.HOURS);
}
......
......@@ -34,4 +34,16 @@ public class ShoppingCartCollageGoodsResponseVo extends ShoppingCartGoodsBaseRes
*/
private String photoUrl;
/**
* 选好了状态
*/
private Boolean states;
/**
* 包装费
*/
private Long packPrice;
}
......@@ -41,6 +41,12 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
*/
private String createCollageUserId;
/**
* 拼单场景使用
* 0个人购物车1整个购物车
*/
private Integer type;
@NotEmpty(message = "appId不能为空")
private String appId;
/**
......
......@@ -150,6 +150,7 @@ public enum ResponseResult {
COLLAGE_CREATE_NOT_OUT_OF("49009", "拼单发起人不能退出拼单,请取消"),
COLLAGE_MEMBER_NOT_ADD("49010", "用户未参加拼单,请确认"),
COLLAGE_MEMBER_NOT_CREATE("49011", "只有拼单发起者才能移除拼单人员,请确认"),
COLLAGE_STATES_CHOOSE("49012", "获取用户选购状态失败"),
/**
* 微信卡券
......
......@@ -24,6 +24,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.card.sdk.log.ErrorLog;
......@@ -42,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
......@@ -144,8 +146,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
// 获取商品详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId),addShoppingCartGoodsRequestVo.getMenuType(), this.shoppingCartBaseService);
// 购物车版本加锁
dolock(partnerId, storeId, crateUserId,addShoppingCartGoodsRequestVo.getCarVer(),true);
List<CartGoods> allCartGoodsList = null;
String productName = null;
......@@ -179,12 +179,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} catch (Exception e) {
ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "updateGoodsQty:" + e.getMessage(), e);
return ResponseUtil.error(ResponseResult.SHOPPING_CART_VERSION_ERROR, "购物车商品有变动,请手动刷新再修改");
}finally {
// 购物车版本解锁
// 版本锁的粒度控制在获取购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock(partnerId, storeId, crateUserId);
}
// 配送费
......@@ -207,7 +201,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
this.buriedPointShoppingCart(addShoppingCartGoodsRequestVo, spuId, productName);
// 根据人员分类购物车
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId);
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId);
return ResponseUtil.success(shoppingCartCollageResponseVo);
}
......@@ -217,7 +211,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
* @param shoppingCartGoodsResponseVo
* @return
*/
public ShoppingCartCollageResponseVo splitByUser(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,String createUserId,String partnerId,String storeId){
public ShoppingCartCollageResponseVo splitByUser(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,String createUserId,String partnerId,String storeId,String currentUserId){
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = new ShoppingCartCollageResponseVo();
......@@ -233,21 +227,62 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
.build();
List<CollageMemberState> collageMemberState = collageOrderBaseService.getCollageMemberState(collageOrderDto).getResult();
if(collageMemberState == null || collageMemberState.isEmpty()){
ApiLog.info("splitByUser 参单人员为空,partnerId:{},storeId:{},createUserId:{},currentUserId:{}",partnerId,storeId,createUserId,currentUserId);
return null;
}
Map<String,List<CartGoods>> userGoods = cartGoods.stream().collect(Collectors.groupingBy(CartGoods::getUserId));
if(StringUtils.isNotEmpty(currentUserId)){
collageMemberState = collageMemberState.stream().filter(cms -> cms.getUserId().equals(currentUserId)).collect(Collectors.toList());
}
Map<String,List<CartGoods>> userGoods = new HashMap<>();
if(cartGoods != null && !cartGoods.isEmpty()){
userGoods = cartGoods.stream().collect(Collectors.groupingBy(CartGoods::getUserId));
}
List<ShoppingCartCollageGoodsResponseVo> userProducts = new ArrayList<>();
for(CollageMemberState cmbs:collageMemberState){
ShoppingCartCollageGoodsResponseVo shoppingCartCollageGoodsResponseVo = new ShoppingCartCollageGoodsResponseVo();
shoppingCartCollageGoodsResponseVo.setUserName(cmbs.getNickName());
shoppingCartCollageGoodsResponseVo.setPhotoUrl(cmbs.getPhotoUrl());
// 包装费
Long packPrice = 0L;
List<CartGoods> products = userGoods.get(collageMemberState.get(0).getUserId());
if(products != null && !products.isEmpty()){
for(CartGoods cg :products){
packPrice = packPrice + (cg.getPackPrice() == null ? 0 : cg.getPackPrice());
}
}
shoppingCartCollageGoodsResponseVo.setPackPrice(packPrice);
shoppingCartCollageGoodsResponseVo.setProducts(userGoods.get(cmbs.getUserId()));
shoppingCartCollageGoodsResponseVo.setStates(cmbs.getState());
userProducts.add(shoppingCartCollageGoodsResponseVo);
}
shoppingCartCollageResponseVo.setUserProducts(userProducts);
if(StringUtils.isNotEmpty(currentUserId)){
// 商品数量
Integer productsCount = 0;
// 商品原价总价
Long totalAmount = 0L;
if(null != collageMemberState && null != collageMemberState.get(0)){
List<CartGoods> products = userGoods.get(collageMemberState.get(0).getUserId());
if(products != null && !products.isEmpty()){
for(CartGoods cg :products){
productsCount = productsCount + (cg.getQty() == null ? 0 : cg.getQty());
totalAmount = totalAmount + (cg.getOriginalAmount() == null ? 0 : cg.getOriginalAmount());
}
}
}
// 重新计算个人购物车的总金额(优惠后)、商品数量
shoppingCartCollageResponseVo.setProductsCount(productsCount);
shoppingCartCollageResponseVo.setTotalAmount(totalAmount);
shoppingCartCollageResponseVo.setOriginalTotalAmount(totalAmount);
}
return shoppingCartCollageResponseVo;
}
......@@ -283,8 +318,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
throw new ServiceException(ResponseResult.COLLAGE_GOOD_NOT_ONESELF);
}
// 购物车版本加锁
dolock(partnerId, storeId, crateUserId,updateShoppingCartGoodsQtyRequestVo.getCarVer(),true);
List<CartGoods> cartGoodsList = null;
try {
......@@ -322,12 +355,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} catch (Exception e) {
ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "shoppingCartCollageServiceImpl updateGoodsQty:" + e.getMessage(), e);
return ResponseUtil.error(ResponseResult.SHOPPING_CART_VERSION_ERROR, "购物车商品有变动,请手动刷新再修改");
}finally {
// 购物车版本解锁
// 版本锁的粒度控制在检查购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock(partnerId, storeId, crateUserId);
}
......@@ -351,7 +378,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
shoppingCartGoodsResponseVo.setCarVer(collageCartBaseService.incrementCartVersion(partnerId, storeId, crateUserId));
// 根据人员分类购物车
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId);
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId);
return ResponseUtil.success(shoppingCartCollageResponseVo);
}
......@@ -458,8 +485,14 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
Integer cartVersion = collageCartBaseService.getCartVersion(collageCartVerKey);
shoppingCartGoodsResponseVo.setCarVer(cartVersion);
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo;
if(shoppingCartInfoRequestVo.getType() != null && shoppingCartInfoRequestVo.getType().intValue() == 1){
// 根据人员分类购物车
shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,null);
}else{
// 根据人员分类购物车
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId);
shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId);
}
return ResponseUtil.success(shoppingCartCollageResponseVo);
}
......@@ -813,11 +846,18 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
CollageOrderDto collageOrderDto = CollageOrderDto.builder()
.sessionId("")
.createCollageUserId(crateUserId)
.currentUserId(currentUserId)
.partnerId(partnerId)
.storeId(storeId)
.build();
Boolean flag = collageOrderBaseService.isInCollageStoreMemberList(collageOrderDto);
if(flag){
BaseResponse<CollageMemberState> response = collageOrderBaseService.getOneCollageMemberState(collageOrderDto);
if(response == null || response.getResult() == null){
throw new ServiceException(ResponseResult.COLLAGE_STATES_CHOOSE);
}
CollageMemberState collageMemberState = collageOrderBaseService.getOneCollageMemberState(collageOrderDto).getResult();
if(collageMemberState.getState()){
throw new ServiceException(ResponseResult.COLLAGE_ALREADY_CHOOSE);
}
......@@ -1012,8 +1052,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
throw new ServiceException(ResponseResult.COLLAGE_ALREADY_CHOOSE);
}
// 购物车版本加锁
dolock(partnerId, storeId, crateUserId,shoppingCartCollageClearRequestVo.getCarVer(),true);
List<CartGoods> cartGoodsList = new ArrayList<>();
try {
......@@ -1048,15 +1086,8 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
} catch (Exception e) {
ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "shoppingCartCollageServiceImpl updateGoodsQty:" + e.getMessage(), e);
return ResponseUtil.error(ResponseResult.SHOPPING_CART_VERSION_ERROR, "购物车商品有变动,请手动刷新再修改");
}finally {
// 购物车版本解锁
// 版本锁的粒度控制在检查购物车、刷新购物车、刷新车人员缓存行
// 当这些操作结束后,购物的更新操作,已经结束,其他的流程是针对已经添加到redis中的购物车做查询操作
// 所以只有上述的流程才加锁控制
doUnlock(partnerId, storeId, crateUserId);
}
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
// 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult
......@@ -1075,7 +1106,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
// 设置购物车版本号
shoppingCartGoodsResponseVo.setCarVer(collageCartBaseService.incrementCartVersion(partnerId, storeId, crateUserId));
// 根据人员分类购物车
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId);
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId);
return ResponseUtil.success(shoppingCartCollageResponseVo);
}
......
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