package com.zd.laboratory.service;

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

import com.zd.laboratory.domain.LabRiskPlan;
import com.zd.laboratory.domain.LabRiskPlanAbnormalGroup;
import com.zd.laboratory.domain.LabRiskPlanjoinsub;
import com.zd.laboratory.domain.dto.LabRiskPlanDTO;
import com.zd.system.api.laboratory.domain.SensorFunctionStatus;
import com.zd.system.api.laboratory.domain.vo.SenseValVO;
import com.zd.system.api.laboratory.domain.vo.SubFunction;

/**
 * 风险预案Service接口
 *
 * @author zd
 * @date 2021-09-03
 */
public interface ILabRiskPlanService {
    /**
     * 查询风险预案
     *
     * @param id 风险预案主键
     * @return 风险预案
     */
    public LabRiskPlan selectLabRiskPlanById(Long id);

    /**
     * 查询风险预案列表
     *
     * @param labRiskPlan 风险预案
     * @return 风险预案集合
     */
    public List<LabRiskPlan> selectLabRiskPlanList(LabRiskPlan labRiskPlan);

    /**
     * 查询风险预案列表
     *
     * @param labRiskPlan 风险预案
     * @return 风险预案集合
     */
    public  Map<String,Object> getLabRiskPlanRepeat(LabRiskPlan labRiskPlan);

    /**
     * 新增风险预案
     *
     * @param labRiskPlan 风险预案
     * @return 结果
     */
    public void insertLabRiskPlan(LabRiskPlan labRiskPlan);

    /**
     * 修改风险预案
     *
     * @param labRiskPlan 风险预案
     * @return 结果
     */
    public int updateLabRiskPlan(LabRiskPlan labRiskPlan);


    /**
     * 获取预案关联实验室信息
     *
     * @param labRiskPlan 风险预案
     * @return 风险预案集合
     */
    public  Map<String,Object> getLabRiskPlanJoinSub(LabRiskPlan labRiskPlan);

    /**
     * 预案关联实验室提交
     *
     * @param labRiskPlan 风险预案
     * @return 结果
     */
    public void riskPlanJoinSub(LabRiskPlan labRiskPlan);

    /**
     * 批量删除风险预案
     *
     * @param ids 需要删除的风险预案主键集合
     * @return 结果
     */
    public int deleteLabRiskPlanByIds(Long[] ids);

    /**
     * 批量删除风险预案
     *
     * @param labRiskPlanjoinsub 需要删除的风险预案主键集合
     * @return 结果
     */
    public int removeByPlanJoinSub(LabRiskPlanjoinsub labRiskPlanjoinsub);

    /**
     * 删除风险预案信息
     *
     * @param id 风险预案主键
     * @return 结果
     */
    public int deleteLabRiskPlanById(Long id);

    List<LabRiskPlanDTO> selectLabRiskPlanStatisticList(LabRiskPlanDTO labRiskPlan);


    /**
     * 执行传感器对应的风险预案
     *
     * @param subFunction 传感器类型列表
     * @return 结果
     */
    public int triggerRiskPlan(SubFunction <SensorFunctionStatus> subFunction);

    /**
     * 执行传感器对应的风险预案
     *
     * @param subFunction 传感器类型列表
     * @return 结果
     */
    public int closeRiskPlan(SubFunction <SensorFunctionStatus> subFunction);


    /**
     * 预案触发的时候，关闭所有实验室下的电源
     *
     * @param subId 实验室id
     * @return 结果
     */
    public int closePower(Long subId);
}
