DrugRepository.java 1.5 KB

123456789101112131415161718192021222324252627282930
  1. package com.pharmacopoeia.repository;
  2. import com.pharmacopoeia.entity.Drug;
  3. import org.springframework.data.domain.Page;
  4. import org.springframework.data.domain.Pageable;
  5. import org.springframework.data.jpa.repository.JpaRepository;
  6. import org.springframework.data.jpa.repository.Query;
  7. import org.springframework.data.repository.query.Param;
  8. import java.util.List;
  9. import java.util.Optional;
  10. public interface DrugRepository extends JpaRepository<Drug, Long> {
  11. Optional<Drug> findByDrugId(String drugId);
  12. @Query("SELECT d FROM Drug d WHERE d.isActive = true AND d.category NOT IN ('通则', '凡例与纲要', '凡例')")
  13. Page<Drug> findByIsActiveTrue(Pageable pageable);
  14. @Query("SELECT d FROM Drug d WHERE d.isActive = true AND d.category = :category AND d.category NOT IN ('通则', '凡例与纲要', '凡例')")
  15. Page<Drug> findByCategoryAndIsActiveTrue(@Param("category") String category, Pageable pageable);
  16. @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%)")
  17. Page<Drug> searchByKeyword(@Param("keyword") String keyword, Pageable pageable);
  18. @Query("SELECT DISTINCT d.category FROM Drug d WHERE d.category IS NOT NULL ORDER BY d.category")
  19. List<String> findDistinctCategories();
  20. @Query("SELECT DISTINCT d.category, d.subcategory FROM Drug d WHERE d.category IS NOT NULL ORDER BY d.category, d.subcategory")
  21. List<Object[]> findCategorySubcategoryPairs();
  22. }