Commit 41c877d1 by 缪晖

Merge branch 'feature/20210105_拼单对接新版促销接口_miaohui' into 'develop'

Feature/20210105 拼单对接新版促销接口 miaohui

See merge request !106
parents fc39afd0 dc108975
package cn.freemud.enums;
public enum PromotionSceneEnum {
ADDGOODS(1, "添加商品")
,UPDATEGOODSQTY(2, "更新商品数量")
,GETGOODSLIST(3, "购物车商品详情")
,GETSHOPPINGCARTGOODS(4, "查询购物车信息(包括参与的活动详情)")
;
private Integer code;
private String desc;
public static PromotionSceneEnum[] SCENE_DISCOUNT = {ADDGOODS, UPDATEGOODSQTY, GETGOODSLIST};
public static PromotionSceneEnum[] SCENE_APPORTION = {GETSHOPPINGCARTGOODS};
PromotionSceneEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package cn.freemud.service;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.PromotionSceneEnum;
import java.util.List;
/**
* 促销算价父接口
*/
public interface PromotionCalculateService {
default void calculate(PromotionSceneEnum promotionSceneEnum, BaseRequestVo baseRequestVo, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount, CartGoods cartGoods, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, CouponPromotionVO couponPromotionVO, ShoppingCartGoodsDto shoppingCartGoodsDto) {
switch (promotionSceneEnum) {
case ADDGOODS:
this.addGoods(baseRequestVo, shoppingCartGoodsResponseVo, cartGoodsList, activityQueryDto, deliveryAmount, cartGoods);
break;
case UPDATEGOODSQTY:
this.updateGoodsQty(baseRequestVo, shoppingCartGoodsResponseVo, cartGoodsList, activityQueryDto, deliveryAmount);
break;
case GETGOODSLIST:
this.getGoodsList(baseRequestVo, shoppingCartGoodsResponseVo, cartGoodsList, activityQueryDto, deliveryAmount, couponPromotionVO);
break;
case GETSHOPPINGCARTGOODS:
this.getShoppingCartGoods(baseRequestVo, premiumExchangeActivity, shoppingCartGoodsResponseVo, cartGoodsList, activityQueryDto, deliveryAmount, sendGoodsList, couponPromotionVO, shoppingCartGoodsDto);
break;
default:
return;
}
}
void addGoods(BaseRequestVo baseRequestVo, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount, CartGoods cartGoods);
void updateGoodsQty(BaseRequestVo baseRequestVo, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount);
void getGoodsList(BaseRequestVo baseRequestVo, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount, CouponPromotionVO couponPromotionVO);
void getShoppingCartGoods(BaseRequestVo baseRequestVo, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, CouponPromotionVO couponPromotionVO, ShoppingCartGoodsDto shoppingCartGoodsDto);
}
package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.user.GetSessionUserInfoDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.PromotionCalculateService;
import cn.freemud.service.thirdparty.CustomerApplicationClient;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 促销算价实现抽象父类
* 目前由于新版算价入参过于复杂,后续购物车dto整理后
*/
public abstract class AbstractPromotionCalculateService implements PromotionCalculateService {
@Autowired
private CustomerApplicationClient customerApplicationClient;
protected CustomerInfoVo getCustomerInfoVo(String sessionId) {
GetSessionUserInfoDto getSessionUserInfoDto = new GetSessionUserInfoDto();
getSessionUserInfoDto.setIsGetPaid(true);
getSessionUserInfoDto.setSessionId(sessionId);
BaseResponse<CustomerInfoVo> sessionUserInfo = customerApplicationClient.getSessionUserInfo(getSessionUserInfoDto);
if (!ResponseResult.SUCCESS.getCode().equals(sessionUserInfo.getCode()) || sessionUserInfo.getResult() == null) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
return sessionUserInfo.getResult();
}
protected UserLoginInfoDto convert2UserLoginInfoDto(CustomerInfoVo assortmentCustomerInfoVo) {
if (assortmentCustomerInfoVo == null || assortmentCustomerInfoVo.getMemberId() == null) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
UserLoginInfoDto userLoginInfoDto = new UserLoginInfoDto();
userLoginInfoDto.setMemberId(assortmentCustomerInfoVo.getMemberId());
userLoginInfoDto.setOpenId(assortmentCustomerInfoVo.getOpenId());
userLoginInfoDto.setWxAppid(assortmentCustomerInfoVo.getWxAppId());
userLoginInfoDto.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
userLoginInfoDto.setMobile(assortmentCustomerInfoVo.getMobile());
userLoginInfoDto.setAppsecret(assortmentCustomerInfoVo.getAppSecret());
userLoginInfoDto.setPartnerId(assortmentCustomerInfoVo.getPartnerId());
userLoginInfoDto.setNewMemeber(assortmentCustomerInfoVo.getNewMember());
userLoginInfoDto.setUnionId(assortmentCustomerInfoVo.getUnionId());
return userLoginInfoDto;
}
}
package cn.freemud.service.impl;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.PromotionSceneEnum;
import cn.freemud.service.PromotionCalculateService;
import cn.freemud.service.ShoppingCartNewService;
import cn.freemud.service.impl.calculate.CalculateCenter;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service("commonPromotionService")
public class CommonPromotionService {
@Value("${saas.cart.sharing}")
private String sharing;
/**
* 老版促销模板
*/
@Autowired
private PromotionCalculateServiceImpl promotionCalculateService;
/**
* 新版促销模板
*/
@Autowired
private PromotionCalculateSharingServiceImpl promotionCalculateSharingService;
@Autowired
private PromotionCalculateCollageServiceImpl promotionCalculateCollageService;
/**
* 促销计算统一入口
* 若促销逻辑需实现差异化请重写促销模板实现类
* @param baseRequestVo
* @param premiumExchangeActivity
* @param promotionSceneEnum
*/
public final void calculate(ShoppingCartNewService shoppingCartService, PromotionSceneEnum promotionSceneEnum, BaseRequestVo baseRequestVo, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto, Long deliveryAmount, CartGoods cartGoods, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, CouponPromotionVO couponPromotionVO, ShoppingCartGoodsDto shoppingCartGoodsDto) {
this.getPromotionCalculateService(shoppingCartService, baseRequestVo.getPartnerId(), baseRequestVo.getShopId()).calculate(promotionSceneEnum, baseRequestVo, premiumExchangeActivity, shoppingCartGoodsResponseVo, cartGoodsList, activityQueryDto, deliveryAmount, cartGoods, sendGoodsList, couponPromotionVO, shoppingCartGoodsDto);
}
/**
* 获取促销算价执行service
* @return
*/
private PromotionCalculateService getPromotionCalculateService(ShoppingCartNewService shoppingCartService, String partnerId, String storeId) {
if (grayPush(partnerId,storeId,"2")) {
return promotionCalculateSharingService;
} else {
if (shoppingCartService instanceof ShoppingCartCollageServiceImpl) {
return promotionCalculateCollageService;
}
return promotionCalculateService;
}
}
/**
* @param partnerId
* @param storeId
* @return
*/
private boolean grayPush(String partnerId, String storeId, String version) {
if (StringUtils.isBlank(sharing)) return false;
CalculateCenter center = JSON.parseObject(sharing, CalculateCenter.class);
Boolean enable = false;
if (!center.getEnable()) return false;
switch (center.getType()) {
case 2:
enable = true;
break;
case 1: {
//商户+门店级别
String real = partnerId.concat(storeId);
if (Arrays.asList(center.getGrayList().split(",")).contains(real)) {
enable = true;
}
//商户级别
else if (Arrays.asList(center.getGrayList().split(",")).contains(partnerId)) {
enable = true;
}
}
}
if (center.getEnable() && enable) {
enable = true;
}
return enable;
}
}
package cn.freemud.service.impl;
import cn.freemud.entities.vo.CustomerInfoVo;
import cn.freemud.entities.vo.ShoppingCartClearRequestVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.CollageCartBaseServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Set;
/**
* 老版促销算价实现
*/
@Service("promotionCalculateCollageService")
public class PromotionCalculateCollageServiceImpl extends PromotionCalculateServiceImpl {
@Autowired
private CollageCartBaseServiceImpl collageCartBaseService;
@Override
public void clear(ShoppingCartClearRequestVo request) {
// 拼单发起人
String createCollageUserId = request.getCreateCollageUserId();
if (StringUtils.isBlank(createCollageUserId)) {
throw new ServiceException(ResponseResult.COLLAGE_NOT_EXIST);
}
String partnerId = request.getPartnerId();
String storeId = request.getShopId();
if(StringUtils.isEmpty(partnerId) || StringUtils.isEmpty(storeId)){
throw new ServiceException(ResponseResult.PARAMETER_MISSING);
}
CustomerInfoVo userLoginInfoDto = getCustomerInfoVo(request.getSessionId());
if(null == userLoginInfoDto || StringUtils.isEmpty(userLoginInfoDto.getMemberId())){
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = new com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto();
cartParamDto.setPartnerId(partnerId);
cartParamDto.setStoreId(storeId);
cartParamDto.setUserId(createCollageUserId);
collageCartBaseService.clear(cartParamDto, LogThreadLocal.getTrackingNo());
// 更新拼单购物车人员缓存中的的购物车行id集合
// 获取点餐位的购物车行
Set<String> member = collageCartBaseService.getCollageMember(partnerId,storeId,createCollageUserId);
for(String mem : member){
collageCartBaseService.updateCollageCartGoodsUids(new ArrayList<>(),partnerId, storeId, createCollageUserId,mem);
}
}
}
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