public async Task <JsonResult> UpdateNoteOrContent([ModelBinder(BinderType = typeof(NoteOrContentModelBinder))] NoteOrContent noteOrContent) { var userid = GetUserIdBySession(); var oldNote = noteService.GetNoteById(noteOrContent.NoteId); // 新添加note if (noteOrContent.IsNew.IsValidTrue() && oldNote == null) { var userId = GetUserIdBySession(); // 为共享新建? if (noteOrContent.FromUserId != null) { userId = noteOrContent.FromUserId; } //todo:IsBlog.Value 缺陷 空指针异常 var note = new Note() { UserId = userId, NoteId = noteOrContent.NoteId, NotebookId = noteOrContent.NotebookId, Title = noteOrContent.Title, Src = noteOrContent.Src, Tags = noteOrContent.Tags.ToTagsArray(), Desc = noteOrContent.Desc, ImgSrc = noteOrContent.ImgSrc, IsBlog = noteOrContent.IsBlog.GetValueOrDefault(), IsMarkdown = noteOrContent.IsMarkdown.GetValueOrDefault() }; var noteContent = new NoteContent() { UserId = userId, IsBlog = note.IsBlog, Content = noteOrContent.Content, Abstract = noteOrContent.Abstract }; note = noteService.AddNoteAndContentForController(note, noteContent, userid); return(Json(note, MyJsonConvert.GetLeanoteOptions())); } var noteUpdate = new Note(); var needUpdateNote = false; if (noteOrContent.Desc.IsValid()) { needUpdateNote = true; noteUpdate.Desc = noteOrContent.Desc; } if (noteOrContent.Title.IsValid()) { needUpdateNote = true; noteUpdate.Title = noteOrContent.Title; } if (noteOrContent.ImgSrc.IsValid()) { needUpdateNote = true; noteUpdate.ImgSrc = noteOrContent.ImgSrc; } if (noteOrContent.Tags.IsValid()) { needUpdateNote = true; noteUpdate.Tags = noteOrContent.Tags.ToTagsArray(); } // web端不控制 if (needUpdateNote) { noteService.UpdateNote(userid, noteOrContent.NoteId, noteUpdate, -1); } if (noteOrContent.Content.IsValid()) { noteContentService.UpdateNoteContent(userid, noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract, needUpdateNote, -1, DateTime.Now); } return(Json(true)); }
public JsonResult UpdateNote(ApiNote noteOrContent, string token) { Note noteUpdate = new Note(); var needUpdateNote = false; var re = new ReUpdate(); long?tokenUserId = GetUserIdByToken(token); var noteId = noteOrContent.NoteId.ToLongByHex(); //-------------校验参数合法性 if (tokenUserId == 0) { re.Msg = "NOlogin"; re.Ok = false; return(Json(re, MyJsonConvert.GetSimpleOptions())); } if (string.IsNullOrEmpty(noteOrContent.NoteId)) { re.Msg = "noteIdNotExists"; re.Ok = false; return(Json(re, MyJsonConvert.GetSimpleOptions())); } if (noteOrContent.Usn < 1) { re.Msg = "usnNotExists"; re.Ok = false; return(Json(re, MyJsonConvert.GetSimpleOptions())); } // 先判断USN的问题, 因为很可能添加完附件后, 会有USN冲突, 这时附件就添错了 var note = noteService.GetNote(noteId, tokenUserId); var noteContent = noteContentService.GetNoteContent(note.NoteId, tokenUserId, false); if (note == null || note.NoteId == 0) { re.Msg = "notExists"; re.Ok = false; return(Json(re, MyJsonConvert.GetSimpleOptions())); } //判断服务器版本与客户端版本是否一致 if (note.Usn != noteOrContent.Usn) { re.Msg = "conflict"; re.Ok = false; return(Json(re, MyJsonConvert.GetSimpleOptions())); } //-------------更新文件和附件内容 if (noteOrContent.Files != null && noteOrContent.Files.Length > 0) { for (int i = 0; i < noteOrContent.Files.Length; i++) { var file = noteOrContent.Files[i]; if (file.HasBody) { if (!string.IsNullOrEmpty(file.LocalFileId)) { var result = UploadImages("FileDatas[" + file.LocalFileId + "]", tokenUserId, noteId, file.IsAttach, out long?serverFileId, out string msg); if (!result) { if (string.IsNullOrEmpty(msg)) { re.Msg = "fileUploadError"; } if (!string.Equals(msg, "notImage", System.StringComparison.OrdinalIgnoreCase)) { return(Json(re, MyJsonConvert.GetLeanoteOptions())); } } else { // 建立映射 file.FileId = serverFileId.ToHex24(); noteOrContent.Files[i] = file; } } else { return(Json(new ReUpdate() { Ok = false, Msg = "LocalFileId_Is_NullOrEmpty", Usn = 0 }, MyJsonConvert.GetSimpleOptions())); } } } } //更新用户元数据 //int usn = UserService.IncrUsn(tokenUserId); // 移到外面来, 删除最后一个file时也要处理, 不然总删不掉 // 附件问题, 根据Files, 有些要删除的, 只留下这些 if (noteOrContent.Files != null) { attachService.UpdateOrDeleteAttachApiAsync(noteId, tokenUserId, noteOrContent.Files); } //-------------更新笔记内容 var afterContentUsn = 0; var contentOk = false; var contentMsg = ""; long?contentId = 0; if (noteOrContent.Content != null) { // 把fileId替换下 FixPostNotecontent(ref noteOrContent); // 如果传了Abstract就用之 if (noteOrContent.Abstract != null) { noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteOrContent.Abstract, 200); } else { noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteOrContent.Content, 200); } } else { noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteContent.Content, 200); } //上传noteContent的变更 contentOk = noteContentService.UpdateNoteContent( noteOrContent, out contentMsg, out contentId ); //返回处理结果 if (!contentOk) { re.Ok = false; re.Msg = contentMsg; re.Usn = afterContentUsn; return(Json(re, MyJsonConvert.GetLeanoteOptions())); } //-------------更新笔记元数据 int afterNoteUsn = 0; var noteOk = false; var noteMsg = ""; noteOk = noteService.UpdateNote( ref noteOrContent, tokenUserId, contentId, true, true, out noteMsg, out afterNoteUsn ); if (!noteOk) { re.Ok = false; re.Msg = noteMsg; return(Json(re, MyJsonConvert.GetLeanoteOptions())); } //处理结果 //-------------API返回客户端信息 note = noteService.GetNote(noteId, tokenUserId); // noteOrContent.NoteId = noteId.ToHex24(); // noteOrContent.UserId = tokenUserId.ToHex24(); // noteOrContent.Title = note.Title; // noteOrContent.Tags = note.Tags; // noteOrContent.IsMarkdown = note.IsMarkdown; // noteOrContent.IsBlog = note.IsBlog; //noteOrContent.IsTrash = note.IsTrash; //noteOrContent.IsDeleted = note.IsDeleted; //noteOrContent.IsTrash = note.IsTrash; //noteOrContent.Usn = note.Usn; //noteOrContent.CreatedTime = note.CreatedTime; //noteOrContent.UpdatedTime = note.UpdatedTime; //noteOrContent.PublicTime = note.PublicTime; noteOrContent.Content = ""; noteOrContent.Usn = afterNoteUsn; noteOrContent.UpdatedTime = DateTime.Now; noteOrContent.IsDeleted = false; noteOrContent.UserId = tokenUserId.ToHex24(); return(Json(noteOrContent, MyJsonConvert.GetLeanoteOptions())); }