Commit f5544531 by 胡敬轩

Merge remote-tracking branch 'remotes/origin/feature/20210913-华莱士新算价互斥同享改版'

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/adapter/ActivityAdapter.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartMallServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/calculate/CalculationSharingDiscountService.java
parents 750b3422 e23c13a4
...@@ -15,8 +15,8 @@ package cn.freemud.adapter; ...@@ -15,8 +15,8 @@ package cn.freemud.adapter;
import cn.freemud.base.constant.Version; import cn.freemud.base.constant.Version;
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.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto; import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.calculate.ActivityTypeSharedExclusive;
import cn.freemud.entities.dto.order.CreateOrderDto; import cn.freemud.entities.dto.order.CreateOrderDto;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.PremiumExchangeResponseVo; import cn.freemud.entities.vo.PremiumExchangeResponseVo;
...@@ -30,13 +30,12 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1; ...@@ -30,13 +30,12 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductDiscountV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductDiscountV1;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.tuple.Triple;
import org.springframework.beans.BeanUtils;
import org.springframework.data.util.Pair; import org.springframework.data.util.Pair;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component @Component
...@@ -358,6 +357,11 @@ public class ActivityAdapter { ...@@ -358,6 +357,11 @@ public class ActivityAdapter {
// Long sendDiscountAmount = 0L;//赠送和换购商品优惠不算在内 // Long sendDiscountAmount = 0L;//赠送和换购商品优惠不算在内
// Long sendRealAmount = 0L;//赠送和换购商品实付不算在内 // Long sendRealAmount = 0L;//赠送和换购商品实付不算在内
if(discountResult!=null){ if(discountResult!=null){
boolean newCalculation = CollectionUtils.isNotEmpty(discountResult.getCouponSharedExclusive());
if(newCalculation){
couponAvailableCartInfo.setNewCalculation(newCalculation);
buildOrderDiscount(couponAvailableCartInfo,discountResult.getDiscounts(),discountResult.getCouponSharedExclusive());
}
//已使用券 //已使用券
if(CollectionUtils.isNotEmpty(discountResult.getDiscounts())){ if(CollectionUtils.isNotEmpty(discountResult.getDiscounts())){
List<String> couponCodes = discountResult.getDiscounts().stream().filter(discount -> Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_3.getCode()) List<String> couponCodes = discountResult.getDiscounts().stream().filter(discount -> Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_3.getCode())
...@@ -374,7 +378,7 @@ public class ActivityAdapter { ...@@ -374,7 +378,7 @@ public class ActivityAdapter {
List<CartProduct> goods = new ArrayList<>(); List<CartProduct> goods = new ArrayList<>();
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods discountGood : discountResult.getGoods()){ for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods discountGood : discountResult.getGoods()){
//小料和可选搭配金额 //小料和可选搭配金额
Pair<Long,Long> pair = getSmallMaterialAmountSharing(discountGood.getSmallMaterial());//value1=总实付 value2=总优惠 Triple<Long,Long,Long> triple = getSmallMaterialAmountSharing(discountGood.getSmallMaterial());//value1=总实付 value2=总优惠 value3=单个主商品下总原价
if(Objects.equals(CalculationGoodsType.TYPE_1.getType(),discountGood.getCartGoodType()) || Objects.equals(CalculationGoodsType.TYPE_2.getType(),discountGood.getCartGoodType())){ if(Objects.equals(CalculationGoodsType.TYPE_1.getType(),discountGood.getCartGoodType()) || Objects.equals(CalculationGoodsType.TYPE_2.getType(),discountGood.getCartGoodType())){
// sendRealAmount += discountGood.getRealAmount() + pair.getFirst(); // sendRealAmount += discountGood.getRealAmount() + pair.getFirst();
// sendDiscountAmount += discountGood.getDiscountAmount() + pair.getSecond(); // sendDiscountAmount += discountGood.getDiscountAmount() + pair.getSecond();
...@@ -383,6 +387,7 @@ public class ActivityAdapter { ...@@ -383,6 +387,7 @@ public class ActivityAdapter {
CartProduct cartProduct = new CartProduct(); CartProduct cartProduct = new CartProduct();
cartProduct.setProductId(discountGood.getGoodsId()); cartProduct.setProductId(discountGood.getGoodsId());
cartProduct.setQuantity(discountGood.getGoodsQuantity()); cartProduct.setQuantity(discountGood.getGoodsQuantity());
cartProduct.setOriginalPrice(discountGood.getOriginalPrice()+triple.getRight());
Long mealDiscountAmount = 0L;//套餐优惠不算在内 Long mealDiscountAmount = 0L;//套餐优惠不算在内
if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){ if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){
...@@ -395,9 +400,12 @@ public class ActivityAdapter { ...@@ -395,9 +400,12 @@ public class ActivityAdapter {
mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum(); mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum();
} }
cartProduct.setOriginalTotalAmount(discountGood.getRealAmount()+discountGood.getDiscountAmount() + pair.getFirst() + pair.getSecond() - mealDiscountAmount); cartProduct.setOriginalTotalAmount(discountGood.getRealAmount()+discountGood.getDiscountAmount() + triple.getLeft() + triple.getMiddle() - mealDiscountAmount);
cartProduct.setRealAmount(discountGood.getRealAmount() + pair.getFirst()); cartProduct.setRealAmount(discountGood.getRealAmount() + triple.getLeft());
cartProduct.setDiscountAmount(discountGood.getDiscountAmount()+pair.getSecond() - mealDiscountAmount); cartProduct.setDiscountAmount(discountGood.getDiscountAmount()+triple.getMiddle() - mealDiscountAmount);
if(newCalculation){
buildGoodDiscount(cartProduct,discountGood,discountResult.getCouponSharedExclusive());
}
goods.add(cartProduct); goods.add(cartProduct);
} }
couponAvailableCartInfo.setProductList(goods); couponAvailableCartInfo.setProductList(goods);
...@@ -481,16 +489,18 @@ public class ActivityAdapter { ...@@ -481,16 +489,18 @@ public class ActivityAdapter {
return couponAvailableCartInfo; return couponAvailableCartInfo;
} }
private Pair<Long,Long> getSmallMaterialAmountSharing(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> smallMaterial){ private Triple<Long,Long,Long> getSmallMaterialAmountSharing(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> smallMaterial){
long realAmount = 0; long realAmount = 0;
long discountAmount = 0; long discountAmount = 0;
long originalPrice = 0;
if(org.apache.commons.collections.CollectionUtils.isNotEmpty(smallMaterial)){ if(org.apache.commons.collections.CollectionUtils.isNotEmpty(smallMaterial)){
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial small :smallMaterial){ for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial small :smallMaterial){
realAmount += small.getRealAmount(); realAmount += small.getRealAmount();
discountAmount += small.getDiscountAmount(); discountAmount += small.getDiscountAmount();
originalPrice += small.getOriginalPrice() * small.getGoodsQuantity();
} }
} }
return Pair.of(realAmount,discountAmount); return Triple.of(realAmount,discountAmount,originalPrice);
} }
private Pair<Long,Long> getSmallMaterialAmount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> smallMaterial){ private Pair<Long,Long> getSmallMaterialAmount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> smallMaterial){
long realAmount = 0; long realAmount = 0;
...@@ -503,4 +513,121 @@ public class ActivityAdapter { ...@@ -503,4 +513,121 @@ public class ActivityAdapter {
} }
return Pair.of(realAmount,discountAmount); return Pair.of(realAmount,discountAmount);
} }
private void buildGoodDiscount(CartProduct cartProduct, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods discountGood, Set<ActivityTypeSharedExclusive> couponSharedExclusive){
if(CollectionUtils.isEmpty(discountGood.getDiscounts())){
return;
}
HashMap<Integer,Integer> cashExclusiveMap = new HashMap<>();
HashMap<Integer,Integer> cashMultipleMap = new HashMap<>();
HashMap<Integer,Integer> discountExclusiveMap = new HashMap<>();
HashMap<Integer,Integer> discountMultipleMap = new HashMap<>();
for(ActivityTypeSharedExclusive sharedExclusive : couponSharedExclusive){
if(Objects.equals(sharedExclusive.getActivityType(),ActivityTypeEnum.TYPE_3.getCode())){
cashExclusiveMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getSharedExclusive());
cashMultipleMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getMultiple());
}
if(Objects.equals(sharedExclusive.getActivityType(),ActivityTypeEnum.TYPE_31.getCode())){
discountExclusiveMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getSharedExclusive());
discountMultipleMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getMultiple());
}
}
List<CartProduct.Discount> cartProductDiscountList = new ArrayList<>();
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount : discountGood.getDiscounts()){
if(Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_310.getCode())){
continue;
}
CartProduct.Discount cartProductDiscount = new CartProduct.Discount();
BeanUtils.copyProperties(discount,cartProductDiscount);
cartProductDiscount.setActualGoodsNumber(discount.getAddOnQuantity());
//小料或者可选搭配的优惠金额合并至主商品
long smallDiscountAmount = getSmallActivityDiscountAmount(discountGood.getSmallMaterial(),discount.getType());
cartProductDiscount.setDiscount(cartProductDiscount.getDiscount() + smallDiscountAmount);
//是否与代金券互斥
boolean cashExclusive = Objects.equals(cashExclusiveMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setCashExclusive(cashExclusive);
//是否与代金券叠加门槛
boolean cashMultiple = !Objects.equals(cashMultipleMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setCashMultiple(cashMultiple);
//是否与折扣券互斥
boolean discountExclusive = Objects.equals(discountExclusiveMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setDiscountExclusive(discountExclusive);
//是否与折扣券叠加门槛
boolean discountMultiple = !Objects.equals(discountMultipleMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setDiscountMultiple(discountMultiple);
cartProductDiscountList.add(cartProductDiscount);
}
cartProduct.setDiscounts(cartProductDiscountList);
}
private void buildOrderDiscount(CouponAvailableCartInfo couponAvailableCartInfo,List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discounts, Set<ActivityTypeSharedExclusive> couponSharedExclusive){
if(CollectionUtils.isEmpty(discounts)){
return;
}
HashMap<Integer,Integer> cashExclusiveMap = new HashMap<>();
HashMap<Integer,Integer> cashMultipleMap = new HashMap<>();
HashMap<Integer,Integer> discountExclusiveMap = new HashMap<>();
HashMap<Integer,Integer> discountMultipleMap = new HashMap<>();
for(ActivityTypeSharedExclusive sharedExclusive : couponSharedExclusive){
if(Objects.equals(sharedExclusive.getActivityType(),ActivityTypeEnum.TYPE_3.getCode())){
cashExclusiveMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getSharedExclusive());
cashMultipleMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getMultiple());
}
if(Objects.equals(sharedExclusive.getActivityType(),ActivityTypeEnum.TYPE_31.getCode())){
discountExclusiveMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getSharedExclusive());
discountMultipleMap.put(sharedExclusive.getSharedExclusiveActivityType(),sharedExclusive.getMultiple());
}
}
List<CouponAvailableCartInfo.Discount> cartDiscountList = new ArrayList<>();
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discount : discounts){
if(Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_310.getCode())){
continue;
}
CouponAvailableCartInfo.Discount cartProductDiscount = new CouponAvailableCartInfo.Discount();
BeanUtils.copyProperties(discount,cartProductDiscount);
//是否与代金券互斥
boolean cashExclusive = Objects.equals(cashExclusiveMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setCashExclusive(cashExclusive);
//是否与代金券叠加门槛
boolean cashMultiple = !Objects.equals(cashMultipleMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setCashMultiple(cashMultiple);
//是否与折扣券互斥
boolean discountExclusive = Objects.equals(discountExclusiveMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setDiscountExclusive(discountExclusive);
//是否与折扣券叠加门槛
boolean discountMultiple = !Objects.equals(discountMultipleMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setDiscountMultiple(discountMultiple);
cartDiscountList.add(cartProductDiscount);
}
couponAvailableCartInfo.setDiscounts(cartDiscountList);
}
private Long getSmallActivityDiscountAmount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> smallMaterial,Integer activityType){
long discountAmount = 0;
if(org.apache.commons.collections.CollectionUtils.isNotEmpty(smallMaterial)){
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial small :smallMaterial){
if(CollectionUtils.isNotEmpty(small.getDiscounts())){
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount smallDiscount :small.getDiscounts()){
if(Objects.equals(smallDiscount.getType(),activityType)){
discountAmount += smallDiscount.getDiscount();
}
}
}
}
}
return discountAmount;
}
} }
package cn.freemud.entities.dto.activity;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.com
*
* @version V1.0
* @Title:
* @Package: cn.freemud.entities.dto.activity
* @Descripttion:
* @author: shuhu.hou
* @date: 2019/7/11
* @Copyright: 2017 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目.
*/
@Data
public class DiscountSharingDto {
//当前请求是否自动勾选优惠券
private Boolean autoCoupon;
}
...@@ -84,6 +84,9 @@ public class ActivityCalculationDiscountRequestDto { ...@@ -84,6 +84,9 @@ public class ActivityCalculationDiscountRequestDto {
*/ */
private Boolean isMember; private Boolean isMember;
//当前请求是否自动勾选优惠券
private Boolean autoCoupon;
@Data @Data
public static class CalculationDiscountCoupon { public static class CalculationDiscountCoupon {
/** /**
......
...@@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; ...@@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
@Data @Data
public class ActivityCalculationDiscountResponseDto { public class ActivityCalculationDiscountResponseDto {
...@@ -126,7 +127,10 @@ public class ActivityCalculationDiscountResponseDto { ...@@ -126,7 +127,10 @@ public class ActivityCalculationDiscountResponseDto {
*/ */
private MonthCardDiscount monthlyEnjoyCardDiscount; private MonthCardDiscount monthlyEnjoyCardDiscount;
/**
* 代金券和折扣券与活动的互斥共享关系(可用优惠券列表使用)
*/
private Set<ActivityTypeSharedExclusive> couponSharedExclusive;
...@@ -353,6 +357,9 @@ public class ActivityCalculationDiscountResponseDto { ...@@ -353,6 +357,9 @@ public class ActivityCalculationDiscountResponseDto {
* 优惠现单价 * 优惠现单价
*/ */
private Long signleDiscount; private Long signleDiscount;
//活动覆盖商品数量,比如第二件实际优惠一件,但是两件商品都算活动叠加数量
private Integer addOnQuantity = 0;
} }
/** /**
......
package cn.freemud.entities.dto.calculate;
import lombok.Data;
import java.io.Serializable;
@Data
public class ActivityTypeSharedExclusive implements Serializable {
/**
* 活动类型
*/
private Integer activityType;
/**
* 共享或排他活动类型
*/
private Integer sharedExclusiveActivityType;
/**
* 0:排他 1:共享
*/
private Integer sharedExclusive;
/**
* 商品数量和金额门槛是否叠加 0:不叠加,1:叠加
*/
private Integer multiple;
}
\ No newline at end of file
...@@ -2,6 +2,8 @@ package cn.freemud.entities.vo.coupon; ...@@ -2,6 +2,8 @@ package cn.freemud.entities.vo.coupon;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -19,6 +21,10 @@ public class CartProduct { ...@@ -19,6 +21,10 @@ public class CartProduct {
*/ */
private String productId; private String productId;
/** /**
* 商品原价(分)
*/
private Long originalPrice;
/**
* 总原价金额(包括主商品+可选搭配+加料商品) * 总原价金额(包括主商品+可选搭配+加料商品)
*/ */
private Long originalTotalAmount; private Long originalTotalAmount;
...@@ -36,4 +42,47 @@ public class CartProduct { ...@@ -36,4 +42,47 @@ public class CartProduct {
//使用的商品券号 //使用的商品券号
private String couponCode; private String couponCode;
private List<Discount> discounts;
@Data
public static class Discount{
/**
* 活动号
*/
private String activityCode;
/**
* 活动名称
*/
private String activityName;
/**
* 折扣金额
*/
private Long discount;
/**
* 活动类型
*/
private Integer type;
/**
* 当前活动实际优惠的商品数量
*/
private Integer actualGoodsNumber;
//是否与代金券互斥
private boolean cashExclusive = false;
//是否与代金券叠加门槛
private boolean cashMultiple = true;
//是否与折扣券互斥
private boolean discountExclusive = false;
//是否与折扣券叠加门槛
private boolean discountMultiple = true;
}
} }
...@@ -55,4 +55,54 @@ public class CouponAvailableCartInfo { ...@@ -55,4 +55,54 @@ public class CouponAvailableCartInfo {
* 优惠后 配送费 * 优惠后 配送费
*/ */
private Long distributionFee; private Long distributionFee;
/**
* 是否是新版互斥同享算价
*/
private boolean newCalculation = false;
//活动总优惠 newCalculation=true时封装
private List<Discount> discounts;
@Data
public static class Discount{
/**
* 活动号
*/
private String activityCode;
/**
* 活动名称
*/
private String activityName;
/**
* 折扣金额
*/
private Long discount;
/**
* 活动类型
*/
private Integer type;
/**
* 当前活动实际优惠的商品数量
*/
private Integer actualGoodsNumber;
//是否与代金券互斥
private boolean cashExclusive = false;
//是否与代金券叠加门槛
private boolean cashMultiple = true;
//是否与折扣券互斥
private boolean discountExclusive = false;
//是否与折扣券叠加门槛
private boolean discountMultiple = true;
}
} }
...@@ -18,8 +18,12 @@ import cn.freemud.adapter.ShoppingCartConvertAdapter; ...@@ -18,8 +18,12 @@ import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.ShoppingCartConstant; import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.BuriedPointShoppingCartRequestDto;
import cn.freemud.entities.dto.GetProductStockRequestDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.DiscountSharingDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto; import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto; import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.delivery.DeliveryFeeInfo; import cn.freemud.entities.dto.delivery.DeliveryFeeInfo;
...@@ -190,7 +194,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService { ...@@ -190,7 +194,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, addShoppingCartGoodsRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, addShoppingCartGoodsRequestVo.getOrderType());
ActivityCalculationDiscountResponseDto.CalculationDiscountResult discountResult = null; ActivityCalculationDiscountResponseDto.CalculationDiscountResult discountResult = null;
discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType, partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), allCartGoodsList, new ArrayList<>(), null, deliveryAmount, null,null, accountType); discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType, partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), allCartGoodsList, new ArrayList<>(), null, deliveryAmount, null,null, accountType,new DiscountSharingDto());
sharingCartService.distribute(discountResult, allCartGoodsList, shoppingCartGoodsResponseVo, null, null, null, activityQueryDto, menuType, deliveryAmount, ShoppingCartConstant.ADD_AND_UPDATE, partnerId, null, userId, storeId); sharingCartService.distribute(discountResult, allCartGoodsList, shoppingCartGoodsResponseVo, null, null, null, activityQueryDto, menuType, deliveryAmount, ShoppingCartConstant.ADD_AND_UPDATE, partnerId, null, userId, storeId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId); buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
...@@ -285,7 +289,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService { ...@@ -285,7 +289,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
, new ArrayList() //券 , new ArrayList() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount
, null,null, accountFlag); , null,null, accountFlag,new DiscountSharingDto());
sharingCartService.distribute(discountResult sharingCartService.distribute(discountResult
, cartGoodsList , cartGoodsList
...@@ -444,7 +448,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService { ...@@ -444,7 +448,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
, coupons , coupons
, sendGoods , sendGoods
, deliveryAmount , deliveryAmount
, null,null, accountFlag); , null,null, accountFlag,new DiscountSharingDto());
sharingCartService.distribute(calculationSharingDiscountResult sharingCartService.distribute(calculationSharingDiscountResult
, cartGoodsList , cartGoodsList
, shoppingCartGoodsResponseVo , shoppingCartGoodsResponseVo
...@@ -602,7 +606,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService { ...@@ -602,7 +606,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
, coupons , coupons
, shoppingCartInfoRequestVo.getSendGoods() , shoppingCartInfoRequestVo.getSendGoods()
, deliveryAmount , deliveryAmount
, shoppingCartInfoRequestVo,null, accountFlag); , shoppingCartInfoRequestVo,null, accountFlag,new DiscountSharingDto());
// 活动校验 // 活动校验
calculationSharingValidatorService.validator(discountResult calculationSharingValidatorService.validator(discountResult
......
...@@ -26,6 +26,7 @@ import cn.freemud.entities.dto.*; ...@@ -26,6 +26,7 @@ import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean; import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto; import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.activity.DiscountSharingDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto; import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto; import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto; import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto;
...@@ -382,7 +383,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -382,7 +383,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, new ArrayList<>() //券 , new ArrayList<>() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount
, null,bizType, accountFlag); , null,bizType, accountFlag,new DiscountSharingDto());
//更新购物车券状态 //更新购物车券状态
newCalculationUpdateCouponStatus(userId, partnerId, storeId, bizType, cartGoods, allCartGoodsList, discountResult); newCalculationUpdateCouponStatus(userId, partnerId, storeId, bizType, cartGoods, allCartGoodsList, discountResult);
sharingCartService.distribute(discountResult sharingCartService.distribute(discountResult
...@@ -541,7 +542,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -541,7 +542,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, new ArrayList() //券 , new ArrayList() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount
, null,bizType, accountFlag); , null,bizType, accountFlag,new DiscountSharingDto());
//校验加购数量 //校验加购数量
if (discountResult != null) { if (discountResult != null) {
sendGoodsQtyCheckForUpdate(cartGoodsList, oldQty, appId, partnerId, userId, storeId, cartGoodsUid, "", shoppingCartBaseService, discountResult.getSendGoods(),bizType); sendGoodsQtyCheckForUpdate(cartGoodsList, oldQty, appId, partnerId, userId, storeId, cartGoodsUid, "", shoppingCartBaseService, discountResult.getSendGoods(),bizType);
...@@ -782,7 +783,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -782,7 +783,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, sendGoods , sendGoods
, deliveryAmount , deliveryAmount
, null , null
,bizType, accountFlag); ,bizType, accountFlag,new DiscountSharingDto());
sharingCartService.distribute(calculationSharingDiscountResult sharingCartService.distribute(calculationSharingDiscountResult
, cartGoodsList , cartGoodsList
, shoppingCartGoodsResponseVo , shoppingCartGoodsResponseVo
...@@ -1162,7 +1163,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1162,7 +1163,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, coupons , coupons
, shoppingCartInfoRequestVo.getSendGoods() , shoppingCartInfoRequestVo.getSendGoods()
, deliveryAmount , deliveryAmount
, shoppingCartInfoRequestVo,bizType, accountFlag); , shoppingCartInfoRequestVo,bizType, accountFlag,new DiscountSharingDto());
// 活动校验 // 活动校验
calculationSharingValidatorService.validator(discountResult calculationSharingValidatorService.validator(discountResult
...@@ -1503,8 +1504,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1503,8 +1504,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} else { } else {
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null; CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
// fisherman 删除商品券导致 购物车显示商品名称 为换购券 券名称
boolean viewProductName = false;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType()) if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())
|| GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) { || GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
viewProductName = true;
checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId()); checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else { } else {
checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto); checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto);
...@@ -1530,8 +1534,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1530,8 +1534,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
uuidList.add(cartGoods.getCartGoodsUid()); uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList); spqIdToCartUuid.put(couponCode, uuidList);
} }
if (viewProductName) {
cartGoods.setName(checkSpqInfoResponseDto.getSkuName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSkuName());
cartGoods.setSkuName(checkSpqInfoResponseDto.getSkuName());
}else {
cartGoods.setName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
}
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit()); cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
cartGoods.setName(checkSpqInfoResponseDto.getSkuName()); cartGoods.setName(checkSpqInfoResponseDto.getSkuName());
...@@ -3045,7 +3055,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -3045,7 +3055,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, coupons //券 , coupons //券
, null //加价购商品 , null //加价购商品
, 0L , 0L
, null,bizType, accountFlag); , null,bizType, accountFlag,new DiscountSharingDto());
premiumExchangeResponseVo = activityAdapter.convert2PremiumExchangeSharing(discountResult); premiumExchangeResponseVo = activityAdapter.convert2PremiumExchangeSharing(discountResult);
} else { } else {
...@@ -3200,6 +3210,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -3200,6 +3210,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 获取购物车商品 // 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCartForCoupon(partnerId, requestVo.getStoreId(), userId, "", shoppingCartBaseService,bizType); List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCartForCoupon(partnerId, requestVo.getStoreId(), userId, "", shoppingCartBaseService,bizType);
if (grayPush(partnerId, storeId, "2")) { if (grayPush(partnerId, storeId, "2")) {
//此对象用于传递参数,省的一直增加方法参数个数
DiscountSharingDto sharingDto = new DiscountSharingDto();
sharingDto.setAutoCoupon(true);
ActivityCalculationDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType ActivityCalculationDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
, partnerId , partnerId
, storeId , storeId
...@@ -3211,7 +3224,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -3211,7 +3224,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, new ArrayList<>() //券 , new ArrayList<>() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount
, null,bizType, accountFlag); , null,bizType, accountFlag,sharingDto);
couponAvailableCartInfo = activityAdapter.convert2CouponAvailableCartInfoSharing(partnerId, storeId, discountResult, orgCodes); couponAvailableCartInfo = activityAdapter.convert2CouponAvailableCartInfoSharing(partnerId, storeId, discountResult, orgCodes);
} else { } else {
......
...@@ -705,7 +705,9 @@ public class CalculationCommonService { ...@@ -705,7 +705,9 @@ public class CalculationCommonService {
uid = goods.getCartGoodsUid(); uid = goods.getCartGoodsUid();
} }
} }
if(StringUtils.isNotBlank(toastMsg)){
shoppingCartGoodsResponseVo.setToastMsg(toastMsg); shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
}
shoppingCartGoodsResponseVo.setUid(uid); shoppingCartGoodsResponseVo.setUid(uid);
} }
......
package cn.freemud.service.impl.calculate; package cn.freemud.service.impl.calculate;
import cn.freemud.base.util.JsonUtil;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.CheckSpqInfoRequestDto; import cn.freemud.entities.dto.CheckSpqInfoRequestDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto; import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
...@@ -22,7 +21,7 @@ import cn.freemud.service.active.ActiveService; ...@@ -22,7 +21,7 @@ import cn.freemud.service.active.ActiveService;
import cn.freemud.service.impl.AssortmentSdkService; import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.thirdparty.ActivityClient; import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.utils.PropertyConvertUtil; import cn.freemud.utils.PropertyConvertUtil;
import com.freemud.application.sdk.api.log.ErrorLog; import cn.freemud.entities.dto.activity.DiscountSharingDto;
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.enums.BusinessTypeEnum; import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
...@@ -83,7 +82,7 @@ public class CalculationSharingDiscountService { ...@@ -83,7 +82,7 @@ public class CalculationSharingDiscountService {
, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons , List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons
, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList , List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList
, Long deliveryAmount , Long deliveryAmount
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,Integer bizType, Integer accountFlag) { , ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,Integer bizType, Integer accountFlag, DiscountSharingDto sharingDto) {
ActivityCalculationDiscountRequestDto calculationSharingDiscountRequestDto = this.commonSharingDto(partnerId, storeId, userId, appId, orderType); ActivityCalculationDiscountRequestDto calculationSharingDiscountRequestDto = this.commonSharingDto(partnerId, storeId, userId, appId, orderType);
...@@ -114,9 +113,11 @@ public class CalculationSharingDiscountService { ...@@ -114,9 +113,11 @@ public class CalculationSharingDiscountService {
//商品券->商品券ID换取商品 //商品券->商品券ID换取商品
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfo = null; CheckSpqInfoResponseDto checkSpqInfo = null;
boolean viewProductName = false;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType()) if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())
|| GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) { || GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId()); checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
viewProductName = true;
} else { } else {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto); checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto);
} }
...@@ -143,8 +144,14 @@ public class CalculationSharingDiscountService { ...@@ -143,8 +144,14 @@ public class CalculationSharingDiscountService {
uuidList.add(cartGoods.getCartGoodsUid()); uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList); spqIdToCartUuid.put(couponCode, uuidList);
} }
if (viewProductName) {
cartGoods.setName(checkSpqInfo.getSkuName());
cartGoods.setSpuName(checkSpqInfo.getSkuName());
cartGoods.setSkuName(checkSpqInfo.getSkuName());
}else {
cartGoods.setName(checkSpqInfo.getCouponName()); cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName()); cartGoods.setSpuName(checkSpqInfo.getCouponName());
}
cartGoods.setStockLimit(checkSpqInfo.isStockLimit()); cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
//买M送N券不赋值券名称 //买M送N券不赋值券名称
if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
...@@ -209,6 +216,9 @@ public class CalculationSharingDiscountService { ...@@ -209,6 +216,9 @@ public class CalculationSharingDiscountService {
// 构建买一送一寄杯活动用户选择信息 // 构建买一送一寄杯活动用户选择信息
ActiveService activeService = activeFactory.getBuildChooseGoodsService(partnerId); ActiveService activeService = activeFactory.getBuildChooseGoodsService(partnerId);
activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto, shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods()); activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto, shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods());
if(sharingDto != null){
calculationSharingDiscountRequestDto.setAutoCoupon(sharingDto.getAutoCoupon());
}
//算价 //算价
ActivityCalculationDiscountResponseDto sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto); ActivityCalculationDiscountResponseDto sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto);
if(sharingDiscountResponseDto == null){ if(sharingDiscountResponseDto == null){
......
...@@ -8,6 +8,8 @@ import cn.freemud.enums.AvailableCouponQueryFlagEnum; ...@@ -8,6 +8,8 @@ import cn.freemud.enums.AvailableCouponQueryFlagEnum;
import cn.freemud.enums.GoodsTypeEnum; import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.service.CouponService; import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService; import cn.freemud.service.impl.AssortmentSdkService;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.ApiLog;
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.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
...@@ -128,7 +130,7 @@ public class CouponSharingService { ...@@ -128,7 +130,7 @@ public class CouponSharingService {
} }
} }
} }
ApiLog.printLog("优惠券问题处理 fisherman-------->", JSON.toJSONString(cartGoodsList),JSON.toJSONString(validCouponMap),JSON.toJSONString(calculationDiscountResult));
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) { if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
......
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