You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudnote_server/src/main/java/com/bupt/note/Controller/PaperController.java

137 lines
5.9 KiB

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<Paper> list=new Page<>();
list.setTotal(paperRepository.count());
List<Paper> papers = paperRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> 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();
}
}
}