You've already forked FrameTour-BE
feat(coupon): 添加优惠券领取后有效期功能
- 在 PriceCouponClaimRecord 实体中添加过期时间字段 - 在 PriceCouponConfig 实体中添加领取后有效天数配置 - 更新查询可用优惠券的 SQL 条件以过滤过期券 - 修改插入领用记录的 SQL 语句以包含过期时间 - 实现领取时根据配置计算过期时间的逻辑
This commit is contained in:
@@ -34,6 +34,12 @@ public class PriceCouponClaimRecord {
|
||||
*/
|
||||
private Date claimTime;
|
||||
|
||||
/**
|
||||
* 过期时间(根据领取时间+领取后有效期计算)
|
||||
*/
|
||||
@TableField("expire_time")
|
||||
private Date expireTime;
|
||||
|
||||
/**
|
||||
* 使用时间
|
||||
*/
|
||||
|
||||
@@ -86,6 +86,11 @@ public class PriceCouponConfig {
|
||||
*/
|
||||
private Date validUntil;
|
||||
|
||||
/**
|
||||
* 领取后有效天数(NULL表示不限制,仅使用全局有效期)
|
||||
*/
|
||||
private Integer validDaysAfterClaim;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
|
||||
@@ -25,7 +25,8 @@ public interface PriceCouponClaimRecordMapper extends BaseMapper<PriceCouponClai
|
||||
"FROM price_coupon_claim_record r " +
|
||||
"JOIN price_coupon_config c ON r.coupon_id = c.id " +
|
||||
"WHERE r.user_id = #{userId} AND r.status = 'CLAIMED' " +
|
||||
"AND c.is_active = 1 AND c.valid_from <= NOW() AND c.valid_until > NOW()")
|
||||
"AND c.is_active = 1 AND c.valid_from <= NOW() AND c.valid_until > NOW() " +
|
||||
"AND (r.expire_time IS NULL OR r.expire_time > NOW())")
|
||||
List<PriceCouponClaimRecord> selectUserAvailableCoupons(Long userId);
|
||||
|
||||
/**
|
||||
@@ -58,8 +59,8 @@ public interface PriceCouponClaimRecordMapper extends BaseMapper<PriceCouponClai
|
||||
/**
|
||||
* 插入优惠券领用记录
|
||||
*/
|
||||
@Insert("INSERT INTO price_coupon_claim_record (coupon_id, user_id, claim_time, status, scenic_id, create_time, update_time) " +
|
||||
"VALUES (#{couponId}, #{userId}, NOW(), #{status}, #{scenicId}, NOW(), NOW())")
|
||||
@Insert("INSERT INTO price_coupon_claim_record (coupon_id, user_id, claim_time, expire_time, status, scenic_id, create_time, update_time) " +
|
||||
"VALUES (#{couponId}, #{userId}, NOW(), #{expireTime}, #{status}, #{scenicId}, NOW(), NOW())")
|
||||
int insertClaimRecord(PriceCouponClaimRecord record);
|
||||
|
||||
/**
|
||||
|
||||
@@ -358,6 +358,15 @@ public class CouponServiceImpl implements ICouponService {
|
||||
claimRecord.setCouponId(request.getCouponId());
|
||||
claimRecord.setUserId(request.getUserId());
|
||||
claimRecord.setClaimTime(claimTime);
|
||||
|
||||
// 如果配置了领取后有效天数,计算过期时间
|
||||
if (coupon.getValidDaysAfterClaim() != null && coupon.getValidDaysAfterClaim() > 0) {
|
||||
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
||||
calendar.setTime(claimTime);
|
||||
calendar.add(java.util.Calendar.DAY_OF_MONTH, coupon.getValidDaysAfterClaim());
|
||||
claimRecord.setExpireTime(calendar.getTime());
|
||||
}
|
||||
|
||||
claimRecord.setStatus(CouponStatus.CLAIMED);
|
||||
claimRecord.setScenicId(request.getScenicId());
|
||||
claimRecord.setCreateTime(claimTime);
|
||||
|
||||
Reference in New Issue
Block a user