Commit 6421e937 by 缪晖

拼单订单修改内容提交

parent 62aa3a19
...@@ -111,10 +111,10 @@ public class RedisKeyConstant { ...@@ -111,10 +111,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} * kgd:collage:store:member:{partnerId}
* 门店下拼单人员缓存key * 商户下拼单人员缓存key
*/ */
public final static String COLLAGE_STORE_MEMBER_KEY = "kgd:collage:store:member:{0}:{1}"; public final static String COLLAGE_PARTNER_MEMBER_KEY = "kgd:collage:partner:member:{0}";
/** /**
* kgd:collage:cart:lock:{partnerId}:{storeId}:{邀请用户ID} * kgd:collage:cart:lock:{partnerId}:{storeId}:{邀请用户ID}
......
package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-11-27 11:53
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CollagePartnerMember implements Serializable {
private String partnerId;
private String storeId;
private String createCollageUserId;
private Long expire;
}
...@@ -10,6 +10,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant; ...@@ -10,6 +10,7 @@ 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.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.domain.CollagePartnerMember;
import com.freemud.sdk.api.assortment.shoppingcart.service.CollageOrderBaseService; import com.freemud.sdk.api.assortment.shoppingcart.service.CollageOrderBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils; import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
...@@ -47,6 +48,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -47,6 +48,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
/** /**
* 查询拼单订单 * 查询拼单订单
* 根据createCollageUserId查询,先根据key查询,若不存在去商户旗下拼单列表查询,若存在则返回
* @param collageOrderDto * @param collageOrderDto
* @return * @return
*/ */
...@@ -54,15 +56,30 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -54,15 +56,30 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
public BaseResponse<CollageOrder> queryCollageOrder(CollageOrderDto collageOrderDto) { public BaseResponse<CollageOrder> queryCollageOrder(CollageOrderDto collageOrderDto) {
try { try {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key // 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String redisKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()); String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
// 查询Redis缓存中拼单订单基础信息 // 查询Redis缓存中拼单订单基础信息
CollageOrder collageOrder = this.getCollageBaseHash(redisKey); CollageOrder collageOrder = this.getCollageBaseHash(collageBaseHashKey);
// 若按发起人维度查询不到,则按参与人维度查询
if (ObjectUtils.isEmpty(collageOrder)) {
String collagePartnerMemberHashKey = this.genCollagePartnerMemberHashKey(collageOrderDto.getPartnerId());
CollagePartnerMember collagePartnerMember = this.getCollagePartnerMember(collagePartnerMemberHashKey, collageOrderDto.getCreateCollageUserId());
// 若商户拼单参与人列表信息不存在或已过期
if (collagePartnerMember == null || collagePartnerMember.getExpire() < System.currentTimeMillis()) {
return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST);
} else {
// 从商户拼单参与人列表中获取信息再次查询拼单信息
collageBaseHashKey = this.genCollageBaseHashKey(collagePartnerMember.getPartnerId(), collagePartnerMember.getStoreId(), collagePartnerMember.getCreateCollageUserId());
collageOrder = this.getCollageBaseHash(collageBaseHashKey);
// 若拼单订单信息不存在,则返回错误提示【拼单订单信息不存在】,由前端根据场景处理(静默、提示拼单已取消) // 若拼单订单信息依然不存在,则返回错误提示【拼单订单信息不存在】,由前端根据场景处理(静默、提示拼单已取消)
if (ObjectUtils.isEmpty(collageOrder)) { if (ObjectUtils.isEmpty(collageOrder)) {
return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST); return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST);
} }
}
}
// 若拼单订单信息存在,则构造订单拼单对象并返回成功提示 // 若拼单订单信息存在,则构造订单拼单对象并返回成功提示
return CartResponseUtil.success(collageOrder); return CartResponseUtil.success(collageOrder);
...@@ -80,7 +97,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -80,7 +97,7 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
@Override @Override
public BaseResponse<CollageOrder> createCollageOrder(CollageOrderDto collageOrderDto) { public BaseResponse<CollageOrder> createCollageOrder(CollageOrderDto collageOrderDto) {
try { try {
if (!this.isInCollageStoreMemberList(collageOrderDto)) { if (!this.isInCollagePartnerMemberList(collageOrderDto)) {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key // 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()); String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
...@@ -102,8 +119,9 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -102,8 +119,9 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
String collageMemberStateHashKey = this.genCollageMemberStateHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()); String collageMemberStateHashKey = this.genCollageMemberStateHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
this.initCollageMemberState(collageMemberStateHashKey, collageOrderDto); this.initCollageMemberState(collageMemberStateHashKey, collageOrderDto);
// 将拼单发起人加入门店拼单客户列表 // 将拼单发起人加入门店拼单客户列表
String collageStoreMemberKey = this.genCollageMemerHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId()); String collagePartnerMemberKey = this.genCollagePartnerMemberHashKey(collageOrderDto.getPartnerId());
this.putCollageStoreMember(collageStoreMemberKey, collageOrderDto.getCreateCollageUserId(), this.getCollageBashHashExpireSeconds(collageBaseHashKey)); CollagePartnerMember collagePartnerMember = new CollagePartnerMember(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId(), collageOrder.getExpireTime());
this.putCollagePartnerMember(collagePartnerMemberKey, collageOrderDto.getCurrentUserId(), collagePartnerMember);
return CartResponseUtil.success(collageOrder); return CartResponseUtil.success(collageOrder);
} }
} }
...@@ -226,6 +244,10 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -226,6 +244,10 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
@Override @Override
public BaseResponse setCollageMember(CollageOrderDto collageOrderDto){ public BaseResponse setCollageMember(CollageOrderDto collageOrderDto){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId()); String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
// 拼单人数不能超过100,非业务限制
if (redisTemplate.boundHashOps(key).values() != null && redisTemplate.boundHashOps(key).values().size() > 100) {
return CartResponseUtil.error("拼单人数超过上限(100),加入失败");
}
redisTemplate.boundHashOps(key).put(collageOrderDto.getCurrentUserId(),new ArrayList<>()); redisTemplate.boundHashOps(key).put(collageOrderDto.getCurrentUserId(),new ArrayList<>());
return CartResponseUtil.success(); return CartResponseUtil.success();
} }
...@@ -233,15 +255,23 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -233,15 +255,23 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
@Override @Override
public BaseResponse setCollageMemberAddTime(CollageOrderDto collageOrderDto){ public BaseResponse setCollageMemberAddTime(CollageOrderDto collageOrderDto){
try { try {
String collageStoreMemberKey = this.genCollageMemerHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId()); String collagePartnerMemberKey = this.genCollagePartnerMemberHashKey(collageOrderDto.getPartnerId());
String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()); String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
this.putCollageStoreMember(collageStoreMemberKey, collageOrderDto.getCurrentUserId(), this.getCollageBashHashExpireSeconds(collageBaseHashKey)); CollageOrder collageBaseHash = this.getCollageBaseHash(collageBaseHashKey);
CollagePartnerMember collagePartnerMember = new CollagePartnerMember(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId(), collageBaseHash.getExpireTime());
this.putCollagePartnerMember(collagePartnerMemberKey, collageOrderDto.getCurrentUserId(), collagePartnerMember);
} catch (Exception e) { } catch (Exception e) {
CartResponseUtil.error(""); ErrorLog.printErrorLog("设置用户在该商户下拼单参与列表记录异常", "CollageOrderBaseServiceImpl/setCollageMemberAddTime", this.collageOrderRequest(collageOrderDto), e);
CartResponseUtil.error("设置用户在该商户下拼单参与列表记录失败");
} }
return CartResponseUtil.success(); return CartResponseUtil.success();
} }
/**
* 判断用户是否参加了某一个拼单
* @param collageOrderDto
* @return
*/
@Override @Override
public BaseResponse judgeMemberAddOneCollage(CollageOrderDto collageOrderDto){ public BaseResponse judgeMemberAddOneCollage(CollageOrderDto collageOrderDto){
String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId()); String key = genCollageMemberHashKey(collageOrderDto.getPartnerId(),collageOrderDto.getStoreId(),collageOrderDto.getCreateCollageUserId());
...@@ -300,11 +330,12 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -300,11 +330,12 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
/** /**
* 构建门店下拼单人员hashKey * 构建门店下拼单人员hashKey
* 20201127 产品确认同一商户下所有门店只允许同时存在一个拼单
* Hash<userId, {partnerId, storeId, createCollageUserId, expireTime}>
* @param partnerId * @param partnerId
* @param storeId
*/ */
private String genCollageMemerHashKey(String partnerId, String storeId) { private String genCollagePartnerMemberHashKey(String partnerId) {
return MessageFormat.format(RedisKeyConstant.COLLAGE_STORE_MEMBER_KEY, partnerId, storeId); return MessageFormat.format(RedisKeyConstant.COLLAGE_PARTNER_MEMBER_KEY, partnerId);
} }
/** /**
...@@ -341,9 +372,9 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -341,9 +372,9 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
*/ */
private void deleteCollageBaseHash(CollageOrder collageOrder) throws Exception { private void deleteCollageBaseHash(CollageOrder collageOrder) throws Exception {
// 删除商品门店拼单客户列表中该拼单订单下参与人 // 删除商品门店拼单客户列表中该拼单订单下参与人
String collageStoreMemberKey = this.genCollageMemerHashKey(collageOrder.getPartnerId(), collageOrder.getStoreId()); String collagePartnerMemberKey = this.genCollagePartnerMemberHashKey(collageOrder.getPartnerId());
Set<String> collageMember = this.collageCartBaseService.getCollageMember(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId()); Set<String> collageMember = this.collageCartBaseService.getCollageMember(collageOrder.getPartnerId(), collageOrder.getStoreId(), collageOrder.getCreateCollageUserId());
this.deleteCollageStoreMember(collageStoreMemberKey, collageMember.toArray()); this.deleteCollagePartnerMember(collagePartnerMemberKey, collageMember.toArray());
// 删除拼单订单相关缓存 // 删除拼单订单相关缓存
Set<String> redisKeySet = new HashSet<>(); Set<String> redisKeySet = new HashSet<>();
...@@ -377,39 +408,42 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -377,39 +408,42 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
/** /**
* 商户门店拼单参与用户名单设置 * 商户门店拼单参与用户名单设置
* @param collageStoreMemberKey * @param collagePartnerMemberKey
* @param userId * @param userId
*/ */
private void putCollageStoreMember(String collageStoreMemberKey, String userId, Long expireTime) throws Exception { private void putCollagePartnerMember(String collagePartnerMemberKey, String userId, CollagePartnerMember collagePartnerMember) throws Exception {
redisTemplate.boundHashOps(collageStoreMemberKey).put(userId, Optional.ofNullable(DateTimeUtils.currentTimeMillis(expireTime)).orElseGet(() -> DateTimeUtils.currentTimeMillis(60 * 60L))); redisTemplate.boundHashOps(collagePartnerMemberKey).put(userId, collagePartnerMember);
} }
/** /**
* 商户门店拼单参与用户名单删除拼单参与人 * 商户拼单参与用户名单删除拼单参与人
* @param collageStoreMemberKey * @param collagePartnerMemberKey
* @param userIds * @param userIds
*/ */
private void deleteCollageStoreMember(String collageStoreMemberKey, Object[] userIds) throws Exception { private void deleteCollagePartnerMember(String collagePartnerMemberKey, Object[] userIds) throws Exception {
if (userIds.length == 0) return; if (userIds == null || userIds.length == 0) return;
redisTemplate.boundHashOps(collageStoreMemberKey).delete(userIds); redisTemplate.boundHashOps(collagePartnerMemberKey).delete(userIds);
} }
/** /**
* 获取当前商户门店下全部拼单参与用户列表 * 获取当前商户门店下全部拼单参与用户列表
* @param collageStoreMemberKey * @param collagePartnerMemberKey
* @return * @return
*/ */
private Map<String, Long> getCollageStoreMember(String collageStoreMemberKey) throws Exception { private Map<String, CollagePartnerMember> getCollagePartnerMemberAll(String collagePartnerMemberKey) throws Exception {
return Optional.ofNullable(redisTemplate.boundHashOps(collageStoreMemberKey).entries()).orElseGet(() -> new HashMap()); return Optional.ofNullable(redisTemplate.boundHashOps(collagePartnerMemberKey).entries()).orElseGet(() -> new HashMap());
} }
/** /**
* 判断userId是否在当前门店拼单用户列表中 * 获取商户下拼单参与人信息
* @param collageStoreMemberKey * @param collagePartnerMemberKey
* @param userId
* @return * @return
* @throws Exception
*/ */
private Long getCollageStoreMemberExpireTime(String collageStoreMemberKey, String userId) throws Exception { private CollagePartnerMember getCollagePartnerMember(String collagePartnerMemberKey, String userId) {
return Optional.ofNullable((Long) redisTemplate.boundHashOps(collageStoreMemberKey).get(userId)).orElseGet(() -> 0L); Object obj = redisTemplate.boundHashOps(collagePartnerMemberKey).get(userId);
return null != obj ? (CollagePartnerMember) obj : null;
} }
/** /**
...@@ -417,18 +451,15 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -417,18 +451,15 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
* @param collageOrderDto * @param collageOrderDto
* @return * @return
*/ */
public boolean isInCollageStoreMemberList(CollageOrderDto collageOrderDto) { public boolean isInCollagePartnerMemberList(CollageOrderDto collageOrderDto) {
try { String collagePartnerMemberKey = this.genCollagePartnerMemberHashKey(collageOrderDto.getPartnerId());
String collageStoreMemberKey = this.genCollageMemerHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId()); // 获取当前用户在商户下的拼单信息
// 获取当前用户拼单状态过期时间 CollagePartnerMember collagePartnerMember = this.getCollagePartnerMember(collagePartnerMemberKey, collageOrderDto.getCurrentUserId());
Long collageStoreMemberExpireTime = this.getCollageStoreMemberExpireTime(collageStoreMemberKey, collageOrderDto.getCurrentUserId());
// 当前登录用户ID存在且未超过过期时间 // 当前登录用户ID存在且未超过过期时间
if (DateTimeUtils.currentTimeMillis() < collageStoreMemberExpireTime) { if (collagePartnerMember != null && DateTimeUtils.currentTimeMillis() < collagePartnerMember.getExpire()) {
return true; return true;
} }
} catch (Exception e) {
ErrorLog.printErrorLog("查询当前用户是否存在进行中的拼单异常", "CollageOrderBaseServiceImpl/isInCollageOrderCustomerList", this.collageOrderRequest(collageOrderDto), e);
}
return false; return false;
} }
......
...@@ -2,7 +2,9 @@ package cn.freemud.controller; ...@@ -2,7 +2,9 @@ package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.WechatGroupBuyVo;
import cn.freemud.service.impl.CollageOrderServiceImpl; import cn.freemud.service.impl.CollageOrderServiceImpl;
import cn.freemud.utils.ResponseUtil;
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.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -45,4 +47,12 @@ public class CollageOrderController { ...@@ -45,4 +47,12 @@ public class CollageOrderController {
return collageOrderService.create(requestVo); return collageOrderService.create(requestVo);
} }
@ApiOperation(value = "创建拼单群收款", notes = "创建拼单群收款")
@ApiImplicitParam(value = "请求", required = true, dataType = "CreateOrderVo", name = "CreateOrderVo")
@ApiAnnotation(logMessage = "createGroupBuy")
@PostMapping(value = "/collage/groupBuy")
public BaseResponse createGroupBuy(@Validated @LogParams @RequestBody WechatGroupBuyVo requestVo) {
return collageOrderService.createGroupBuy(requestVo);
}
} }
package cn.freemud.entities.dto.wechat;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-11-27 17:48
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class GroupBuyDto {
}
package cn.freemud.entities.dto.wechat;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0.0
* @Description:
* @author: hui.miao
* @date: 2020-11-27 17:50
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class GroupBuyResp {
private String groupBuyOrderId;
}
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class WechatGroupBuyVo {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
@NotEmpty(message = "商户号 不能为空")
private String partnerId;
@NotEmpty(message = "门店号 不能为空")
private String shopId;
@NotEmpty(message = "订单编号 不能为空")
private String orderCode;
}
...@@ -2,6 +2,7 @@ package cn.freemud.service; ...@@ -2,6 +2,7 @@ package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.WechatGroupBuyVo;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
...@@ -15,7 +16,14 @@ import cn.freemud.entities.vo.CreateOrderVo; ...@@ -15,7 +16,14 @@ import cn.freemud.entities.vo.CreateOrderVo;
*/ */
public interface CollageOrderService { public interface CollageOrderService {
/** /**
* 创建订单 * 创建拼单订单
*/ */
BaseResponse create(CreateOrderVo createOrderVo); BaseResponse create(CreateOrderVo createOrderVo);
/**
* 创建群收款
* @param requestVo
* @return
*/
BaseResponse createGroupBuy(WechatGroupBuyVo requestVo);
} }
...@@ -14,9 +14,12 @@ package cn.freemud.service.impl; ...@@ -14,9 +14,12 @@ package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.wechat.GroupBuyResp;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.WechatGroupBuyVo;
import cn.freemud.enums.OrderMarketType; import cn.freemud.enums.OrderMarketType;
import cn.freemud.service.CollageOrderService; import cn.freemud.service.CollageOrderService;
import cn.freemud.utils.ResponseUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,10 +30,25 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -27,10 +30,25 @@ public class CollageOrderServiceImpl implements CollageOrderService {
@Autowired @Autowired
private OrderServiceImpl orderService; private OrderServiceImpl orderService;
/**
* 创建拼单订单
*/
@Override @Override
public BaseResponse create(CreateOrderVo createOrderVo) { public BaseResponse create(CreateOrderVo createOrderVo) {
// 标记订单类型-4 拼单 // 标记订单类型-4 拼单
createOrderVo.setMarketingType(OrderMarketType.COLLAGE.getIndex()); createOrderVo.setMarketingType(OrderMarketType.COLLAGE.getIndex());
return this.orderService.createOrderNew(createOrderVo); return this.orderService.createOrderNew(createOrderVo);
} }
/**
* 创建群收款
* @param requestVo
* @return
*/
@Override
public BaseResponse createGroupBuy(WechatGroupBuyVo requestVo) {
GroupBuyResp groupBuyResp = new GroupBuyResp();
groupBuyResp.setGroupBuyOrderId("AARwDhsBAAABAAAAAAA8qP8oA4wVBRDgTYemXSAAAAC+NhafsoPlHq4RjEYubHs/qZzK7T9Q 02qG5CNcaTRRAyNIF/DIBcbFQuBKJTnEezsaW1SDpyM9G6MNK9T2wzeWQlajckiSTDZDWjAn9O1 WASuHkIZdf9SRQrIAwZdwjsBf7MPxtQP/4ExaW0B9g9IG");
return ResponseUtil.success(groupBuyResp);
}
} }
...@@ -43,7 +43,7 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo { ...@@ -43,7 +43,7 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
/** /**
* 拼单场景使用 * 拼单场景使用
* 0个人购物车1整个购物车 * 0个人购物车;1全员购物车;2整合购物车
*/ */
private Integer type; private Integer type;
......
...@@ -146,7 +146,7 @@ public enum ResponseResult { ...@@ -146,7 +146,7 @@ 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_MEMBER_ALREADY_ADD("49008", "用户存在进行中的拼单,无法再次加入"),
COLLAGE_CREATE_NOT_OUT_OF("49009", "拼单发起人不能退出拼单,请取消"), COLLAGE_CREATE_NOT_OUT_OF("49009", "拼单发起人不能退出拼单,请取消"),
COLLAGE_MEMBER_NOT_ADD("49010", "用户未参加拼单,请确认"), COLLAGE_MEMBER_NOT_ADD("49010", "用户未参加拼单,请确认"),
COLLAGE_MEMBER_NOT_CREATE("49011", "只有拼单发起者才能移除拼单人员,请确认"), COLLAGE_MEMBER_NOT_CREATE("49011", "只有拼单发起者才能移除拼单人员,请确认"),
......
...@@ -77,7 +77,7 @@ public interface CollageOrderService { ...@@ -77,7 +77,7 @@ public interface CollageOrderService {
* @param request * @param request
* @return * @return
*/ */
BaseResponse addCollageOrder(CollageOrderRequestVo request); BaseResponse addCollageOrder(CollageOrderRequestVo request) throws Exception;
/** /**
* 退出拼单订单 * 退出拼单订单
......
...@@ -2,7 +2,6 @@ package cn.freemud.service.impl; ...@@ -2,7 +2,6 @@ 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.entities.vo.CustomerInfoVo;
...@@ -10,8 +9,6 @@ import cn.freemud.enums.ResponseResult; ...@@ -10,8 +9,6 @@ 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.constant.CollageMemberStateType; import com.freemud.sdk.api.assortment.shoppingcart.constant.CollageMemberStateType;
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.CollageOrder;
...@@ -58,8 +55,10 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -58,8 +55,10 @@ public class CollageOrderServiceImpl implements CollageOrderService {
public BaseResponse queryCollageOrder(CollageOrderRequestVo request) { public BaseResponse queryCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request); CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息 // 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息
String currentUserId = this.getUserIdBySessionId(request.getSessionId());
if (StringUtils.isEmpty(request.getCreateCollageUserId())) { if (StringUtils.isEmpty(request.getCreateCollageUserId())) {
collageOrderDto.setCreateCollageUserId(this.getUserIdBySessionId(request.getSessionId())); collageOrderDto.setCreateCollageUserId(currentUserId);
collageOrderDto.setCurrentUserId(currentUserId);
} }
BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageOrderBaseService.queryCollageOrder(collageOrderDto); BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageOrderBaseService.queryCollageOrder(collageOrderDto);
CollageOrder collageOrder = queryCollageOrderResponse.getResult(); CollageOrder collageOrder = queryCollageOrderResponse.getResult();
...@@ -67,6 +66,11 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -67,6 +66,11 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// SDK查询订单返回非成功code或返回结果订单信息为空时,返回前端异常信息 // SDK查询订单返回非成功code或返回结果订单信息为空时,返回前端异常信息
Optional.ofNullable(queryCollageOrderResponse).filter(resp -> (ResponseResult.SUCCESS.getCode().equals(resp.getCode()) && !ObjectUtils.isEmpty(collageOrder))).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST)); Optional.ofNullable(queryCollageOrderResponse).filter(resp -> (ResponseResult.SUCCESS.getCode().equals(resp.getCode()) && !ObjectUtils.isEmpty(collageOrder))).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
// 现在改为同时可查询自己发起以及参与的拼单所以查询到拼单信息后,后续查询需要使用拼单hash的三要素信息继续查询
collageOrderDto.setPartnerId(collageOrder.getPartnerId());
collageOrderDto.setStoreId(collageOrder.getStoreId());
collageOrderDto.setCreateCollageUserId(collageOrder.getCreateCollageUserId());
CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo(); CollageOrderResponseVo collageOrderResponseVo = new CollageOrderResponseVo();
// 订单基础信息 // 订单基础信息
collageOrderResponseVo.setOrder(collageOrder); collageOrderResponseVo.setOrder(collageOrder);
...@@ -74,11 +78,16 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -74,11 +78,16 @@ public class CollageOrderServiceImpl implements CollageOrderService {
collageOrderResponseVo.setLocked(this.collageOrderBaseService.isLockedCollageOrder(collageOrderDto).getResult()); collageOrderResponseVo.setLocked(this.collageOrderBaseService.isLockedCollageOrder(collageOrderDto).getResult());
// 订单参与人列表信息 参与人昵称头像等信息放入加购人状态锁redis对象中 userId : MemberState // 订单参与人列表信息 参与人昵称头像等信息放入加购人状态锁redis对象中 userId : MemberState
List<CollageMemberState> collageMemberStateList = this.collageOrderBaseService.getCollageMemberState(collageOrderDto).getResult(); List<CollageMemberState> collageMemberStateList = this.collageOrderBaseService.getCollageMemberState(collageOrderDto).getResult();
if (null != collageMemberStateList && collageMemberStateList.size() > 0 && collageMemberStateList.stream().filter(member -> member.getUserId().equals(currentUserId)).count() > 0) {
collageOrderResponseVo.setCollageMemberStateList(collageMemberStateList); collageOrderResponseVo.setCollageMemberStateList(collageMemberStateList);
// 未加购完毕人数统计 // 未加购完毕人数统计
collageOrderResponseVo.setShoppingMemberNum(collageMemberStateList.stream().filter(member -> member.getState() == CollageMemberStateType.SHOPPING.getValue()).collect(Collectors.toList()).size()); collageOrderResponseVo.setShoppingMemberNum(collageMemberStateList.stream().filter(member -> member.getState() == CollageMemberStateType.SHOPPING.getValue()).collect(Collectors.toList()).size());
return ResponseUtil.success(collageOrderResponseVo); return ResponseUtil.success(collageOrderResponseVo);
} else {
return ResponseUtil.error(ResponseResult.COLLAGE_MEMBER_NOT_ADD);
}
} }
/** /**
...@@ -253,8 +262,8 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -253,8 +262,8 @@ public class CollageOrderServiceImpl implements CollageOrderService {
Optional.ofNullable(collageOrder).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST)); Optional.ofNullable(collageOrder).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
// 判断当前登陆用户是否参加过当前店铺其他的拼团 // 判断当前登陆用户是否参加过当前店铺其他的拼团
// 因为一个用户在一个店铺下只能参加一个拼单,所以通过判断用户在店铺下的拼单结束时间确认 // 因为一个用户在一个商户下只能参加一个拼单,所以通过判断用户在商户下的拼单结束时间确认
Boolean flag = collageOrderBaseService.isInCollageStoreMemberList(collageOrderDto); Boolean flag = collageOrderBaseService.isInCollagePartnerMemberList(collageOrderDto);
if(flag){ if(flag){
throw new ServiceException(ResponseResult.COLLAGE_MEMBER_ALREADY_ADD); throw new ServiceException(ResponseResult.COLLAGE_MEMBER_ALREADY_ADD);
} }
...@@ -266,7 +275,7 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -266,7 +275,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
String collageMemberStateHashKey = collageOrderBaseService.genCollageMemberStateHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId()); String collageMemberStateHashKey = collageOrderBaseService.genCollageMemberStateHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
collageOrderBaseService.addCollageMemberState(collageMemberStateHashKey, collageOrderDto); collageOrderBaseService.addCollageMemberState(collageMemberStateHashKey, collageOrderDto);
// 设置用户在该店铺的拼单结束时间 // 设置用户在该商户下拼单参与列表记录
collageOrderBaseService.setCollageMemberAddTime(collageOrderDto); collageOrderBaseService.setCollageMemberAddTime(collageOrderDto);
return ResponseUtil.success(); return ResponseUtil.success();
......
...@@ -47,7 +47,6 @@ import org.springframework.stereotype.Service; ...@@ -47,7 +47,6 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
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;
...@@ -483,11 +482,28 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -483,11 +482,28 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
ShoppingCartCollageResponseVo shoppingCartCollageResponseVo; ShoppingCartCollageResponseVo shoppingCartCollageResponseVo;
if(shoppingCartInfoRequestVo.getType() != null && shoppingCartInfoRequestVo.getType().intValue() == 1){ if(shoppingCartInfoRequestVo.getType() != null && shoppingCartInfoRequestVo.getType().intValue() == 1){
// 根据人员分类购物车 // 根据人员分类购物车 全员购物车
shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,null); shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,null);
}else{ }else if(shoppingCartInfoRequestVo.getType() != null && shoppingCartInfoRequestVo.getType().intValue() == 0){
// 根据人员分类购物车 // 根据人员分类购物车 个人购物车
shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId); shoppingCartCollageResponseVo = splitByUser(shoppingCartGoodsResponseVo,crateUserId,partnerId,storeId,currentUserId);
}else{
// 整合购物车
shoppingCartCollageResponseVo = new ShoppingCartCollageResponseVo();
BeanUtils.copyProperties(shoppingCartGoodsResponseVo,shoppingCartCollageResponseVo);
List<CartGoods> cartGoods = shoppingCartGoodsResponseVo.getProducts();
List<ShoppingCartCollageGoodsResponseVo> userProducts = new ArrayList<>();
ShoppingCartCollageGoodsResponseVo shoppingCartCollageGoodsResponseVo = new ShoppingCartCollageGoodsResponseVo();
shoppingCartCollageGoodsResponseVo.setProducts(cartGoods);
shoppingCartCollageGoodsResponseVo.setUid(currentUserId);
shoppingCartCollageGoodsResponseVo.setUserName(currentUserInfoVo.getNickName());
shoppingCartCollageGoodsResponseVo.setPhotoUrl(currentUserInfoVo.getPhotoUrl());
shoppingCartCollageGoodsResponseVo.setPackPrice(shoppingCartGoodsResponseVo.getNewPackAmount());
shoppingCartCollageGoodsResponseVo.setProductsCount(shoppingCartGoodsResponseVo.getProductsCount());
shoppingCartCollageGoodsResponseVo.setTotalAmount(shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartCollageGoodsResponseVo.setOriginalTotalAmount(shoppingCartGoodsResponseVo.getOriginalTotalAmount());
userProducts.add(shoppingCartCollageGoodsResponseVo);
shoppingCartCollageResponseVo.setUserProducts(userProducts);
} }
return ResponseUtil.success(shoppingCartCollageResponseVo); return ResponseUtil.success(shoppingCartCollageResponseVo);
...@@ -1061,7 +1077,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -1061,7 +1077,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
.partnerId(partnerId) .partnerId(partnerId)
.storeId(storeId) .storeId(storeId)
.build(); .build();
Boolean flag = collageOrderBaseService.isInCollageStoreMemberList(collageOrderDto); Boolean flag = collageOrderBaseService.isInCollagePartnerMemberList(collageOrderDto);
if(flag){ if(flag){
throw new ServiceException(ResponseResult.COLLAGE_ALREADY_CHOOSE); throw new ServiceException(ResponseResult.COLLAGE_ALREADY_CHOOSE);
} }
......
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