Commit bb06dc67 by chongfu.liang

Merge branch 'feature/20210420-订单在下单时需要校验券的归属-lcf'

parents f56ee348 47d9bac8
......@@ -10,6 +10,7 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
public final static String COCO_RESPONSE_COUPON_ERR_STR = "49000";
public final static String USER_HAVE_NO_COUPON = "44039";
public final static String RESPONSE_SUCCESS_OK = "ok";
public final static Integer RESPONSE_SUCCESS_1 = 1;
......
......@@ -198,6 +198,7 @@ public enum ResponseResult {
COUPON_INVAILD("46014", "优惠券失效",""),
COUPON_DATETIME_INVAILD("46015", "优惠券在当前时间不可用",""),
COUPON_ORDER_ORIGINAL_AMOUNT_NOT_ENOUGH("46016","优惠券不满足可用金额门槛",""),
SHOPPING_CART_USER_HAVE_NO_COUPON("46017", "使用的商品券已失效,请重新下单",""),
/**
* 加价购商品
*/
......
......@@ -634,6 +634,9 @@ public class CheckOrder {
if (ObjectUtils.equals(ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,apportionResponse.getMessage());
}
if (ObjectUtils.equals(ResponseCodeConstant.USER_HAVE_NO_COUPON, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON,apportionResponse.getMessage());
}
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, apportionResponse.getCode())) {
ResponseResult responseResult = ResponseResult.getResponseResult(apportionResponse.getCode());
......@@ -647,6 +650,7 @@ public class CheckOrder {
throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
}
// 拼单处理
if (this.isCollageOrder(createOrderVo)) {
// 处理拼单加购人信息
......
......@@ -11,6 +11,8 @@ import cn.freemud.demo.service.impl.AbstractApportionService;
import cn.freemud.demo.service.impl.DeliveryService;
import cn.freemud.entities.dto.CheckSpqInfoRequestDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.GetMemberCouponListRequestDto;
import cn.freemud.entities.dto.GetMemberCouponListResponseDto;
import cn.freemud.entities.vo.ActivityClassifyCouponBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
......@@ -204,12 +206,27 @@ public class PlatformApportionService extends AbstractApportionService {
@Override
public AddGoodsToShoppingCartBO checkCustomBusinessRules(ShoppingCartGoodsApportionBO baseRequestDTO, CheckBussinessRulesBO checkBussinessRulesBO, AddGoodsToShoppingCartBO addGoodsToShoppingCartBO) {
List<CartGoods> cartGoodsList = addGoodsToShoppingCartBO.getCartGoods();
// 校验后有效的商品券map
HashMap<String, CheckSpqInfoResponseDto> validCouponMap = new HashMap<>(16);
// 校验后有效的商品券map
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(baseRequestDTO.getPartnerId(), baseRequestDTO.getUserId());
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode(), CouponStatus.STATUS_2.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
getMemberCouponListRequestDto.setPageSize(Integer.MAX_VALUE);
List<GetMemberCouponListResponseDto.Result.MemberCoupon> validMemberCouponList = couponService.getValidMemberCouponList(getMemberCouponListRequestDto, baseRequestDTO.getOrderType());
for (int i = 0; i < cartGoodsList.size(); i++){
CartGoods cartGoods = cartGoodsList.get(i);
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
if (CollectionUtils.isEmpty(validMemberCouponList)){
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
} else {
String finalCouponCode = spqId;
GetMemberCouponListResponseDto.Result.MemberCoupon memberCoupon = validMemberCouponList.stream().filter(p -> finalCouponCode.equals(p.getCouponCode())).findFirst().orElse(null);
if (memberCoupon == null){
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
}
}
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(baseRequestDTO.getPartnerId(), baseRequestDTO.getShopId(), spqId, baseRequestDTO.getMenuType());
CheckSpqInfoResponseDto checkSpqInfo = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
......
......@@ -103,6 +103,7 @@ public enum ResponseResult {
SHOPPING_CART_COUPON_MIX_NOT_EXIST("44034", "券商品不存在"),
SHOPPING_CART_QTY_LIMIT_ERR("44035", "该商品单次购买数量限制为10,请知晓"),
SHOPPING_CART_MATERIA_QTY_LIMIT_ERR("44038", "商品加料超过最大限制"),
SHOPPING_CART_USER_HAVE_NO_COUPON("44039", "使用的商品券已失效,请重新下单"),
/**
* 订单状态码
......
......@@ -14,10 +14,7 @@
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ActivityDiscountDto;
import cn.freemud.entities.dto.CheckSpqInfoRequestDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.vo.*;
import java.util.List;
......@@ -48,6 +45,8 @@ public interface CouponService {
*/
GetCouponDetailResponseDto getMemberCoupon(GetMemberCouponRequestVo requestVo);
List<GetMemberCouponListResponseDto.Result.MemberCoupon> getValidMemberCouponList(GetMemberCouponListRequestDto getMemberCouponListRequestDto, Integer orderType);
/**
* 批次查询券详情
*
......@@ -129,4 +128,6 @@ public interface CouponService {
* 返回 key = 活动code, value= 返回是否匹配点餐方式
*/
Map<String, Boolean> couponOrderWay(String partnerId, List<String> activityCodes, Integer orderTye);
void checkValidCoupon(CouponPromotionVO couponPromotionVO, List<String> couponList, Map<String, List<String>> spqIdToCartUuid, String couponCode, List<CartGoods> cartGoodsList);
}
package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CouponService;
import cn.freemud.service.IPromotionService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
......@@ -130,6 +129,18 @@ public class CouponPromotionService implements IPromotionService {
useCoupon = false;
}
if (StringUtils.isNotBlank(couponCode)) {
List<String> validCouponCodeLis = new ArrayList<>();
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())){
validCouponCodeLis = shoppingCartGoodsResponseVo.getAvailableCoupon().getUsableCoupons().stream().map(ActivityCouponBean::getCouponCode).collect(Collectors.toList());
} else {
couponPromotionVO = new CouponPromotionVO();
couponPromotionVO.setUserId(userLoginInfoDto.getMemberId());
couponPromotionVO.setStoreId(activityQueryDto.getStoreId());
couponPromotionVO.setPartnerId(activityQueryDto.getPartnerId());
couponPromotionVO.setOrderType(activityQueryDto.getOrderType());
}
couponService.checkValidCoupon(couponPromotionVO, validCouponCodeLis, spqIdToCartUuid, couponCode, cartGoodsList);
// 计算优惠信息时,已将券校验过,放在map中
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
......
......@@ -61,6 +61,7 @@ import com.freemud.card.sdk.vo.coupon.request.MemberAddCouponVo;
import com.freemud.card.sdk.vo.coupon.response.MemberBaseRespVo;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
......@@ -130,6 +131,10 @@ public class CouponServiceImpl implements CouponService {
private String couponPartnerId;
@Autowired
private CouponAdapterClient couponAdaptClient;
@Autowired
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
/**
* 获取优惠券列表
......@@ -236,6 +241,29 @@ public class CouponServiceImpl implements CouponService {
return null;
}
/**
* 获取会员服务的优惠券列表
*
* @param getMemberCouponListRequestDto
* @return
*/
public List<GetMemberCouponListResponseDto.Result.MemberCoupon> getValidMemberCouponList(GetMemberCouponListRequestDto getMemberCouponListRequestDto, Integer orderType) {
List<GetMemberCouponListResponseDto.Result.MemberCoupon> memberCoupons = Lists.newArrayList();
GetMemberCouponListResponseDto.Result result = getMemberCouponList(getMemberCouponListRequestDto);
// 过滤优惠券得点餐方式
if (!Objects.isNull(result) && CollectionUtils.isNotEmpty(result.getMemberCoupons())) {
List<String> activityCodes = result.getMemberCoupons().stream().map(GetMemberCouponListResponseDto.Result.MemberCoupon::getActivityCode).collect(Collectors.toList());
Map<String, Boolean> activityCodesMap = couponOrderWay(getMemberCouponListRequestDto.getPartnerId(), activityCodes, orderType);
result.getMemberCoupons().forEach(memberCoupon -> {
if (activityCodesMap.get(memberCoupon.getActivityCode()) != null && activityCodesMap.get(memberCoupon.getActivityCode())) {
memberCoupons.add(memberCoupon);
}
});
}
return memberCoupons;
}
@Override
public BaseResponse receiveMemberCoupon(ReceiveMemberCouponRequestVo requestVo) {
MemberAddCouponVo memberAddCouponVo = couponAdapter.convert2MemberAddCouponVo(requestVo);
......@@ -1303,4 +1331,38 @@ public class CouponServiceImpl implements CouponService {
}
return CouponBarCodeMap;
}
@Override
public void checkValidCoupon(CouponPromotionVO couponPromotionVO, List<String> couponList, Map<String, List<String>> spqIdToCartUuid, String couponCode, List<CartGoods> cartGoodsList) {
List<String> validCouponCodeLis = new ArrayList<>();
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())){
validCouponCodeLis = couponList;
} else {
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(couponPromotionVO.getPartnerId(), couponPromotionVO.getUserId());
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode(), CouponStatus.STATUS_2.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
getMemberCouponListRequestDto.setPageSize(Integer.MAX_VALUE);
List<GetMemberCouponListResponseDto.Result.MemberCoupon> validMemberCouponList = couponService.getValidMemberCouponList(getMemberCouponListRequestDto, couponPromotionVO.getOrderType());
validCouponCodeLis = validMemberCouponList.stream().map(GetMemberCouponListResponseDto.Result.MemberCoupon::getCouponCode).collect(Collectors.toList());
}
if (CollectionUtils.isEmpty(validCouponCodeLis)){
List<String> uuidList = spqIdToCartUuid.get(couponCode);
if (CollectionUtils.isNotEmpty(uuidList)){
List<CartGoods> newCartList = cartGoodsList.stream().filter(p -> !uuidList.contains(p.getCartGoodsUid())).collect(Collectors.toList());
assortmentSdkService.setShoppingCart(couponPromotionVO.getPartnerId(), couponPromotionVO.getStoreId(), couponPromotionVO.getUserId(), newCartList, null, null, this.shoppingCartBaseService);
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
}
} else {
String finalCouponCode = couponCode;
String memberCouponCode = validCouponCodeLis.stream().filter(p -> finalCouponCode.equals(p)).findFirst().orElse(null);
if (StringUtils.isBlank(memberCouponCode)){
List<String> uuidList = spqIdToCartUuid.get(memberCouponCode);
if (CollectionUtils.isNotEmpty(uuidList)){
List<CartGoods> newCartList = cartGoodsList.stream().filter(p -> !uuidList.contains(p.getCartGoodsUid())).collect(Collectors.toList());
assortmentSdkService.setShoppingCart(couponPromotionVO.getPartnerId(), couponPromotionVO.getStoreId(), couponPromotionVO.getUserId(), newCartList, null, null, this.shoppingCartBaseService);
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
}
}
}
}
}
......@@ -81,7 +81,7 @@ public class CalculationSharingCartService {
/**
* 可用券及券折扣
*/
promotionSharingService.updateShoppingCartGoodsDiscount(discountResult, cartGoodsList, shoppingCartGoodsResponseVo, couponPromotionVO,shoppingCartInfoRequestVo, userId, partnerId, storeId);
promotionSharingService.updateShoppingCartGoodsDiscount(discountResult, cartGoodsList, shoppingCartGoodsResponseVo, couponPromotionVO,shoppingCartInfoRequestVo, userId, partnerId, storeId, activityQueryDto.getOrderType());
/**
* 满减处理
......
......@@ -18,6 +18,7 @@ import cn.freemud.service.CouponService;
import cn.freemud.service.active.ActiveFactory;
import cn.freemud.service.active.ActiveService;
import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.impl.CouponServiceImpl;
import cn.freemud.service.impl.calculate.promotion.GiftSharingService;
import cn.freemud.service.thirdparty.CalculationClient;
import cn.freemud.utils.PropertyConvertUtil;
......@@ -65,8 +66,6 @@ public class CalculationSharingDiscountService {
@Autowired
private ActiveFactory activeFactory;
@Autowired
private GiftSharingService giftSharingService;
public CalculationSharingDiscountResponseDto.CalculationDiscountResult getCalculationSharingDiscountResult(String menuType
, String partnerId
......
package cn.freemud.service.impl.calculate;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.GetMemberCouponListRequestDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
......@@ -8,6 +9,7 @@ import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CouponStatus;
import cn.freemud.service.impl.calculate.promotion.*;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import lombok.extern.slf4j.Slf4j;
......@@ -80,7 +82,8 @@ public class CalculationSharingEquallyService {
/**
* 商品券\换购券
*/
promotionSharingService.equally(discountResult, cartGoodsList);
promotionSharingService.equally(discountResult, cartGoodsList, couponPromotionVO);
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getProducts()) ? new ArrayList<>() : shoppingCartGoodsDto.getProducts();
shoppingCartGoodsDto.setProducts(cartGoodsDetailDtoList);
......
......@@ -2,12 +2,17 @@ package cn.freemud.service.impl.calculate.promotion;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.GetMemberCouponListRequestDto;
import cn.freemud.entities.dto.GetMemberCouponListResponseDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.CouponFlag;
import cn.freemud.enums.CouponStatus;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
......@@ -51,7 +56,7 @@ public class CouponSharingService {
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, CouponPromotionVO couponPromotionVO
,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, String userId, String partnerId, String storeId) {
,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, String userId, String partnerId, String storeId, Integer orderType) {
// 用户选择了查询优惠券信息
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())) {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> (StringUtils.isNotBlank(k.getCouponCode()) || k.getCartGoodsUid()
......@@ -127,6 +132,18 @@ public class CouponSharingService {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
}
List<String> validCouponCodeLis = new ArrayList<>();
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())){
validCouponCodeLis = shoppingCartGoodsResponseVo.getAvailableCoupon().getUsableCoupons().stream().map(ActivityCouponBean::getCouponCode).collect(Collectors.toList());
} else {
couponPromotionVO = new CouponPromotionVO();
couponPromotionVO.setUserId(userId);
couponPromotionVO.setStoreId(storeId);
couponPromotionVO.setPartnerId(partnerId);
couponPromotionVO.setOrderType(orderType);
}
couponService.checkValidCoupon(couponPromotionVO, validCouponCodeLis, spqIdToCartUuid, couponCode, cartGoodsList);
// 计算优惠信息时,已将券校验过,放在map中
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto;
......@@ -175,7 +192,7 @@ public class CouponSharingService {
}
public void equally(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList) {
, List<CartGoods> cartGoodsList, CouponPromotionVO couponPromotionVO) {
if (CollectionUtils.isEmpty(cartGoodsList)) {
return;
......@@ -189,8 +206,15 @@ public class CouponSharingService {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
}
List<String> validCouponCodeLis = new ArrayList<>();
// 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = discountResult == null ? new HashMap<>() : discountResult.getValidCouponMap();
Map<String, List<String>> spqIdToCartUuid = discountResult == null ? new HashMap<>() : discountResult.getSpqIdToCartUuid();
couponPromotionVO.setFlg(0);
couponService.checkValidCoupon(couponPromotionVO, validCouponCodeLis, spqIdToCartUuid, couponCode, cartGoodsList);
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto;
if(useCoupon){
......
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