Commit d1d12ff8 by 缪晖

【ID1010972】多人拼单 订单锁定解锁代码优化

parent 9be1aa42
...@@ -6,7 +6,7 @@ public enum CollageLockStatus { ...@@ -6,7 +6,7 @@ public enum CollageLockStatus {
LOCKED(true, "已锁定"), LOCKED(true, "已锁定"),
RELEASE(false, "未锁定"); RELEASE(false, "未锁定");
private boolean value; private Boolean value;
private String desc; private String desc;
......
...@@ -125,7 +125,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -125,7 +125,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
@Override @Override
public BaseResponse unlockCollageOrder(CollageOrderDto collageOrderDto) { public BaseResponse unlockCollageOrder(CollageOrderDto collageOrderDto) {
this.setCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId(), CollageLockStatus.RELEASE); this.setCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId(), CollageLockStatus.RELEASE);
return this.getCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()).getValue() ? CartResponseUtil.success() : CartResponseUtil.error("操作失败"); return !this.getCollageLock(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()).getValue() ? CartResponseUtil.success() : CartResponseUtil.error("操作失败");
} }
/** /**
......
...@@ -15,7 +15,6 @@ package cn.freemud.controller; ...@@ -15,7 +15,6 @@ package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CollageOrderRequestVo; import cn.freemud.entities.vo.CollageOrderRequestVo;
import cn.freemud.service.impl.CollageOrderServiceImpl; import cn.freemud.service.impl.CollageOrderServiceImpl;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -30,6 +29,11 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -30,6 +29,11 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/**
* 拼单订单没有持久化存储对象,仅在Redis中暂存标志位信息
* 购物车操作过程中需要检测拼单订单状态是否合法(锁定、订单超时等)
* 暂时将Redis操作的拼单订单接口放在购物车聚合及其SDK中
*/
@RestController @RestController
@RequestMapping(value = "/shoppingCart/collage", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/shoppingCart/collage", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "拼单订单 controller", tags = {"拼单订单管理接口"}) @Api(value = "拼单订单 controller", tags = {"拼单订单管理接口"})
...@@ -67,7 +71,7 @@ public class CollageOrderController { ...@@ -67,7 +71,7 @@ public class CollageOrderController {
@ApiAnnotation(logMessage = "lockOrder") @ApiAnnotation(logMessage = "lockOrder")
@PostMapping(value = "/lockOrder") @PostMapping(value = "/lockOrder")
public BaseResponse lockCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) { public BaseResponse lockCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return SDKCommonBaseContextWare.getBean(CollageOrderServiceImpl.class).lockCollageOrder(request); return collageOrderServicel.lockCollageOrder(request);
} }
@ApiOperation(value = "解锁拼单订单", notes = "根据商户ID、门店ID、当前登录用户sessionId解锁拼单订单") @ApiOperation(value = "解锁拼单订单", notes = "根据商户ID、门店ID、当前登录用户sessionId解锁拼单订单")
......
...@@ -5,6 +5,7 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -5,6 +5,7 @@ import cn.freemud.base.entity.BaseResponse;
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.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
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.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder; import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder;
...@@ -15,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -15,6 +16,8 @@ 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.Optional;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -53,17 +56,15 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -53,17 +56,15 @@ public class CollageOrderServiceImpl implements CollageOrderService {
BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageOrderBaseService.queryCollageOrder(collageOrderDto); BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageOrderBaseService.queryCollageOrder(collageOrderDto);
CollageOrder collageOrder = queryCollageOrderResponse.getResult(); CollageOrder collageOrder = queryCollageOrderResponse.getResult();
if (ResponseResult.SUCCESS.getCode().equals(queryCollageOrderResponse.getCode()) && !ObjectUtils.isEmpty(collageOrder)) { // SDK查询订单返回非成功code或返回结果订单信息为空时,返回前端异常信息
Optional.ofNullable(queryCollageOrderResponse).filter(resp -> (ResponseResult.SUCCESS.getCode().equals(resp.getCode()) && !ObjectUtils.isEmpty(collageOrder))).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo(); CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
// 订单基础信息 // 订单基础信息
collageOrderResponseVo.setOrder(collageOrder); collageOrderResponseVo.setOrder(collageOrder);
// TODO 订单参与人列表信息 // TODO 订单参与人列表信息
return ResponseUtil.success(collageOrderResponseVo); return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_NOT_EXIST);
}
} }
/** /**
...@@ -80,14 +81,12 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -80,14 +81,12 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 创建拼单订单基础缓存信息 // 创建拼单订单基础缓存信息
BaseResponse<CollageOrder> createCollageOrderResponse = this.collageOrderBaseService.createCollageOrder(collageOrderDto); BaseResponse<CollageOrder> createCollageOrderResponse = this.collageOrderBaseService.createCollageOrder(collageOrderDto);
if (ResponseResult.SUCCESS.getCode().equals(createCollageOrderResponse.getCode())) { // SDK创建订单返回非成功code时,返回前端异常信息
Optional.ofNullable(createCollageOrderResponse).filter(resp -> ResponseResult.SUCCESS.getCode().equals(resp.getCode())).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_ALREADY_EXIST));
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo(); CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
collageOrderResponseVo.setOrder(createCollageOrderResponse.getResult()); collageOrderResponseVo.setOrder(createCollageOrderResponse.getResult());
return ResponseUtil.success(collageOrderResponseVo); return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_ALREADY_EXIST);
}
} }
/** /**
...@@ -100,6 +99,7 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -100,6 +99,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request); CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 根据sessionId查询对应登录用户信息 // 根据sessionId查询对应登录用户信息
collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId())); collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId()));
this.checkCollageOrderOwner(collageOrderDto);
return this.collageOrderBaseService.cancelCollageOrder(collageOrderDto); return this.collageOrderBaseService.cancelCollageOrder(collageOrderDto);
} }
...@@ -113,6 +113,7 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -113,6 +113,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request); CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 根据sessionId查询对应登录用户信息 // 根据sessionId查询对应登录用户信息
collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId())); collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId()));
this.checkCollageOrderOwner(collageOrderDto);
return this.collageOrderBaseService.lockCollageOrder(collageOrderDto); return this.collageOrderBaseService.lockCollageOrder(collageOrderDto);
} }
...@@ -126,6 +127,7 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -126,6 +127,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request); CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 根据sessionId查询对应登录用户信息 // 根据sessionId查询对应登录用户信息
collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId())); collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId()));
this.checkCollageOrderOwner(collageOrderDto);
return this.collageOrderBaseService.unlockCollageOrder(collageOrderDto); return this.collageOrderBaseService.unlockCollageOrder(collageOrderDto);
} }
...@@ -137,4 +139,26 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -137,4 +139,26 @@ public class CollageOrderServiceImpl implements CollageOrderService {
private String getUserIdBySessionId(String sessionId) { private String getUserIdBySessionId(String sessionId) {
return this.shoppingCartCollageService.getCustomerInfoVo(sessionId).getMemberId(); return this.shoppingCartCollageService.getCustomerInfoVo(sessionId).getMemberId();
} }
/**
* 查询当前拼单订单基础信息是否存在
* @param collageOrderDto
* @return
*/
private Boolean isCollageOrderExist(CollageOrderDto collageOrderDto) {
// 查询当前拼单订单基础信息是否存在
return ObjectUtils.isEmpty(this.collageOrderBaseService.queryCollageOrder(collageOrderDto).getResult()) ? false : true;
}
/**
* 拼单订单检查
* @param collageOrderDto
*/
private void checkCollageOrderOwner(CollageOrderDto collageOrderDto) {
CollageOrder collageOrder = this.collageOrderBaseService.queryCollageOrder(collageOrderDto).getResult();
// 拼单订单信息不存在时,返回错误提示
Optional.ofNullable(collageOrder).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
// 若当前操作人并非拼单邀请人时,返回错误提示 当前用户不是拼单发起人,无法操作
Optional.ofNullable(collageOrder).map(CollageOrder::getCreateCollageUserId).filter(userId -> userId.equals(collageOrderDto.getCreateCollageUserId())).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_OWNER));
}
} }
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