package com.ruoyi.system.service.impl;

import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.SysExportTask;
import com.ruoyi.system.mapper.SysExportTaskMapper;
import com.ruoyi.system.service.ISysExportTaskService;

/**
 * 导出任务Service业务层处理
 */
@Service
public class SysExportTaskServiceImpl implements ISysExportTaskService
{
    @Autowired
    private SysExportTaskMapper exportTaskMapper;

    @Override
    public Long createExportTask(SysExportTask task)
    {
        task.setStatus(SysExportTask.STATUS_PENDING);
        task.setProgress(0);
        task.setCreateTime(DateUtils.getNowDate());
        exportTaskMapper.insertExportTask(task);
        return task.getTaskId();
    }

    @Override
    public int updateExportTask(SysExportTask task)
    {
        return exportTaskMapper.updateExportTask(task);
    }

    @Override
    public SysExportTask selectExportTaskById(Long taskId)
    {
        return exportTaskMapper.selectExportTaskById(taskId);
    }

    @Override
    public List<SysExportTask> selectExportTaskList(SysExportTask task)
    {
        return exportTaskMapper.selectExportTaskList(task);
    }

    @Override
    public int deleteExportTaskById(Long taskId)
    {
        return exportTaskMapper.deleteExportTaskById(taskId);
    }

    @Override
    public int deleteExportTaskByIds(Long[] taskIds)
    {
        return exportTaskMapper.deleteExportTaskByIds(taskIds);
    }

    @Override
    public void updateProgress(Long taskId, int processedCount, int totalCount)
    {
        SysExportTask task = new SysExportTask();
        task.setTaskId(taskId);
        task.setProcessedCount(processedCount);
        task.setTotalCount(totalCount);
        if (totalCount > 0)
        {
            int progress = (int) ((processedCount * 100.0) / totalCount);
            task.setProgress(Math.min(progress, 99));
        }
        task.setStatus(SysExportTask.STATUS_PROCESSING);
        exportTaskMapper.updateExportTask(task);
    }

    @Override
    public void markSuccess(Long taskId, String filePath, String fileName, Long fileSize)
    {
        SysExportTask task = new SysExportTask();
        task.setTaskId(taskId);
        task.setStatus(SysExportTask.STATUS_SUCCESS);
        task.setProgress(100);
        task.setFilePath(filePath);
        task.setFileName(fileName);
        task.setFileSize(fileSize);
        task.setFinishTime(new Date());
        exportTaskMapper.updateExportTask(task);
    }

    @Override
    public void markFailed(Long taskId, String errorMsg)
    {
        SysExportTask task = new SysExportTask();
        task.setTaskId(taskId);
        task.setStatus(SysExportTask.STATUS_FAILED);
        task.setErrorMsg(errorMsg);
        task.setFinishTime(new Date());
        exportTaskMapper.updateExportTask(task);
    }

    @Override
    public List<SysExportTask> selectExpiredExportTasks(int expireDays)
    {
        return exportTaskMapper.selectExpiredExportTasks(expireDays);
    }
}
