<?php

namespace crmeb\jobs;

use crmeb\interfaces\JobInterface;
use think\facade\Log;

class SharedProsperityUserLevelUpgradeJob implements JobInterface
{

    public function fire($job, $data)
    {
        // 1. 这里是任务执行的业务逻辑
        Log::error('SharedProsperityUserLevelUpgradeJob：' . json_encode($data));
        $uid = $data['uid'] ?? 0;
        if (!$uid) {
            // 数据无效，直接删除任务
            $job->delete();
            return;
        }

        try {
            // 例如： (new UserLevelService())->upgradeByConsume($uid);

            // 2. 业务逻辑执行成功后，务必删除任务，防止任务重复执行
            $job->delete();
            // 可以记录日志：info("用户升级任务执行成功: " . $uid);

        } catch (\Throwable $e) {
            // 3. 执行失败的处理
            // 如果重试次数超过3次，则删除任务并记录错误日志
            if ($job->attempts() > 3) {
                $job->delete();
                // 记录错误日志：error("用户升级任务最终失败: " . $uid . ", 错误:" . $e->getMessage());
            } else {
                // 否则，延迟 10 秒后重新执行
                $job->release(10);
            }
        }
    }

    public function failed($data)
    {
        // 记录失败日志
        // error("用户升级任务失败: ", $data);
    }
}