From faf28d40c6be7e21eb751714df0bcf0501c56c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B7=B3?= <454313500@qq.com> Date: Fri, 29 Dec 2023 18:19:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=90=AD=E5=BB=BA=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E6=AD=A3=E5=9C=A8=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/Article/ArticleImprotDto.cs | 21 +++++++++ .../Services/ArticleService.cs | 46 +++++++++++++++++-- .../Enums/ArticleImportTypeEnum.cs | 17 +++++++ .../Model/FileObject.cs | 14 ++++++ .../Managers/ForumManager.cs | 19 +++++++- 5 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleImprotDto.cs create mode 100644 Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/ArticleImportTypeEnum.cs create mode 100644 Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Model/FileObject.cs diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleImprotDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleImprotDto.cs new file mode 100644 index 00000000..cb078ddd --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleImprotDto.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Bbs.Domain.Shared.Enums; + +namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Article +{ + public class ArticleImprotDto + { + /// + /// 主题id + /// + [Required] + public Guid DiscussId { get; set; } + + public ArticleImportTypeEnum ImportType { get; set; } = ArticleImportTypeEnum.Defalut; + } +} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs index d6ef86c5..5c9c245b 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Text; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; @@ -13,8 +14,10 @@ using Yi.Framework.Bbs.Application.Contracts.Dtos.Plate; using Yi.Framework.Bbs.Application.Contracts.IServices; using Yi.Framework.Bbs.Domain.Entities; using Yi.Framework.Bbs.Domain.Extensions; +using Yi.Framework.Bbs.Domain.Managers; using Yi.Framework.Bbs.Domain.Repositories; using Yi.Framework.Bbs.Domain.Shared.Consts; +using Yi.Framework.Bbs.Domain.Shared.Model; using Yi.Framework.Core.Extensions; using Yi.Framework.Ddd.Application; using Yi.Framework.Rbac.Domain.Authorization; @@ -32,18 +35,20 @@ namespace Yi.Framework.Bbs.Application.Services { public ArticleService(IArticleRepository articleRepository, ISqlSugarRepository discussRepository, - IDiscussService discussService) : base(articleRepository) + IDiscussService discussService, + ForumManager forumManager) : base(articleRepository) { _articleRepository = articleRepository; _discussRepository = discussRepository; _discussService = discussService; - + _forumManager = forumManager; } - private IArticleRepository _articleRepository { get; set; } - private ISqlSugarRepository _discussRepository { get; set; } - private IDiscussService _discussService { get; set; } + private ForumManager _forumManager; + private IArticleRepository _articleRepository; + private ISqlSugarRepository _discussRepository; + private IDiscussService _discussService; public override async Task> GetListAsync(ArticleGetListInputVo input) { @@ -134,6 +139,37 @@ namespace Yi.Framework.Bbs.Application.Services } + /// + /// 导入文章 + /// + /// + public async Task PostImportAsync(ArticleImprotDto input, [FromForm] IFormFileCollection file) + { + var fileObjs = new List(); + if (file.Count > 0) + { + foreach (var item in file) + { + if (item.Length > 0) + { + using (var stream = item.OpenReadStream()) + { + using (var fileStream = new MemoryStream()) + { + await item.CopyToAsync(fileStream); + var bytes = fileStream.ToArray(); + + // 将字节转换成字符串 + var content = Encoding.UTF8.GetString(bytes); + fileObjs.Add(new FileObject() { FileName=item.FileName,Content=content}); + } + } + } + } + } + //使用简单工厂根据传入的类型进行判断 + await _forumManager.PostImportAsync(input.DiscussId, fileObjs, input.ImportType); + } /// diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/ArticleImportTypeEnum.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/ArticleImportTypeEnum.cs new file mode 100644 index 00000000..6c6f2ac3 --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/ArticleImportTypeEnum.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Bbs.Domain.Shared.Enums +{ + public enum ArticleImportTypeEnum + { + //默认导入方式 + Defalut, + + //vuePresss方式 + VuePress + } +} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Model/FileObject.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Model/FileObject.cs new file mode 100644 index 00000000..c0cd5580 --- /dev/null +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Model/FileObject.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Bbs.Domain.Shared.Model +{ + public class FileObject + { + public string Content { get; set; } + public string FileName { get; set; } + } +} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs index 44b28d15..43e82011 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs @@ -1,5 +1,9 @@ -using Volo.Abp.Domain.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.Domain.Services; using Yi.Framework.Bbs.Domain.Entities; +using Yi.Framework.Bbs.Domain.Shared.Enums; +using Yi.Framework.Bbs.Domain.Shared.Model; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.Bbs.Domain.Managers @@ -9,7 +13,7 @@ namespace Yi.Framework.Bbs.Domain.Managers /// public class ForumManager : DomainService { - public readonly ISqlSugarRepository _discussRepository; + public readonly ISqlSugarRepository _discussRepository; public readonly ISqlSugarRepository _plateEntityRepository; public readonly ISqlSugarRepository _commentRepository; public ForumManager(ISqlSugarRepository discussRepository, ISqlSugarRepository plateEntityRepository, ISqlSugarRepository commentRepository) @@ -36,5 +40,16 @@ namespace Yi.Framework.Bbs.Domain.Managers entity.RootId = rootId; return await _commentRepository.InsertReturnEntityAsync(entity); } + + /// + /// 导入文章 + /// + /// + /// + /// + /// + public async Task PostImportAsync(Guid discussId, List fileObjs, ArticleImportTypeEnum importType) + { + } } }