feat(voucher): 支持券码重复使用

- 新增VoucherBatchCreateReqV2 请求对象,用于创建支持重复使用的券码批次
- 添加 VoucherUsageController 控制器,实现券码使用记录和统计功能
- 在VoucherInfo 对象中增加与重复使用相关的字段
- 修改 PriceVoucherBatchConfig 和 PriceVoucherCode 实体,支持重复使用相关属性
- 更新 VoucherBatchServiceImpl 和 VoucherServiceImpl,增加处理重复使用逻辑的方法
This commit is contained in:
2025-09-16 01:08:54 +08:00
parent 5531c576e0
commit ce3f7aae1e
17 changed files with 1167 additions and 21 deletions

View File

@@ -0,0 +1,76 @@
package com.ycwl.basic.pricing.dto.resp;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 券码使用记录响应
*/
@Data
public class VoucherUsageRecordResp {
/**
* 记录ID
*/
private Long id;
/**
* 券码ID
*/
private Long voucherCodeId;
/**
* 券码
*/
private String voucherCode;
/**
* 使用用户faceId
*/
private Long faceId;
/**
* 景区ID
*/
private Long scenicId;
/**
* 批次ID
*/
private Long batchId;
/**
* 批次名称
*/
private String batchName;
/**
* 使用时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date useTime;
/**
* 关联订单ID
*/
private String orderId;
/**
* 优惠金额
*/
private BigDecimal discountAmount;
/**
* 使用备注
*/
private String remark;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}

View File

@@ -0,0 +1,85 @@
package com.ycwl.basic.pricing.dto.resp;
import lombok.Data;
/**
* 券码使用统计响应
*/
@Data
public class VoucherUsageStatsResp {
/**
* 券码ID
*/
private Long voucherCodeId;
/**
* 券码
*/
private String voucherCode;
/**
* 批次ID
*/
private Long batchId;
/**
* 批次名称
*/
private String batchName;
/**
* 景区ID
*/
private Long scenicId;
/**
* 券码状态
*/
private Integer status;
/**
* 状态名称
*/
private String statusName;
/**
* 当前使用次数
*/
private Integer currentUseCount;
/**
* 最大使用次数
*/
private Integer maxUseCount;
/**
* 每个用户最大使用次数
*/
private Integer maxUsePerUser;
/**
* 使用间隔小时数
*/
private Integer useIntervalHours;
/**
* 是否还可以使用
*/
private Boolean canUseMore;
/**
* 剩余可使用次数
*/
private Integer remainingUseCount;
/**
* 总使用记录数
*/
private Integer totalUsageRecords;
/**
* 最后使用时间
*/
private String lastUsedTime;
}