package com.yunfeiyun.agmp.fms.service;

import com.yunfeiyun.agmp.fms.domain.FmsBlock;
import com.yunfeiyun.agmp.fms.domain.FmsPlan;
import com.yunfeiyun.agmp.fms.domain.reqvo.FmsPlanReqVo;
import com.yunfeiyun.agmp.fms.domain.resvo.FmsPlanListOfTaskStatusResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.FmsPlanResVo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 种植计划Service接口
 * 
 * @author 杨晓辉
 * @date 2023-05-18
 */
public interface IFmsPlanService
{
    /**
     * 查询种植计划
     * 
     * @param planId 种植计划主键
     * @return 种植计划
     */
    public FmsPlanResVo selectFmsPlanByPlanId(String planId);

    /**
     * 查询种植计划详情，种植档案页面信息
     * @param planId
     * @return
     */
    public FmsPlanResVo selectFmsPlanRecordByPlanId(String planId);

    public BigDecimal selectSumPlanArea(FmsPlanReqVo reqVo);

    public int selectCountFmsPlanByBlockId(String blockId);
    public int selectCountFmsPlan(FmsPlanReqVo reqVo);

    public List<FmsPlanResVo> selectPlanByCropName(FmsPlanReqVo reqVo);

    public List<FmsPlanResVo> selectPlanByCropNameAndType(FmsPlanReqVo reqVo);
    /**
     * 查询种植计划列表
     * 
     * @param fmsPlan 种植计划
     * @return 种植计划集合
     */
    public List<FmsPlan> selectFmsPlanList(FmsPlan fmsPlan);

    public List<FmsPlanResVo> selectPlanList(FmsPlanReqVo reqVo);

    public List<FmsPlan> selectPlanListScheduler(FmsPlanReqVo reqVo);
    /**
     * 新增种植计划
     * 
     * @param fmsPlan 种植计划
     * @return 结果
     */
    public int insertFmsPlan(FmsPlan fmsPlan);
    public int insertFmsPlan(FmsPlan fmsPlan, FmsBlock fmsBlock);

    /**
     * 修改种植计划
     * 
     * @param fmsPlan 种植计划
     * @return 结果
     */
    public int updateFmsPlan(FmsPlan fmsPlan);
    public int updateFmsPlan(FmsPlan fmsPlan, FmsBlock fmsBlock);

    public int updateFmsPlanBatch(List<FmsPlan> fmsPlans);
    public int updateFmsPlanBatch(List<FmsPlan> fmsPlans, List<FmsBlock> fmsBlocks);
    /**
     * 批量删除种植计划
     * 
     * @param planIds 需要删除的种植计划主键集合
     * @return 结果
     */
    public int deleteFmsPlanByPlanIds(String[] planIds);

    /**
     * 删除种植计划信息
     * 
     * @param planId 种植计划主键
     * @return 结果
     */
    public int deleteFmsPlanByPlanId(String planId);

    /**
     * 查询种植规划列表，包含待办任务事项
     * @param param
     * @return
     */
    public List<FmsPlanListOfTaskStatusResVo> selectPlanListOfTaskStatus(Map<String, Object> param);

}
