feat(pricing): 添加券码管理和使用功能

- 新增券码批次配置和券码实体
- 实现券码创建、领取、使用等接口
- 添加券码状态和优惠类型枚举
- 优化价格计算逻辑,支持券码优惠
- 新增优惠检测和应用相关功能
This commit is contained in:
2025-08-21 09:35:08 +08:00
parent e9035af542
commit eb327723cd
52 changed files with 2572 additions and 455 deletions

View File

@@ -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;
}
}