package com.usky.pm.service;

import com.usky.common.core.bean.CommonPage;
import com.usky.pm.domain.PmWorkContent;
import com.usky.common.mybatis.core.CrudService;
import com.usky.pm.domain.PmWorkReport;
import com.usky.pm.service.vo.PmWorkHourStatisticRequestVO;
import com.usky.pm.service.vo.PmWorkReportSlideVO;
import com.usky.pm.service.vo.WorkTimeExportTwoVO;
import com.usky.pm.service.vo.WorkTimeExportVO;

import com.usky.system.domain.SysUser;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 工作内容表 服务类
 * </p>
 *
 * @author fu
 * @since 2024-05-20
 */
public interface PmWorkContentService extends CrudService<PmWorkContent> {

    /**
     * 清空报告内容
     *
     * @param reportId 报告id
     */
    void deleteContent(Integer reportId);

    /**
     * 报告记录中查询项目名与id
     *
     * @param startDate         开始时间
     * @param endDate           结束时间
     * @param projectName       项目名
     * @param projectAscription 查询标识（1：我负责的；2：我收到，3：我发出的）
     * @return
     */
    List<PmWorkContent> projectQuery(String startDate, String endDate, String projectName, Integer projectAscription, Long submitterId);

    /**
     * 报告记录
     *
     * @param startDate         开始时间
     * @param endDate           结束时间
     * @param projectName       项目名
     * @param projectAscription 查询标识（1：我负责的；2：抄送我的；3；我发出）
     * @return
     */
    List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription, Integer reportId);

    /**
     * 获取用户信息
     *
     * @param userIds
     * @return
     */
    List<SysUser> nickNames(List<Long> userIds);

    /**
     * 报告详情分页列表
     * @param projectAscription 1:我负责；2：我收到；3：我发出
     * @param pageNum 页数
     * @param pageSize 页大小
     * @param upOrDown 上下滑动（0：下滑；1：上滑）
     * @param slideSum 滑动数量
     * @param submitDate 提交时间
     * @return''
     */
    CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer report, String startDate,
                                        String endDate, Integer projectId, Long userId, Integer upOrDown, Integer slideSum, String submitDate);

    /**
     * @description:
     * @author: fu
     * @date: 2024/12/9 23:01
     * @param: [upOrDown 上下滑动（0：上滑；1：下滑）, slideSum（滑动数量）, submitDate（提交时间）]
     * @return: java.util.List<com.usky.pm.service.vo.PmWorkReportSlideVO>
     **/
    PmWorkReportSlideVO slide(Integer upOrDown, Integer slideSum, LocalDateTime submitDate);

    /** 工时统计页面
     * @return 返回项目名（或牛马名）以及项目工时
     */
    List<Object> workHourStatisticNew(PmWorkHourStatisticRequestVO requestVO);
    //回退代码
    List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject);


    /** 工时明细导出
     * @return
     */
    List<WorkTimeExportVO> workHourStatisticExport(PmWorkHourStatisticRequestVO requestVO);


    /** 工时统计导出
     * @param userId          用户id
     * @param startDate       开始时间
     * @param endDate         结束时间
     * @return 返回项目名（或牛马名）以及项目工时
     */
    List<WorkTimeExportTwoVO> workHourExport(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject);

}
