TopicService.Detail.cs 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using Datory;
  4. using GxPress.Common.Exceptions;
  5. using GxPress.Common.Tools;
  6. using GxPress.Request.Analyze;
  7. using GxPress.Request.App.Topic;
  8. using GxPress.Result;
  9. using GxPress.Result.App.Topic;
  10. using Newtonsoft.Json;
  11. namespace GxPress.Service.Implement.Topic
  12. {
  13. public partial class TopicService
  14. {
  15. /// <summary>
  16. /// 获取话题详情
  17. /// </summary>
  18. /// <param name="request"></param>
  19. /// <returns></returns>
  20. public async Task<TopicDetailResult> GetTopicDetailResultAsync(TopicDetailRequest request)
  21. {
  22. var topic = await _topicRepository.GetAsync(request.Id);
  23. if (topic == null)
  24. throw new BusinessException("话题不存在");
  25. var result = _mapper.Map<TopicDetailResult>(topic);
  26. //获取小组信息
  27. if (topic.GroupId > 0)
  28. {
  29. var group = await groupRepository.GetAsync(topic.GroupId);
  30. if (group != null)
  31. {
  32. result.GroupName = group.Name;
  33. result.GroupId = group.Id;
  34. }
  35. }
  36. if (string.IsNullOrWhiteSpace(result.Content))
  37. result.Content = "[]";
  38. var contentJsonData = JsonConvert.DeserializeObject<List<ContentJsonData>>(result.Content);
  39. foreach (var item in contentJsonData)
  40. item.File = StringUtils.AddDomain(item.File);
  41. result.Data = contentJsonData;
  42. if (request.UserId == 0)
  43. return result;
  44. //是否是创建人
  45. result.IsAdmin = topic.UserId == request.UserId;
  46. //获取用户
  47. var user = await _userRepository.GetAsync(result.UserId);
  48. result.UserName = user.Name;
  49. //访问
  50. if (await _visitService.AddVisit(request.UserId, 2, request.Id))
  51. result.ReadCount++;
  52. //访问量
  53. result.ReadCount = await _visitService.GetCountAsync(2, request.Id);
  54. var analyzeRequest = new Request.App.Analyze.AnalyzeRequest();
  55. analyzeRequest.TypeValue = GxPress.EnumConst.AllTypeConst.Topic.GetHashCode();
  56. analyzeRequest.AnalyzeType = 1;
  57. analyzeRequest.SourceId = request.Id;
  58. analyzeRequest.UserId = request.UserId;
  59. //点赞数量
  60. result.PraiseCount = await _analyzeService.CountAsync(analyzeRequest);
  61. //获取话题的评论数量
  62. var commentCount =
  63. await _commentRepository.CountAsync(Q.Where(nameof(Entity.Comment.ArticleId), request.Id).Where(nameof(Entity.Comment.TypeValue), 1).Where(nameof(Entity.Comment.Pid), 0));
  64. result.CommentCount = commentCount;
  65. //获取话题的转发数量
  66. analyzeRequest.AnalyzeType = 4;
  67. var retransmissionCount = await _analyzeService.CountAsync(analyzeRequest);
  68. result.RetransmissionCount = retransmissionCount;
  69. result.IsRetransmission = await _analyzeService.ExistsAsync(analyzeRequest);
  70. //获取话题的收藏数量
  71. analyzeRequest.AnalyzeType = 3;
  72. var collectCount = await _analyzeService.CountAsync(analyzeRequest);
  73. result.CollectCount = collectCount;
  74. //是否收藏
  75. result.IsCollect = await _analyzeService.ExistsAsync(analyzeRequest);
  76. //获取话题的点赞数量
  77. analyzeRequest.AnalyzeType = 1;
  78. var praiseCount = await _analyzeService.CountAsync(analyzeRequest);
  79. result.PraiseCount = praiseCount;
  80. //是否点赞
  81. result.IsPraise = await _analyzeService.ExistsAsync(analyzeRequest);
  82. var praisePageSearchRequest = new PraisePageSearchRequest { SourceId = request.Id, TypeValue = GxPress.EnumConst.AllTypeConst.Topic.GetHashCode(), Page = 1, PerPage = 3 };
  83. result.TopicPraisePagedList = await _analyzeService.GetPraisePageAsync(praisePageSearchRequest);
  84. result.AvatarUrl = StringUtils.AddDomainMin(user.AvatarUrl);
  85. return result;
  86. }
  87. }
  88. }