You've already forked FrameTour-BE
feat(pricing): 添加券码管理和使用功能
- 新增券码批次配置和券码实体 - 实现券码创建、领取、使用等接口 - 添加券码状态和优惠类型枚举 - 优化价格计算逻辑,支持券码优惠 - 新增优惠检测和应用相关功能
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user