package com.xinelu.manage.mapper.servicepackage;

import com.xinelu.manage.domain.servicepackage.ServicePackage;
import com.xinelu.manage.dto.servicepackage.ServicePackageDto;
import com.xinelu.manage.vo.servicepackage.ServicePackageDetailVO;
import com.xinelu.manage.vo.servicepackage.ServicePackageVO;
import com.xinelu.manage.vo.servicepackagecontent.ServicePackageContentVO;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * 服务包基础信息Mapper接口
 *
 * @author xinelu
 * @date 2024-03-03
 */
public interface ServicePackageMapper {
    /**
     * 查询服务包基础信息
     *
     * @param id 服务包基础信息主键
     * @return 服务包基础信息
     */
    public ServicePackage selectServicePackageById(Long id);

    /**
     * 查询服务包基础信息列表
     *
     * @param servicePackage 服务包基础信息
     * @return 服务包基础信息集合
     */
    public List<ServicePackageVO> selectServicePackageList(ServicePackage servicePackage);

    /**
     * 新增服务包基础信息
     *
     * @param servicePackage 服务包基础信息
     * @return 结果
     */
    public int insertServicePackage(ServicePackage servicePackage);

    /**
     * 修改服务包基础信息
     *
     * @param servicePackage 服务包基础信息
     * @return 结果
     */
    public int updateServicePackage(ServicePackage servicePackage);

    /**
     * 删除服务包基础信息
     *
     * @param id 服务包基础信息主键
     * @return 结果
     */
    public int deleteServicePackageById(Long id);

    /**
     * 批量删除服务包基础信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteServicePackageByIds(Long[] ids);

    /**
     * 根据服务包id查询服务包详情信息
     */
    ServicePackageDetailVO selectServicePackagesById(Long id);

    /**
     * 查询服务包列表
     */
    List<ServicePackageVO> selectServicePackageLists(ServicePackageDto servicePackage);

    /**
     * 根据服务包id查询服务包内容
     */
    List<ServicePackageContentVO> selectServicePackageVoListById(Long id);

    /**
     * 判断所属科室下服务包名称是否存在
     */
    int existNameCount(@Param("departmentId") Long departmentId, @Param("packageName") String packageName);

    /**
     * 修改服务包发布状态
     */
    int editReleaseStatus(@Param("id") Long id, @Param("whetherRelease") Integer whetherRelease);

    /**
     * 检查除当前记录之外是否存在同名的服务包名称
     */
    int countByPackageNameExcludingId(@Param("id") Long id, @Param("departmentId") Long departmentId, @Param("packageName") String packageName);
}
