ArticleLabelService.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using GxPress.Service.Interface.ArticleLabel;
  2. using GxPress.Repository.Interface.ArticleLabel;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. using System.Transactions;
  6. using Datory;
  7. using GxPress.Result.App.ArticleLabel;
  8. using System.Linq;
  9. using GxPress.Common.Exceptions;
  10. namespace GxPress.Service.Implement.ArticleLabel
  11. {
  12. public class ArticleLabelService : IArticleLabelService
  13. {
  14. private readonly IArticleLabelRepository _articleLabelRepository;
  15. private readonly IArticleInnerLabelRepository _articleInnerLabelRepository;
  16. public ArticleLabelService(IArticleLabelRepository articleLabelRepository, IArticleInnerLabelRepository articleInnerLabelRepository)
  17. {
  18. _articleLabelRepository = articleLabelRepository;
  19. _articleInnerLabelRepository = articleInnerLabelRepository;
  20. }
  21. /// <summary>
  22. /// 添加标签
  23. /// </summary>
  24. /// <param name="labelNames"></param>
  25. /// <returns></returns>
  26. public async Task<int> InsertAsync(string labelName)
  27. {
  28. try
  29. {
  30. var articleLabel = await _articleLabelRepository.GetAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleLabel.LabelName), labelName));
  31. if (articleLabel != null)
  32. throw new BusinessException("标签已存在!");
  33. using (TransactionScope transactionScope = new TransactionScope())
  34. {
  35. articleLabel = new Entity.ArticleLabel.ArticleLabel();
  36. articleLabel.LabelName = labelName;
  37. var id = await _articleLabelRepository.InsertAsync(articleLabel);
  38. transactionScope.Complete();
  39. return id;
  40. }
  41. }
  42. catch (System.Exception)
  43. {
  44. throw;
  45. }
  46. }
  47. /// <summary>
  48. /// 获取标签列表
  49. /// </summary>
  50. /// <returns></returns>
  51. public async Task<IEnumerable<Entity.ArticleLabel.ArticleLabel>> GetArticleLabelsAsync()
  52. {
  53. return await _articleLabelRepository.GetAllAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleLabel.Id), ">", 0));
  54. }
  55. /// <summary>
  56. /// 添加文章标签关联
  57. /// </summary>
  58. /// <param name="articleId"></param>
  59. /// <param name="articleLabelIds"></param>
  60. /// <returns></returns>
  61. public async Task<bool> AddArticleInnerLabel(int articleId, List<int> articleLabelIds)
  62. {
  63. try
  64. {
  65. using (TransactionScope transactionScope = new TransactionScope())
  66. {
  67. //先删除
  68. await _articleInnerLabelRepository.DeleteAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleId), articleId));
  69. foreach (var articleLabelId in articleLabelIds)
  70. {
  71. var articleInnerLabel = new Entity.ArticleLabel.ArticleInnerLabel();
  72. articleInnerLabel.ArticleId = articleId;
  73. articleInnerLabel.ArticleLabelId = articleLabelId;
  74. await _articleInnerLabelRepository.InsertAsync(articleInnerLabel);
  75. }
  76. transactionScope.Complete();
  77. }
  78. }
  79. catch (System.Exception)
  80. {
  81. throw;
  82. }
  83. return true;
  84. }
  85. /// <summary>
  86. /// 根据文章ID获取文章标签
  87. /// </summary>
  88. /// <param name="articleId"></param>
  89. /// <returns></returns>
  90. public async Task<IEnumerable<ArticleInnerLabelResult>> GetArticleLabelsAsync(int articleId)
  91. {
  92. return await _articleLabelRepository.GetArticleLabelsAsync(articleId);
  93. }
  94. /// <summary>
  95. /// 获取屏蔽文章
  96. /// </summary>
  97. /// <param name="articleId"></param>
  98. /// <returns></returns>
  99. public async Task<IEnumerable<int>> GetShieldArticleIdsAsync(int articleId)
  100. {
  101. var articleInnerLabels = await _articleInnerLabelRepository.GetAllAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleId), articleId));
  102. if (articleInnerLabels.Count() == 0)
  103. return articleInnerLabels.Select(n => n.ArticleId);
  104. articleInnerLabels = await _articleInnerLabelRepository.GetAllAsync(Q.WhereIn(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleLabelId), articleInnerLabels.Select(n => n.ArticleLabelId)));
  105. return articleInnerLabels.Select(n => n.ArticleId);
  106. }
  107. }
  108. }