package com.datacenter.job;

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

/**
 * 直邀赠送体验金定时任务
 *
 * <p>每半小时扫描一次过去 35 分钟内已完全平仓的合约仓位，
 * 对满足直邀体验金产品条件（开仓金额 / 持仓时长 / 交易对 / 活动有效期）
 * 且被邀请人有邀请关系的仓位，向邀请人发放对应体验金产品。</p>
 *
 * <p>去重机制：experience_gift_invite_grant_log 表的唯一键
 * (position_id, product_id) 保证每个仓位对每个产品只触发一次发放，
 * 任务重叠执行时通过 DuplicateKeyException 自动跳过。</p>
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class ExperienceGiftInviteGrantJob {

    private final ExperienceGiftInviteGrantService grantService;

//    @Scheduled(cron = "0 3,33 * * * ?")
    @Scheduled(cron = "0 */3 * * * *")
    public void run() {
        log.info("体验金直邀发放任务开始...");
        try {
            int count = grantService.checkAndGrantInviteGifts();
            log.info("体验金直邀发放任务完成，本次发放 {} 张", count);
        } catch (Exception e) {
            log.error("体验金直邀发放任务异常", e);
        }
    }
}
