package com.datacenter.job;

import com.datacenter.service.ExperienceGiftExpireService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 体验金到期失效定时任务
 *
 * <p>每半小时扫描一次，将所有已到期且未使用（status=0, expire_at &lt; NOW()）
 * 的体验金券批量置为已过期（status=4），并记录 closed_at 时间。</p>
 *
 * <p>说明：</p>
 * <ul>
 *   <li>仅处理 status=0（待使用）的券；</li>
 *   <li>status=1（持仓中）到期的券需触发强制平仓，由交易引擎处理，不在本任务范围内。</li>
 * </ul>
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class ExperienceGiftExpireJob {

    private final ExperienceGiftExpireService expireService;

    @Scheduled(cron = "0 7,37 * * * ?")
    public void run() {
        log.info("体验金到期失效任务开始...");
        try {
            int count = expireService.expireUnusedRecords();
            log.info("体验金到期失效任务完成，本次处理 {} 张", count);
        } catch (Exception e) {
            log.error("体验金到期失效任务异常", e);
        }
    }
}
