Commit 5c68844c by 刘鹏飞

加入、退出拼单

parent b950e0ec
...@@ -110,4 +110,10 @@ public class RedisKeyConstant { ...@@ -110,4 +110,10 @@ public class RedisKeyConstant {
*/ */
public final static String COLLAGE_MEMBER_STATE_KEY = "kgd:collage:member:state:{0}:{1}:{2}"; public final static String COLLAGE_MEMBER_STATE_KEY = "kgd:collage:member:state:{0}:{1}:{2}";
/**
* kgd:collage:store:member:{partnerId}:{storeId}
* 门店下拼单人员缓存key
*/
public final static String COLLAGE_STORE_MEMBER_KEY = "kgd:collage:store:member:{0}:{1}";
} }
...@@ -5,6 +5,7 @@ import lombok.Builder; ...@@ -5,6 +5,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
...@@ -44,4 +45,14 @@ public class CollageOrderDto ...@@ -44,4 +45,14 @@ public class CollageOrderDto
* 门店ID * 门店ID
*/ */
private String storeId; private String storeId;
/**
* 拼单当前用户ID
*/
private String currentUserId;
/**
* 购物车行ids
*/
private List<String> cartLines;
} }
...@@ -4,6 +4,8 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -4,6 +4,8 @@ import cn.freemud.base.entity.BaseResponse;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder; 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 java.util.List;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -56,4 +58,53 @@ public interface CollageOrderBaseService { ...@@ -56,4 +58,53 @@ public interface CollageOrderBaseService {
* @return * @return
*/ */
BaseResponse<Boolean> isLockedCollageOrder(CollageOrderDto collageOrderDto); BaseResponse<Boolean> isLockedCollageOrder(CollageOrderDto collageOrderDto);
/**
* 判断门店下的拼单是否存在该会员
*/
BaseResponse judgeMemberStates(CollageOrderDto collageOrderDto);
/**
* 设置用户的点餐位信息
* @param collageOrderDto
* @return
*/
BaseResponse setCollageMember(CollageOrderDto collageOrderDto);
/**
* 设置用户在该店铺下的拼单状态
* @param collageOrderDto
* @return
*/
BaseResponse setCollageMemberAddStates(CollageOrderDto collageOrderDto,Boolean states);
/**
* 判断用户是否参加了某一个拼单
* @param collageOrderDto
* @return
*/
BaseResponse judgeMemberAddOneCollage(CollageOrderDto collageOrderDto);
/**
* 清除用户的点餐位
* @param collageOrderDto
* @return
*/
BaseResponse cleanMemberSeat(CollageOrderDto collageOrderDto);
/**
* 获取用户的点餐中购物车行id
*/
List<String> getMemCarLine(CollageOrderDto collageOrderDto);
/**
* 清除用户的购物车行
*/
BaseResponse cleanMemberCartLine(CollageOrderDto collageOrderDto);
/**
* 清除用户选好了的状态
*/
BaseResponse cleanMemberStates(CollageOrderDto collageOrderDto);
} }
...@@ -17,9 +17,7 @@ import org.springframework.util.ObjectUtils; ...@@ -17,9 +17,7 @@ import org.springframework.util.ObjectUtils;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.HashSet; import java.util.*;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -138,6 +136,77 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -138,6 +136,77 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
return CartResponseUtil.success(this.getCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()).getValue()); return CartResponseUtil.success(this.getCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()).getValue());
} }
@Override
public BaseResponse judgeMemberStates(CollageOrderDto collageOrderDto){
String key = genCollageMemerHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId());
Boolean states = (Boolean)redisTemplate.boundHashOps(key).get(collageOrderDto.getCurrentUserId());
if(states){
return CartResponseUtil.error("用户已经参加其他的拼单");
}
return CartResponseUtil.success();
}
@Override
public BaseResponse setCollageMember(CollageOrderDto collageOrderDto){
String key = genCollageMemerHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId());
redisTemplate.boundHashOps(key).put(collageOrderDto.getCurrentUserId(),new ArrayList<>());
return CartResponseUtil.success();
}
@Override
public BaseResponse setCollageMemberAddStates(CollageOrderDto collageOrderDto,Boolean states){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
redisTemplate.boundHashOps(key).put(collageOrderDto.getCurrentUserId(),states);
return CartResponseUtil.success();
}
@Override
public BaseResponse judgeMemberAddOneCollage(CollageOrderDto collageOrderDto){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
Boolean judge = redisTemplate.boundHashOps(key).hasKey(collageOrderDto.getCurrentUserId());
if(judge){
CartResponseUtil.success();
}
return CartResponseUtil.error("");
}
@Override
public BaseResponse cleanMemberSeat(CollageOrderDto collageOrderDto){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
redisTemplate.boundHashOps(key).delete(collageOrderDto.getCurrentUserId());
return CartResponseUtil.success();
}
@Override
public List<String> getMemCarLine(CollageOrderDto collageOrderDto){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
List<String> cartLineIds = (List<String>)redisTemplate.boundHashOps(key).get(collageOrderDto.getCurrentUserId());
return cartLineIds;
}
@Override
public BaseResponse cleanMemberCartLine(CollageOrderDto collageOrderDto){
String key = genCollageCarHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
redisTemplate.boundHashOps(key).delete(collageOrderDto.getCartLines());
return CartResponseUtil.success();
}
@Override
public BaseResponse cleanMemberStates(CollageOrderDto collageOrderDto){
String key = genCollageMemberStateHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
redisTemplate.boundHashOps(key).delete(collageOrderDto.getCurrentUserId());
return CartResponseUtil.success();
}
/**
* 构建门店下拼单人员hashKey
* @param partnerId
* @param storeId
*/
private String genCollageMemerHashKey(String partnerId, String storeId) {
return MessageFormat.format(RedisKeyConstant.COLLAGE_STORE_MEMBER_KEY, partnerId, storeId);
}
/** /**
* Redis获取拼单订单信息 * Redis获取拼单订单信息
* @param redisKey * @param redisKey
...@@ -262,4 +331,5 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -262,4 +331,5 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
private String genCollageCarVerKey(String partnerId, String storeId, String userId) { private 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);
} }
} }
...@@ -81,4 +81,20 @@ public class CollageOrderController { ...@@ -81,4 +81,20 @@ public class CollageOrderController {
public BaseResponse unlockCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) { public BaseResponse unlockCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return collageOrderServicel.unlockCollageOrder(request); return collageOrderServicel.unlockCollageOrder(request);
} }
@ApiOperation(value = "加入拼单订单", notes = "加入拼单订单")
@ApiImplicitParam(value = "请求", required = true, dataType = "CollageOrderRequestVo", name = "CollageOrderRequestVo")
@ApiAnnotation(logMessage = "addOrder")
@PostMapping(value = "/addOrder")
public BaseResponse addOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return collageOrderServicel.addCollageOrder(request);
}
@ApiOperation(value = "退出拼单订单", notes = "退出拼单订单")
@ApiImplicitParam(value = "请求", required = true, dataType = "CollageOrderRequestVo", name = "CollageOrderRequestVo")
@ApiAnnotation(logMessage = "outOfOrder")
@PostMapping(value = "/outOfOrder")
public BaseResponse outOfOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return collageOrderServicel.outOfOrder(request);
}
} }
...@@ -146,7 +146,9 @@ public enum ResponseResult { ...@@ -146,7 +146,9 @@ public enum ResponseResult {
COLLAGE_ALREADY_EXIST("49005", "当前用户存在进行中的拼单订单"), COLLAGE_ALREADY_EXIST("49005", "当前用户存在进行中的拼单订单"),
COLLAGE_NOT_OWNER("49006", "当前用户不是拼单发起人,无法操作"), COLLAGE_NOT_OWNER("49006", "当前用户不是拼单发起人,无法操作"),
COLLAGE_GOOD_NOT_ONESELF("49007", "只能操作自己的商品"), COLLAGE_GOOD_NOT_ONESELF("49007", "只能操作自己的商品"),
COLLAGE_MEMBER_ALREADY_ADD("49008", "用户已经加入其他的拼单"),
COLLAGE_CREATE_NOT_OUT_OF("49009", "拼单发起人不能退出拼单,请取消"),
COLLAGE_MEMBER_NOT_ADD("49010", "用户未参加拼单,请确认"),
/** /**
* 微信卡券 * 微信卡券
......
...@@ -50,4 +50,18 @@ public interface CollageOrderService { ...@@ -50,4 +50,18 @@ public interface CollageOrderService {
* @return * @return
*/ */
BaseResponse unlockCollageOrder(CollageOrderRequestVo request); BaseResponse unlockCollageOrder(CollageOrderRequestVo request);
/**
* 加入拼单订单
* @param request
* @return
*/
BaseResponse addCollageOrder(CollageOrderRequestVo request);
/**
* 退出拼单订单
* @param request
* @return
*/
BaseResponse outOfOrder(CollageOrderRequestVo request);
} }
...@@ -2,12 +2,16 @@ package cn.freemud.service.impl; ...@@ -2,12 +2,16 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.CollageOrderAdapter; import cn.freemud.adapter.CollageOrderAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CollageOrderRequestVo; import cn.freemud.entities.vo.CollageOrderRequestVo;
import cn.freemud.entities.vo.CollageOrderResponseVo; import cn.freemud.entities.vo.CollageOrderResponseVo;
import cn.freemud.entities.vo.CustomerInfoVo;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CollageOrderService; import cn.freemud.service.CollageOrderService;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder; 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.service.impl.CollageOrderBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageOrderBaseServiceImpl;
...@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -163,4 +168,104 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -163,4 +168,104 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 若当前操作人并非拼单邀请人时,返回错误提示 当前用户不是拼单发起人,无法操作 // 若当前操作人并非拼单邀请人时,返回错误提示 当前用户不是拼单发起人,无法操作
Optional.ofNullable(collageOrder).map(CollageOrder::getCreateCollageUserId).filter(userId -> userId.equals(collageOrderDto.getCreateCollageUserId())).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_OWNER)); Optional.ofNullable(collageOrder).map(CollageOrder::getCreateCollageUserId).filter(userId -> userId.equals(collageOrderDto.getCreateCollageUserId())).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_OWNER));
} }
/**
* 加入拼单订单
* @param request(partnerId shopId sessionId)
* @return
*/
@Override
public BaseResponse addCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 设置当前登陆用户
collageOrderDto.setCurrentUserId(this.getUserIdBySessionId(request.getSessionId()));
// 设置拼单发起人
collageOrderDto.setCreateCollageUserId(request.getCreateCollageUserId());
// 校验拼单是否存在
CollageOrder collageOrder = this.collageOrderBaseService.queryCollageOrder(collageOrderDto).getResult();
// 拼单订单信息不存在时,返回错误提示
Optional.ofNullable(collageOrder).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
// 判断当前登陆用户是否参加过当前店铺其他的拼团
// 因为一个用户在一个店铺下只能参加一个拼单,所以通过判断用户在店铺下的拼单状态来确认
BaseResponse judgeMem = collageOrderBaseService.judgeMemberStates(collageOrderDto);
if(!ResponseResult.SUCCESS.getCode().equals(judgeMem.getCode())){
throw new ServiceException(ResponseResult.COLLAGE_MEMBER_ALREADY_ADD);
}
// 设置用户的点餐位
collageOrderBaseService.setCollageMember(collageOrderDto);
// 设置用户在该店铺的拼单状态
collageOrderBaseService.setCollageMemberAddStates(collageOrderDto,Boolean.TRUE);
return ResponseUtil.success();
}
/**
* 退出拼单订单
* @param request(partnerId shopId sessionId)
* @return
*/
@Override
public BaseResponse outOfOrder(CollageOrderRequestVo request) {
// 获取当前登陆用户信息
CustomerInfoVo currentUserInfoVo = this.shoppingCartCollageService.getCustomerInfoVo(request.getSessionId());
// 当前用户必须登陆
if (StringUtils.isEmpty(currentUserInfoVo.getMemberId())) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 设置当前登陆用户
collageOrderDto.setCurrentUserId(currentUserInfoVo.getMemberId());
// 设置拼单发起人
collageOrderDto.setCreateCollageUserId(request.getCreateCollageUserId());
// 校验拼单是否存在
CollageOrder collageOrder = this.collageOrderBaseService.queryCollageOrder(collageOrderDto).getResult();
// 拼单订单信息不存在时,返回错误提示
Optional.ofNullable(collageOrder).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
// 拼单发起人不能退出只能取消
// 直接使用当前的用户查询拼单,如果能查询到,则当前用户就是拼单发起人
CollageOrderDto collageOrderCheckDto = CollageOrderDto.builder()
.partnerId(request.getPartnerId())
.storeId(request.getShopId())
.createCollageUserId(currentUserInfoVo.getMemberId()).build();
CollageOrder collageOrderCheck = this.collageOrderBaseService.queryCollageOrder(collageOrderCheckDto).getResult();
if(null != collageOrderCheck){
throw new ServiceException(ResponseResult.COLLAGE_NOT_EXIST);
}
// 非邀请人检查是否参加了该邀请人的订单
BaseResponse judge = collageOrderBaseService.judgeMemberAddOneCollage(collageOrderDto);
if(!ResponseResult.SUCCESS.getCode().equals(judge.getCode())){
throw new ServiceException(ResponseResult.COLLAGE_MEMBER_NOT_ADD);
}
List<String> cartLineIds = collageOrderBaseService.getMemCarLine(collageOrderDto);
// 删除用户购物车行数据
if(cartLineIds != null && !cartLineIds.isEmpty()){
collageOrderDto.setCartLines(cartLineIds);
collageOrderBaseService.cleanMemberCartLine(collageOrderDto);
}
// 删除点餐位
collageOrderBaseService.cleanMemberSeat(collageOrderDto);
// 删除用户选好了状态
collageOrderBaseService.cleanMemberStates(collageOrderDto);
// 设置用户在该店铺的拼单状态
collageOrderBaseService.setCollageMemberAddStates(collageOrderDto,Boolean.FALSE);
return ResponseUtil.success();
}
} }
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