Commit 92f25048 by ping.wu

Merge branches 'feature/20210816_买M赠N券_wuping' and 'master' of…

Merge branches 'feature/20210816_买M赠N券_wuping' and 'master' of http://gitlab.freemud.com/order-group-application/order-group

# Conflicts:
#	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 5d85b30c 2299a71b
......@@ -3860,6 +3860,7 @@ public class OrderSdkAdapter {
couponCodeVerificationProductDto.setPid(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
......
......@@ -21,6 +21,11 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS(3, "套餐商品"),
SKU_GOODS(4, "sku商品"),
SPU_GOODS(5, "spu商品"),
REDUCE_PRICE_GOODS(6,"超值加购商品"),
ALL_COUPON_GOODS(8, "万能券商品"),
VIRTUAL_GOODS(9,"虚拟商品"),
BUY_M_SEND_N_COUPON(10, "买M送N券"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
......
......@@ -232,7 +232,9 @@ public interface ShoppingCartBaseService {
CartGoodsStates cartGoodsStates = new CartGoodsStates();
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
// 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())) {
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) {
continue;
}
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
......
......@@ -920,7 +920,8 @@ public class CreateOrderAdapter {
.accountType(getQueryOrderAccountType(getOrderAccountType(activityDiscountsDto.getActivityType())))
.sequence(createOrderProductDto.getSequence())
.productId(material.getSpuId())
.discountQty(createOrderProductDto.getNumber())
.discountQty((activityDiscountsDto.getActualActivityGoodsNumber() == null || activityDiscountsDto.getActualActivityGoodsNumber() == 0)
? createOrderProductDto.getNumber() : activityDiscountsDto.getActualActivityGoodsNumber())
.build();
orderAccountDtos.add(createOrderAccountDto);
}
......
......@@ -464,7 +464,8 @@ public class OrderAdapter {
.accountType(getQueryOrderAccountType(getOrderAccountType(activityDiscountsDto.getActivityType())))
.sequence(createOrderProductDto.getSequence())
.productId(createOrderProductDto.getSpecification())
.discountQty(createOrderProductDto.getNumber())
.discountQty((activityDiscountsDto.getActualActivityGoodsNumber() == null || activityDiscountsDto.getActualActivityGoodsNumber() == 0)
? createOrderProductDto.getNumber() : activityDiscountsDto.getActualActivityGoodsNumber())
.build();
orderAccountDtos.add(createOrderAccountDto);
}
......
......@@ -50,6 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
......@@ -148,6 +149,7 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
couponCodeVerificationProductDto.setPID(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
......
......@@ -358,7 +358,8 @@ public class ActivityAdapter {
List<String> couponCodes = discountResult.getDiscounts().stream().filter(discount -> Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_3.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_31.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getActivityCode).collect(Collectors.toList());
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_330.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getActivityCode).collect(Collectors.toList());
couponAvailableCartInfo.setCouponCodes(couponCodes);
totalMealDiscountAmount = discountResult.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getDiscount).sum();
......@@ -380,8 +381,11 @@ public class ActivityAdapter {
Long mealDiscountAmount = 0L;//套餐优惠不算在内
if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(
goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_330.getCode())
).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
cartProduct.setCouponCode(goodCoupon!=null && goodCoupon.isPresent()?goodCoupon.get():null);
mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum();
......@@ -424,7 +428,8 @@ public class ActivityAdapter {
List<String> couponCodes = discountResult.getCouponDiscounts().stream().filter(discount -> Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_3.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_31.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_33.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults::getCouponCode).collect(Collectors.toList());
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_330.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults::getCouponCode).collect(Collectors.toList());
couponAvailableCartInfo.setCouponCodes(couponCodes);
totalMealDiscountAmount = discountResult.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount::getDiscount).sum();
......@@ -440,8 +445,10 @@ public class ActivityAdapter {
Pair<Long,Long> pair = getSmallMaterialAmount(discountGood.getSmallMaterial());//value1=总实付 value2=总优惠
Long mealDiscountAmount = 0L;//套餐优惠不算在内
if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(
goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_330.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
cartProduct.setCouponCode(goodCoupon!=null && goodCoupon.isPresent()?goodCoupon.get():null);
mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum();
......
......@@ -36,6 +36,7 @@ public enum ActivityTypeEnum {
TYPE_31(31, "折扣券"),
TYPE_32(32, "商品券"),
TYPE_33(33, "换购券"),
TYPE_330(330, "买M赠N券"),
TYPE_34(34, "配送券"),
TYPE_37(37, "月享卡种子券"),
TYPE_35(35, "买3赠1券"),
......
......@@ -6,7 +6,8 @@ public enum CouponTypeEnum {
TYPE_1(1, "代金券"),
TYPE_3(3, "折扣券"),
TYPE_4(4, "换购券"),
TYPE_5(5, "配送券");
TYPE_5(5, "配送券"),
TYPE_7(7, "买M赠N券");
private Integer code;
......
......@@ -24,6 +24,7 @@ public enum GoodsTypeEnum {
REDUCE_PRICE_GOODS(6,"超值加购商品"),
ALL_COUPON_GOODS(8, "万能券商品"),
VIRTUAL_GOODS(9,"虚拟商品"),
BUY_M_SEND_N_COUPON(10, "买M送N券"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
......
......@@ -28,6 +28,7 @@ public enum ShoppingCartPromotionEnum {
Material(12, "MaterialPromotionService"),
// 集点活动类
GATHER_SPOT(13, "gatherSpotPromotionService"),
BUY_M_SEND_N_COUPON(14, "buyMSendNCouponDiscountService"),
MEMBER_DISCOUNT_NEw(27, "memberDiscountService");
private Integer type;
......
......@@ -137,7 +137,7 @@ public interface ShoppingCartNewService {
}
/**
* 换购券
* 换购券 买M赠N券
*
* @param partnerId
* @param storeId
......
package cn.freemud.service.impl;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.IPromotionService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service("buyMSendNCouponDiscountService")
public class BuyMSendNCouponDiscountServiceImpl implements IPromotionService {
@Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto,
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getCouponDiscounts())) {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults> couponResultsList = calculationDiscountResult.getCouponDiscounts();
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults> collect = couponResultsList.stream().filter(c -> ActivityTypeEnum.TYPE_330.getCode().equals(c.getActivityType())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(collect)) {
return;
}
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods : calculationDiscountResult.getGoods()) {
if (CollectionUtils.isEmpty(goods.getDiscounts())) {
continue;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscounts = goods.getDiscounts().stream().filter(c -> ActivityTypeEnum.TYPE_330.getCode().equals(c.getType())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(goodsDiscounts)) {
continue;
}
// List<CartGoods> addSendGoodsList = new ArrayList<>();
for (CartGoods cartGoods : cartGoodsList) {
if (Objects.equals(goods.getCartGoodsUid(), cartGoods.getCartGoodsUid())) {
Integer actualGoodsNumber = goodsDiscounts.get(0).getActualGoodsNumber();
if (cartGoods.getQty() > actualGoodsNumber) {
// CartGoods cartGood = new CartGoods();
// BeanUtils.copyProperties(cartGoods, cartGood);
// cartGood.setQty(actualGoodsNumber);
// cartGood.setAmount(0L);
// cartGoods.setQty(cartGoods.getQty() - actualGoodsNumber);
cartGoods.setAmount(goods.getRealAmount());
// addSendGoodsList.add(cartGood);
}
if (cartGoods.getQty() == actualGoodsNumber) {
cartGoods.setAmount(0L);
}
}
}
// cartGoodsList.addAll(addSendGoodsList);
}
}
@Override
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
}
}
......@@ -98,7 +98,8 @@ public class CouponPromotionService implements IPromotionService {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults couponResults : couponResultsList) {
//前端计算小计拿商品现价累计减couponDiscount,商品券换购券现价已排除
if(ActivityTypeEnum.TYPE_33.getCode()== couponResults.getActivityType()
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getActivityType()){
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getActivityType()
|| Objects.equals(ActivityTypeEnum.TYPE_330.getCode(), couponResults.getActivityType())){
continue;
}
couponDiscount = couponDiscount + (couponResults.getDiscountAmount() == null ? 0 : couponResults.getDiscountAmount());
......@@ -218,15 +219,21 @@ public class CouponPromotionService implements IPromotionService {
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) {
if (StringUtils.isNotEmpty(cartGoods.getCouponCode())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults couponDiscount : couponDiscounts) {
ActivityDiscountsDto activityDiscountsDto = getActivityDiscountDto(calculationDiscountResult.getApportionGoods(), couponDiscount);
if (activityDiscountsDto != null) {
ActivityDiscountsDto activityDiscountsDto1 = new ActivityDiscountsDto();
BeanUtils.copyProperties(activityDiscountsDto, activityDiscountsDto1);
activityDiscountsDto1.setDiscountAmount(-activityDiscountsDto.getDiscountAmount());
if(Objects.equals(couponDiscount.getActivityType(),ActivityTypeEnum.TYPE_330.getCode())){
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> collect = calculationDiscountResult.getGoods().stream().filter(goods -> Objects.equals(cartGoods.getCartGoodsUid(), goods.getCartGoodsUid())).collect(Collectors.toList());
//商品优惠赋值
getActivityDiscountDto2(collect,cartGoods);
}else {
ActivityDiscountsDto activityDiscountsDto = getActivityDiscountDto(calculationDiscountResult.getApportionGoods(), couponDiscount);
if (activityDiscountsDto != null) {
ActivityDiscountsDto activityDiscountsDto1 = new ActivityDiscountsDto();
BeanUtils.copyProperties(activityDiscountsDto, activityDiscountsDto1);
activityDiscountsDto1.setDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setTotalDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setSalePrice(0L);
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto1));
cartGoods.setTotalDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setSalePrice(0L);
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto1));
}
}
}
}
......@@ -269,6 +276,30 @@ public class CouponPromotionService implements IPromotionService {
return null;
}
private ActivityDiscountsDto getActivityDiscountDto2(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goods, ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods) {
if(CollectionUtils.isNotEmpty(goods)){
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods1 = goods.get(0);
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> discounts = goods1.getDiscounts();
if(CollectionUtils.isNotEmpty(discounts) && Objects.equals(discounts.get(0).getType(),ActivityTypeEnum.TYPE_330.getCode())){
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(discounts.get(0).getActivityCode());
activityDiscountsDto.setActivityName(discounts.get(0).getActivityName());
activityDiscountsDto.setActivityType(this.convent2ActivityType(discounts.get(0).getType()));
activityDiscountsDto.setDiscountAmount(0 - discounts.get(0).getDiscount().intValue());
activityDiscountsDto.setActualActivityGoodsNumber(discounts.get(0).getActualGoodsNumber());
activityDiscountsDto.setCartGoodsUid(goods1.getCartGoodsUid());
//商品优惠赋值
cartGoods.setTotalDiscountAmount(-goods1.getDiscountAmount().intValue());
cartGoods.setSalePrice(goods1.getNowPrice());
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto));
return activityDiscountsDto;
}
}
return null;
}
public ActivityClassifyCouponBean createEmptyActivityCouponBean() {
ActivityClassifyCouponBean activityClassifyCouponBean = new ActivityClassifyCouponBean();
......@@ -285,6 +316,10 @@ public class CouponPromotionService implements IPromotionService {
if (type != null && Hg.equals(type)) {
type = 32;
}
Integer buyMsendN = 330;
if (type != null && buyMsendN.equals(type)) {
type = 32;
}
return type;
}
}
......@@ -446,9 +446,7 @@ public class CalculationCommonService {
activityDiscountsDto.setActivityName(this.convertName(discount.getType(), discount.getActivityName()));
activityDiscountsDto.setActivityType(this.convertType(discount.getType()));
activityDiscountsDto.setDiscountAmount(discount.getDiscount().intValue());
if(cocoPartnerId.contains(partnerId)){
activityDiscountsDto.setActualActivityGoodsNumber(discount.getActualGoodsNumber());
}
activityDiscountsDto.setActualActivityGoodsNumber(discount.getActualGoodsNumber());
activityDiscountsDtoList.add(activityDiscountsDto);
}
}
......@@ -722,6 +720,9 @@ public class CalculationCommonService {
case 33:
newType = 32;
break;
case 330:
newType = 32;
break;
}
return newType;
}
......
......@@ -307,7 +307,8 @@ public class CouponDiscountCalculation {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount couponResults : couponDiscounts) {
//前端计算小计拿商品现价累计减couponDiscount,商品券换购券现价已排除
if(ActivityTypeEnum.TYPE_33.getCode()== couponResults.getType()
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getType()){
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getType()
|| Objects.equals(ActivityTypeEnum.TYPE_330.getCode(),couponResults.getType())){
continue;
}
couponDiscount = couponDiscount + (couponResults.getDiscount() == null ? 0 : couponResults.getDiscount());
......
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