Files
FrameTour-BE/src/main/java/com/ycwl/basic/pricing/service/ICouponService.java
Jerry Yan 3fbfb7df54 feat(coupon): 添加优惠券领取功能
- 新增 CouponClaimRequest 和 CouponClaimResult 类用于处理优惠券领取请求和结果
- 在 ICouponService 接口中添加 claimCoupon 方法
- 在 CouponServiceImpl 中实现 claimCoupon 方法,包括参数验证、优惠券查询、库存检查、记录创建等步骤
- 优化日志记录和异常处理
2025-08-29 13:49:30 +08:00

72 lines
2.0 KiB
Java

package com.ycwl.basic.pricing.service;
import com.ycwl.basic.pricing.dto.CouponInfo;
import com.ycwl.basic.pricing.dto.CouponUseRequest;
import com.ycwl.basic.pricing.dto.CouponUseResult;
import com.ycwl.basic.pricing.dto.CouponClaimRequest;
import com.ycwl.basic.pricing.dto.CouponClaimResult;
import com.ycwl.basic.pricing.dto.ProductItem;
import com.ycwl.basic.pricing.entity.PriceCouponConfig;
import java.math.BigDecimal;
import java.util.List;
/**
* 优惠券服务接口
*/
public interface ICouponService {
/**
* 自动选择最优优惠券
*
* @param userId 用户ID
* @param products 商品列表
* @param totalAmount 总金额
* @return 最优优惠券信息,如果没有可用优惠券则返回null
*/
CouponInfo selectBestCoupon(Long userId, List<ProductItem> products, BigDecimal totalAmount);
/**
* 计算优惠券优惠金额
*
* @param coupon 优惠券配置
* @param products 商品列表
* @param totalAmount 总金额
* @return 优惠金额
*/
BigDecimal calculateCouponDiscount(PriceCouponConfig coupon, List<ProductItem> products, BigDecimal totalAmount);
/**
* 验证优惠券是否可用
*
* @param coupon 优惠券配置
* @param products 商品列表
* @param totalAmount 总金额
* @return 是否可用
*/
boolean isCouponApplicable(PriceCouponConfig coupon, List<ProductItem> products, BigDecimal totalAmount);
/**
* 使用优惠券
*
* @param request 优惠券使用请求
* @return 使用结果
*/
CouponUseResult useCoupon(CouponUseRequest request);
/**
* 查询用户可用优惠券
*
* @param userId 用户ID
* @return 可用优惠券列表
*/
List<CouponInfo> getUserAvailableCoupons(Long userId);
/**
* 领取优惠券(内部调用方法)
*
* @param request 领取请求
* @return 领取结果
*/
CouponClaimResult claimCoupon(CouponClaimRequest request);
}