package com.xinelu.manage.mapper.department;

import com.xinelu.manage.domain.department.Department;
import com.xinelu.manage.dto.department.DepartmentDTO;
import com.xinelu.manage.vo.department.DepartmentListVO;
import com.xinelu.manage.vo.department.DepartmentVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 科室信息Mapper接口
 *
 * @author xinelu
 * @date 2024-02-26
 */
public interface DepartmentMapper {
    /**
     * 查询科室信息
     *
     * @param id 科室信息主键
     * @return 科室信息
     */
    Department selectDepartmentById(Long id);

    /**
     * 查询科室信息
     *
     * @param id 科室信息主键
     * @return 科室信息
     */
    DepartmentListVO selectDepartment(Long id);

    /**
     * 查询科室信息列表
     *
     * @param department 科室信息
     * @return 科室信息集合
     */
    List<Department> selectDepartmentList(Department department);

    /**
     * 新增科室信息
     *
     * @param department 科室信息
     * @return 结果
     */
    int insertDepartment(Department department);

    /**
     * 修改科室信息
     *
     * @param department 科室信息
     * @return 结果
     */
    int updateDepartment(Department department);


    /**
     * 修改科室信息
     *
     * @param department 科室信息
     * @return 结果
     */
    int updateDepartmentById(Department department);

    /**
     * 删除科室信息
     *
     * @param id 科室信息主键
     * @return 结果
     */
    int deleteDepartmentById(Long id);

    /**
     * 批量删除科室信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteDepartmentByIds(Long[] ids);

    /**
     * 查询科室信息列表及包含话术数量
     *
     * @param departmentDto
     * @return
     */
    List<DepartmentVO> selectDepartmentListScriptNum(DepartmentDTO departmentDto);

    /**
     * 查询科室信息列表及包含手术数量
     *
     * @param departmentDto
     * @return
     */
    List<DepartmentVO> selectDepartmentListOperationNum(DepartmentDTO departmentDto);

    /**
     * 查询科室信息列表及包含微信库数量
     *
     * @param departmentDto
     * @return
     */
    List<DepartmentVO> selectDepartmentListWechatTemplateNum(DepartmentDTO departmentDto);


    /**
     * 查询科室信息列表及包含短信库数量
     *
     * @param departmentDto
     * @return
     */
    List<DepartmentVO> selectDepartmentListMessageNum(DepartmentDTO departmentDto);

    /**
     * 查询所有的机构信息
     *
     * @param departmentNames 机构信息集合
     * @return 列表集合信息
     */
    List<Department> getAllDepartmentInfo(@Param("departmentNames") List<String> departmentNames);

    /**
     * 科室信息导入
     *
     * @param departmentList 机构信息
     * @return int
     **/
    int insertDepartmentList(List<Department> departmentList);

    /**
     * 查询科室信息列表及包含服务包数量
     *
     * @param departmentDto
     * @return
     */
    List<DepartmentVO> selectListServicePackageNum(DepartmentDTO departmentDto);

    /**
     * 查询下级机构信息
     *
     * @param ids 机构信息主键
     * @return 机构信息
     */
    List<Department> selectDepartmentByParentId(Long[] ids);

    /**
     * 根据上级机构id和科室名称查询数量
     *
     * @param department 科室
     * @return int
     */
    List<Department> selectDepartmentNameCount(Department department);

    /**
     * 批量修改科室别名
     *
     * @param departmentList 科室别名
     * @return int
     */
    int updateDepartmentListByIds(List<Department> departmentList);
}
