using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Datory; using GxPress.Common.Tools; using GxPress.Entity; using GxPress.Repository.Interface; using GxPress.Repository.Interface.Collection; using GxPress.Result.Article; using GxPress.Service.Interface.Article; using GxPress.Service.Interface.Analyze; using GxPress.Request.Analyze; using GxPress.Service.Interface.Visit; using GxPress.Request.Article; using GxPress.Service.Interface.ArticleLabel; namespace GxPress.Service.Implement.Article { /// /// 文章 /// public class ArticleService : IArticleService { private readonly IUserRepository _userRepository; private readonly ICommentRepository _commentRepository; private readonly IArticleRepository _articleRepository; private readonly IArticleGroupRepository _articleGroupRepository; private readonly IMiddleRepository _middleRepository; private readonly ICollectionRepository _collectionRepository; private readonly IAnalyzeService _analyzeService; private readonly IVisitService _visitService; private readonly IArticleLabelService _articleLabelService; public ArticleService(IUserRepository userRepository, ICommentRepository commentRepository, IArticleRepository articleRepository, IArticleGroupRepository articleGroupRepository, ICollectionRepository collectionRepository, IMiddleRepository middleRepository, IAnalyzeService analyzeService, IVisitService visitService, IArticleLabelService articleLabelService) { _userRepository = userRepository; _commentRepository = commentRepository; _articleRepository = articleRepository; _articleGroupRepository = articleGroupRepository; _middleRepository = middleRepository; _collectionRepository = collectionRepository; _analyzeService = analyzeService; _visitService = visitService; _articleLabelService = articleLabelService; } /// /// 获取文章详情 /// /// /// /// public async Task GetAsync(int id, int userId) { var article = await _articleRepository.GetAsync(id); if (article == null) return new ArticleResult(); //增加阅读量 //访问 if (userId > 0) await _visitService.AddVisit(userId, 1, id); //获取文章类型名称 var articleGroup = await _articleGroupRepository.GetAsync(article.GroupId); var groupName = articleGroup == null ? "" : articleGroup.Name; //获取文章的点赞数据 var articleResult = new ArticleResult { Id = article.Id, Title = article.Title, GroupId = article.GroupId, ImageUrls = StringUtils.StringCollectionToStringList(article.ImageUrls), Summary = article.Summary, Author = article.Author, Source = article.Source, ArticleBlocks = StringUtils.JsonDeserialize>(article.Blocks), IsChecked = article.IsChecked, AddDate = article.AddDate, Sort = article.Sort, GroupName = groupName, ReadCount = await _visitService.GetCountAsync(1, article.Id), IsTop = article.IsTop, CreatedDate = article.CreatedDate }; //标签 articleResult.ArticleInnerLabelsResult = await _articleLabelService.GetArticleLabelsAsync(id); //文章图片 foreach (var block in articleResult.ArticleBlocks) { if (block.Type == "image") block.Data.File.Url = StringUtils.AddDomain(block.Data.File.Url); } var imageUrls = articleResult.ImageUrls.ToList(); for (int i = 0; i < imageUrls.Count(); i++) imageUrls[i] = StringUtils.AddDomain(imageUrls[i]); articleResult.ImageUrls = imageUrls; var analyzeRequest = new Request.App.Analyze.AnalyzeRequest(); analyzeRequest.TypeValue = 0; analyzeRequest.AnalyzeType = 1; analyzeRequest.SourceId = id; analyzeRequest.UserId = userId; //点赞数量 articleResult.PraiseCount = await _analyzeService.CountAsync(analyzeRequest); //获取话题的评论数量 var commentCount = await _commentRepository.CountAsync(Q.Where(nameof(Entity.Comment.ArticleId), id).Where(nameof(Entity.Comment.TypeValue), 0).Where(nameof(Entity.Comment.Pid), 0)); articleResult.CommentCount = commentCount; //获取话题的转发数量 analyzeRequest.AnalyzeType = 4; var retransmissionCount = await _analyzeService.CountAsync(analyzeRequest); articleResult.RetransmissionCount = retransmissionCount; articleResult.IsRetransmission = await _analyzeService.ExistsAsync(analyzeRequest); //获取话题的收藏数量 analyzeRequest.AnalyzeType = 3; var collectCount = await _analyzeService.CountAsync(analyzeRequest); articleResult.CollectCount = collectCount; //是否收藏 articleResult.IsCollect = await _analyzeService.ExistsAsync(analyzeRequest); //获取话题的点赞数量 analyzeRequest.AnalyzeType = 1; var praiseCount = await _analyzeService.CountAsync(analyzeRequest); articleResult.PraiseCount = praiseCount; //是否点赞 articleResult.IsPraise = await _analyzeService.ExistsAsync(analyzeRequest); var request = new PraisePageSearchRequest { SourceId = id, TypeValue = 0, Page = 1, PerPage = 3 }; articleResult.ArticlePraisePagedList = await _analyzeService.GetPraisePageAsync(request); return articleResult; } /// /// 添加 /// /// /// public async Task AddAsync(ArticleAddRequest request) { //文章图片 var resultImageUrls = request.ImageUrls.ToList(); for (int i = 0; i < resultImageUrls.Count; i++) resultImageUrls[i] = StringUtils.RemoveDomain(resultImageUrls[i]); request.ImageUrls = resultImageUrls; //文章内容图片 foreach (var block in request.Blocks) { if (block.Type == "image") { block.Data.File.Url = StringUtils.RemoveDomain(block.Data.File.Url); } } var sort = request.Sort == 0 ? await _articleRepository.MaxAsync(nameof(Entity.Article.Sort)) : request.Sort; var article = new Entity.Article { Title = request.Title, GroupId = request.GroupId, ImageUrls = StringUtils.ObjectCollectionToString(request.ImageUrls), Summary = request.Summary, Author = request.Author, Source = request.Source, Blocks = StringUtils.JsonSerialize(request.Blocks), IsChecked = request.IsChecked, AddDate = request.AddDate, Sort = sort ?? 1, IsTop = request.IsTop }; article.Id = await _articleRepository.InsertAsync(article); //添加文章标签 await _articleLabelService.AddArticleInnerLabel(article.Id, request.ArticleLabelIds); var articleResult = new ArticleResult { Id = article.Id, Title = article.Title, GroupId = article.GroupId, ImageUrls = StringUtils.StringCollectionToStringList(article.ImageUrls), Summary = article.Summary, Author = article.Author, Source = article.Source, ArticleBlocks = StringUtils.JsonDeserialize>(article.Blocks), IsChecked = article.IsChecked, AddDate = article.AddDate, Sort = article.Sort, IsTop = article.IsTop }; //文章图片 resultImageUrls = articleResult.ImageUrls.ToList(); for (int i = 0; i < resultImageUrls.Count; i++) { resultImageUrls[i] = StringUtils.AddDomain(resultImageUrls[i]); } articleResult.ImageUrls = resultImageUrls; //文章内容图片 foreach (var block in articleResult.ArticleBlocks) { if (block.Type == "image") { block.Data.File.Url = StringUtils.AddDomain(block.Data.File.Url); } } return articleResult; } public async Task EditAsync(ArticleEditRequest request) { //解析文章类容 图片地址 foreach (var block in request.Blocks) { if (block.Type == "image") { block.Data.File.Url = StringUtils.RemoveDomain(block.Data.File.Url); } } // var imageUrls = request.ImageUrls.ToList(); for (int i = 0; i < imageUrls.Count; i++) { imageUrls[i] = StringUtils.RemoveDomain(imageUrls[i]); } request.ImageUrls = imageUrls; var article = new Entity.Article { Id = request.Id, Title = request.Title, GroupId = request.GroupId, ImageUrls = StringUtils.ObjectCollectionToString(request.ImageUrls), Summary = request.Summary, Author = request.Author, Source = request.Source, Blocks = StringUtils.JsonSerialize(request.Blocks), IsChecked = request.IsChecked, AddDate = request.AddDate, Sort = request.Sort, IsTop = request.IsTop }; await _articleRepository.UpdateAsync(article); //添加文章标签 await _articleLabelService.AddArticleInnerLabel(article.Id, request.ArticleLabelIds); var articleResult = new ArticleResult { Id = article.Id, Title = article.Title, GroupId = article.GroupId, ImageUrls = StringUtils.StringCollectionToStringList(article.ImageUrls), Summary = article.Summary, Author = article.Author, Source = article.Source, ArticleBlocks = StringUtils.JsonDeserialize>(article.Blocks), IsChecked = article.IsChecked, AddDate = article.AddDate, Sort = article.Sort, IsTop = request.IsTop }; //文章图片 var resultImageUrls = articleResult.ImageUrls.ToList(); for (int i = 0; i < resultImageUrls.Count; i++) { resultImageUrls[i] = StringUtils.AddDomain(resultImageUrls[i]); } articleResult.ImageUrls = resultImageUrls; //文章内容图片 foreach (var block in articleResult.ArticleBlocks) { if (block.Type == "image") { block.Data.File.Url = StringUtils.AddDomain(block.Data.File.Url); } } return articleResult; } } }