package com.ktg.iscs.service.impl;

import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ktg.common.core.text.Convert;
import com.ktg.common.utils.DateUtils;
import com.ktg.iscs.domain.IsCheckTask;
import com.ktg.iscs.mapper.IsCheckTaskMapper;
import com.ktg.iscs.service.IIsCheckTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 检查任务Service业务层处理
 *
 * @author cgj
 * @date 2024-12-12
 */
@Service
public class IsCheckTaskServiceImpl extends ServiceImpl<IsCheckTaskMapper, IsCheckTask> implements IIsCheckTaskService
{
    @Autowired
    private IsCheckTaskMapper isCheckTaskMapper;


    /**
     * 查询检查任务
     *
     * @param checkId 检查任务主键
     * @return 检查任务
     */
    @Override
    public IsCheckTask selectIsCheckTaskByCheckId(Long checkId)
    {
        return isCheckTaskMapper.selectIsCheckTaskByCheckId(checkId);
    }

    /**
     * 查询检查任务列表
     *
     * @param isCheckTask 检查任务
     * @return 检查任务
     */
    @Override
    public List<IsCheckTask> selectIsCheckTaskList(IsCheckTask isCheckTask)
    {
        return isCheckTaskMapper.selectIsCheckTaskList(isCheckTask);
    }

    /**
     * 新增检查任务
     *
     * @param isCheckTask 检查任务
     * @return 结果
     */
    @Transactional
    @Override
    public int insertIsCheckTask(IsCheckTask isCheckTask) {
        /*// 1.检查数据
        Assert.notBlank(isCheckTask.getCheckName(), "任务名称不可为空!");
        Assert.notBlank(isCheckTask.getCabinetIdStr(), "请选择需要检查的物资柜信息!");
        Assert.notBlank(isCheckTask.getUserIdStr(), "请选择参与人员信息!");
        Assert.notBlank(isCheckTask.getCron(), "请告知我cron!");
        // 2.开始新增定检查信息,但是缺失定时任务的关联信息，所以后面需要更新一下
        isCheckTaskMapper.insert(isCheckTask);
        // 3.新增定时任务
        SysJob sysJob = new SysJob();
        sysJob.setJobName(isCheckTask.getCheckName());
        sysJob.setJobGroup("DEFAULT");
        sysJob.setInvokeTarget("sendEmailsTask.checkMaterialsCabinet("+ isCheckTask.getCheckId() + ")");
        sysJob.setCronExpression(isCheckTask.getCron());
        sysJob.setMisfirePolicy("3");
        sysJob.setConcurrent("1");
        sysJob.setStatus("1");
        iSysJobService.insertJob(sysJob);
        // 4.更新定检查信息
        isCheckTaskMapper.update(Wrappers.<IsCheckTask>lambdaUpdate()
                .eq(IsCheckTask::getCheckId, isCheckTask.getCheckId())
                .set(IsCheckTask::getTaskId, sysJob.getJobId()));*/
        return isCheckTaskMapper.insertIsCheckTask(isCheckTask);
    }

    /**
     * 修改检查任务
     *
     * @param isCheckTask 检查任务
     * @return 结果
     */
    @Override
    public int updateIsCheckTask(IsCheckTask isCheckTask)
    {
        isCheckTask.setUpdateTime(DateUtils.getNowDate());
        return isCheckTaskMapper.updateIsCheckTask(isCheckTask);
    }

    /**
     * 批量删除检查任务
     *
     * @param checkIds 需要删除的检查任务主键
     * @return 结果
     */
    @Override
    public int deleteIsCheckTaskByCheckIds(String checkIds)
    {
        Assert.notBlank(checkIds, "请选择需要删除的数据!");
        Long[] longIds = Convert.toLongArray(checkIds);
        return isCheckTaskMapper.deleteIsCheckTaskByCheckIds(longIds);
    }

    /**
     * 删除检查任务信息
     *
     * @param checkId 检查任务主键
     * @return 结果
     */
    @Override
    public int deleteIsCheckTaskByCheckId(Long checkId)
    {
        return isCheckTaskMapper.deleteIsCheckTaskByCheckId(checkId);
    }

    @Override
    public Boolean checkMaterialsCabinet(Long checkId) {
        // 1.开始检查参数
        Assert.notNull(checkId, "当前任务缺失参数");
        // 2.查询当前任务
        IsCheckTask checkTask = getById(checkId);
        Assert.notNull(checkTask, "该任务不存在");
        // 3.开始检查人员信息
        //iSysUserService.



        return null;
    }
}
