package com.ozs.pm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.ozs.base.domain.vo.BaseExpertVo;
import com.ozs.pm.doman.PmDemand;
import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
import org.apache.ibatis.annotations.Param;

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


/**
 * 采购需求Mapper接口
 *
 * @author ruoyi
 * @date 2023-01-16
 */
public interface PmDemandMapper extends BaseMapper<PmDemand> {

    /**
     * 通过需求ID列表，查询采购执行列表 sunhh
     *
     * @param demandIdList
     * @return
     */
    List<PmDemand> selectByDemandIdList(@Param("demandIdList") List<Integer> demandIdList);

    /**
     * 专家库--查询抽取专家列表 非必传条件：专家名称，开始结束时间 sunhh
     *
     * @param baseExpertVo
     * @return
     */
    List<PmDemand> selectExtractionExpert(BaseExpertVo baseExpertVo);

    /**
     * 统计分析-采购项目信息统计-查询项目总数量
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectStatistical(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计分析-采购项目信息统计-查询已完成项目数量，预算金额数量
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectStatisticalYWC(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计分析-采购项目信息统计-查询新创建项目数量，预算金额数量
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectStatisticalXCJ(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计分析-采购项目信息统计-查询去年完成项目数量，预算金额数量
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectStatisticalQNWC(PmDemandReqVo pmDemandReqVo);

    /**
     * 按照项目属性统计所有的项目
     *
     * @return
     */
    List<StatisticalChartsResVo> countByProjectAttr(PmDemandReqVo pmDemandReqVo);

    /**
     * 按照采购方式统计所有的项目
     *
     * @return
     */
    List<StatisticalChartsResVo> countByPurchaseMode(PmDemandReqVo pmDemandReqVo);

    /**
     * 按照概算金额统计所有的项目
     *
     * @return
     */
    StatisticalChartsResVo countByEvaluationLt(PmDemandReqVo pmDemandReqVo);

    StatisticalChartsResVo countByEvaluationBet(PmDemandReqVo pmDemandReqVo);

    StatisticalChartsResVo countByEvaluationGt(PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度所有的逾期项目数
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceed(PmDemandReqVo pmDemandReqVo);

    /**
     * 年度逾期项目数量
     *
     * @return
     */
    Integer countThisYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的逾期项目
     *
     * @return
     */
    LinkedList<StatisticalChartsResVo> countProjectExceedYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的逾期项目
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedMonth(PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的逾期项目
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedQuarter(PmDemandReqVo pmDemandReqVo);

    /**
     * 所有滞后
     *
     * @return
     */
    List<PmDemand> countProjectExceedAll(PmDemandReqVo pmDemandReqVo);

    /**
     * //***状态：指本年度正在进行中的项目属性为“重大规划”的项目数
     * //预算金额：指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatus(PmDemandReqVo pmDemandReqVo);

    /**
     * //执行滞后数量：指本年度逾期项目中，项目属性为“重大规划”的项目数
     * //预算金额：指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedAndMajor();

    /**
     * 查询本年度的**状态的重大规划项目
     */
    List<StatisticalChartsResVo> taskQuantityYear(String code);

    /**
     * 查询上年度的**状态的重大规划项目
     */
    List<StatisticalChartsResVo> taskQuantityLastYear(String code);

    /**
     * @return
     */
    List<StatisticalChartsResVo> countEveryStatusNum(PmDemandReqVo pmDemandReqVo);

    /**
     * 通过计划ID查询项目
     *
     * @param planId
     * @return
     */
    PmDemand selectByPlanId(@Param("planId") Long planId);

    /**
     * 项目执行进度统计--正常推进项目数量、预算金额
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectExecuteNormalPropulsion(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目执行进度统计--未完成采购任务，预算金额
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, Integer> purchaseProjectExecuteIncomplete(PmDemandReqVo pmDemandReqVo);

    /**
     * 查询数据库年份最小值
     *
     * @return
     */
    Integer selectMinYear();

    /**
     * 已完成项目数量统计 -- 年份
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectpurchaseProjectCompleteNumberYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 已完成项目数量统计 -- 季度
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectpurchaseProjectCompleteNumberQuarter(PmDemandReqVo pmDemandReqVo);

    /**
     * 已完成项目数量统计 -- 月份
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectpurchaseProjectCompleteNumberMonth(PmDemandReqVo pmDemandReqVo);

    /**
     * 已完成采购任务数量统计 -- 年份
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectPurchaseTaskFinishYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 已完成采购任务数量统计 -- 季度
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectPurchaseTaskFinishQuarter(PmDemandReqVo pmDemandReqVo);

    /**
     * 已完成采购任务数量统计 -- 月份
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, Integer>> selectPurchaseTaskFinishMonth(PmDemandReqVo pmDemandReqVo);

    List<StatisticalChartsResVo> countProjectMajorByYear();

    StatisticalChartsResVo countProjectMajorByQuarter(PmDemandReqVo pmDemandReqVo);

    List<StatisticalChartsResVo> countProjectMajorByMonth(PmDemandReqVo pmDemandReqVo);

    List<StatisticalChartsResVo> countEveryStatusNumTwo();

    StatisticalChartsResVo countMajorProjectExceed(PmDemandReqVo pmDemandReqVo);

    StatisticalChartsResVo countMajorProjectLastYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 各阶段项目数量分布
     *
     * @param pmDemandReqVo
     * @return
     */
    Map<String, String> purchaseProjectDistribution(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目数量分析--年
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, String>> purchaseProjectNumberAnalysisYear(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目数量分析--季度
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, String>> purchaseProjectNumberAnalysisQuarter(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目数量分析--月份
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, String>> purchaseProjectNumberAnalysisMonth(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目数量分析--季度  去年数据
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, String>> purchaseProjectNumberAnalysisOldYearQuarter(PmDemandReqVo pmDemandReqVo);

    /**
     * 项目数量分析--月份  去年数据
     *
     * @param pmDemandReqVo
     * @return
     */
    List<Map<String, String>> purchaseProjectNumberAnalysisOldYearMonth(PmDemandReqVo pmDemandReqVo);
}
