using GxPress.Service.Interface.ArticleLabel; using GxPress.Repository.Interface.ArticleLabel; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; using Datory; using GxPress.Result.App.ArticleLabel; using System.Linq; using GxPress.Common.Exceptions; namespace GxPress.Service.Implement.ArticleLabel { public class ArticleLabelService : IArticleLabelService { private readonly IArticleLabelRepository _articleLabelRepository; private readonly IArticleInnerLabelRepository _articleInnerLabelRepository; public ArticleLabelService(IArticleLabelRepository articleLabelRepository, IArticleInnerLabelRepository articleInnerLabelRepository) { _articleLabelRepository = articleLabelRepository; _articleInnerLabelRepository = articleInnerLabelRepository; } /// /// 添加标签 /// /// /// public async Task InsertAsync(string labelName) { try { var articleLabel = await _articleLabelRepository.GetAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleLabel.LabelName), labelName)); if (articleLabel != null) throw new BusinessException("标签已存在!"); using (TransactionScope transactionScope = new TransactionScope()) { articleLabel = new Entity.ArticleLabel.ArticleLabel(); articleLabel.LabelName = labelName; var id = await _articleLabelRepository.InsertAsync(articleLabel); transactionScope.Complete(); return id; } } catch (System.Exception) { throw; } } /// /// 获取标签列表 /// /// public async Task> GetArticleLabelsAsync() { return await _articleLabelRepository.GetAllAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleLabel.Id), ">", 0)); } /// /// 添加文章标签关联 /// /// /// /// public async Task AddArticleInnerLabel(int articleId, List articleLabelIds) { try { using (TransactionScope transactionScope = new TransactionScope()) { //先删除 await _articleInnerLabelRepository.DeleteAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleId), articleId)); foreach (var articleLabelId in articleLabelIds) { var articleInnerLabel = new Entity.ArticleLabel.ArticleInnerLabel(); articleInnerLabel.ArticleId = articleId; articleInnerLabel.ArticleLabelId = articleLabelId; await _articleInnerLabelRepository.InsertAsync(articleInnerLabel); } transactionScope.Complete(); } } catch (System.Exception) { throw; } return true; } /// /// 根据文章ID获取文章标签 /// /// /// public async Task> GetArticleLabelsAsync(int articleId) { return await _articleLabelRepository.GetArticleLabelsAsync(articleId); } /// /// 获取屏蔽文章 /// /// /// public async Task> GetShieldArticleIdsAsync(int articleId) { var articleInnerLabels = await _articleInnerLabelRepository.GetAllAsync(Q.Where(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleId), articleId)); if (articleInnerLabels.Count() == 0) return articleInnerLabels.Select(n => n.ArticleId); articleInnerLabels = await _articleInnerLabelRepository.GetAllAsync(Q.WhereIn(nameof(Entity.ArticleLabel.ArticleInnerLabel.ArticleLabelId), articleInnerLabels.Select(n => n.ArticleLabelId))); return articleInnerLabels.Select(n => n.ArticleId); } } }