'促销详情完善'

This commit is contained in:
Chopper711 2022-12-26 19:00:13 +08:00
parent 903b779ebe
commit 06325a7ce1
6 changed files with 34 additions and 27 deletions

View File

@ -31,8 +31,6 @@ import java.util.stream.Collectors;
@Service @Service
public class CouponRender implements CartRenderStep { public class CouponRender implements CartRenderStep {
@Autowired
private PromotionPriceUtil promotionPriceUtil;
@Autowired @Autowired
private MemberCouponService memberCouponService; private MemberCouponService memberCouponService;
@ -267,7 +265,7 @@ public class CouponRender implements CartRenderStep {
*/ */
private void renderCouponPrice(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) { private void renderCouponPrice(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) {
//分发优惠券 //分发优惠券
promotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(), PromotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(),
Boolean.TRUE.equals(coupon.getPlatformFlag()) ? Boolean.TRUE.equals(coupon.getPlatformFlag()) ?
PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON, memberCouponDTO.getMemberCoupon().getCouponId()); PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON, memberCouponDTO.getMemberCoupon().getCouponId());
//如果是平台券 则需要计算商家承担比例 //如果是平台券 则需要计算商家承担比例

View File

@ -13,6 +13,7 @@ import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.cart.render.util.PromotionPriceUtil; import cn.lili.modules.order.cart.render.util.PromotionPriceUtil;
import cn.lili.modules.order.order.entity.dto.DiscountPriceItem;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.dos.FullDiscount;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -30,9 +31,6 @@ import java.util.stream.Collectors;
@Service @Service
public class FullDiscountRender implements CartRenderStep { public class FullDiscountRender implements CartRenderStep {
@Autowired
private PromotionPriceUtil promotionPriceUtil;
@Autowired @Autowired
private GoodsSkuService goodsSkuService; private GoodsSkuService goodsSkuService;
@ -84,11 +82,11 @@ public class FullDiscountRender implements CartRenderStep {
if (isFull(countPrice, cart)) { if (isFull(countPrice, cart)) {
//如果减现金 //如果减现金
if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) { if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) {
promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT, fullDiscountVO.getId()); PromotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT, fullDiscountVO.getId());
} }
//打折 //打折
else if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) { else if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) {
this.renderFullRate(cart, skuPriceDetail, CurrencyUtil.div(fullDiscount.getFullRate(), 10)); this.renderFullRate(cart, skuPriceDetail, CurrencyUtil.div(fullDiscount.getFullRate(), 10), fullDiscountVO.getId());
} }
//渲染满优惠 //渲染满优惠
renderFullMinus(cart); renderFullMinus(cart);
@ -107,7 +105,7 @@ public class FullDiscountRender implements CartRenderStep {
* @param cart * @param cart
* @param skuPriceDetail * @param skuPriceDetail
*/ */
private void renderFullRate(CartVO cart, Map<String, Double> skuPriceDetail, Double rate) { private void renderFullRate(CartVO cart, Map<String, Double> skuPriceDetail, Double rate, String activityId) {
List<CartSkuVO> cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId())).collect(Collectors.toList()); List<CartSkuVO> cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId())).collect(Collectors.toList());
@ -115,14 +113,25 @@ public class FullDiscountRender implements CartRenderStep {
cartSkuVOS.forEach(cartSkuVO -> { cartSkuVOS.forEach(cartSkuVO -> {
PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO(); PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO();
Double discountPrice = CurrencyUtil.mul(priceDetailDTO.getGoodsPrice(),
CurrencyUtil.sub(1, rate)
);
//优惠金额=旧的优惠金额+商品金额*商品折扣比例 //优惠金额=旧的优惠金额+商品金额*商品折扣比例
priceDetailDTO.setDiscountPrice( priceDetailDTO.setDiscountPrice(
CurrencyUtil.add(priceDetailDTO.getDiscountPrice(), CurrencyUtil.add(priceDetailDTO.getDiscountPrice(), discountPrice
CurrencyUtil.mul(priceDetailDTO.getGoodsPrice(),
CurrencyUtil.sub(1, rate)
)
) )
); );
//优惠金额=旧的优惠金额+商品金额*商品折扣比例
priceDetailDTO.addDiscountPriceItem(DiscountPriceItem
.builder()
.discountPrice(discountPrice)
.promotionTypeEnum(PromotionTypeEnum.FULL_DISCOUNT)
.promotionId(activityId)
.skuId(cartSkuVO.getGoodsSku().getId())
.goodsId(cartSkuVO.getGoodsSku().getGoodsId())
.build());
}); });

View File

@ -28,7 +28,7 @@ public class PromotionPriceUtil {
* @param discountPrice 需要分发的优惠金额 * @param discountPrice 需要分发的优惠金额
* @param promotionTypeEnum 促销类型 * @param promotionTypeEnum 促销类型
*/ */
public void recountPrice(TradeDTO tradeDTO, Map<String, Double> skuPromotionDetail, Double discountPrice, PromotionTypeEnum promotionTypeEnum, String activityId) { public static void recountPrice(TradeDTO tradeDTO, Map<String, Double> skuPromotionDetail, Double discountPrice, PromotionTypeEnum promotionTypeEnum, String activityId) {
// sku 促销信息非空判定 // sku 促销信息非空判定
if (skuPromotionDetail == null || skuPromotionDetail.size() == 0) { if (skuPromotionDetail == null || skuPromotionDetail.size() == 0) {
@ -163,7 +163,7 @@ public class PromotionPriceUtil {
* @param promotionId 活动ID * @param promotionId 活动ID
* @return 是否有效 * @return 是否有效
*/ */
private boolean checkPromotionValidTime(Date startTime, Date endTime, String promotionType, String promotionId) { private static boolean checkPromotionValidTime(Date startTime, Date endTime, String promotionType, String promotionId) {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if (startTime.getTime() > now) { if (startTime.getTime() > now) {
log.error("商品ID为{}的{}活动开始时间小于当时时间,活动未开始!", promotionId, promotionType); log.error("商品ID为{}的{}活动开始时间小于当时时间,活动未开始!", promotionId, promotionType);

View File

@ -2,8 +2,10 @@ package cn.lili.modules.order.order.entity.dto;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* 优惠信息详情 * 优惠信息详情
@ -15,6 +17,8 @@ import lombok.Data;
*/ */
@Builder @Builder
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
public class DiscountPriceItem { public class DiscountPriceItem {

View File

@ -1,9 +1,7 @@
package cn.lili.modules.order.order.entity.dto; package cn.lili.modules.order.order.entity.dto;
import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -44,11 +42,8 @@ public class PriceDetailDTO implements Serializable {
@ApiModelProperty(value = "优惠金额") @ApiModelProperty(value = "优惠金额")
private Double discountPrice; private Double discountPrice;
/**
* @See List<DiscountPriceItem>
*/
@ApiModelProperty(value = "优惠详情") @ApiModelProperty(value = "优惠详情")
private String discountPriceDetail; private List<DiscountPriceItem> discountPriceDetail;
@ApiModelProperty(value = "优惠券金额") @ApiModelProperty(value = "优惠券金额")
private Double couponPrice; private Double couponPrice;
@ -116,7 +111,8 @@ public class PriceDetailDTO implements Serializable {
*/ */
public void setDiscountPriceItem(DiscountPriceItem discountPriceItem) { public void setDiscountPriceItem(DiscountPriceItem discountPriceItem) {
List<DiscountPriceItem> discountPriceItems = new ArrayList<>(); List<DiscountPriceItem> discountPriceItems = new ArrayList<>();
this.discountPriceDetail = JSONUtil.toJsonStr(discountPriceItems); discountPriceItems.add(discountPriceItem);
this.discountPriceDetail = discountPriceItems;
} }
/** /**
@ -125,10 +121,7 @@ public class PriceDetailDTO implements Serializable {
* @param discountPriceItem 促销信息 * @param discountPriceItem 促销信息
*/ */
public void addDiscountPriceItem(DiscountPriceItem discountPriceItem) { public void addDiscountPriceItem(DiscountPriceItem discountPriceItem) {
List<DiscountPriceItem> discountPriceItems = StringUtils.isEmpty(this.discountPriceDetail) ? discountPriceDetail.add(discountPriceItem);
new ArrayList<>() : JSONUtil.toList(this.discountPriceDetail, DiscountPriceItem.class);
this.discountPriceDetail = JSONUtil.toJsonStr(discountPriceItems.add(discountPriceItem));
} }
@ -165,6 +158,7 @@ public class PriceDetailDTO implements Serializable {
billPrice = 0d; billPrice = 0d;
settlementPrice = 0d; settlementPrice = 0d;
discountPriceDetail = new ArrayList<>();
joinPromotion = new ArrayList<>(); joinPromotion = new ArrayList<>();
} }
@ -235,6 +229,8 @@ public class PriceDetailDTO implements Serializable {
billPrice = CurrencyUtil.add(billPrice, priceDetailDTO.getBillPrice()); billPrice = CurrencyUtil.add(billPrice, priceDetailDTO.getBillPrice());
settlementPrice = CurrencyUtil.add(settlementPrice, priceDetailDTO.getSettlementPrice()); settlementPrice = CurrencyUtil.add(settlementPrice, priceDetailDTO.getSettlementPrice());
discountPriceDetail.addAll(priceDetailDTO.getDiscountPriceDetail());
} }
/** /**

View File

@ -196,7 +196,7 @@ public class CouponServiceImpl extends AbstractPromotionsServiceImpl<CouponMappe
} }
//如果优惠券使用时间类型不合法抛出异常抛出异常 //如果优惠券使用时间类型不合法抛出异常抛出异常
if (CouponRangeDayEnum.exist(coupon.getRangeDayType())) { if (!CouponRangeDayEnum.exist(coupon.getRangeDayType())) {
throw new ServiceException(ResultCode.COUPON_RANGE_ERROR); throw new ServiceException(ResultCode.COUPON_RANGE_ERROR);
} }