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;
|
private Date claimTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 过期时间(根据领取时间+领取后有效期计算)
|
||||||
|
*/
|
||||||
|
@TableField("expire_time")
|
||||||
|
private Date expireTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用时间
|
* 使用时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -86,6 +86,11 @@ public class PriceCouponConfig {
|
|||||||
*/
|
*/
|
||||||
private Date validUntil;
|
private Date validUntil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 领取后有效天数(NULL表示不限制,仅使用全局有效期)
|
||||||
|
*/
|
||||||
|
private Integer validDaysAfterClaim;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否启用
|
* 是否启用
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ public interface PriceCouponClaimRecordMapper extends BaseMapper<PriceCouponClai
|
|||||||
"FROM price_coupon_claim_record r " +
|
"FROM price_coupon_claim_record r " +
|
||||||
"JOIN price_coupon_config c ON r.coupon_id = c.id " +
|
"JOIN price_coupon_config c ON r.coupon_id = c.id " +
|
||||||
"WHERE r.user_id = #{userId} AND r.status = 'CLAIMED' " +
|
"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);
|
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) " +
|
@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(), #{status}, #{scenicId}, NOW(), NOW())")
|
"VALUES (#{couponId}, #{userId}, NOW(), #{expireTime}, #{status}, #{scenicId}, NOW(), NOW())")
|
||||||
int insertClaimRecord(PriceCouponClaimRecord record);
|
int insertClaimRecord(PriceCouponClaimRecord record);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -358,6 +358,15 @@ public class CouponServiceImpl implements ICouponService {
|
|||||||
claimRecord.setCouponId(request.getCouponId());
|
claimRecord.setCouponId(request.getCouponId());
|
||||||
claimRecord.setUserId(request.getUserId());
|
claimRecord.setUserId(request.getUserId());
|
||||||
claimRecord.setClaimTime(claimTime);
|
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.setStatus(CouponStatus.CLAIMED);
|
||||||
claimRecord.setScenicId(request.getScenicId());
|
claimRecord.setScenicId(request.getScenicId());
|
||||||
claimRecord.setCreateTime(claimTime);
|
claimRecord.setCreateTime(claimTime);
|
||||||
|
|||||||
Reference in New Issue
Block a user