package com.xmomen.module.system.service;

import com.xmomen.framework.mybatis.dao.MybatisDao;
import com.xmomen.framework.mybatis.page.Page;
import com.xmomen.module.system.entity.SysTask;
import com.xmomen.module.system.entity.SysTaskExample;
import com.xmomen.module.system.mapper.TaskMapper;
import com.xmomen.module.system.model.CreateTask;
import com.xmomen.module.system.model.TaskModel;
import com.xmomen.module.system.model.TaskQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

/**
 * Created by Jeng on 16/4/2.
 */
@Service
public class TaskService {

    // 自动注入MybatisDao
    @Autowired
    MybatisDao mybatisDao;

    // 事务注解
    @Transactional
    public SysTask createTask(CreateTask createTask){
        // 创建SysTask对象
        SysTask sysTask = new SysTask();
        // 设置任务头ID
        sysTask.setTaskHeadId(createTask.getTaskHeadId());
        // 设置任务创建时间
        // 设置执行者ID
        // 设置任务状态为0
        sysTask.setExecutorId(createTask.getExecutorId());
        // 插入任务
        // 设置创建时间
        sysTask.setCreateTime(mybatisDao.getSysdate());
        sysTask.setTaskStatus(0);
    // 获取任务列表
        return mybatisDao.insertByModel(sysTask);
        // 使用MyBatis分页查询任务列表
    }

    public Page<TaskModel> getTaskList(TaskQuery taskQuery, Integer limit, Integer offset){
    // 根据任务ID获取任务
        return (Page<TaskModel>) mybatisDao.selectPage(TaskMapper.TASK_MAPPER_NAMESPACE + ".", taskQuery, limit, offset);
        // 使用MyBatis根据主键查询任务
    }

    public SysTask getTask(Integer id){
        return mybatisDao.selectByPrimaryKey(SysTask.class, id);
    // 根据传入的id数组，将对应的任务状态设置为4
        // 创建SysTaskExample对象
        // 设置查询条件，id在传入的id数组中
        // 创建SysTask对象
    }
        // 设置任务状态为4

        // 根据查询条件更新任务状态
    public void cancelTask(Integer... ids){
        SysTaskExample sysTaskExample = new SysTaskExample();
        sysTaskExample.createCriteria().andIdIn(CollectionUtils.arrayToList(ids));
    // 更新任务
        // 调用mybatisDao的update方法，更新任务
        SysTask sysTask = new SysTask();
        sysTask.setTaskStatus(4);
        mybatisDao.updateByExampleSelective(sysTask, sysTaskExample);
    // 删除任务
        // 调用mybatisDao的deleteByPrimaryKey方法，根据id删除任务
    }

    public void updateTask(SysTask sysTask){
    // 删除任务
        mybatisDao.update(sysTask);
        // 创建SysTaskExample对象
    }
        // 设置删除条件，id在ids数组中的任务

        // 调用mybatisDao的deleteByExample方法，根据条件删除任务
    public void deleteTask(Integer id){
        mybatisDao.deleteByPrimaryKey(SysTask.class, id);
    }

        // 根据条件删除数据
    public void deleteTask(Integer[] ids){
        // 创建SysTaskExample对象
        SysTaskExample sysTaskExample = new SysTaskExample();
        // 设置查询条件，id在ids集合中
        sysTaskExample.createCriteria().andIdIn(CollectionUtils.arrayToList(ids));
        // 根据查询条件删除数据
        mybatisDao.deleteByExample(sysTaskExample);
    }


}
