package com.ruoyi.web.modules.screen.service;

import java.util.List;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceDashboardVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceProductOutputListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceThreeAssetsProblemListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceVaccinationListItemVo;
import com.ruoyi.web.modules.screen.domain.vo.LivestockResourceVetCountListItemVo;

/**
 * 大屏畜牧资源统计服务。
 * <p>
 * 看板聚合产业与培训相关区块；明细分页供前端下钻弹窗使用。
 * 明细查询统一采用全县口径（清空业务表 dataScope）。
 * </p>
 */
public interface ILivestockResourceScreenService
{
    /**
     * 加载畜牧资源看板（产业与培训相关区块；AI 问诊九区块已屏蔽）。
     *
     * @param statYear 四位年份字符串；非法时抛业务异常
     */
    LivestockResourceDashboardVo loadDashboard(String statYear);

    /**
     * 三资具体问题上报明细（配合 Controller {@code startPage} 分页；按上报时间倒序）。
     *
     * @param statYear      所属年份，可选；未传不过滤
     * @param townDeptId    乡镇，可选
     * @param villageDeptId 村，可选
     */
    List<LivestockResourceThreeAssetsProblemListItemVo> listThreeAssetsProblemReports(
            Integer statYear, Long townDeptId, Long villageDeptId);

    /**
     * 畜牧产品产量数据明细（配合分页；按所属年月倒序）。
     *
     * @param statYear      所属年份，可选；未传不过滤
     * @param statMonth     所属月份，null 则不过滤月份
     * @param townDeptId    乡镇，可选
     * @param villageDeptId 村，可选
     */
    List<LivestockResourceProductOutputListItemVo> listProductOutputs(
            Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId);

    /**
     * 疫苗接种情况明细（配合分页；按所属年月倒序）。
     *
     * @param statYear      所属年份，可选；未传不过滤
     * @param statMonth     所属月份，null 则不过滤月份
     * @param townDeptId    乡镇，可选
     * @param villageDeptId 村，可选
     */
    List<LivestockResourceVaccinationListItemVo> listVaccinationData(
            Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId);

    /**
     * 兽医数量明细（配合分页；按乡镇汇总）。
     * <p>口径：{@code biz_medical_resource} 中 {@code resource_type=004001} 且 {@code del_flag=0}。</p>
     *
     * @param townDeptId 乡镇，可选
     */
    List<LivestockResourceVetCountListItemVo> listVetCounts(Long townDeptId);
}
