Commit 3b205551 by 刘鹏飞

冲突解决

parents f52b99a4 3358e20b
package com.freemud.sdk.api.assortment.shoppingcart.adapter;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CollageOrderCacheFields;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.HashMap;
import java.util.Map;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-27 19:16
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Component
public class CollageOrderSdkAdapter {
public Map<String, String> toRedisMap(CollageOrder collageOrder) {
Map<String, String> map = new HashMap<>();
if (!ObjectUtils.isEmpty(collageOrder))
{
map.put(CollageOrderCacheFields.COLLAGE_ID.getKey(), String.valueOf(collageOrder.getCollageId()));
map.put(CollageOrderCacheFields.CREATE_COLLAGE_USER_ID.getKey(), String.valueOf(collageOrder.getCreateCollageUserId()));
map.put(CollageOrderCacheFields.PARTNER_ID.getKey(), String.valueOf(collageOrder.getPartnerId()));
map.put(CollageOrderCacheFields.STORE_ID.getKey(), String.valueOf(collageOrder.getStoreId()));
map.put(CollageOrderCacheFields.CREATE_TIME.getKey(), String.valueOf(collageOrder.getCreateTime()));
map.put(CollageOrderCacheFields.EXPIRE_TIME.getKey(), String.valueOf(collageOrder.getExpireTime()));
}
return map;
}
public CollageOrder toCollageOrder(Map<String, String> map) {
if (CollectionUtils.isEmpty(map)) return null;
return CollageOrder.builder()
.collageId(String.valueOf(map.get(CollageOrderCacheFields.COLLAGE_ID.getKey())))
.createCollageUserId(String.valueOf(map.get(CollageOrderCacheFields.CREATE_COLLAGE_USER_ID.getKey())))
.partnerId(String.valueOf(map.get(CollageOrderCacheFields.PARTNER_ID.getKey())))
.storeId(String.valueOf(map.get(CollageOrderCacheFields.STORE_ID.getKey())))
.createTime(Long.parseLong(map.get(CollageOrderCacheFields.CREATE_TIME.getKey())))
.expireTime(Long.parseLong(map.get(CollageOrderCacheFields.EXPIRE_TIME.getKey())))
.build();
}
public CollageOrderDto toCollageOrderDto(CollageOrder collageOrder) {
return CollageOrderDto.builder()
.collageId(collageOrder.getCollageId())
.partnerId(collageOrder.getPartnerId())
.storeId(collageOrder.getStoreId())
.createCollageUserId(collageOrder.getCreateCollageUserId())
.createTime(collageOrder.getCreateTime())
.expireTime(collageOrder.getExpireTime())
.build();
}
public CollageOrder toCollageOrder(CollageOrderDto collageOrderDto) {
return CollageOrder.builder()
.collageId(collageOrderDto.getCollageId())
.partnerId(collageOrderDto.getPartnerId())
.storeId(collageOrderDto.getStoreId())
.createCollageUserId(collageOrderDto.getCreateCollageUserId())
.createTime(collageOrderDto.getCreateTime())
.expireTime(collageOrderDto.getExpireTime())
.build();
}
}
package com.freemud.sdk.api.assortment.shoppingcart.constant;
import com.alibaba.fastjson.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.lang.reflect.Type;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-27 18:20
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Getter
@AllArgsConstructor
public enum CollageOrderCacheFields {
COLLAGE_ID(0, "collageId", new TypeReference<String>(){}.getType(), "")
,CREATE_COLLAGE_USER_ID(1, "createCollageUserId", new TypeReference<String>(){}.getType(), "")
,PARTNER_ID(2, "partnerId", new TypeReference<String>(){}.getType(), "")
,STORE_ID(3, "storeId", new TypeReference<String>(){}.getType(), "")
,CREATE_TIME(4, "createTime", new TypeReference<Long>(){}.getType(), 0L)
,EXPIRE_TIME(5, "expireTime", new TypeReference<Long>(){}.getType(), 0L)
;
private Integer index;
private String key;
private Type type;
private Object defaultValue;
}
...@@ -33,6 +33,7 @@ public class ShoppingCartConstant { ...@@ -33,6 +33,7 @@ public class ShoppingCartConstant {
public final static String ONE_TRADE_CAN_ONLY_USE_ONE_GOODS_COUPON = "一笔交易仅允许同时使用一张商品券"; public final static String ONE_TRADE_CAN_ONLY_USE_ONE_GOODS_COUPON = "一笔交易仅允许同时使用一张商品券";
public final static String ORDER_WAY_CHANGE = "切换点餐方式,商品库存和价格等可能会发生变化。"; public final static String ORDER_WAY_CHANGE = "切换点餐方式,商品库存和价格等可能会发生变化。";
public final static String COLLAGE_ORDER_NOT_EXIST = "拼单订单信息不存在";
public final static String COLLAGE_ORDER_ALREADY_EXIST = "当前用户存在进行中的拼单订单";
} }
package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.Builder;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-27 17:11
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Builder
@Data
public class CollageOrder
{
/**
* 拼单订单ID
*/
private String collageId;
/**
* 拼单邀请者用户ID
*/
private String createCollageUserId;
/**
* 商户ID
*/
private String partnerId;
/**
* 门店ID
*/
private String storeId;
/**
* 创建时间
*/
private Long createTime;
/**
* 过期时间
*/
private Long expireTime;
}
package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-27 17:11
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Builder
@Data
public class CollageOrderDto
{
/**
* 拼单订单ID
*/
private String collageId;
/**
* 用户sessionId
*/
private String sessionId;
/**
* 拼单邀请者用户ID
*/
private String createCollageUserId;
/**
* 商户ID
*/
private String partnerId;
/**
* 门店ID
*/
private String storeId;
/**
* 创建时间
*/
private Long createTime;
/**
* 过期时间
*/
private Long expireTime;
}
package com.freemud.sdk.api.assortment.shoppingcart.service;
import cn.freemud.base.entity.BaseResponse;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-27 17:03
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public interface CollageCarBaseService {
/**
* 查询拼单订单
* @param collageOrderDto
* @return
*/
BaseResponse<CollageOrder> queryCollageOrder(CollageOrderDto collageOrderDto);
/**
* 创建拼单订单
* @param collageOrderDto
* @return
*/
BaseResponse<CollageOrder> createCollageOrder(CollageOrderDto collageOrderDto);
/**
* 取消拼单订单
* @param collageOrderDto
* @return
*/
BaseResponse cancelCollageOrder(CollageOrderDto collageOrderDto);
}
...@@ -5,13 +5,14 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -5,13 +5,14 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService; import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.sdk.api.assortment.shoppingcart.adapter.CollageOrderSdkAdapter;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant; import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant; import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.VersionUtils; import com.freemud.sdk.api.assortment.shoppingcart.constant.VersionUtils;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartAddItem; import com.freemud.sdk.api.assortment.shoppingcart.domain.*;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto;
import com.freemud.sdk.api.assortment.shoppingcart.exception.ServiceException; import com.freemud.sdk.api.assortment.shoppingcart.exception.ServiceException;
import com.freemud.sdk.api.assortment.shoppingcart.service.CollageCarBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService; import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -19,10 +20,14 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -19,10 +20,14 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -39,7 +44,7 @@ import java.util.stream.Collectors; ...@@ -39,7 +44,7 @@ import java.util.stream.Collectors;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目. * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目.
*/ */
@Service("collageCartBaseService") @Service("collageCartBaseService")
public class CollageCartBaseServiceImpl implements ShoppingCartBaseService { public class CollageCartBaseServiceImpl implements ShoppingCartBaseService, CollageCarBaseService {
@Value("${coupon.app.id}") @Value("${coupon.app.id}")
private String appId; private String appId;
...@@ -47,11 +52,113 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService { ...@@ -47,11 +52,113 @@ public class CollageCartBaseServiceImpl implements ShoppingCartBaseService {
private FMActiveSdkService fmActiveSdkService; private FMActiveSdkService fmActiveSdkService;
@Autowired @Autowired
private CollageOrderSdkAdapter collageOrderSdkAdapter;
@Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
/**
* 查询拼单订单
* @param collageOrderDto
* @return
*/
@Override
public BaseResponse<CollageOrder> queryCollageOrder(CollageOrderDto collageOrderDto) {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String redisKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
// 查询Redis缓存中拼单订单基础信息
CollageOrder collageOrder = this.getCollageBaseHash(redisKey);
// 若拼单订单信息不存在,则返回错误提示【拼单订单信息不存在】,由前端根据场景处理(静默、提示拼单已取消)
if (ObjectUtils.isEmpty(collageOrder)) {
return CartResponseUtil.error(ShoppingCartConstant.COLLAGE_ORDER_NOT_EXIST);
}
// 若拼单订单信息存在,则构造订单拼单对象并返回成功提示
return CartResponseUtil.success(collageOrder);
}
/**
* 创建拼单订单
* @param collageOrderDto
* @return
*/
@Override
public BaseResponse<CollageOrder> createCollageOrder(CollageOrderDto collageOrderDto) {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String redisKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
// 根据key查询Redis中拼单订单的基本信息
CollageOrder collageOrder = this.getCollageBaseHash(redisKey);
if (ObjectUtils.isEmpty(collageOrder)) {
// 若拼单信息不存在,则初始化拼单订单对象,放入Redis缓存并设置1小时失效时间,返回拼单订单对象并给出成功提示
collageOrder = collageOrderSdkAdapter.toCollageOrder(collageOrderDto);
collageOrder.setCollageId(UUID.randomUUID().toString());
collageOrder.setCreateTime(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());
collageOrder.setExpireTime(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() + 60 * 60 * 1000);
// 创建缓存数据
this.putCollageBaseHash(redisKey, collageOrder);
return CartResponseUtil.success(collageOrder);
}
else {
// 若拼单订单信息已存在,则返回错误提示【当前用户存在进行中的拼单订单】
return CartResponseUtil.error(ShoppingCartConstant.COLLAGE_ORDER_ALREADY_EXIST);
}
}
/**
* 取消拼单订单
* @param collageOrderDto
* @return
*/
@Override
public BaseResponse cancelCollageOrder(CollageOrderDto collageOrderDto) {
// 批量删除上述Key对应的Redis缓存
this.deleteCollageBaseHash(this.collageOrderSdkAdapter.toCollageOrder(collageOrderDto));
return CartResponseUtil.success();
}
/**
* Redis获取拼单订单信息
* @param redisKey
* @return
*/
private CollageOrder getCollageBaseHash(String redisKey) {
return collageOrderSdkAdapter.toCollageOrder(redisTemplate.boundHashOps(redisKey).entries());
}
/**
* Redis写入拼单订单信息
* @param redisKey
* @param collageOrder
*/
private void putCollageBaseHash(String redisKey, CollageOrder collageOrder) {
redisTemplate.boundHashOps(redisKey).putAll(this.collageOrderSdkAdapter.toRedisMap(collageOrder));
redisTemplate.boundHashOps(redisKey).expire(1L, TimeUnit.HOURS);
}
/**
* Redis删除拼单订单信息以及相关购物车信息
* @param collageOrder
*/
private void deleteCollageBaseHash(CollageOrder collageOrder) {
Set<String> redisKeySet = new HashSet<>();
redisKeySet.add(this.genCollageBaseHashKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisKeySet.add(this.genCollageMemberHashKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisKeySet.add(this.genCollageCarHashKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisKeySet.add(this.genCollageCarVerKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisKeySet.add(this.genCollageLockKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisKeySet.add(this.genCollageMemberStateHashKey(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()));
redisTemplate.delete(redisKeySet);
}
@Override @Override
public BaseResponse<List<CartAddItem>> detailCart(CartParamDto cartParamDto, String trackingNo) { public BaseResponse<List<CartAddItem>> detailCart(CartParamDto cartParamDto, String trackingNo) {
return null; return null;
......
package cn.freemud.adapter;
import cn.freemud.entities.vo.CollageOrderRequestVo;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrderDto;
import org.springframework.stereotype.Component;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-28 11:41
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Component
public class CollageOrderAdapter {
public CollageOrderDto convert2CollageOrderDto(CollageOrderRequestVo request) {
return CollageOrderDto.builder()
.sessionId(request.getSessionId())
.createCollageUserId(request.getCreateCollageUserId())
.partnerId(request.getPartnerId())
.storeId(request.getShopId())
.build();
}
}
...@@ -22,15 +22,14 @@ import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare; ...@@ -22,15 +22,14 @@ 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;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping(value = "/shoppingCart/collage", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/shoppingCart/collage", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
...@@ -38,6 +37,30 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -38,6 +37,30 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
public class ShoppingCartCollageController { public class ShoppingCartCollageController {
@ApiOperation(value = "查询拼单订单", notes = "根据商户ID、门店ID、拼单邀请人用户ID或者当前登录用户sessionId查询拼单订单信息")
@ApiImplicitParam(value = "请求", required = true, dataType = "CollageOrderRequestVo", name = "CollageOrderRequestVo")
@ApiAnnotation(logMessage = "getOrder")
@PostMapping(value = "/getOrder")
public BaseResponse queryCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return SDKCommonBaseContextWare.getBean(ShoppingCartCollageServiceImpl.class).queryCollageOrder(request);
}
@ApiOperation(value = "创建拼单订单", notes = "根据商户ID、门店ID、当前登录用户sessionId创建拼单订单信息")
@ApiImplicitParam(value = "请求", required = true, dataType = "CollageOrderRequestVo", name = "CollageOrderRequestVo")
@ApiAnnotation(logMessage = "createOrder")
@PostMapping(value = "/createOrder")
public BaseResponse createOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return SDKCommonBaseContextWare.getBean(ShoppingCartCollageServiceImpl.class).createCollageOrder(request);
}
@ApiOperation(value = "取消拼单订单", notes = "根据商户ID、门店ID、当前登录用户sessionId取消拼单订单,并删除相关拼单信息")
@ApiImplicitParam(value = "请求", required = true, dataType = "CollageOrderRequestVo", name = "CollageOrderRequestVo")
@ApiAnnotation(logMessage = "cancelOrder")
@PostMapping(value = "/cancelOrder")
public BaseResponse cancelCollageOrder(@Validated @LogParams @RequestBody CollageOrderRequestVo request) {
return SDKCommonBaseContextWare.getBean(ShoppingCartCollageServiceImpl.class).cancelCollageOrder(request);
}
/** /**
* 向拼单购物车中添加商品 * 向拼单购物车中添加商品
*/ */
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartUpdateRequestVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: ping.wu
* @date: 2018/5/22 10:42
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Builder
@Data
public class CollageOrderRequestVo {
@ApiModelProperty(value = "当前登录人sessionId", required = true)
@NotEmpty(message = "sessionId不能为空")
private String sessionId;
@ApiModelProperty(value = "拼单创建人用户ID")
private String createCollageUserId;
@ApiModelProperty(value = "商户ID", required = true)
@NotEmpty(message = "商户ID 不能为空")
private String partnerId;
@ApiModelProperty(value = "门店ID", required = true)
@NotEmpty(message = "门店ID 不能为空")
private String shopId;
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartUpdateRequestVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: ping.wu
* @date: 2018/5/22 10:42
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CollageOrder;
import lombok.Data;
@Data
public class CollageOrderResponseVo extends BaseRequestVo {
// 拼单订单信息
private CollageOrder order;
// 拼单参与人信息
}
...@@ -143,6 +143,7 @@ public enum ResponseResult { ...@@ -143,6 +143,7 @@ public enum ResponseResult {
COLLAGE_LOCK("49002", "拼单已经锁定,请确定"), COLLAGE_LOCK("49002", "拼单已经锁定,请确定"),
COLLAGE_NOT_ADD("49003", "未加入拼单,请确定"), COLLAGE_NOT_ADD("49003", "未加入拼单,请确定"),
COLLAGE_ALREADY_CHOOSE("49004", "拼单商品已经选购结束,请确定"), COLLAGE_ALREADY_CHOOSE("49004", "拼单商品已经选购结束,请确定"),
COLLAGE_ALREADY_EXIST("49005", "当前用户存在进行中的拼单订单"),
/** /**
......
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ShoppingCartConstant; import cn.freemud.entities.vo.CollageOrderRequestVo;
import cn.freemud.entities.dto.*; import cn.freemud.entities.vo.ShoppingCartCollageClearRequestVo;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
* @version V1.0 * 拼单订单相关服务特性Service定义
* @Title: *
* @Package cn.freemud.service * @version V1.0.0
* @Description: * @Description:
* @author: pengfei.liu * @author: hui.miao
* @date: 2020/9/28 * @date: 2020-09-27 16:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved. * @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
public interface ShoppingCartCollageService { public interface ShoppingCartCollageService {
/**
* 查询拼单订单
* @param request
* @return
*/
BaseResponse queryCollageOrder(CollageOrderRequestVo request);
/**
* 创建拼单订单
* @param request
* @return
*/
BaseResponse createCollageOrder(CollageOrderRequestVo request);
/**
* 取消拼单订单
* @param request
* @return
*/
BaseResponse cancelCollageOrder(CollageOrderRequestVo request);
/** /**
* 清空用户自己的购物车 * 清空用户自己的购物车
...@@ -42,7 +45,4 @@ public interface ShoppingCartCollageService { ...@@ -42,7 +45,4 @@ public interface ShoppingCartCollageService {
* @return * @return
*/ */
BaseResponse clearPartCarGoods(ShoppingCartCollageClearRequestVo request); BaseResponse clearPartCarGoods(ShoppingCartCollageClearRequestVo request);
}
\ No newline at end of file
}
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;
...@@ -9,10 +10,8 @@ import cn.freemud.constant.ShoppingCartConstant; ...@@ -9,10 +10,8 @@ import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.user.GetSessionUserInfoDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityChannelEnum; import cn.freemud.enums.ActivityChannelEnum;
import cn.freemud.enums.OperationTypeEnum;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.factory.AbstractShoppingCartImpl; import cn.freemud.factory.AbstractShoppingCartImpl;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
...@@ -22,7 +21,6 @@ import cn.freemud.service.CouponService; ...@@ -22,7 +21,6 @@ import cn.freemud.service.CouponService;
import cn.freemud.service.ShoppingCartCollageService; import cn.freemud.service.ShoppingCartCollageService;
import cn.freemud.service.ShoppingCartNewService; import cn.freemud.service.ShoppingCartNewService;
import cn.freemud.service.thirdparty.ActivityClient; import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.service.thirdparty.CustomerApplicationClient;
import cn.freemud.utils.PropertyConvertUtil; import cn.freemud.utils.PropertyConvertUtil;
import cn.freemud.utils.RedisLock; import cn.freemud.utils.RedisLock;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -32,11 +30,11 @@ import com.alibaba.fastjson.JSONObject; ...@@ -32,11 +30,11 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare; import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.log.LogThreadLocal; 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.application.sdk.api.promotioncenter.dto.promotion.DiscountDTO;
import com.freemud.card.sdk.log.ErrorLog; import com.freemud.card.sdk.log.ErrorLog;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant;
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.constant.RedisKeyConstant;
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.request.CheckCartRequest; import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
...@@ -45,7 +43,6 @@ import org.apache.commons.lang.ObjectUtils; ...@@ -45,7 +43,6 @@ import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
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.text.MessageFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -79,6 +76,9 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -79,6 +76,9 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
private ActivityAdapter activityAdapter; private ActivityAdapter activityAdapter;
@Autowired @Autowired
private CollageOrderAdapter collageOrderAdapter;
@Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired @Autowired
...@@ -93,6 +93,77 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -93,6 +93,77 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Autowired @Autowired
private CouponAdapter couponAdapter; private CouponAdapter couponAdapter;
/**
* 查询拼单订单信息(拼单基础信息 拼单参与人列表)
* @param request(partnerId shopId userId)
* @return
*/
@Override
public BaseResponse queryCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息
if (StringUtils.isEmpty(request.getCreateCollageUserId())) {
CustomerInfoVo currentUserInfoVo = this.getCustomerInfoVo(request.getSessionId());
collageOrderDto.setCreateCollageUserId(currentUserInfoVo.getMemberId());
}
BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageCartBaseService.queryCollageOrder(collageOrderDto);
CollageOrder collageOrder = queryCollageOrderResponse.getResult();
// 有个类引用冲突了,找不到,代码先注释了
/* if (ResponseResult.SUCCESS.getCode().equals(queryCollageOrderResponse.getCode()) && !ObjectUtils.isEmpty(collageOrder)) {
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
// 订单基础信息
collageOrderResponseVo.setOrder(collageOrder);
// TODO 订单参与人列表信息
return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_NOT_EXIST);
}*/
return null;
}
/**
* 创建拼单订单基础信息
* @param request(partnerId shopId sessionId)
* @return
*/
@Override
public BaseResponse createCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 根据sessionId查询对应登录用户信息
CustomerInfoVo currentUserInfoVo = this.getCustomerInfoVo(request.getSessionId());
collageOrderDto.setCreateCollageUserId(currentUserInfoVo.getMemberId());
// 创建拼单订单基础缓存信息
BaseResponse<CollageOrder> createCollageOrderResponse = this.collageCartBaseService.createCollageOrder(collageOrderDto);
if (ResponseResult.SUCCESS.getCode().equals(createCollageOrderResponse.getCode())) {
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
collageOrderResponseVo.setOrder(createCollageOrderResponse.getResult());
return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_ALREADY_EXIST);
}
}
/**
* 取消拼单订单,删除相关缓存信息
* @param request
* @return
*/
@Override
public BaseResponse cancelCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 根据sessionId查询对应登录用户信息
CustomerInfoVo currentUserInfoVo = this.getCustomerInfoVo(request.getSessionId());
collageOrderDto.setCreateCollageUserId(currentUserInfoVo.getMemberId());
return this.collageCartBaseService.cancelCollageOrder(collageOrderDto);
}
@Override @Override
public BaseResponse addGoodsByCard(AddGoodsByWeixinCardRequestVo request) { public BaseResponse addGoodsByCard(AddGoodsByWeixinCardRequestVo request) {
return null; return null;
......
package cn.freemud.controller;
import cn.freemud.ShoppingCartApplication;
import cn.freemud.entities.vo.CollageOrderRequestVo;
import com.alibaba.fastjson.JSONObject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-28 11:53
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ShoppingCartApplication.class)
public class CollageOrderControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void queryCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("c05bf8184c7e7783be35c7fb1d4d04d4f03b3b6f")
.partnerId("1864")
.shopId("520916")
.build();
try {
mockMvc.perform(post("/shoppingCart/collage/getOrder").content(JSONObject.toJSONString(request)).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void createCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("c05bf8184c7e7783be35c7fb1d4d04d4f03b3b6f")
.partnerId("1864")
.shopId("520916")
.build();
try {
mockMvc.perform(post("/shoppingCart/collage/createOrder").content(JSONObject.toJSONString(request)).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void cancelCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("c05bf8184c7e7783be35c7fb1d4d04d4f03b3b6f")
.partnerId("1864")
.shopId("520916")
.build();
try {
mockMvc.perform(post("/shoppingCart/collage/cancelOrder").content(JSONObject.toJSONString(request)).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
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.service.impl.CollageCartBaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-28 09:34
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration
public class CollageCartBaseServiceTest {
@Autowired
private CollageCartBaseServiceImpl collageCartBaseService;
@Test
public void queryCollageOrder() {
CollageOrderDto collageOrderDto = CollageOrderDto.builder()
.createCollageUserId("user1")
.partnerId("partner1")
.storeId("store1")
.build();
BaseResponse<CollageOrder> response = collageCartBaseService.queryCollageOrder(collageOrderDto);
log.debug("queryCollageOrder return: {}", response.getResult());
}
@Test
public void createCollageOrder() {
CollageOrderDto collageOrderDto = CollageOrderDto.builder()
.createCollageUserId("user1")
.partnerId("partner1")
.storeId("store1")
.build();
BaseResponse<CollageOrder> response = collageCartBaseService.createCollageOrder(collageOrderDto);
log.debug("createCollageOrder return: {}", response.getResult());
Assert.assertNotNull(response.getResult());
}
@Test
public void cancelCollageOrder() {
CollageOrderDto collageOrderDto = CollageOrderDto.builder()
.createCollageUserId("user1")
.partnerId("partner1")
.storeId("store1")
.build();
BaseResponse response = collageCartBaseService.cancelCollageOrder(collageOrderDto);
log.debug("cancelCollageOrder return: {}", response.getResult());
}
}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CollageOrderRequestVo;
import cn.freemud.service.impl.ShoppingCartCollageServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-09-28 15:36
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration
public class ShoppingCartCollageServiceTest {
@Autowired
private ShoppingCartCollageServiceImpl shoppingCartCollageService;
@Test
public void queryCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("")
.createCollageUserId("3600667734347310003")
.partnerId("partner1")
.shopId("store1")
.build();
BaseResponse response = shoppingCartCollageService.queryCollageOrder(request);
log.debug("queryCollageOrder return: {} {}", response.getCode(), response.getResult());
Assert.assertNotNull(response.getCode());
}
@Test
public void createCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("c05bf8184c7e7783be35c7fb1d4d04d4f03b3b6f")
.partnerId("partner1")
.shopId("store1")
.build();
BaseResponse response = shoppingCartCollageService.createCollageOrder(request);
log.debug("createCollageOrder return: {} {}", response.getCode(), response.getResult());
Assert.assertNotNull(response.getCode());
}
@Test
public void cancelCollageOrder() {
CollageOrderRequestVo request = CollageOrderRequestVo.builder()
.sessionId("c05bf8184c7e7783be35c7fb1d4d04d4f03b3b6f")
.partnerId("partner1")
.shopId("store1")
.build();
BaseResponse response = shoppingCartCollageService.cancelCollageOrder(request);
log.debug("cancelCollageOrder return: {} {}", response.getCode(), response.getResult());
Assert.assertNotNull(response.getCode());
}
}
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