package com.zd.laboratory.mapper;

import com.zd.laboratory.domain.LabHardware;
import com.zd.laboratory.domain.vo.LabHardwareVO;
import org.apache.ibatis.annotations.Param;

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

/**
 * 硬件Mapper接口
 */
public interface LabHardwareMapper {
    /**
     * 查询硬件
     *
     * @param id 硬件主键
     * @return 硬件
     */
    LabHardwareVO selectLabHardwareById(Long id);


    /**
     * 查询硬件列表-根据实验室IDS
     *
     * @param ids 实验室IDS
     * @return 硬件集合
     */
    List<LabHardware> selectLabHardwareBySubIds(Long... ids);


    /**
     * 查询硬件列表-根据实验室IDS
     *
     * @param ids 实验室IDS
     * @return 硬件集合
     */
    List<LabHardware> selectNewLabHardwareBySubIds(Long... ids);


    /**
     * 查询硬件列表根据NUM或者继电器编码
     */
    List<LabHardware> selectLabHardwareStatusByRelay(LabHardware labHardware);

    /**
     * 查询硬件列表
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    List<LabHardwareVO> selectLabHardwareList(LabHardware labHardware);


    /**
     * 查询硬件列表
     * @param labHardware 硬件
     * @return 硬件集合
     */
    List<LabHardware> selectLabHardwareListBySubject(LabHardware labHardware);

    /**
     * 新增硬件
     *
     * @param labHardware 硬件
     * @return 结果
     */
    int insertLabHardware(LabHardware labHardware);

    /**
     * 修改硬件
     *
     * @param labHardware 硬件
     * @return 结果
     */
    int updateLabHardware(LabHardware labHardware);

    /**
     * 更新继电器状态
     */
    int updateLabHardwareRelayCodeStatus(LabHardware labHardware);

    /**
     * 通用更新状态 ：hardware_num
     */
    int updateLabHardwareStatus(LabHardware labHardware);


    /**
     * 通过硬件id更新
     */
    int updateLabHardwareStatusById(LabHardware labHardware);

    /**
     * 删除硬件
     *
     * @param id 硬件主键
     * @return 结果
     */
    int deleteLabHardwareById(Long id);

    /**
     * 设置柜锁时间
     *
     * @param labHardwareVO 需要设置柜锁时间主键集合
     * @return 结果
     */
    public int setLock(LabHardwareVO labHardwareVO);

    /**
     * 批量删除硬件
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteLabHardwareByIds(Long[] ids);

    List<LabHardware> queryBySubjectId(Long subjectId);

    List<Map<String, Object>> getLabHardwareByDeptFloor(@Param("deptId") String deptId, @Param("type") String type);

    List<Map<String, Object>> selectStatistics(LabHardware labHardware);

    List<LabHardware> getHardwareListBySubId(LabHardwareVO labHardware);

    List<LabHardware> selectNewLabHardwareByTypes(LabHardwareVO labHardwareVO);

    /**
     * 关联的机柜id
     *
     * @param LabHardware 需要关联的机柜id
     * @return 结果
     */
    public int setLockJoinCabinet(LabHardware LabHardware);



    /**
     * 查询硬件列表
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    public List<LabHardwareVO> selectLabHardwareByCabinetList(LabHardware labHardware);
}
