package com.ruoyi.oa.service;

import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo;
import com.ruoyi.oa.domain.dto.ProjectActivityDTO;
import com.ruoyi.oa.domain.dto.ProjectDataDTO;
import com.ruoyi.oa.domain.vo.DashboardChartsVo;
import com.ruoyi.oa.domain.vo.DashboardMetricsVo;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * 项目管理Service接口
 *
 * @author huangxing
 * @date 2024-01-11
 */
public interface ISysOaProjectService {

    /**
     * 查询项目管理
     */
    SysOaProjectVo queryById(Long projectId);

    /**
     * 查询项目管理列表
     */
    TableDataInfo<SysOaProjectVo> queryPageList(SysOaProjectBo bo, PageQuery pageQuery);

    /**
     * 查询项目管理列表
     */
    List<SysOaProjectVo> queryList(SysOaProjectBo bo);

    /**
     * 新增项目管理
     */
    Boolean insertByBo(SysOaProjectBo bo);

    /**
     * 修改项目管理
     */
    Boolean updateByBo(SysOaProjectBo bo);

    /**
     * 校验并批量删除项目管理信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    TableDataInfo<SysOaOutWarehouseListVo> queryOutWarePageList(SysOaWarehouseDetailBo bo, PageQuery pageQuery);


    /**
     * 获取每个项目当月的人力资源成本（人天）
     * @return
     */
    List<SysOaProjectVo> getProjectDataByMonth(Date date);


    /**
     * 统计项目活跃度需要
     * @return
     */
    List<SysOaProjectVo> getProjectDataByMonthAndDate();

    TableDataInfo<SysOaProjectVo> queryFiles(SysOaWarehouseDetailBo bo, PageQuery pageQuery);

    /**
     * 查询进度使用的查询接口
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<SysOaProjectVo> queryPageList2(SysOaProjectBo bo, PageQuery pageQuery);

    TableDataInfo<SysOaProjectVo> listProjects(SysOaProjectBo bo, PageQuery pageQuery);

    TableDataInfo<SysOaProjectVo> listWareProject(SysOaProjectBo bo, PageQuery pageQuery);



    DashboardMetricsVo getMetrics(Date start, Date end,Long tradeType);

    DashboardChartsVo getCharts(Date start, Date end,Long tradeType);

    List<SysOaProjectVo> getExpiringForeignProjects(Integer days,Long tradeType);

    List<ProjectDataDTO> getProjectData(String month);
    List<ProjectActivityDTO> getProjectActivities();
}
