'价格记录详细处理'

This commit is contained in:
Chopper711 2022-12-26 10:55:37 +08:00
parent 0e3d582d13
commit 903b779ebe
6 changed files with 102 additions and 6 deletions

View File

@ -269,7 +269,7 @@ public class CouponRender implements CartRenderStep {
//分发优惠券
promotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(),
Boolean.TRUE.equals(coupon.getPlatformFlag()) ?
PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON);
PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON, memberCouponDTO.getMemberCoupon().getCouponId());
//如果是平台券 则需要计算商家承担比例
if (Boolean.TRUE.equals(coupon.getPlatformFlag()) && coupon.getStoreCommission() > 0) {

View File

@ -84,7 +84,7 @@ public class FullDiscountRender implements CartRenderStep {
if (isFull(countPrice, cart)) {
//如果减现金
if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) {
promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT);
promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT, fullDiscountVO.getId());
}
//打折
else if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) {

View File

@ -15,6 +15,7 @@ import cn.lili.modules.order.cart.entity.enums.RenderStepEnums;
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.order.entity.dto.DiscountPriceItem;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams;
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
@ -117,6 +118,17 @@ public class SkuPromotionRender implements CartRenderStep {
PromotionSkuVO promotionSkuVO = new PromotionSkuVO(PromotionTypeEnum.POINTS_GOODS.name(), cartSkuVO.getPointsId());
cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO);
totalPayPoints += cartSkuVO.getPoint();
//记录优惠由来
cartSkuVO.getPriceDetailDTO().setDiscountPriceItem(
DiscountPriceItem.builder()
.discountPrice(CurrencyUtil.sub(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getPurchasePrice()))
.promotionId(promotionSkuVO.getActivityId())
.promotionTypeEnum(PromotionTypeEnum.POINTS_GOODS)
.skuId(cartSkuVO.getGoodsSku().getId())
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.build()
);
}
}
if (userInfo.getPoint() < totalPayPoints) {
@ -138,9 +150,19 @@ public class SkuPromotionRender implements CartRenderStep {
cartSkuVO.setSubTotal(kanjiaActivityVO.getPurchasePrice());
cartSkuVO.getPriceDetailDTO().setGoodsPrice(kanjiaActivityVO.getPurchasePrice());
}
PromotionSkuVO promotionSkuVO = new PromotionSkuVO(PromotionTypeEnum.KANJIA.name(), cartSkuVO.getKanjiaId());
cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO);
//记录优惠由来
cartSkuVO.getPriceDetailDTO().setDiscountPriceItem(
DiscountPriceItem.builder()
.discountPrice(CurrencyUtil.sub(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getPurchasePrice()))
.promotionId(promotionSkuVO.getActivityId())
.promotionTypeEnum(PromotionTypeEnum.KANJIA)
.skuId(cartSkuVO.getGoodsSku().getId())
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.build()
);
}
}
return;
@ -149,6 +171,17 @@ public class SkuPromotionRender implements CartRenderStep {
for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) {
PromotionSkuVO promotionSkuVO = new PromotionSkuVO(PromotionTypeEnum.PINTUAN.name(), cartSkuVO.getPintuanId());
cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO);
//记录优惠由来
cartSkuVO.getPriceDetailDTO().setDiscountPriceItem(
DiscountPriceItem.builder()
.discountPrice(CurrencyUtil.sub(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getPurchasePrice()))
.promotionId(promotionSkuVO.getActivityId())
.promotionTypeEnum(PromotionTypeEnum.PINTUAN)
.skuId(cartSkuVO.getGoodsSku().getId())
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.build()
);
}
}
return;

View File

@ -4,8 +4,8 @@ import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
import cn.lili.modules.order.order.entity.dto.DiscountPriceItem;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@ -17,7 +17,6 @@ import java.util.Map;
* @author paulG
* @since 2020/8/21
**/
@Service
@Slf4j
public class PromotionPriceUtil {
@ -29,7 +28,7 @@ public class PromotionPriceUtil {
* @param discountPrice 需要分发的优惠金额
* @param promotionTypeEnum 促销类型
*/
public void recountPrice(TradeDTO tradeDTO, Map<String, Double> skuPromotionDetail, Double discountPrice, PromotionTypeEnum promotionTypeEnum) {
public void recountPrice(TradeDTO tradeDTO, Map<String, Double> skuPromotionDetail, Double discountPrice, PromotionTypeEnum promotionTypeEnum, String activityId) {
// sku 促销信息非空判定
if (skuPromotionDetail == null || skuPromotionDetail.size() == 0) {
@ -102,6 +101,17 @@ public class PromotionPriceUtil {
cartSkuVO.getPriceDetailDTO().setCouponPrice(
CurrencyUtil.add(cartSkuVO.getPriceDetailDTO().getCouponPrice(), skuDiscountPrice));
cartSkuVO.getPriceDetailDTO().addDiscountPriceItem(
DiscountPriceItem.builder()
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.skuId(cartSkuVO.getGoodsSku().getId())
.discountPrice(skuDiscountPrice)
.promotionTypeEnum(PromotionTypeEnum.COUPON)
.promotionId(activityId)
.build()
);
} else if (promotionTypeEnum == PromotionTypeEnum.PLATFORM_COUPON) {
cartSkuVO.getPriceDetailDTO().setSiteCouponPrice(
@ -109,9 +119,32 @@ public class PromotionPriceUtil {
cartSkuVO.getPriceDetailDTO().setCouponPrice(
CurrencyUtil.add(cartSkuVO.getPriceDetailDTO().getCouponPrice(), cartSkuVO.getPriceDetailDTO().getSiteCouponPrice()));
cartSkuVO.getPriceDetailDTO().addDiscountPriceItem(
DiscountPriceItem.builder()
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.skuId(cartSkuVO.getGoodsSku().getId())
.discountPrice(skuDiscountPrice)
.promotionTypeEnum(PromotionTypeEnum.PLATFORM_COUPON)
.promotionId(activityId)
.build()
);
} else {
cartSkuVO.getPriceDetailDTO().setDiscountPrice(
CurrencyUtil.add(cartSkuVO.getPriceDetailDTO().getDiscountPrice(), skuDiscountPrice));
//目前剩余的只有满减金额活动后续如果需要调整这里建议传递活动类型进来
cartSkuVO.getPriceDetailDTO().addDiscountPriceItem(
DiscountPriceItem.builder()
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.skuId(cartSkuVO.getGoodsSku().getId())
.discountPrice(skuDiscountPrice)
.promotionTypeEnum(PromotionTypeEnum.FULL_DISCOUNT)
.promotionId(activityId)
.build()
);
}
}
}

View File

@ -2,6 +2,7 @@ package cn.lili.modules.order.order.entity.dto;
import cn.lili.common.enums.PromotionTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
/**
@ -12,6 +13,7 @@ import lombok.Data;
* @Description:
* @since 2022/12/23 14:52
*/
@Builder
@Data
public class DiscountPriceItem {

View File

@ -1,7 +1,9 @@
package cn.lili.modules.order.order.entity.dto;
import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -42,6 +44,9 @@ public class PriceDetailDTO implements Serializable {
@ApiModelProperty(value = "优惠金额")
private Double discountPrice;
/**
* @See List<DiscountPriceItem>
*/
@ApiModelProperty(value = "优惠详情")
private String discountPriceDetail;
@ -104,6 +109,29 @@ public class PriceDetailDTO implements Serializable {
private List<PromotionSkuVO> joinPromotion;
/**
* 设置促销详情
*
* @param discountPriceItem 促销信息
*/
public void setDiscountPriceItem(DiscountPriceItem discountPriceItem) {
List<DiscountPriceItem> discountPriceItems = new ArrayList<>();
this.discountPriceDetail = JSONUtil.toJsonStr(discountPriceItems);
}
/**
* 设置促销详情
*
* @param discountPriceItem 促销信息
*/
public void addDiscountPriceItem(DiscountPriceItem discountPriceItem) {
List<DiscountPriceItem> discountPriceItems = StringUtils.isEmpty(this.discountPriceDetail) ?
new ArrayList<>() : JSONUtil.toList(this.discountPriceDetail, DiscountPriceItem.class);
this.discountPriceDetail = JSONUtil.toJsonStr(discountPriceItems.add(discountPriceItem));
}
public Double getOriginalPrice() {
if (originalPrice == 0D) {
return flowPrice;