package com.bupt.note.Controller; import com.bupt.note.Model.Note; import com.bupt.note.Model.PaperNote; import com.bupt.note.Repository.NoteRepository; import com.bupt.note.Repository.PaperNoteRepository; import com.bupt.note.ResponseData.ResponseData; import com.bupt.note.ResponseData.ResponseDataUtil; import com.bupt.note.dto.DeleteNote; import com.bupt.note.dto.NoteForm; import com.bupt.note.dto.Page; import com.bupt.note.service.FileService; import org.apache.commons.lang3.StringUtils; 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.Predicate; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping(value = "/v1/api/notes") public class NoteController { @Autowired private NoteRepository noteRepository; @Autowired private PaperNoteRepository paperNoteRepository; @Autowired private FileService fileService; private Logger logger = LoggerFactory.getLogger(NoteController.class); /** * 添加笔记 * * @param noteForm * @param username * @return */ @PostMapping("add") public ResponseData addNote(@RequestBody NoteForm noteForm, @CookieValue("user") String username) { if (noteForm.getPaperId() != null && StringUtils.isNoneBlank(noteForm.getNoteId(), noteForm.getOriginalText(), noteForm.getNoteTitle(), noteForm.getNoteContent(), noteForm.getContent())) { Note note = noteForm.toNote(); note.setUserName(username); noteRepository.save(note); if (noteRepository.existsById(note.getNoteId())) { Writer wr = null; try { PaperNote paperNote; File f; if (paperNoteRepository.existsByPaperIdAndUserName(noteForm.getPaperId(), username)) { paperNote = paperNoteRepository.findByPaperIdAndUserName(note.getPaperId(), username); f = new File(paperNote.getFilePath()); } else { f = fileService.newFile(); paperNote = new PaperNote(); paperNote.setFileId(noteForm.getFileId()); paperNote.setPaperId(noteForm.getPaperId()); paperNote.setFilePath(f.getAbsolutePath()); paperNote.setUrlPath("/txt/" + f.getName()); paperNote.setUserName(username); paperNoteRepository.save(paperNote); } wr = new FileWriter(f); wr.write(noteForm.getContent()); return ResponseDataUtil.buildSuccess(note); } catch (IOException e) { e.printStackTrace(); logger.error(String.valueOf(e)); } finally { if (wr != null) { try { wr.close(); } catch (IOException e) { e.printStackTrace(); logger.error(String.valueOf(e)); } } } logger.error(String.format("更新论文id=%d失败", noteForm.getPaperId())); return ResponseDataUtil.buildError(); } else { logger.error("保存笔记失败"); return ResponseDataUtil.buildError(); } } else { logger.error("表单校验失败"); return ResponseDataUtil.buildError(); } } /** * 查找笔记 * * @param username * @return */ @GetMapping("list/{id}") public ResponseData list(@PathVariable("id") Long paperId,@CookieValue("user") String username) { try { Page list = new Page<>(); list.setTotal(noteRepository.count()); List noteList = noteRepository.findAll((root, criteriaQuery, criteriaBuilder) -> { List predicates = new ArrayList<>(); if (StringUtils.isNotEmpty(username)) { predicates.add(criteriaBuilder.equal(root.get("userName"), username)); } predicates.add(criteriaBuilder.equal(root.get("paperId"),paperId)); return criteriaQuery.where(predicates.toArray(new Predicate[0])).getRestriction(); }); list.setData(noteList); return ResponseDataUtil.buildSuccess(list); } catch (Exception e) { e.printStackTrace(); logger.error(String.valueOf(e)); return ResponseDataUtil.buildError(); } } /** * 删除笔记 * @return */ @DeleteMapping("remove") public ResponseData remove(@RequestBody DeleteNote deleteNote,@CookieValue("user") String username){ if(deleteNote.getNoteId()!=null&&deleteNote.getPaperId()!=null&&StringUtils.isNotEmpty(deleteNote.getContent())&& paperNoteRepository.existsByPaperIdAndUserName(deleteNote.getPaperId(),username)){ noteRepository.deleteById(deleteNote.getNoteId()); PaperNote paperNote = paperNoteRepository.findByPaperIdAndUserName(deleteNote.getPaperId(), username); File f = new File(paperNote.getFilePath()); Writer wr = null; try { wr = new FileWriter(f); wr.write(deleteNote.getContent()); return ResponseDataUtil.buildSuccess(); } catch (IOException e) { e.printStackTrace(); logger.error(String.valueOf(e)); } finally { if (wr != null) { try { wr.close(); } catch (IOException e) { e.printStackTrace(); logger.error(String.valueOf(e)); } } } logger.error("删除笔记失败"); }else{ logger.error("删除笔记表单校验失败"); } return ResponseDataUtil.buildError(); } @PutMapping("update") public ResponseData put(@RequestBody NoteForm noteForm){ if(StringUtils.isNoneEmpty(noteForm.getNoteId(),noteForm.getNoteContent())){ Note note=noteRepository.getOne(noteForm.getNoteId()); note.setNoteContent(noteForm.getNoteContent()); noteRepository.save(note); return ResponseDataUtil.buildSuccess(); }else{ logger.error("笔记更新失败"); return ResponseDataUtil.buildError(); } } }