package com.ruoyi.web.modules.industryservice.research.service;

import java.util.Date;
import com.ruoyi.web.modules.industryservice.domain.dto.OpenApiPageResult;
import com.ruoyi.web.modules.industryservice.research.domain.dto.ResearchTokenVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchCooperativeDevelopmentVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchCommonProsperityProjectVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchDisposableIncomeVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchFamilyRanchVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchFarmerHouseholdVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchLargeLivestockFarmerVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchLivestockOwnershipHouseholdVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchLivestockProductOutputVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchPastureVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchRuralThreeAssetsVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchTechServicePersonnelVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchThreeAssetsProblemReportVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchVaccinationDataVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchYakAssetVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchYakHerdInventoryVo;
import com.ruoyi.web.modules.industryservice.research.domain.vo.ResearchYakOutboundReportVo;

/**
 * 科研开放数据接口服务。
 */
public interface IResearchOpenApiService
{
    ResearchTokenVo authenticate(String appKey, String appSecret);

    OpenApiPageResult<ResearchPastureVo> listPastures(int pageNum, int pageSize, String keyword, String farmType);

    OpenApiPageResult<ResearchYakAssetVo> listYakAssets(int pageNum, int pageSize,
            Integer assetStatus, String gender, Long pastureId);

    /**
     * 牦牛存栏填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchYakHerdInventoryVo> listYakHerdInventories(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 牦牛出栏填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchYakOutboundReportVo> listYakOutboundReports(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 合作社发展填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     * @param cooperativeName 合作社名称模糊匹配
     */
    OpenApiPageResult<ResearchCooperativeDevelopmentVo> listCooperativeDevelopments(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName, String cooperativeName);

    /**
     * 畜牧产品产量登记列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchLivestockProductOutputVo> listLivestockProductOutputs(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 家庭牧场填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     * @param enterpriseName 企业名称模糊匹配
     */
    OpenApiPageResult<ResearchFamilyRanchVo> listFamilyRanches(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName, String enterpriseName);

    /**
     * 可支配收入填报列表。
     *
     * @param statYear 所属年份精确匹配
     */
    OpenApiPageResult<ResearchDisposableIncomeVo> listDisposableIncomes(int pageNum, int pageSize, Integer statYear);

    /**
     * 农牧户填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchFarmerHouseholdVo> listFarmerHouseholds(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 共同富裕项目列表。
     *
     * @param projectName 项目名称模糊匹配
     * @param projectType 项目类型精确匹配
     * @param implYear 实施年限精确匹配
     */
    OpenApiPageResult<ResearchCommonProsperityProjectVo> listCommonProsperityProjects(int pageNum, int pageSize,
            String projectName, Integer projectType, Integer implYear);

    /**
     * 养殖大户填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     * @param enterpriseName 企业名称模糊匹配
     */
    OpenApiPageResult<ResearchLargeLivestockFarmerVo> listLargeLivestockFarmers(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName, String enterpriseName);

    /**
     * 疫苗接种填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchVaccinationDataVo> listVaccinationData(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 有无畜户填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchLivestockOwnershipHouseholdVo> listLivestockOwnershipHouseholds(int pageNum, int pageSize,
            Integer statYear, Integer statMonth, String townName, String villageName);

    /**
     * 农村三资填报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     */
    OpenApiPageResult<ResearchRuralThreeAssetsVo> listRuralThreeAssets(int pageNum, int pageSize,
            String townName, String villageName);

    /**
     * 三资具体问题上报列表。
     *
     * @param townName 所属乡镇名称模糊匹配
     * @param villageName 所属村名称模糊匹配
     * @param beginReportTime 上报开始日期（与结束日期同时有值时生效）
     * @param endReportTime 上报结束日期（与开始日期同时有值时生效）
     */
    OpenApiPageResult<ResearchThreeAssetsProblemReportVo> listThreeAssetsProblemReports(int pageNum, int pageSize,
            String townName, String villageName, Date beginReportTime, Date endReportTime);

    /**
     * 科技服务人员管理详情（单例配置，无查询参数）。
     */
    ResearchTechServicePersonnelVo getTechServicePersonnel();
}
