|
@@ -0,0 +1,95 @@
|
|
|
+package com.yaoxiang.diagnosis.service;
|
|
|
+
|
|
|
+import com.yaoxiang.diagnosis.dao.LearnTagRepo;
|
|
|
+import com.yaoxiang.diagnosis.entity.LearnTag;
|
|
|
+import com.yaoxiang.diagnosis.util.CommonUtil;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Example;
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class LearnTagService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LearnTagRepo learnTagRepo;
|
|
|
+
|
|
|
+ public boolean add(LearnTag learnTag) {
|
|
|
+ learnTagRepo.save(learnTag);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean exists(Long uid, String content) {
|
|
|
+ LearnTag tag = new LearnTag();
|
|
|
+ tag.setContent(content);
|
|
|
+ Example<LearnTag> example = Example.of(tag);
|
|
|
+ if (exists(example)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (uid == null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ tag.setUid(uid);
|
|
|
+ return exists(example);
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean exists(Example<LearnTag> example) {
|
|
|
+ List<LearnTag> list = learnTagRepo.findAll(example);
|
|
|
+ return CommonUtil.notEmpty(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean update(LearnTag learnTag) {
|
|
|
+ Optional<LearnTag> tagOptional = learnTagRepo.findById(learnTag.getId());
|
|
|
+ if (!tagOptional.isPresent()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ LearnTag tag = tagOptional.get();
|
|
|
+ tag.setContent(learnTag.getContent());
|
|
|
+ tag.setCategory(learnTag.getCategory());
|
|
|
+ learnTagRepo.save(tag);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean delete(Long id) {
|
|
|
+ learnTagRepo.deleteById(id);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<LearnTag> list(Long uid, String category) {
|
|
|
+ return learnTagRepo.findAll((root, query, builder) -> {
|
|
|
+ List<Predicate> ps = new ArrayList<>();
|
|
|
+ if (uid != null) {
|
|
|
+ ps.add(builder.or(builder.equal(root.get("uid"), uid),
|
|
|
+ builder.equal(root.get("uid"), null)));
|
|
|
+ } else {
|
|
|
+ ps.add(builder.equal(root.get("uid"), null));
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(category)) {
|
|
|
+ ps.add(builder.like(root.get("category"), "%" + category + "%"));
|
|
|
+ }
|
|
|
+ Predicate[] p = new Predicate[ps.size()];
|
|
|
+ return builder.and(ps.toArray(p));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<String, List<LearnTag>> group(Long uid, String category) {
|
|
|
+ List<LearnTag> list = list(uid, category);
|
|
|
+ return group(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, List<LearnTag>> group(List<LearnTag> list) {
|
|
|
+ return list.stream().collect(Collectors.groupingBy(LearnTag::getCategory));
|
|
|
+ }
|
|
|
+}
|