package com.zd.laboratory.mapper;

import com.zd.laboratory.domain.LabHazard;
import com.zd.laboratory.domain.LabHazardSubjectRelation;
import com.zd.laboratory.domain.dto.LabHazardDTO;
import com.zd.laboratory.domain.dto.LabHazardNewVo;
import com.zd.laboratory.domain.vo.LabHazardBigViewVO;
import com.zd.laboratory.domain.vo.LabHazardColumnarVO;
import com.zd.laboratory.domain.vo.LabHazardVO;

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

/**
 * 危险源Mapper接口
 *
 * @author zd
 * @date 2021-09-01
 */
public interface LabHazardMapper {
    /**
     * 查询危险源
     *
     * @param id 危险源主键
     * @return 危险源
     */
    public LabHazard selectLabHazardById(Long id);

    /**
     * 查询危险源列表
     *
     * @param labHazard 危险源
     * @return 危险源集合
     */
    public List<LabHazardNewVo> selectLabHazardList(LabHazard labHazard);


    /**
     * 查询危险源列表-vo -关联实验室
     *
     * @param labHazard 危险源
     * @return 危险源集合
     */
    public List<LabHazardNewVo> selectLabHazardListVO(LabHazardDTO labHazard);


    /**
     * 新增危险源
     *
     * @param labHazard 危险源
     * @return 结果
     */
    public int insertLabHazard(LabHazard labHazard);

    /**
     * 修改危险源
     *
     * @param labHazard 危险源
     * @return 结果
     */
    public int updateLabHazard(LabHazard labHazard);

    /**
     * 删除危险源
     *
     * @param id 危险源主键
     * @return 结果
     */
    public int deleteLabHazardById(Long id);

    /**
     * 批量删除危险源
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLabHazardByIds(Long[] ids);

    /**
     * 批量删除危险源和实验室关联
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLabHazardSubjectRelationByIds(Long[] ids);

    /**
     * 批量新增危险源和实验室关联
     *
     * @param labHazardSubjectRelationList 危险源和实验室关联列表
     * @return 结果
     */
    public int batchLabHazardSubjectRelation(List<LabHazardSubjectRelation> labHazardSubjectRelationList);


    /**
     * 通过危险源主键删除危险源和实验室关联信息
     *
     * @param id 危险源ID
     * @return 结果
     */
    public int deleteLabHazardSubjectRelationBy(Long id);

    List<LabHazardDTO> selectLabHazardAndContainerList(LabHazardDTO labHazard);


    /**
     * 查询危险源下拉框列表
     *
     * @param labHazard 危险源
     * @return 危险源下拉框集合
     */
    public List<LabHazardVO> listByHazard(LabHazard labHazard);

    /**
     * 查询危险源列表-根据IDS查询
     *
     * @return
     */
    public List<LabHazard> getHazardsByIds(Long... ids);


    /**
     * 查询实验室下的危险源
     *
     * @param ids 实验室ids
     * @return 结果
     */
    public List<LabHazardVO> getHazardByIds(Long[] ids);

    List<Map<String, Object>> queryRanking(Map<String, Object> params);

    List<Map<String, Object>> queryHazardColumnar(LabHazard labHazard);

    List<Map<String, Object>> queryHazardColumnarTop(LabHazard labHazard);

    List<LabHazardColumnarVO> queryHazardList(LabHazardVO labHazardVO);

    List<LabHazardBigViewVO> queryBigViewHazardList(LabHazardVO labHazardVO);

    int queryNameCount(LabHazard labHazard);
}
