package com.bupt.note.Controller; import com.bupt.note.Model.Paper; import com.bupt.note.Model.Rating; import com.bupt.note.Repository.CollectRepository; import com.bupt.note.Repository.PaperRepository; import com.bupt.note.Repository.RatingRepository; import com.bupt.note.ResponseData.ResponseData; import com.bupt.note.ResponseData.ResponseDataUtil; import com.bupt.note.dto.Page; import com.bupt.note.dto.QueryPaper; import com.bupt.note.dto.RatingForm; import com.bupt.note.dto.UploadPaper; import org.apache.commons.lang3.StringUtils; import org.hibernate.query.criteria.internal.OrderImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import java.util.ArrayList; import java.util.List; /** * 论文管理接口 */ @RestController @RequestMapping(value = "/v1/api/paper") public class PaperController { private Logger logger= LoggerFactory.getLogger(PaperController.class); @Autowired private PaperRepository paperRepository; @Autowired private RatingRepository ratingRepository; @Autowired private CollectRepository collectRepository; @PostMapping("upload") public ResponseData upload(@RequestBody UploadPaper uploadPaper, @CookieValue("user") String username) { if (uploadPaper.getFileId() != null && uploadPaper.getYear() != null && StringUtils.isNoneEmpty(uploadPaper.getTitle(),uploadPaper.getType(), uploadPaper.getAuthor(), uploadPaper.getProfession(), uploadPaper.getSchool(), uploadPaper.getSummary(),uploadPaper.getTag())){ Paper paper = uploadPaper.toPaper(); paper.setUserName(username); paperRepository.save(paper); if(paperRepository.existsById(paper.getId())){ return ResponseDataUtil.buildSuccess(); }else{ logger.error("论文上传失败"); return ResponseDataUtil.buildError(); } }else{ logger.error("论文表单校验失败"); return ResponseDataUtil.buildError(); } } @GetMapping("list") public ResponseData list(QueryPaper queryPaper,@CookieValue("user") String username){ try { Page list=new Page<>(); list.setTotal(paperRepository.count()); List papers = paperRepository.findAll((root, criteriaQuery, criteriaBuilder) -> { List predicates = new ArrayList<>(); if(StringUtils.isNotEmpty(queryPaper.getTitle())){ predicates.add(criteriaBuilder.like(root.get("title"),"%"+queryPaper.getTitle()+"%")); } if(StringUtils.isNotEmpty(queryPaper.getAuthor())){ predicates.add(criteriaBuilder.like(root.get("author"),"%"+queryPaper.getAuthor()+"%")); } if(StringUtils.isNotEmpty(queryPaper.getTag())){ predicates.add(criteriaBuilder.like(root.get("tag"),"%"+queryPaper.getTag()+"%")); } if(StringUtils.isNotEmpty(queryPaper.getProfession())){ predicates.add(criteriaBuilder.like(root.get("profession"),"%"+queryPaper.getTag()+"%")); } if(queryPaper.getStartYear()!=null&&queryPaper.getEndYear()==null){ predicates.add(criteriaBuilder.ge(root.get("year"),queryPaper.getStartYear())); }else if(queryPaper.getStartYear()==null&&queryPaper.getEndYear()!=null){ predicates.add(criteriaBuilder.le(root.get("year"),queryPaper.getEndYear())); }else if(queryPaper.getStartYear()!=null&&queryPaper.getEndYear()!=null){ predicates.add(criteriaBuilder.between(root.get("year"),queryPaper.getStartYear(),queryPaper.getEndYear())); } if(queryPaper.getOwn()){ predicates.add(criteriaBuilder.equal(root.get("userName"),username)); } Order order=new OrderImpl(root.get("createTime"),false); return criteriaQuery.where(predicates.toArray(new Predicate[0])).orderBy(order).getRestriction(); }); papers.forEach(paper -> { paper.setHasCollect(collectRepository.existsByPaperIdAndUserName(paper.getId(),username)); }); list.setData(papers); return ResponseDataUtil.buildSuccess(list); } catch (Exception e) { e.printStackTrace(); logger.error(String.valueOf(e)); return ResponseDataUtil.buildError(); } } @PostMapping("rating") public ResponseData rating(@RequestBody RatingForm ratingForm,@CookieValue("user") String userName) { if(ratingForm.getPaperId()!=null&&ratingForm.getScore1()!=null&&ratingForm.getScore2()!=null&&ratingForm.getScore3()!=null){ Rating rating=ratingForm.toRating(); rating.setUserName(userName); ratingRepository.save(rating); if(ratingRepository.existsById(rating.getId())){ return ResponseDataUtil.buildSuccess(rating); }else{ logger.warn("论文保存失败"); return ResponseDataUtil.buildSuccess(); } }else{ logger.error("论文表单校验失败"); return ResponseDataUtil.buildError(); } } @GetMapping("findRating") public ResponseData findRating(Long paperId,@CookieValue("user") String userName){ if(paperId!=null&&StringUtils.isNotEmpty(userName)){ Rating rating=ratingRepository.findByPaperIdAndUserName(paperId,userName); return ResponseDataUtil.buildSuccess(rating); }else{ logger.error("论文评价表单校验失败"); return ResponseDataUtil.buildError(); } } }