Commit d44d2c4b by xiaoer.li@freemud.com

对接促销算价Alpha->fix

parent afb76ae0
......@@ -161,6 +161,7 @@ public class CalculationCommonService {
*/
public ShoppingCartGoodsDto.CartGoodsDetailDto convertCartGoods2DetailGoodsList(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods calculationGoods
, CartGoods cartGoods) {
log.info("convertCartGoods2DetailGoodsList ->calculationGoods:{},cartGoods:{}", calculationGoods, cartGoods);
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = this.convertCartGoods2DetailGoods(calculationGoods, cartGoods);
return cartGoodsDetailDto;
}
......@@ -250,6 +251,37 @@ public class CalculationCommonService {
}
/**
* 计算第一次使用会员卡需多支付的金额 单位:分
*
* @param shoppingCartInfoRequestVo
* @param shoppingCartGoodsDto
* @return
*/
public void getNeedCardAmount(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
ShoppingCartInfoRequestVo.BuyMemberCard buyMemberCard = shoppingCartInfoRequestVo.getBuyMemberCard();
if (buyMemberCard != null && StringUtils.isNotEmpty(buyMemberCard.getPaidId()) && StringUtils.isNotEmpty(buyMemberCard.getRuleId())) {
GetPaidRuleRequestDto getPaidRuleRequestDto = new GetPaidRuleRequestDto();
getPaidRuleRequestDto.setPartnerId(shoppingCartInfoRequestVo.getPartnerId());
getPaidRuleRequestDto.setPaidId(buyMemberCard.getPaidId());
getPaidRuleRequestDto.setRuleId(buyMemberCard.getRuleId());
BaseResponse<GetPaidRuleResponseDto> baseResponse = customerApplicationClient.getPaidRule(getPaidRuleRequestDto);
if (baseResponse == null || baseResponse.getResult() == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode())
|| baseResponse.getResult().getActivityPrice() == null) {
return;
}
Integer activityPrice = baseResponse.getResult().getActivityPrice();
Integer firstCouponAmount = baseResponse.getResult().getFirstCouponAmount() == null ? 0 : baseResponse.getResult().getFirstCouponAmount();
Integer needCardAmount = activityPrice - firstCouponAmount;
shoppingCartGoodsDto.setMemberCardAmount(needCardAmount);
shoppingCartGoodsDto.setCardOriginalAmount(baseResponse.getResult().getActivityPrice());
shoppingCartGoodsDto.setCardDiscountAmount(firstCouponAmount);
shoppingCartGoodsDto.setOriginalTotalAmount(shoppingCartGoodsDto.getOriginalTotalAmount() + activityPrice);
shoppingCartGoodsDto.setTotalAmount(shoppingCartGoodsDto.getTotalAmount() + needCardAmount);
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsDto.getTotalDiscountAmount() + firstCouponAmount);
}
}
/**
* 当ToastMsg为空时才赋值
*
* @param shoppingCartGoodsResponseVo
......@@ -410,7 +442,7 @@ public class CalculationCommonService {
//todo
BlockRow row = discount.get(comb.getGoodsId());
if (row == null) {
com.setTotalDiscountAmount(com.getOriginalPrice().intValue());
com.setTotalDiscountAmount(0);
} else {
com.setTotalDiscountAmount(row.getDiscountAmount());
}
......
......@@ -8,7 +8,12 @@ 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.service.impl.calculate.promotion.AdditionSharingService;
import cn.freemud.service.impl.calculate.promotion.DeliverySharingService;
import cn.freemud.service.impl.calculate.promotion.GiftSharingService;
import cn.freemud.service.impl.calculate.promotion.ScoreSharingService;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -31,12 +36,21 @@ import java.util.stream.Collectors;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
@Slf4j
public class CalculationSharingEquallyService {
@Autowired
private CalculationCommonService calculationCommonService;
@Autowired
private GiftSharingService giftSharingService;
@Autowired
private ScoreSharingService scoreSharingService;
@Autowired
private DeliverySharingService deliverySharingService;
@Autowired
private AdditionSharingService additionSharingService;
/**
* 均摊服务
......@@ -64,20 +78,25 @@ public class CalculationSharingEquallyService {
, ShoppingCartGoodsDto shoppingCartGoodsDto
, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity) {
calculationCommonService.initShoppingCart(discountResult, cartGoodsList, shoppingCartGoodsResponseVo);
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getProducts()) ? new ArrayList<>() : shoppingCartGoodsDto.getProducts();
shoppingCartGoodsDto.setProducts(cartGoodsDetailDtoList);
/**
* 组建大的优惠信息
*/
this.setShoppingCartGoodsDtoActivityDiscounts(discountResult, shoppingCartGoodsDto);
//过滤出加价购
/**
* 活动库存
* 过滤出加价购
*/
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount> addMoneyDiscounts = discountResult.getDiscounts()
.stream()
.filter(discount -> ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType())).collect(Collectors.toList());
.filter(discount -> ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType()))
.collect(Collectors.toList());
if (null != discountResult) {
//处理加价购
List<SubtractStockVO> stocks = filterSendGoodsStocks(discountResult.getStocks(), shoppingCartInfoRequestVo, addMoneyDiscounts);
if (CollectionUtils.isNotEmpty(stocks)) shoppingCartGoodsDto.setStocks(stocks);
}
......@@ -87,12 +106,12 @@ public class CalculationSharingEquallyService {
shoppingCartGoodsDto.setOriginalTotalAmount(shoppingCartGoodsResponseVo.getOriginalTotalAmount());
shoppingCartGoodsDto.setTotalAmount(shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
shoppingCartGoodsResponseVo.setProducts(cartGoodsList);
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goods = discountResult.getGoods();
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goods = discountResult.getGoods();
/**
* 利用促销赋值totalDiscountAmount
*/
shoppingCartGoodsResponseVo.setProducts(cartGoodsList);
for (CartGoods product : shoppingCartGoodsResponseVo.getProducts()) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods find = goods.stream().filter((k) -> k.getCartGoodsUid().equals(product.getCartGoodsUid())).findFirst().get();
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = calculationCommonService.convertCartGoods2DetailGoodsList(find, product);
......@@ -103,8 +122,27 @@ public class CalculationSharingEquallyService {
* 赠品
*/
giftSharingService.equally(discountResult, cartGoodsDetailDtoList, activityQueryDto, menuType);
calculationCommonService.setAddAndUpdateResponse(cartGoodsList, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo, ShoppingCartConstant.QUERY_INFO);
calculationCommonService.addNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo);
/**
* 加价购商品
*/
additionSharingService.equally(shoppingCartInfoRequestVo, shoppingCartGoodsDto, discountResult, premiumExchangeActivity);
/**
* 积分抵扣
*/
scoreSharingService.scoreResponse(discountResult, shoppingCartGoodsResponseVo, userLoginInfoDto, shoppingCartInfoRequestVo);
scoreSharingService.equally(shoppingCartGoodsResponseVo, shoppingCartGoodsDto);
calculationCommonService.getNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsDto);
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(menuType)) {
deliverySharingService.deliveryResponse(discountResult, activityQueryDto, shoppingCartGoodsResponseVo, deliveryAmount);
}
shoppingCartGoodsDto.setDeliveryAmount(shoppingCartGoodsResponseVo.getDeliveryAmount());
shoppingCartGoodsDto.setDiscountDeliveryAmount(shoppingCartGoodsResponseVo.getDiscountDeliveryAmount());
shoppingCartGoodsDto.setThresholdAmount(shoppingCartGoodsResponseVo.getThresholdAmount());
shoppingCartGoodsDto.setIsDiscountDelivery(shoppingCartGoodsResponseVo.getIsDiscountDelivery());
shoppingCartGoodsDto.setDiscountDeliveryActivityCode(shoppingCartGoodsResponseVo.getDiscountDeliveryActivityCode());
}
/**
......
package cn.freemud.service.impl.calculate.promotion;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ItemService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
......@@ -42,14 +45,17 @@ public class AdditionSharingService {
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private ItemService itemService;
public void additionResponse(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (shoppingCartInfoRequestVo==null
if (shoppingCartInfoRequestVo == null
|| CollectionUtils.isEmpty(shoppingCartInfoRequestVo.getSendGoods())
|| discountResult==null
|| discountResult == null
|| CollectionUtils.isEmpty(discountResult.getSendGoods())) {
return;
}
......@@ -209,4 +215,107 @@ public class AdditionSharingService {
}
return ResponseResult.SUCCESS;
}
/**
* xxxxxxoooooooooo
*
* @param shoppingCartInfoRequestVo
* @param discountResult
* @param premiumExchangeActivity
*/
public void equally(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, ShoppingCartGoodsDto shoppingCartGoodsDto
, CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity) {
if (premiumExchangeActivity == null || CollectionUtils.isEmpty(premiumExchangeActivity.getProducts())) {
return;
}
//检查是否有加价购商品
ResponseResult checkResult = checkAdditionalGoods(premiumExchangeActivity.getProducts(), discountResult.getSendGoods());
if (!ObjectUtils.equals(ResponseResult.SUCCESS, checkResult)) {
throw new ServiceException(checkResult);
}
//检查是否有加价购商品
CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity = discountResult.getSendGoods()
.stream()
.filter(s -> ActivityTypeEnum.TYPE_81.getCode().equals(s.getActivityType()))
.collect(Collectors.toList()).get(0);
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsMap = sendActivity
.getSendGoods()
.stream()
.collect(Collectors.toMap(CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods::getGoodsId, Function.identity(), (k1, k2) -> k1));
//添加商品行
List<String> productIds = premiumExchangeActivity.getProducts().stream().map(p -> StringUtils.isEmpty(p.getSkuId()) ? p.getSpuId() : p.getSkuId()).collect(Collectors.toList());
Map<String, GetProductsVo> getProductsVoMap = itemService.getProducts(productIds, shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId(), BusinessTypeEnum.getByType(shoppingCartInfoRequestVo.getMenuType()).getCode());
// 获取计算返回的价格
Long originalTotalAmount = shoppingCartGoodsDto.getOriginalTotalAmount();
Long totalAmount = shoppingCartGoodsDto.getTotalAmount();
Long totalDiscountAmount = shoppingCartGoodsDto.getTotalDiscountAmount();
//加价换购活动总优惠
Long currenttotalDiscountAmount = 0L;
for (CreateOrderVo.PremiumExchangeActivity.Product product : premiumExchangeActivity.getProducts()) {
String goodsId = StringUtils.isEmpty(product.getSkuId()) ? product.getSpuId() : product.getSkuId();
GetProductsVo getProductsVo = getProductsVoMap.get(goodsId);
if (null == getProductsVo) {
continue;
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods send = sendGoodsMap.get(goodsId);
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = this.getCartGoodsDetailDto(product, getProductsVo, goodsId, send);
shoppingCartGoodsDto.getProducts().add(cartGoodsDetailDto);
//2.计算优惠价格
originalTotalAmount += getProductsVo.getFinalPrice();
totalDiscountAmount += cartGoodsDetailDto.getTotalDiscountAmount();
currenttotalDiscountAmount += cartGoodsDetailDto.getTotalDiscountAmount();
// 3.设置商品行优惠明细
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(sendActivity.getActivityCode());
activityDiscountsDto.setActivityName(sendActivity.getActivityName());
activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_81.getCode());
activityDiscountsDto.setDiscountAmount(cartGoodsDetailDto.getTotalDiscountAmount());
List<ActivityDiscountsDto> activityDiscountsDtoList = new ArrayList<>();
activityDiscountsDtoList.add(activityDiscountsDto);
cartGoodsDetailDto.setActivityDiscountsDtos(activityDiscountsDtoList);
}
shoppingCartGoodsDto.setOriginalTotalAmount(originalTotalAmount);
}
public ShoppingCartGoodsDto.CartGoodsDetailDto getCartGoodsDetailDto(CreateOrderVo.PremiumExchangeActivity.Product product
, GetProductsVo getProductsVo
, String goodsId
, CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods) {
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = new ShoppingCartGoodsDto.CartGoodsDetailDto();
cartGoodsDetailDto.setOriginalPrice(getProductsVo.getFinalPrice());
int totalDiscountAmount = product.getQty() * (getProductsVo.getFinalPrice().intValue() - sendGoods.getNowPrice().intValue());
cartGoodsDetailDto.setTotalDiscountAmount(totalDiscountAmount);
cartGoodsDetailDto.setSpuId(product.getSpuId());
cartGoodsDetailDto.setSkuId(goodsId);
cartGoodsDetailDto.setQty(product.getQty());
cartGoodsDetailDto.setSpuName(getProductsVo != null ? getProductsVo.getSpuName() : "");
cartGoodsDetailDto.setSkuName(product.getSkuName());
cartGoodsDetailDto.setPicture(getProductsVo != null ? getProductsVo.getSpuPicture() : "");
cartGoodsDetailDto.setActivityType(ActivityTypeEnum.TYPE_81.getCode());
cartGoodsDetailDto.setClassificationId(getProductsVo.getCategory());
cartGoodsDetailDto.setClassificationName(getProductsVo.getCategoryName());
List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtraList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(product.getAttributes())) {
for (CreateOrderVo.PremiumExchangeActivity.Product.Attribute attribute : product.getAttributes()) {
ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra cartGoodsExtra = new ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra();
cartGoodsExtra.setAttributeId(attribute.getAttributeId());
cartGoodsExtra.setAttributeName(attribute.getAttributeValue());
cartGoodsExtraList.add(cartGoodsExtra);
}
}
cartGoodsDetailDto.setExtraList(cartGoodsExtraList);
return cartGoodsDetailDto;
}
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package cn.freemud.service.impl.calculate.promotion;
import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.user.GetUserScoreUseDetailRequest;
import cn.freemud.entities.dto.user.GetUserScoreUserDetailResponse;
import cn.freemud.entities.vo.ShoppingCartCustomerScoreVo;
......@@ -132,6 +133,14 @@ public class ScoreSharingService {
return;
}
public void equally(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ShoppingCartGoodsDto shoppingCartGoodsDto) {
if (shoppingCartGoodsResponseVo.getCustomerScoreVo() != null) {
shoppingCartGoodsDto.setScoreReduceAmount(shoppingCartGoodsResponseVo.getCustomerScoreVo().getReduceAmount() == null ? 0 : shoppingCartGoodsResponseVo.getCustomerScoreVo().getReduceAmount().longValue());
shoppingCartGoodsDto.setReduceScore(shoppingCartGoodsResponseVo.getCustomerScoreVo().getUseScore() == null ? 0 : shoppingCartGoodsResponseVo.getCustomerScoreVo().getUseScore().longValue());
}
}
private Integer getValue(Object object) {
Integer result = 0;
......
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