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

@@ -0,0 +1,122 @@
package com.ycwl.basic.pricing.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 一口价购买配置实体
* 一口价:用户(faceId)在特定景区内所有商品的一次性购买优惠价格
*/
@Data
@TableName("price_one_price_config")
public class PriceOnePriceConfig {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 配置名称
*/
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;
@TableField("create_time")
private LocalDateTime createTime;
@TableField("update_time")
private LocalDateTime updateTime;
private Long createBy;
private Long updateBy;
private Integer deleted;
@TableField("deleted_at")
private LocalDateTime deletedAt;
/**
* 检查是否在有效时间范围内
*/
public boolean isTimeValid() {
LocalDateTime now = LocalDateTime.now();
// 如果没有设置时间范围,则始终有效
if (startTime == null && endTime == null) {
return true;
}
// 检查开始时间
if (startTime != null && now.isBefore(startTime)) {
return false;
}
// 检查结束时间
if (endTime != null && now.isAfter(endTime)) {
return false;
}
return true;
}
// 移除isUserMatch方法,一口价适用于所有用户
/**
* 检查景区是否匹配
*/
public boolean isScenicMatch(Long userScenicId) {
return scenicId != null && scenicId.equals(userScenicId);
}
}