forked from RyanGoodwill/backend
GPT牛逼,搜索搞成了
This commit is contained in:
parent
9e03bb3873
commit
33f811e6b7
@ -1,6 +1,12 @@
|
|||||||
package org.cmh.backend.NewsManagement.service;
|
package org.cmh.backend.NewsManagement.service;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.EntityNotFoundException;
|
import jakarta.persistence.EntityNotFoundException;
|
||||||
|
import jakarta.persistence.PersistenceContext;
|
||||||
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.CriteriaQuery;
|
||||||
|
import jakarta.persistence.criteria.Predicate;
|
||||||
|
import jakarta.persistence.criteria.Root;
|
||||||
import org.cmh.backend.NewsManagement.dto.NewsRequest;
|
import org.cmh.backend.NewsManagement.dto.NewsRequest;
|
||||||
import org.cmh.backend.NewsManagement.dto.SearchNewsRequest;
|
import org.cmh.backend.NewsManagement.dto.SearchNewsRequest;
|
||||||
import org.cmh.backend.NewsManagement.model.News;
|
import org.cmh.backend.NewsManagement.model.News;
|
||||||
@ -25,6 +31,9 @@ public class NewsService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
public List<News> getNewsByRange(int start, int end, UserHS user) {
|
public List<News> getNewsByRange(int start, int end, UserHS user) {
|
||||||
if (start < 0 || end <= start) {
|
if (start < 0 || end <= start) {
|
||||||
throw new IllegalArgumentException("Invalid start or end range");
|
throw new IllegalArgumentException("Invalid start or end range");
|
||||||
@ -104,24 +113,63 @@ public class NewsService {
|
|||||||
public long getNewsCount() {
|
public long getNewsCount() {
|
||||||
return newsRepository.count();
|
return newsRepository.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:完善用户权限
|
// TODO:完善用户权限
|
||||||
|
// public List<News> searchNews(SearchNewsRequest request) {
|
||||||
|
// String username = JwtUtil.extractUsername(request.getToken());
|
||||||
|
// UserHS user = userService.getUserByUsername(username);
|
||||||
|
// if (user.getSuperAdmin()) {
|
||||||
|
// return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContaining(
|
||||||
|
// request.getTitle(),
|
||||||
|
// request.getSummary(),
|
||||||
|
// request.getAuthor(),
|
||||||
|
// request.getImagePath()
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContainingAndTenantEquals(
|
||||||
|
// request.getTitle(),
|
||||||
|
// request.getSummary(),
|
||||||
|
// request.getAuthor(),
|
||||||
|
// request.getImagePath(),
|
||||||
|
// user.getUsername()
|
||||||
|
// );
|
||||||
|
// }
|
||||||
public List<News> searchNews(SearchNewsRequest request) {
|
public List<News> searchNews(SearchNewsRequest request) {
|
||||||
String username = JwtUtil.extractUsername(request.getToken());
|
String username = JwtUtil.extractUsername(request.getToken());
|
||||||
UserHS user = userService.getUserByUsername(username);
|
UserHS user = userService.getUserByUsername(username);
|
||||||
if (user.getSuperAdmin()) {
|
|
||||||
return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContaining(
|
// Create a list to hold predicates
|
||||||
request.getTitle(),
|
List<Predicate> predicates = new ArrayList<>();
|
||||||
request.getSummary(),
|
// Create the query
|
||||||
request.getAuthor(),
|
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
|
||||||
request.getImagePath()
|
CriteriaQuery<News> criteriaQuery = criteriaBuilder.createQuery(News.class);
|
||||||
);
|
Root<News> root = criteriaQuery.from(News.class);
|
||||||
|
|
||||||
|
// Build the query conditionally based on non-empty fields
|
||||||
|
if (!request.getTitle().isEmpty()) {
|
||||||
|
predicates.add(criteriaBuilder.like(root.get("title"), "%" + request.getTitle() + "%"));
|
||||||
}
|
}
|
||||||
return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContainingAndTenantEquals(
|
if (!request.getSummary().isEmpty()) {
|
||||||
request.getTitle(),
|
predicates.add(criteriaBuilder.like(root.get("summary"), "%" + request.getSummary() + "%"));
|
||||||
request.getSummary(),
|
}
|
||||||
request.getAuthor(),
|
if (!request.getAuthor().isEmpty()) {
|
||||||
request.getImagePath(),
|
predicates.add(criteriaBuilder.like(root.get("author"), "%" + request.getAuthor() + "%"));
|
||||||
user.getUsername()
|
}
|
||||||
);
|
if (!request.getImagePath().isEmpty()) {
|
||||||
|
predicates.add(criteriaBuilder.like(root.get("imagePath"), "%" + request.getImagePath() + "%"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.getSuperAdmin()) {
|
||||||
|
// Combine predicates with OR
|
||||||
|
criteriaQuery.where(criteriaBuilder.or(predicates.toArray(new Predicate[0])));
|
||||||
|
} else {
|
||||||
|
// Combine predicates with OR and add tenant condition
|
||||||
|
Predicate tenantPredicate = criteriaBuilder.equal(root.get("tenant"), user.getUsername());
|
||||||
|
predicates.add(tenantPredicate);
|
||||||
|
criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[0])));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the query
|
||||||
|
return entityManager.createQuery(criteriaQuery).getResultList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user