Commit fca33b94 by 胡敬轩

券码可用券列表查询->购物车->促销新算价

parent 835acc81
...@@ -13,101 +13,28 @@ ...@@ -13,101 +13,28 @@
package cn.freemud.adapter; 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.ActivityCancelStockRequestDto;
import cn.freemud.entities.dto.CouponCodeVerificationProductDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
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.order.CreateOrderDto; import cn.freemud.entities.dto.calculate.ActivityTypeSharedExclusive;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.PremiumExchangeResponseVo; import cn.freemud.entities.vo.PremiumExchangeResponseVo;
import cn.freemud.entities.vo.coupon.CartProduct; import cn.freemud.entities.vo.coupon.CartProduct;
import cn.freemud.entities.vo.coupon.CouponAvailableCartInfo; import cn.freemud.entities.vo.coupon.CouponAvailableCartInfo;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.utils.PropertyConvertUtil;
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.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
public class ActivityAdapter { public class ActivityAdapter {
/**
* 扣减库存数量
*/
private static final int STACK_SUB = 1;
public ActivityQueryRequestDto convert2ActivityQueryRequestDto(CreateOrderVo createOrderVo) {
if (createOrderVo == null || createOrderVo.getPremiumExchangeActivity() == null
|| CollectionUtils.isEmpty(createOrderVo.getPremiumExchangeActivity().getProducts())) {
return null;
}
ActivityQueryRequestDto activityQueryRequestDto = new ActivityQueryRequestDto();
activityQueryRequestDto.setVer(Version.VERSION_1);
activityQueryRequestDto.setPartnerCode(createOrderVo.getPartnerId());
activityQueryRequestDto.setStoreId(createOrderVo.getShopId());
activityQueryRequestDto.setActivityType(ActivityTypeEnum.TYPE_81.getCode());
List<ActivityQueryRequestDto.QueryGoodsBeanDto> goodsBeanDtoList = new ArrayList<>();
for (CreateOrderVo.PremiumExchangeActivity.Product skuProduct : createOrderVo.getPremiumExchangeActivity().getProducts()) {
ActivityQueryRequestDto.QueryGoodsBeanDto queryGoodsBeanDto = new ActivityQueryRequestDto.QueryGoodsBeanDto(skuProduct.getSkuId(),
skuProduct.getQty(),
skuProduct.getOriginalPrice());
goodsBeanDtoList.add(queryGoodsBeanDto);
}
activityQueryRequestDto.setGoods(goodsBeanDtoList);
return activityQueryRequestDto;
}
public ActivityCalculationDiscountRequestDto convert2ActivityCalculationDiscountRequestDto(ShoppingCartInfoDto shoppingCartInfoDto
, String partnerCode, String storeId, String appid, Integer orderType, CouponListResponseDto.CouponBean couponBean, Long promotionAmount) {
if (shoppingCartInfoDto == null || CollectionUtils.isEmpty(shoppingCartInfoDto.getData())) {
return null;
}
ActivityCalculationDiscountRequestDto result = new ActivityCalculationDiscountRequestDto();
result.setVer(Integer.valueOf(Version.VERSION_1));
result.setPartnerCode(partnerCode);
result.setStoreId(storeId);
ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeConvert2ActivityChannel(orderType);
if(!Objects.isNull(activityChannelEnum)) {
result.setChannel(activityChannelEnum.getCode());
}
result.setAppId(appid);
result.setIsShowActivities(1);
result.setIsShowGoodsActivity(1);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> goods = new ArrayList<>();
// TODO 暂时指定成一个商品,后期优化
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId("1");
calculationDiscountGoods.setCategory("1");
calculationDiscountGoods.setGoodsQuantity(1);
Long amount = 0L;
if (shoppingCartInfoDto.getAmount() != null) {
amount = shoppingCartInfoDto.getAmount();
}
Long packAmount = 0L;
// 外卖才有打包费
if (shoppingCartInfoDto.getPackAmount() != null && Objects.equals(CreateOrderType.TAKE_OUT.getCode(), orderType)) {
packAmount = shoppingCartInfoDto.getPackAmount();
}
Long couponAmount = 0L;
if (couponBean != null && couponBean.getDiscountAmount() != null) {
couponAmount = Long.valueOf(couponBean.getDiscountAmount());
}
if (promotionAmount == null) {
promotionAmount = 0L;
}
calculationDiscountGoods.setOriginalPrice(amount + packAmount - couponAmount - promotionAmount);
goods.add(calculationDiscountGoods);
result.setGoods(goods);
return result;
}
public PremiumExchangeResponseVo convert2PremiumExchange(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) { public PremiumExchangeResponseVo convert2PremiumExchange(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
// 返回构造对象 // 返回构造对象
PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo(); PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo();
...@@ -161,59 +88,6 @@ public class ActivityAdapter { ...@@ -161,59 +88,6 @@ public class ActivityAdapter {
return premiumExchangeResponseVo; return premiumExchangeResponseVo;
} }
public ActivityUpdateStockRequestDto convert2ActivityUpdateStockRequestDto(CreateOrderVo createOrderVo, String orderId, CreateOrderDto createOrderDto) {
ActivityUpdateStockRequestDto activityUpdateStockRequestDto = new ActivityUpdateStockRequestDto();
activityUpdateStockRequestDto.setVer(Version.VERSION_1);
activityUpdateStockRequestDto.setOrderId(orderId);
activityUpdateStockRequestDto.setPartnerCode(createOrderVo.getPartnerId());
activityUpdateStockRequestDto.setStoreId(createOrderVo.getShopId());
List<ActivityUpdateStockRequestDto.StockBeanDto> stock = new ArrayList<>();
// 加价购
if (createOrderVo.getPremiumExchangeActivity() != null && CollectionUtils.isNotEmpty(createOrderVo.getPremiumExchangeActivity().getProducts())) {
ActivityUpdateStockRequestDto.StockBeanDto stockBeanDto = new ActivityUpdateStockRequestDto.StockBeanDto();
stockBeanDto.setActivityCode(createOrderVo.getPremiumExchangeActivity().getActivityCode());
stockBeanDto.setActivityStock(STACK_SUB);
List<ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock> goodsStocks = new ArrayList<>();
createOrderVo.getPremiumExchangeActivity().getProducts().forEach(product -> {
ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock goodsStock = new ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock();
goodsStock.setGoodsId(product.getSkuId());
goodsStock.setStock(product.getQty());
goodsStocks.add(goodsStock);
});
stockBeanDto.setGoodsStock(goodsStocks);
stock.add(stockBeanDto);
}
// 满减活动和限时特价
if (createOrderDto != null && CollectionUtils.isNotEmpty(createOrderDto.getAccounts())) {
createOrderDto.getAccounts().forEach(createOrderAccountDto -> {
if (Objects.equals(createOrderAccountDto.getType(), OrderAccountType.BUY_DISCOUNT.getCode())
|| Objects.equals(createOrderAccountDto.getType(), OrderAccountType.DISCOUNT_AMOUNT.getCode())
|| Objects.equals(createOrderAccountDto.getType(), OrderAccountType.BUYM_SENDN.getCode())) {
ActivityUpdateStockRequestDto.StockBeanDto stockBeanDto = new ActivityUpdateStockRequestDto.StockBeanDto();
stockBeanDto.setActivityCode(createOrderAccountDto.getAccountId());
stockBeanDto.setActivityStock(STACK_SUB);
List<ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock> goodsStocks = new ArrayList<>();
// 满减活动没有商品库存
if (CollectionUtils.isNotEmpty(createOrderAccountDto.getAccountProducts())
&& !Objects.equals(createOrderAccountDto.getType(), OrderAccountType.BUY_DISCOUNT.getCode())
&& !Objects.equals(createOrderAccountDto.getType(), OrderAccountType.BUYM_SENDN.getCode())) {
createOrderAccountDto.getAccountProducts().forEach(createAccountProductDto -> {
ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock goodsStock = new ActivityUpdateStockRequestDto.StockBeanDto.GoodsStock();
goodsStock.setGoodsId(createAccountProductDto.getProductId());
goodsStock.setStock(createAccountProductDto.getDiscountQty());
goodsStocks.add(goodsStock);
});
}
stockBeanDto.setGoodsStock(goodsStocks);
stock.add(stockBeanDto);
}
});
}
activityUpdateStockRequestDto.setStock(stock);
return activityUpdateStockRequestDto;
}
public ActivityCancelStockRequestDto convert2ActivityCancelStockRequestDto(QueryOrdersResponseDto.DataBean.OrderBean orderBean, List<Integer> transType) { public ActivityCancelStockRequestDto convert2ActivityCancelStockRequestDto(QueryOrdersResponseDto.DataBean.OrderBean orderBean, List<Integer> transType) {
ActivityCancelStockRequestDto activityCancelStockRequestDto = new ActivityCancelStockRequestDto(); ActivityCancelStockRequestDto activityCancelStockRequestDto = new ActivityCancelStockRequestDto();
activityCancelStockRequestDto.setVer(Version.VERSION_1); activityCancelStockRequestDto.setVer(Version.VERSION_1);
...@@ -350,6 +224,9 @@ public class ActivityAdapter { ...@@ -350,6 +224,9 @@ public class ActivityAdapter {
couponAvailableCartInfo.setStoreId(storeId); couponAvailableCartInfo.setStoreId(storeId);
couponAvailableCartInfo.setChannelIdList(orgCodes); couponAvailableCartInfo.setChannelIdList(orgCodes);
boolean newCalculation = CollectionUtils.isNotEmpty(discountResult.getCouponSharedExclusive());
couponAvailableCartInfo.setNewCalculation(newCalculation);
Long totalMealDiscountAmount = 0L;//套餐优惠不算在内 Long totalMealDiscountAmount = 0L;//套餐优惠不算在内
// Long sendDiscountAmount = 0L;//赠送和换购商品优惠不算在内 // Long sendDiscountAmount = 0L;//赠送和换购商品优惠不算在内
// Long sendRealAmount = 0L;//赠送和换购商品实付不算在内 // Long sendRealAmount = 0L;//赠送和换购商品实付不算在内
...@@ -394,6 +271,9 @@ public class ActivityAdapter { ...@@ -394,6 +271,9 @@ public class ActivityAdapter {
cartProduct.setOriginalTotalAmount(discountGood.getRealAmount()+discountGood.getDiscountAmount() + pair.getFirst() + pair.getSecond() - mealDiscountAmount); cartProduct.setOriginalTotalAmount(discountGood.getRealAmount()+discountGood.getDiscountAmount() + pair.getFirst() + pair.getSecond() - mealDiscountAmount);
cartProduct.setRealAmount(discountGood.getRealAmount() + pair.getFirst()); cartProduct.setRealAmount(discountGood.getRealAmount() + pair.getFirst());
cartProduct.setDiscountAmount(discountGood.getDiscountAmount()+pair.getSecond() - mealDiscountAmount); cartProduct.setDiscountAmount(discountGood.getDiscountAmount()+pair.getSecond() - mealDiscountAmount);
if(newCalculation){
buildGoodDiscount(cartProduct,discountGood.getDiscounts(),discountResult.getCouponSharedExclusive());
}
goods.add(cartProduct); goods.add(cartProduct);
} }
couponAvailableCartInfo.setProductList(goods); couponAvailableCartInfo.setProductList(goods);
...@@ -499,4 +379,52 @@ public class ActivityAdapter { ...@@ -499,4 +379,52 @@ public class ActivityAdapter {
} }
return Pair.of(realAmount,discountAmount); return Pair.of(realAmount,discountAmount);
} }
private void buildGoodDiscount(CartProduct cartProduct, List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> 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<CartProduct.Discount> cartProductDiscountList = new ArrayList<>();
for(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount : discounts){
if(Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_310.getCode())){
continue;
}
CartProduct.Discount cartProductDiscount = new CartProduct.Discount();
BeanUtils.copyProperties(discount,cartProductDiscount);
//是否与代金券互斥
boolean cashExclusive = Objects.equals(cashExclusiveMap.get(discount.getType()),YesOrNoEnum.YES.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.YES.getCode());
cartProductDiscount.setDiscountExclusive(discountExclusive);
//是否与折扣券叠加门槛
boolean discountMultiple = !Objects.equals(discountMultipleMap.get(discount.getType()),YesOrNoEnum.NO.getCode());
cartProductDiscount.setDiscountMultiple(discountMultiple);
cartProductDiscountList.add(cartProductDiscount);
}
cartProduct.setDiscounts(cartProductDiscountList);
}
} }
...@@ -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;
......
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
* *
...@@ -36,4 +38,47 @@ public class CartProduct { ...@@ -36,4 +38,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,9 @@ public class CouponAvailableCartInfo { ...@@ -55,4 +55,9 @@ public class CouponAvailableCartInfo {
* 优惠后 配送费 * 优惠后 配送费
*/ */
private Long distributionFee; private Long distributionFee;
/**
* 是否是新版互斥同享算价
*/
private boolean newCalculation = false;
} }
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