package com.cpop.oam.business.service;

import com.cpop.oam.business.vo.*;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.cpop.oam.business.bo.*;
import com.cpop.oam.business.entity.Task;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestParam;

import java.time.LocalDate;

/**
 * OAM-任务表 服务层。
 *
 * @author DB
 * @since 2023-09-15
 */
public interface TaskService extends IService<Task> {

    /**
     * 技术模块-任务归档-获取任务归档分页
     * @author DB
     * @param bo 请求
     * @since 2023-11-30 21:11:47
     */
    Page<TaskArchivingPagVo> getTaskArchivingPage(TaskArchivingPagBo bo);

    /**
     * 技术模块-任务归档-设置任务归档
     * @author DB
     * @param taskId 任务id
     * @since 2023-11-30 21:49:05
     */
    void setTaskArchiving(String taskId);

    /**
     * 技术模块-任务领取-获取领取任务分页
     * @author DB
     * @param subject 主体
     * @param taskContent 任务内容
     * @param taskGetStatus 任务领取状态(0:待领取;1:待评估;10:审核不通过)
     * @since 2023-11-30 22:21:58
     */
    Page<TaskToBeClaimedPageVo> getToBeClaimedPage(String subject, String taskContent, Integer taskGetStatus);

    /**
     * 技术模块-任务领取-新增迭代任务
     * @author DB
     * @param bo 请求
     * @since 2023-12-01 09:45:08
     */
    void insertIterationTask(TaskIterationBo bo);

    /**
     * 技术模块-任务领取-技术人员领取任务
     * @author DB
     * @param id 任务id
     * @since 2023-12-01 10:15:28
     */
    void claimTask(String id);

    /**
     * 技术模块-任务领取-任务审核
     * @author DB
     * @param bo 请求参数
     * @since 2023-12-01 10:35:31
     */
    void setTaskAuditComments(TaskAuditCommentsBo bo);

    /**
     * 技术模块-今日事务-个人任务分页列表
     * @author DB
     * @since 2023/12/04
     * @return Page<PersonTaskPageVo>
     */
    Page<PersonTaskPageVo> getPersonTaskPage(String staffId, LocalDate startDate, LocalDate endDate);

    /**
     * 技术模块-今日事务-转交任务
     * @author DB
     * @since 2023/12/04
     * @param bo 请求参数
     */
    void updateTaskItem(TaskItemBo bo);

    /**
     * 技术模块-今日事务-修改任务负责人
     * @author DB
     * @since 2023/12/04
     * @param bo 请求参数
     */
    void updateTaskResponsibleStaff(TransferTaskBo bo);

    /**
     * 技术模块-数据统计-获取月度任务统计列表
     * @author DB
     * @since 2023/12/04
     * @param bo 请求参数
     * @return R<TaskMonthStatisticsVo>
     */
    TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo);

    /**
     * 技术模块-今日事务-更新任务进度
     * @author DB
     * @since 2023/12/04
     * @param bo 请求参数
     */
    void updateTaskProgress(TaskProgressBo bo);

    /**
     * 技术模块-数据统计-获取任务日报
     * @author DB
     * @since 2023/12/05
     * @param bo 请求参数
     * @return String
     */
    String getTaskDailyPaper(TaskDailyPaperBo bo);

    /**
     * 技术模块-今日事务-个人绩点
     * @author DB
     * @since 2023/12/05
     * @return TaskIndividualGpaVo
     */
    TaskIndividualGpaVo getIndividualGpa(String staffId, LocalDate startDate,LocalDate endDate);

}
