package com.fs.qw.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.qw.domain.HyWorkTask;
import com.fs.qw.domain.QwWorkTask;
import com.fs.qw.param.QwWorkTaskListParam;
import com.fs.qw.vo.QwWorkTaskListVO;

import java.util.List;
import java.util.Map;

/**
 * 企微任务看板Service接口
 *
 * @author fs
 * @date 2025-03-18
 */
public interface IHyWorkTaskService extends IService<HyWorkTask>{
    /**
     * 查询企微任务看板
     *
     * @param id 企微任务看板主键
     * @return 企微任务看板
     */
    HyWorkTask selectHyWorkTaskById(Long id);

    /**
     * 查询企微任务看板列表
     *
     * @param qwWorkTask 企微任务看板
     * @return 企微任务看板集合
     */
    List<HyWorkTask> selectHyWorkTaskList(HyWorkTask qwWorkTask);

    /**
     * 新增企微任务看板
     *
     * @param qwWorkTask 企微任务看板
     * @return 结果
     */
    int insertHyWorkTask(HyWorkTask qwWorkTask);

    /**
     * 修改企微任务看板
     *
     * @param qwWorkTask 企微任务看板
     * @return 结果
     */
    int updateHyWorkTask(HyWorkTask qwWorkTask);

    /**
     * 批量删除企微任务看板
     *
     * @param ids 需要删除的企微任务看板主键集合
     * @return 结果
     */
    int deleteHyWorkTaskByIds(Long[] ids);

    /**
     * 删除企微任务看板信息
     *
     * @param id 企微任务看板主键
     * @return 结果
     */
    int deleteHyWorkTaskById(Long id);
    /**
     * 根据用户首次上课情况，添加相应的企微任务。
     * 用于处理首次课程触发的任务创建逻辑。
     */
    void addHyWorkByFirstCourse();

    /**
     * 根据用户上课情况（通用逻辑），添加相应的企微任务。
     * 用于处理一般课程事件触发的任务创建逻辑。
     */
    void addHyWorkByCourse();

    /**
     * 根据转化日（或特定业务日期节点）情况，添加相应的企微任务。
     * 用于处理基于特定日期或转化阶段的任务创建逻辑。
     */
    void  addHyWorkByConversionDay();

    List<QwWorkTaskListVO> selectHyWorkTaskListVONew(QwWorkTaskListParam qwWorkTask);
    Long selectHyWorkTaskListVONewCount(QwWorkTaskListParam qwWorkTask);

    /**
     * 根据特定课程逻辑（可能与课程编号4或第四阶段相关）添加企微任务。
     * 用于处理与特定课程标识（如'4'）相关的任务创建逻辑。
     */
    void addHyWorkByCourse4();

    /**
     * 删除已完成、过期或不再需要的企微任务。
     * 用于定期清理或处理生命周期结束的任务。
     */
    void delHyWorkTaskByOver();
    /**
     * 根据用户最后一次上课时间或课程结束时间情况，添加相应的企微任务。
     * 用于处理基于课程结束或最后活动时间的任务创建逻辑。
     */
    void addHyWorkByCourseLastTime();

    /**
     * 查询企微任务看板
     * @param params 参数
     * @return list
     */
    List<HyWorkTask> selectHyWorkTaskListByMap(Map<String, Object> params);

    void hyWorkTask();

}
