package com.pharmacopoeia.repository; import com.pharmacopoeia.entity.Drug; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; public interface DrugRepository extends JpaRepository { Optional findByDrugId(String drugId); @Query("SELECT d FROM Drug d WHERE d.isActive = true AND d.category NOT IN ('通则', '凡例与纲要', '凡例')") Page findByIsActiveTrue(Pageable pageable); @Query("SELECT d FROM Drug d WHERE d.isActive = true AND d.category = :category AND d.category NOT IN ('通则', '凡例与纲要', '凡例')") Page findByCategoryAndIsActiveTrue(@Param("category") String category, Pageable pageable); @Query("SELECT d FROM Drug d WHERE d.isActive = true AND d.category NOT IN ('通则', '凡例与纲要', '凡例') AND (d.name ILIKE %:keyword% OR d.pinyin ILIKE %:keyword%)") Page searchByKeyword(@Param("keyword") String keyword, Pageable pageable); @Query("SELECT DISTINCT d.category FROM Drug d WHERE d.category IS NOT NULL ORDER BY d.category") List findDistinctCategories(); @Query("SELECT DISTINCT d.category, d.subcategory FROM Drug d WHERE d.category IS NOT NULL ORDER BY d.category, d.subcategory") List findCategorySubcategoryPairs(); }