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.
180 lines
6.8 KiB
180 lines
6.8 KiB
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<Note> list = new Page<>();
|
|
list.setTotal(noteRepository.count());
|
|
List<Note> noteList = noteRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
|
|
List<Predicate> 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();
|
|
}
|
|
}
|
|
}
|
|
|