package com.usky.pm.service;

import com.usky.common.core.bean.CommonPage;
import com.usky.pm.domain.PmProject;
import com.usky.common.mybatis.core.CrudService;
import com.usky.pm.service.vo.PmProjectWorkTimeTwoVo;
import com.usky.pm.service.vo.PmUsersProjectWorkTimeVO;

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

/**
 * <p>
 * 项目表 服务类
 * </p>
 *
 * @author fu
 * @since 2024-05-20
 */
public interface PmProjectService extends CrudService<PmProject> {

    /**
     * 新增、编辑项目
     *
     * @param project
     */
    void addProject(PmProject project);

    /**
     * 删除
     *
     * @param projectId 项目id
     */
    void delProject(Integer projectId);

    /**
     * 查询当前租户所有项目
     *
     * @return
     */
    List<PmProject> queryProject();

    /**
     * 分页
     *
     * @param projectName       项目名
     * @param projectType       类型
     * @param projectStatus     状态
     * @param projectAscription 项目归属类型
     * @param pageNum           页码
     * @param pageSize          页大小
     * @return
     */
    CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize, Integer projectId, Byte visibleRange);

    /**
     * 查询项目名
     *
     * @param projectIds
     * @return
     */
    List<PmProject> projectName(List<Integer> projectIds);

    /**
     * 所有、我负责、我参与项目数量统计
     *
     * @return
     */
    Map<String, Integer> sum();

    /**
     * 人员查询（项目负责人、成员）
     *
     * @return
     */
    List<Map<String, Object>> projectUsers(Long userId);

    /**
     * 所有项目id和名称
     *
     * @return
     */
    List<Map<String, Object>> projectIdName(Integer projectId);

    /**
     * 人员或项目下拉
     *
     * @param identifying 标识：1，返回人员userId和nickName；2：返回ProjectId和ProjectName
     * @return
     */
    List<Map<String, Object>> userOrProject(Integer identifying);

    /**
     * 退出项目
     *
     * @param projectId
     */
    void exitProject(Integer projectId);

    /**
     * 项目概览-项目-工时统计
     *
     * @param projectId
     * @param startDate
     * @param endDate
     * @return
     */
    PmProjectWorkTimeTwoVo projectWorkTime(Integer projectId, String startDate, String endDate);

    /**
     * 项目概览-人员-项目工时统计
     *
     * @param projectId
     * @return
     */
    PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId, String startDate, String endDate);

    /**
     * 加入项目
     *
     * @param projectId
     * @return
     */
    void joinProject(Integer projectId);
}
