'促销详情完善'
This commit is contained in:
parent
903b779ebe
commit
06325a7ce1
@ -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());
|
||||||
//如果是平台券 则需要计算商家承担比例
|
//如果是平台券 则需要计算商家承担比例
|
||||||
|
@ -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());
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user