package org.dromara.job.snailjob;

import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.client.model.ExecuteResult;
import lombok.RequiredArgsConstructor;
import org.dromara.work.domain.TzSharedAccount;
import org.dromara.work.domain.bo.TzSharedAccountBo;
import org.dromara.work.domain.vo.TzSharedAccountVo;
import org.dromara.work.service.ITzSharedAccountService;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: Maosw
 */
@Component
@RequiredArgsConstructor
@JobExecutor(name = "sharedAccountExecutor")
public class SharedAccountExecutor {

    private final ITzSharedAccountService tzSharedAccountService;

    /**
     * 执行作业
     *
     * 此方法用于处理作业的执行逻辑，主要负责检查共享账号的状态，并根据当前时间更新过期账号的状态
     *
     * @param jobArgs 作业参数，包含作业执行所需的信息
     * @return ExecuteResult 作业执行结果，包含执行状态和消息
     */
    public ExecuteResult jobExecute(JobArgs jobArgs) {
        try {
            // 创建共享账号业务对象，并设置状态为1，表示查询可用的共享账号
            TzSharedAccountBo bo = new TzSharedAccountBo();
            bo.setStatus(1);
            // 查询符合条件的共享账号列表
            List<TzSharedAccountVo> list = tzSharedAccountService.queryList(bo);

            // 如果列表为空，表示没有可用的共享账号，返回成功消息并结束执行
            if (list.isEmpty()) {
                return ExecuteResult.success("没有可用的共享账号");
            }

            // 创建一个空列表，用于存储需要更新的共享账号信息
            List<TzSharedAccount> list1 = new ArrayList<>();

            // 获取当前时间，用于后续判断账号是否过期
            long now = System.currentTimeMillis();
            // 遍历共享账号列表，检查每个账号的结束时间
            for (TzSharedAccountVo tzSharedAccountVo : list) {
                // 如果账号结束时间小于当前时间，表示账号已过期，需要更新其状态
                if (tzSharedAccountVo.getEndTime().getTime() < now) {
                    TzSharedAccount account = new TzSharedAccount();
                    account.setId(tzSharedAccountVo.getId());
                    account.setStatus(0);
                    // 将过期账号添加到待更新列表中
                    list1.add(account);
                }
            }

            // 如果待更新列表不为空，执行批量更新操作
            if (!list1.isEmpty()) {
                tzSharedAccountService.updateBatchById(list1);
            }

            // 作业执行成功，返回成功消息
            return ExecuteResult.success("执行成功");
        } catch (Exception e) {
            // 作业执行过程中发生异常，返回失败消息，并包含异常信息
            return ExecuteResult.failure("执行失败: " + e.getMessage());
        }
    }



}
