feat(pricing): 添加一口价购买功能

- 新增 OnePricePurchaseController 控制器
- 新增 OnePriceConfigFilterRequest、OnePriceConfigRequest、OnePriceInfo等 DTO 类
- 新增 PriceOnePriceConfig 实体类和对应的 Mapper 接口
- 实现 OnePricePurchaseDiscountProvider 优惠提供者
- 实现 OnePricePurchaseServiceImpl 服务实现类
-定义 IOnePricePurchaseService服务接口
- 优化 DiscountDetail 类,添加创建一口价折扣的方法
- 修改 CLAUDE.md,将 error 方法改为 fail 方法
This commit is contained in:
2025-09-05 11:09:54 +08:00
parent 5210b50adb
commit 50c84ac1c9
11 changed files with 1104 additions and 2 deletions

View File

@@ -86,5 +86,17 @@ public class DiscountDetail {
detail.setSortOrder(5); // 打包购买排在后面
return detail;
}
/**
* 创建一口价购买折扣明细
*/
public static DiscountDetail createOnePriceDiscount(BigDecimal discountAmount) {
DiscountDetail detail = new DiscountDetail();
detail.setDiscountType("ONE_PRICE_PURCHASE");
detail.setDiscountName("一口价购买优惠");
detail.setDiscountAmount(discountAmount);
detail.setDescription("一口价购买,价格更优惠");
detail.setSortOrder(4); // 一口价排在打包购买之前
return detail;
}
}

View File

@@ -0,0 +1,37 @@
package com.ycwl.basic.pricing.dto;
import lombok.Data;
/**
* 一口价配置筛选请求DTO
*/
@Data
public class OnePriceConfigFilterRequest {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 页大小
*/
private Integer pageSize = 10;
/**
* 景区ID(筛选条件)
*/
private Long scenicId;
/**
* 配置名称(模糊查询)
*/
private String configName;
// 移除faceId字段,一口价是景区级别的统一价格
/**
* 启用状态
*/
private Boolean isActive;
}

View File

@@ -0,0 +1,65 @@
package com.ycwl.basic.pricing.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 一口价配置请求DTO
*/
@Data
public class OnePriceConfigRequest {
/**
* 配置名称
*/
private String configName;
/**
* 景区ID
*/
private Long scenicId;
// 移除faceId字段,一口价是景区级别的统一价格
/**
* 一口价格
*/
private BigDecimal onePrice;
/**
* 原价(用于计算和展示优惠金额)
*/
private BigDecimal originalPrice;
/**
* 描述
*/
private String description;
/**
* 是否启用
*/
private Boolean isActive;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 是否可与优惠券叠加使用
*/
private Boolean canUseCoupon;
/**
* 是否可与券码叠加使用
*/
private Boolean canUseVoucher;
}

View File

@@ -0,0 +1,59 @@
package com.ycwl.basic.pricing.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
* 一口价信息DTO(用于优惠检测)
*/
@Data
public class OnePriceInfo {
/**
* 配置ID
*/
private Long configId;
/**
* 配置名称
*/
private String configName;
/**
* 景区ID
*/
private Long scenicId;
// 移除faceId字段,一口价是景区级别的统一价格
/**
* 一口价格
*/
private BigDecimal onePrice;
/**
* 原价(用于计算和展示优惠金额)
*/
private BigDecimal originalPrice;
/**
* 实际优惠金额(当前总价 - 一口价)
*/
private BigDecimal actualDiscountAmount;
/**
* 是否可与优惠券叠加使用
*/
private Boolean canUseCoupon;
/**
* 是否可与券码叠加使用
*/
private Boolean canUseVoucher;
/**
* 描述
*/
private String description;
}