Files
FrameTour-BE/src/main/java/com/ycwl/basic/pricing/service/IDiscountProvider.java
Jerry Yan eb327723cd feat(pricing): 添加券码管理和使用功能
- 新增券码批次配置和券码实体
- 实现券码创建、领取、使用等接口
- 添加券码状态和优惠类型枚举
- 优化价格计算逻辑,支持券码优惠
- 新增优惠检测和应用相关功能
2025-08-21 09:35:08 +08:00

61 lines
1.9 KiB
Java

package com.ycwl.basic.pricing.service;
import com.ycwl.basic.pricing.dto.DiscountDetectionContext;
import com.ycwl.basic.pricing.dto.DiscountInfo;
import com.ycwl.basic.pricing.dto.DiscountResult;
import java.util.List;
/**
* 优惠提供者接口
* 所有优惠类型(coupon、voucher、促销活动等)都需要实现此接口
*/
public interface IDiscountProvider {
/**
* 获取提供者类型
* @return 提供者类型标识,如 "COUPON", "VOUCHER", "FLASH_SALE" 等
*/
String getProviderType();
/**
* 获取优先级
* @return 优先级,数字越大优先级越高
*/
int getPriority();
/**
* 检测可用的优惠
* @param context 优惠检测上下文
* @return 可用的优惠列表
*/
List<DiscountInfo> detectAvailableDiscounts(DiscountDetectionContext context);
/**
* 应用优惠
* @param discountInfo 要应用的优惠信息
* @param context 优惠检测上下文
* @return 优惠应用结果
*/
DiscountResult applyDiscount(DiscountInfo discountInfo, DiscountDetectionContext context);
/**
* 验证优惠是否可以应用
* @param discountInfo 优惠信息
* @param context 优惠检测上下文
* @return 是否可以应用
*/
default boolean canApply(DiscountInfo discountInfo, DiscountDetectionContext context) {
return true;
}
/**
* 获取优惠的最大可能折扣金额(用于排序)
* @param discountInfo 优惠信息
* @param context 优惠检测上下文
* @return 最大可能折扣金额
*/
default java.math.BigDecimal getMaxPossibleDiscount(DiscountInfo discountInfo, DiscountDetectionContext context) {
return discountInfo.getDiscountAmount() != null ? discountInfo.getDiscountAmount() : java.math.BigDecimal.ZERO;
}
}