public ActionResult Modify(KeywordReplyVM item) { if (item == null) { return(Json(new { success = false }, JsonRequestBehavior.AllowGet)); } var svc = Service; if (!(item.ID > 0)) { //创建 try { var rule = new Rule() { Name = item.Name, OwnerID = OwnerID, Type = (int)RuleType.Normal, KeyWords = item.Keywords }; svc.Create(rule); svc.Create(new Reply() { ReplyAll = item.ReplyAll, OwnerID = OwnerID, RuleID = rule.ID, TextReplyItems = item.TextReply, ResourceItems = (item.ResourceItems != null) ? item.ResourceItems.Select(o => (ReplyResourceItem)o).ToList() : null }); } catch (Exception error) { return(Json(new { success = false, msg = error.ToString() }, JsonRequestBehavior.AllowGet)); } } else { //更新 try { var rule = new Rule() { Name = item.Name, ID = item.ID }; svc.Update(rule); if (item.Keywords != null) { var keywordToUpdate = item.Keywords.Where(o => o.ID > 0).ToArray(); if (keywordToUpdate.Any()) { svc.Update(keywordToUpdate); } var keywordToCreate = item.Keywords.Where(o => !(o.ID > 0)).ToArray(); if (keywordToCreate.Any()) { foreach (var k in keywordToCreate) { k.OwnerID = OwnerID; k.RuleID = rule.ID; } svc.Create(keywordToCreate); } } if (item.DeletedKeywords != null) { var keywordToDelete = item.DeletedKeywords.Select(o => new KeyWord() { ID = o }).ToArray(); if (keywordToDelete.Any()) { svc.Delete(keywordToDelete); } } var reply = new Reply() { ID = item.ReplyID, ReplyAll = item.ReplyAll }; svc.Update(reply); if (item.TextReply != null) { var toUpdate = item.TextReply.Where(o => o.ID > 0).ToArray(); if (toUpdate.Any()) { svc.Update(toUpdate); } var toCreate = item.TextReply.Where(o => !(o.ID > 0)).ToArray(); if (toCreate.Any()) { foreach (var t in toCreate) { t.RuleID = item.ID; t.ParentID = item.ReplyID; } svc.Create(toCreate); } } if (item.ResourceItems != null) { //current donot support update //var toUpdate = item.ResourceItems.Where(o => o.ID > 0).ToArray(); //if (toUpdate.Any()) //{ // svc.Update(toUpdate); //} var toCreate = item.ResourceItems.Where(o => !(o.ID > 0)).ToArray(); if (toCreate.Any()) { foreach (var t in toCreate) { t.RuleID = item.ID; t.ReplyID = item.ReplyID; } svc.Create <ReplyResourceItem>( toCreate.Select( o => new ReplyResourceItem() { RuleID = o.RuleID, ReplyID = o.ReplyID, OwnerID = o.OwnerID, ResourceID = o.ResourceID, ResourceType = o.ResourceType }).ToArray()); } } if (item.DeletedResourceItems != null) { var toDelete = item.DeletedResourceItems.Select(o => new ReplyResourceItem() { ID = o }).ToArray(); if (toDelete.Any()) { svc.Delete(toDelete); } } if (item.DeletedTextReplies != null) { var toDelete = item.DeletedTextReplies.Select(o => new TextReplyItem() { ID = o }).ToArray(); if (toDelete.Any()) { svc.Delete(toDelete); } } } catch (Exception error) { return(Json(new { success = false, msg = error.Message }, JsonRequestBehavior.AllowGet)); } } return(Json(new { success = true }, JsonRequestBehavior.AllowGet)); }
// // GET: /KeywordReply/ IEnumerable <KeywordReplyVM> QueryAll() { var svc = Service; var rules = svc.Select(new RuleQuery() { OwnerID = OwnerID, Type = (int)RuleType.Normal }); if (rules.Any()) { var keywords = svc.Select(new KeyWordQuery() { RuleIDs = rules.Select(o => o.ID).OfType <long>().ToArray() }); var replies = svc.Select(new ReplyQuery() { RuleIDs = rules.Select(o => o.ID).OfType <long>().ToArray() }); var textreplies = svc.Select(new TextReplyItemQuery() { ParentIDs = replies.Select(o => o.ID).OfType <long>().ToArray() }); var resourcereplyitems = svc.Select(new ReplyResourceItemQuery() { ReplyIDs = replies.Select(o => o.ID).OfType <long>().ToArray() }); //Parallel.For var audio = svc.Select(new AudioResourceQuery() { IDs = resourcereplyitems.Where(o => o.ResourceType == (int)ResourceType.Audio) .Select(o => o.ResourceID) .OfType <long>() .ToArray() }); var video = svc.Select(new VideoResourceQuery() { IDs = resourcereplyitems.Where(o => o.ResourceType == (int)ResourceType.Video) .Select(o => o.ResourceID) .OfType <long>() .ToArray() }); var picture = svc.Select(new PictureResourceQuery() { IDs = resourcereplyitems.Where(o => o.ResourceType == (int)ResourceType.Picture) .Select(o => o.ResourceID) .OfType <long>() .ToArray() }); var ftp = ConfigurationManager.AppSettings["ftp"]; return(rules.Select(o => { var reply = replies.FirstOrDefault(p => p.RuleID == o.ID); var res = resourcereplyitems.Where(r => r.RuleID == o.ID).Select(p => new ReplyResourceItemVM() { ID = p.ID, OwnerID = p.OwnerID, ReplyID = p.ReplyID, ResourceID = p.ResourceID, RuleID = p.RuleID, ResourceType = p.ResourceType, }).ToArray(); foreach (var r in res) { switch (r.ResourceType) { case (int)ResourceType.Audio: var r1 = audio.FirstOrDefault(p => p.ID == r.ResourceID); r.Path = Path.Combine(ftp, r1.Path, r1.Name); break; case (int)ResourceType.News: break; case (int)ResourceType.Picture: var r2 = picture.FirstOrDefault(p => p.ID == r.ResourceID); r.Path = Path.Combine(ftp, r2.Path, r2.Name); break; case (int)ResourceType.Video: var r3 = video.FirstOrDefault(p => p.ID == r.ResourceID); r.Path = Path.Combine(ftp, r3.Path, r3.Name); break; } } var ret = new KeywordReplyVM() { ID = o.ID, Name = o.Name, Keywords = keywords.Where(k => k.RuleID == o.ID).ToArray(), TextReply = textreplies.Where(t => t.RuleID == o.ID).ToArray(), ResourceItems = res, ReplyAll = reply.ReplyAll, ReplyID = reply.ID }; return ret; }).ToArray()); } return(Enumerable.Empty <KeywordReplyVM>()); }