package cn.iocoder.yudao.module.workReport.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
import cn.iocoder.yudao.module.workReport.entity.WorkReport;
import cn.iocoder.yudao.module.workReport.vo.WorkReportPageReqVO;
import cn.iocoder.yudao.module.workReport.vo.WorkReportRespVO;
import cn.iocoder.yudao.module.workReport.vo.WorkReportSaveReqVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.*;
import javax.validation.*;

/**
 * 工作汇报 Service 接口
 *
 * @author lighting
 */
public interface WorkReportService extends IService<WorkReport> {

    /**
     * 创建工作汇报
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createReport(@Valid WorkReportSaveReqVO createReqVO);

    /**
     * 更新工作汇报
     *
     * @param updateReqVO 更新信息
     */
    void updateReport(@Valid WorkReportSaveReqVO updateReqVO);

    /**
     * 删除工作汇报
     *
     * @param id 编号
     */
    void deleteReport(Integer id);

    /**
     * 获得工作汇报
     *
     * @param id 编号
     * @return 工作汇报
     */
    WorkReport getReport(Integer id);

    /**
     * 获得工作汇报分页
     *
     * @param pageReqVO 分页查询
     * @return 工作汇报分页
     */
    IPage<WorkReportRespVO> getReportPage(Page<WorkReport> page, WorkReportPageReqVO pageReqVO);

    /**
     * 查询汇报对象
     *
     * @param dictType 字典类型
     * @return
     */
    List<UserDTO> queryReportTo(String dictType);

    /**
     * 查询汇报对象数量
     *
     * @return
     */
    Long queryReportCount(WorkReportPageReqVO pageReqVO);

    /**
     * 工作汇报预览
     *
     * @param id 工作汇报id
     * @return 工作汇报详情
     */
    String workReportView(Integer id);
}