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(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

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

    /**
     * 按照项目属性统计所有的项目
     *
     * @return
     */
    StatisticalChartsResVo countByProjectAttr(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

    StatisticalChartsResVo countByEvaluationBet(@Param("vo") PmDemandReqVo pmDemandReqVo);

    StatisticalChartsResVo countByEvaluationGt(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

    /**
     * 本季度所有的逾期项目数
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedThisQua(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本月份所有的逾期项目数
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedThisMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 累计积压的执行滞后采购任务数
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedAllNum(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 执行停滞采购任务数量--退回的采购任务数量
     *
     * @return
     */
    StatisticalChartsResVo countProjectExceedTZ(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

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

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

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

    /**
     * 本月度新提报重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisMonthNew(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本季度新提报重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisQuaNew(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度新提报重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisYearNew(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本月度完成重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisMonthFi(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本月度完成重大规划采购任务数量(采购办)
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisMonthFiCGB(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本季度完成重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisQuaFi(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本季度完成重大规划采购任务数量(采购办)
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisQuaFiCGB(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度完成重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisYearFi(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度完成重大规划采购任务数量(采购办)
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusThisYearFiCGB(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 上年度结转：上年度“需求待提交”之后，“合同待填制”之前状态的项目属性为重大规划任务项目的数据
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 累计“合同待填制”之前状态的项目属性为重大规划任务项目的数据
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusToThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 正常推进周期内的重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusWei(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 执行滞后的重大规划采购任务数量
     *
     * @param
     * @return
     */
    StatisticalChartsResVo majorProjectByStatusChao(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

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

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

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

    /**
     * 项目执行进度统计--正常推进项目数量、预算金额
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo purchaseProjectExecuteNormalPropulsion(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 项目执行进度统计--未完成采购任务，预算金额
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo purchaseProjectExecuteIncomplete(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

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

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

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

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

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

    /**
     * 任务数量趋势分析：按照月、季度、年统计“项目属性”字段中“重大规划”属性的项目
     *
     * @param pmDemandReqVo
     * @return
     */
    List<StatisticalChartsResVo> countProjectMajorByYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    StatisticalChartsResVo countProjectMajorByQuarter(@Param("vo") PmDemandReqVo pmDemandReqVo);

    List<StatisticalChartsResVo> countProjectMajorByMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计本年度滞后的重大项目--暂未使用
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo countMajorProjectExceed(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计上年度滞后的重大项目--暂未使用
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo countMajorProjectLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

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

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

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

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

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

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

    /**
     * 本级和所属采购单位新提报采购需求数量
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectSTS(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 上年度“需求待提交”之后，“合同待填制”之前状态的数据
     *
     * @return
     */
    StatisticalChartsResVo selectSTSLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 指本年度“需求待提交”之后状态的数据
     *
     * @return
     */
    StatisticalChartsResVo selectSTSThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 超过计划需求提报时间的项目
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectmeiJiDu(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 项目类型情况统计
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectByProjectType(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本月相关采购机构完成采购任务
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectCGThisMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本季度相关采购机构完成采购任务
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectCGThisQua(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 上年度结转
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectZJLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度提报
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectTBThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 本年度提报
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectFInishAll(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 正常推进周期内的采购任务
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo selectCCThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计超过计划完成采购时间的项目中，处在各阶段的数据
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo countProjectExceedAndStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 所属采购机构数量--根据招标代理机构管理中的白名单数据显示
     *
     * @return
     */
    StatisticalChartsResVo countBaseAgencyWithWhite();

    /**
     * 新受领集中采购数量--状态为“任务待下达”之后的数据
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo JZCGnum(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 上年度结转任务数量
     *
     * @param pmDemandReqVo
     * @return
     */
    StatisticalChartsResVo countProjecReaAndStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的所有超过计划完成采购时间的数据
     *
     * @return
     */
    StatisticalChartsResVo countProjectACT_Year(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的所有超过计划完成采购时间的数据
     *
     * @return
     */
    StatisticalChartsResVo countProjectACT_Qua(@Param("vo") PmDemandReqVo pmDemandReqVo);

    /**
     * 统计不同时间维度的所有超过计划完成采购时间的数据
     *
     * @return
     */
    StatisticalChartsResVo countProjectACT_Mon(@Param("vo") PmDemandReqVo pmDemandReqVo);
}
