public PaginatedUserActivityFeed ConverActivitiesToDTOModels(string currUserId, PaginatedList <UserActivity> activities) { PaginatedUserActivityFeed ret = new PaginatedUserActivityFeed(); var acts = activities.GroupBy(p => p.FeedType); foreach (var item in acts) { switch (item.Key) { case UserActivityType.Add_Post_To_Favourites: var ids = item.Select(p => p.SourceEntityId.Value); if (ids.Count() == 0) { break; } var FavPostActivities = _context.Set <Post>() .AsNoTracking() .Where(p => ids.Contains(p.Id) && p.IsPublished) .Select(p => new Post() { DateUtcAdd = p.DateUtcAdd, DateUtcModified = p.DateUtcModified, DateUtcPublished = p.DateUtcPublished, Description = p.Description, PostParts = p.PostParts, LikedUsers = p.LikedUsers, Content = p.Content, PrivacyStatus = p.PrivacyStatus, Title = p.Title, Collection = p.Collection, UserInfo = p.UserInfo }) .ToList(); foreach (var post in FavPostActivities) { post.Rating = GetPostRating(post.Id, 10); var postActivity = activities .FirstOrDefault(p => p.FeedType == UserActivityType.Add_Post_To_Favourites && p.ParentEntityId == post.Id); ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { DateUtcActivity = postActivity.DateUtcModified, AppUserId = postActivity.AppUserId, FeedType = UserActivityType.Add_Post_To_Favourites, ParentEntityType = ParentEntityType.Post, ParentEntity = _mapper.Map <Post, PostActivityEntity>(post, opt => { opt.Items["AppUserId"] = currUserId; }), }); } break; case UserActivityType.Add_Review_To_Post: var revIds = item.Select(p => p.SourceEntityId.Value).ToArray(); if (revIds.Count() == 0) { break; } var ActivityReviews = _context.Set <Review>() .AsNoTracking() .Where(p => revIds.Contains(p.Id)) .Select(p => new { p.DateUtcAdd, p.DateUtcModified, p.DateUtcPublished, p.IsSoftDeleted, p.Id, p.Content, p.UserInfo, p.UserId, p.PostRate, PostId = p.PostId ?? 0, AuthorImageUrl = p.UserInfo.ProfilePicture.SmallPath, CommentCount = p.Comments.Count(), }); foreach (var review in ActivityReviews) { var reviewActivity = item .FirstOrDefault(p => p.SourceEntityId == review.Id); var reviewedPost = _context.Set <Post>() .AsNoTracking() .Select(p => new PostActivityEntity() { DateUtcPublished = p.DateUtcPublished, AuthorInfo = new BaseUserInfoDisplay() { AppUserId = p.UserInfoId, Name = p.UserInfo.Name, Username = p.UserInfo.UName, Surname = p.UserInfo.Surname, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfoId) }, Content = p.Content, Title = p.Title, IsCurrentUserLiked = userPostLikesIds.Contains(p.Id), PostParts = p.PostParts.Select(f => new PostPartDisplay() { Description = f.Description, Image = new BaseImageReturn() { Dimension = f.Image.ImageDimension, Extension = f.Image.FileExtension, LazyUrl = f.Image.BlurLazyPath, SmallUrl = f.Image.SmallPath, ThumbUrl = f.Image.ThumbPath, Url = f.Image.ResizedPath, }, Title = f.Title, Id = f.Id }).ToList(), Id = p.Id, }) .FirstOrDefault(p => p.Id == reviewActivity.ParentEntityId); reviewedPost.Rating = GetPostRating(reviewedPost.Id, 10); reviewedPost.FavouriteCount = _postCacheService.GetPostLikesCount(reviewedPost.Id) ?? _postDataService.GetPostLikeCount(reviewedPost.Id, cacheTreshold: 20); reviewedPost.ReviewCount = _postDataService.GetPostReviewsCount(reviewedPost.Id); LikeStatus ls = userReviewLikesIds.Contains(review.Id) ? LikeStatus.Like : LikeStatus.None; if (userReviewDislikesIds.Contains(review.Id)) { ls = LikeStatus.Dislike; } ReviewActivityEntity reviewActivityInfo = new ReviewActivityEntity() { CommentCount = review.CommentCount, DateUtcPublished = review.DateUtcPublished, PostId = review.PostId, LikeStatus = ls, DislikeCount = _reviewCacheService.GetReviewDislikeCount(review.Id) ?? _reviewDataService.GetReviewDislikeCount(review.Id, 10), Content = review.Content, Id = review.Id, PostRate = review.PostRate ?? 0, LikeCount = _reviewCacheService.GetReviewLikeCount(review.Id) ?? _reviewDataService.GetReviewLikeCount(review.Id, 100), AuthorInfo = new BaseUserInfoDisplay() { AppUserId = review.UserInfo.AppUserId, Name = review.UserInfo.Name, ProfileImage = review.AuthorImageUrl, Surname = review.UserInfo.Surname, Username = review.UserInfo.UName } }; ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { Id = reviewActivity.Id, DateUtcActivity = reviewActivity.DateUtcModified, AppUserId = reviewActivity.AppUserId, FeedType = UserActivityType.Add_Review_To_Post, ParentEntityType = ParentEntityType.Post, ParentEntity = reviewedPost, PrimaryEntity = reviewActivityInfo }); } break; case UserActivityType.Like_Review_Of_Post: // Liked Review var reviewIds = item.Select(p => p.SourceEntityId.Value); if (reviewIds.Count() == 0) { break; } // Liked Reviews var ActivityLikeReviews = _context.Set <Review>() .Select(p => new Review() { DateUtcAdd = p.DateUtcAdd, DateUtcModified = p.DateUtcModified, DateUtcPublished = p.DateUtcPublished, IsSoftDeleted = p.IsSoftDeleted, UserLikes = p.UserLikes, Id = p.Id, Content = p.Content, UserInfo = p.UserInfo, UserId = p.UserId, PostRate = p.PostRate }) .AsNoTracking().Where(p => reviewIds.Contains(p.Id)).ToList(); // For Each Liked Review foreach (var review in ActivityLikeReviews) { // Belonging Activity var reviewActivity = item .FirstOrDefault(p => p.SourceEntityId == review.Id && p.FeedType == UserActivityType.Like_Review_Of_Post); // Reviewed Post var reviewedPost = _context.Set <Post>() .AsNoTracking() .Select(p => new PostActivityEntity() { DateUtcPublished = p.DateUtcPublished, AuthorInfo = new BaseUserInfoDisplay() { AppUserId = p.UserInfoId, Name = p.UserInfo.Name, Username = p.UserInfo.UName, Surname = p.UserInfo.Surname, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId) }, Content = p.Content, IsCurrentUserLiked = userPostLikesIds.Contains(p.Id), PostParts = p.PostParts.Select(f => new PostPartDisplay() { Description = f.Description, Image = new BaseImageReturn() { Dimension = f.Image.ImageDimension, Extension = f.Image.FileExtension, LazyUrl = f.Image.BlurLazyPath, SmallUrl = f.Image.SmallPath, ThumbUrl = f.Image.ThumbPath, Url = f.Image.ResizedPath, }, Title = f.Title, Id = f.Id }).ToList(), Id = p.Id, ReviewCount = p.Reviews.Count() }) .FirstOrDefault(p => p.Id == reviewActivity.ParentEntityId); // Add Activity DTO to return List ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { Id = reviewActivity.Id, DateUtcActivity = reviewActivity.DateUtcModified, AppUserId = reviewActivity.AppUserId, FeedType = UserActivityType.Like_Review_Of_Post, ParentEntityType = ParentEntityType.Post, ParentEntity = reviewedPost, PrimaryEntity = _mapper.Map <Review, ReviewActivityEntity>(review, opt => { opt.Items["AppUserId"] = currUserId; }) }); } break; case UserActivityType.Add_Comment_To_Review: // CommentsIds var commentIds = item.Select(p => p.SourceEntityId.Value); if (commentIds.Count() == 0) { break; } // Get User Likes From Cache // Comments from DB var ActivityComments = _context.Set <Comment>() .Select(p => new Comment() { DateUtcAdd = p.DateUtcAdd, DateUtcModified = p.DateUtcModified, IsSoftDeleted = p.IsSoftDeleted, Id = p.Id, Content = p.Content, CommentLikes = p.CommentLikes, }) .AsNoTracking().Where(p => commentIds.Contains(p.Id)).ToList(); // Each commentActivity get belonging Review foreach (var comment in ActivityComments) { var commentActivity = item .FirstOrDefault(p => p.SourceEntityId == comment.Id && p.FeedType == UserActivityType.Add_Comment_To_Review); var commentedReview = _context.Set <Review>() .AsNoTracking() .Select(f => new { Review = f, ReviewLikeCount = f.UserLikes.Where(p => p.LikeStatus == LikeStatus.Like).Count(), AuthorInfo = f.UserInfo, }) .Select(p => new CommentReviewActivityEntity() { AuthorInfo = new BaseUserInfoDisplay() { AppUserId = p.AuthorInfo.AppUserId, Name = p.AuthorInfo.Name, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.AuthorInfo.AppUserId), Surname = p.AuthorInfo.Surname, Username = p.AuthorInfo.UName }, Id = p.Review.Id, Content = p.Review.Content, IsUserLiked = this.userReviewLikesIds.Contains(p.Review.Id), LikeCount = p.ReviewLikeCount, }) .FirstOrDefault(p => p.Id == commentActivity.ParentEntityId); commentedReview.CommentCount = _reviewCacheService.GetReviewCommentCount(commentedReview.Id) ?? _reviewDataService.GetReviewCommentCount(commentedReview.Id, 20); commentedReview.LikeCount = _reviewCacheService.GetReviewLikeCount(commentedReview.Id) ?? _reviewDataService.GetReviewLikeCount(commentedReview.Id, cacheTreshold: 10); commentedReview.DislikeCount = _reviewCacheService.GetReviewDislikeCount(commentedReview.Id) ?? _reviewDataService.GetReviewDislikeCount(commentedReview.Id, 10); ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { Id = commentActivity.Id, DateUtcActivity = commentActivity.DateUtcModified, AppUserId = commentActivity.AppUserId, FeedType = UserActivityType.Add_Comment_To_Review, ParentEntityType = ParentEntityType.Review, ParentEntity = commentedReview, PrimaryEntity = new CommentActivityEntity() { DateUtcAdded = comment.DateUtcAdd, DateUtcModified = comment.DateUtcModified, DislikeCount = comment.CommentLikes.Count(p => p.LikeStatus == LikeStatus.Dislike), LikeCount = comment.CommentLikes.Count(p => p.LikeStatus == LikeStatus.Like), Content = comment.Content, Id = comment.Id, IsUserDisliked = userCommentLikesIds.Contains(comment.Id), IsUserLiked = userCommentDislikesIds.Contains(comment.Id), } }); } break; case UserActivityType.Add_Comment_To_Comment: break; case UserActivityType.Like_Comment: break; case UserActivityType.Follow_User: break; case UserActivityType.Add_New_Collection: var colActIds = item.Select(p => p.SourceEntityId); if (colActIds.Count() == 0) { break; } var AddCollectionActivities = _context.Set <PostCollection>() .AsNoTracking() .Select(col => new { Collection = col, PostCount = col.Posts.Count(), col.ThumbFile, col.UserInfo }) .Where(p => colActIds.Contains(p.Collection.Id)).ToList(); var AddCollectionActivityDtos = AddCollectionActivities.Select(p => new AddCollectionActivityEntity() { DateUtcModified = p.Collection.DateUtcModified, UserInfo = new BaseUserInfoDisplay() { AppUserId = p.UserInfo.AppUserId, Name = p.UserInfo.Name, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId), Surname = p.UserInfo.Surname, Username = p.UserInfo.UName }, Name = p.Collection.Name, Id = p.Collection.Id, PostsCount = p.PostCount, Description = p.Collection.Description, ThumbImageUrl = p.ThumbFile == null ? "" : p.ThumbFile.ThumbPath, UserInfoId = p.UserInfo.AppUserId, }); foreach (var col in AddCollectionActivityDtos) { var colActivity = activities .FirstOrDefault(p => p.FeedType == UserActivityType.Add_New_Collection && p.SourceEntityId == col.Id); ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { Id = colActivity.Id, DateUtcActivity = colActivity.DateUtcModified, AppUserId = colActivity.AppUserId, FeedType = UserActivityType.Add_New_Collection, ParentEntityType = ParentEntityType.None, PrimaryEntity = col }); } break; case UserActivityType.Add_New_Post: var actIds = item.Select(p => p.SourceEntityId); if (actIds.Count() == 0) { break; } var AddPostActivities = _context.Set <Post>() .AsNoTracking() .Include(p => p.PostParts) .ThenInclude(p => p.Image) .Where(p => actIds.Contains(p.Id) && p.IsPublished) .Select(post => new { Post = post, post.PostParts, post.UserInfo, post.Collection, post.Groups }); var AddPostActivityDtos = AddPostActivities.Select(p => new PostActivityEntity() { DateUtcPublished = p.Post.DateUtcPublished, AuthorInfo = new BaseUserInfoDisplay() { AppUserId = p.UserInfo.AppUserId, Name = p.UserInfo.Name, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId), Surname = p.UserInfo.Surname, Username = p.UserInfo.UName }, Content = p.Post.Content, Title = p.Post.Title, IsCurrentUserLiked = userPostLikesIds.Contains(p.Post.Id), Id = p.Post.Id, PostParts = p.PostParts.Select(f => new PostPartDisplay() { Description = f.Description, Id = f.Id, Title = f.Title, Image = new BaseImageReturn() { Dimension = f.Image.ImageDimension, Extension = f.Image.FileExtension, LazyUrl = f.Image.BlurLazyPath, ThumbUrl = f.Image.ThumbPath, SmallUrl = f.Image.SmallPath, Url = f.Image.ResizedPath, } }).ToList() }); foreach (var post in AddPostActivityDtos) { post.Rating = GetPostRating(post.Id, 10); post.CollectionInfo = post.CollectionInfo ?? new PostCollectionInfo() { }; post.IsCurrentUserLiked = userPostLikesIds.Contains(post.Id); post.FavouriteCount = _postCacheService.GetPostLikesCount(post.Id) ?? _postDataService.GetPostLikeCount(post.Id, cacheTreshold: 20); post.ReviewCount = _postDataService.GetPostReviewsCount(post.Id); var postActivity = activities .FirstOrDefault(p => p.FeedType == UserActivityType.Add_New_Post && p.SourceEntityId == post.Id); ret.Entities.Add(new UserActivityDTO <IActivityEntity>() { Id = postActivity.Id, DateUtcActivity = postActivity.DateUtcModified, AppUserId = postActivity.AppUserId, FeedType = UserActivityType.Add_New_Post, ParentEntityType = ParentEntityType.None, PrimaryEntity = post }); } break; case UserActivityType.Add_New_Post_To_Collection: break; case UserActivityType.Post_Got_In_Trends: break; default: break; } } ret.Entities = ret.Entities.OrderByDescending(p => p.DateUtcActivity).ToList().ToPaginatedList(activities.PageIndex, activities.PageSize, activities.TotalCount); return(ret); }
public ActionResult CashFlowList(int?PageIndex, int?PageSize, long?qBankID, long?qCategoryID, long?qOrderID, int?qFlowType, int?qFlowStatus, string qInOut, DateTime?qCreateDateStart, DateTime?qCreateDateEnd, string qCurrency, int?orderCol) { if ((_crud & Zippy.SaaS.Entity.CRUD.Read) != Zippy.SaaS.Entity.CRUD.Read) { return(RedirectToAction("NoPermission", "Error")); } System.Text.StringBuilder sbMenu = new System.Text.StringBuilder(); if ((_crud & Zippy.SaaS.Entity.CRUD.Read) == Zippy.SaaS.Entity.CRUD.Read) { sbMenu.AppendLine("<a href='javascript:;' class='btn list img' id='search'><i class='icon i_search'></i>查询<b></b></a>"); } sbMenu.AppendLine("<a href='javascript:;' class='btn img' id='bReload'><i class='icon i_refresh'></i>刷新<b></b></a>"); ViewData["TopMenu"] = sbMenu.ToString(); ViewData.Add("db", db); ViewData.Add("PageSize", PageSize ?? 10); int currentPageSize = PageSize ?? 10; int currentPageIndex = PageIndex ?? 1; Hashtable hs = new Hashtable(); hs.Add("qBankID", qBankID); hs.Add("qCategoryID", qCategoryID); hs.Add("qOrderID", qOrderID); hs.Add("qFlowType", qFlowType); hs.Add("qFlowStatus", qFlowStatus); hs.Add("qCreateDateStart", qCreateDateStart); hs.Add("qCreateDateEnd", qCreateDateEnd); hs.Add("qCurrency", qCurrency); hs.Add("qInOut", qInOut); hs.Add("orderCol", orderCol); decimal allSum = 0; PaginatedList <EAP.Logic.Z01.View.V_FinancialFlow> result = Z01Beetle.Entity.Helper.Z01FinancialFlowHelper.Query(db, _tenant.TenantID.Value, currentPageSize, currentPageIndex, hs, orderCol, out allSum); result.QueryParameters = hs; ViewData["BankOptions"] = EAP.Logic.Z01.HtmlHelper.BankSelectOptions(_tenant.TenantID.Value); ViewData["CurrencyOptions"] = EAP.Logic.Bus.HtmlHelper.CurrencySelectOptions(db); if (qCurrency.IsNotNullOrEmpty()) { ViewData["AllSum"] = qCurrency.ToString() + ": " + allSum.ToString("0.00"); } else { ViewData["AllSum"] = "选择货币查询后方可统计"; } string thisPage = ""; IEnumerable <IGrouping <string, EAP.Logic.Z01.View.V_FinancialFlow> > grouped = result.GroupBy(s => s.Currency); foreach (IGrouping <string, EAP.Logic.Z01.View.V_FinancialFlow> kvs in grouped) { thisPage += kvs.Key + ": " + (kvs.Sum(x => x.Amount) ?? 0).ToString("0.00") + "<br />"; } var banks = EAP.Logic.Z01.Helper.GetBanks(_tenant.TenantID.Value); ViewBag.banks = banks; ViewData["ThisPageSum"] = thisPage; return(View(result)); }