From 459a9f72fae46efba5c9eb89e67d6a262f4da8a1 Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Thu, 20 Jun 2024 11:32:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E5=90=88=E5=89=8D=E7=AB=AF=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E9=A2=98=E5=BA=93=E5=AF=BC=E5=85=A5excel=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Base/BaseController.cs | 13 +++++++++++++ .../files/ExcelTemplate/Ghre_Question.xlsx | Bin 0 -> 40770 bytes Tiobon.Core.IServices/BASE/IBaseServices.cs | 4 +++- .../ViewModels/Extend/ExcelData.cs | 8 ++++++++ Tiobon.Core.Services/BASE/BaseServices.cs | 18 ++++++++++++++++-- .../Ghre/Ghre_ExamServices.cs | 6 ++++-- .../Ghre/Ghre_QuestionServices.cs | 13 +++++++++---- 7 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 Tiobon.Core.Api/wwwroot/files/ExcelTemplate/Ghre_Question.xlsx create mode 100644 Tiobon.Core.Model/ViewModels/Extend/ExcelData.cs diff --git a/Tiobon.Core.Api/Controllers/Base/BaseController.cs b/Tiobon.Core.Api/Controllers/Base/BaseController.cs index 58b3dba4..68e37b81 100644 --- a/Tiobon.Core.Api/Controllers/Base/BaseController.cs +++ b/Tiobon.Core.Api/Controllers/Base/BaseController.cs @@ -1,4 +1,5 @@ using System.Reflection; +using NPOI.HPSF; namespace Tiobon.Core.Controllers; @@ -229,6 +230,18 @@ public class BaseController DownloadExcel() + { + var result = (await InvokeServiceAsync("DownloadExcel", [])) as ServiceResult; + string path = result.Data; + FileStream fs = new FileStream(path, FileMode.OpenOrCreate); + fs.Close(); + return File(new FileStream(path, FileMode.Open), "application/octet-stream", result.Message); + } + #endregion + ///// ///// 反射调用service方法 ///// diff --git a/Tiobon.Core.Api/wwwroot/files/ExcelTemplate/Ghre_Question.xlsx b/Tiobon.Core.Api/wwwroot/files/ExcelTemplate/Ghre_Question.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b13f1d763fd93706f5e4d45823d286ea7f4d8ebe GIT binary patch literal 40770 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 z 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�MwD;MPe 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 aXa9Rgg9BXqKtLpbKQ#bS;~4kryZ;AwI=X=X literal 0 HcmV?d00001 diff --git a/Tiobon.Core.IServices/BASE/IBaseServices.cs b/Tiobon.Core.IServices/BASE/IBaseServices.cs index fcc4b6f1..b5b1a74a 100644 --- a/Tiobon.Core.IServices/BASE/IBaseServices.cs +++ b/Tiobon.Core.IServices/BASE/IBaseServices.cs @@ -153,7 +153,9 @@ namespace Tiobon.Core.IServices.BASE Task> QueryFilterPage(QueryBody filter, string condition); Task> ExportExcel([FromBody] QueryBody body); - Task> ImportExcel(IFormFile file); + Task> ImportExcel(IFormFile file); + + Task> DownloadExcel(); Task> QueryMuch( Expression> joinExpression, diff --git a/Tiobon.Core.Model/ViewModels/Extend/ExcelData.cs b/Tiobon.Core.Model/ViewModels/Extend/ExcelData.cs new file mode 100644 index 00000000..d2fceb35 --- /dev/null +++ b/Tiobon.Core.Model/ViewModels/Extend/ExcelData.cs @@ -0,0 +1,8 @@ +namespace Tiobon.Core.Model; + +public class ExcelData +{ + public int SuccessCount { get; set; } = 0; + public int ErrorCount { get; set; } = 0; + public string filePath { get; set; } +} \ No newline at end of file diff --git a/Tiobon.Core.Services/BASE/BaseServices.cs b/Tiobon.Core.Services/BASE/BaseServices.cs index 8242db45..84d3550c 100644 --- a/Tiobon.Core.Services/BASE/BaseServices.cs +++ b/Tiobon.Core.Services/BASE/BaseServices.cs @@ -2,12 +2,14 @@ using System.Data; using System.Dynamic; using System.Linq.Expressions; +using System.Net.Mail; using AgileObjects.AgileMapper; using MathNet.Numerics.Distributions; using Microsoft.AspNetCore.Http; using MySqlX.XDevAPI.Common; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using NPOI.HPSF; using NPOI.Util; using SqlSugar; using Tiobon.Core.Common; @@ -817,7 +819,7 @@ public class BaseServices : IBaseServ } - public async virtual Task> ImportExcel(IFormFile file) + public async virtual Task> ImportExcel(IFormFile file) { //long id = SnowFlakeSingle.instance.getID(); //var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot"; @@ -826,7 +828,19 @@ public class BaseServices : IBaseServ // Directory.CreateDirectory(physicsPath + path); - return ServiceResult.OprateSuccess("导入成功!"); + return ServiceResult.OprateSuccess("导入成功!"); + } + public async virtual Task> DownloadExcel() + { + var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot"; + var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}ExcelTemplate{Path.DirectorySeparatorChar}"}"; + if (!Directory.Exists(physicsPath + path)) + Directory.CreateDirectory(physicsPath + path); + + Type entityType = typeof(TEntity); + var fileName = entityType.GetEntityTableName() + ".xlsx"; + var result = ServiceResult.OprateSuccess(fileName, physicsPath + path + fileName); + return result; } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() diff --git a/Tiobon.Core.Services/Ghre/Ghre_ExamServices.cs b/Tiobon.Core.Services/Ghre/Ghre_ExamServices.cs index efba4a03..04d9e185 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_ExamServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_ExamServices.cs @@ -424,10 +424,13 @@ public class Ghre_ExamServices : BaseServices().Where(it => it.Id == pageData.ExamPaperId).FirstAsync(); + var course = await Db.Queryable().Where(it => it.Id == pageData.CourseId).FirstAsync(); pageData.CoverUrl = course?.CoverUrl; if (string.IsNullOrWhiteSpace(pageData.ExamNo)) @@ -1007,7 +1010,6 @@ public class Ghre_ExamServices : BaseServices(); id = await base.Add(insert); - var insertStaffs = pageData.staffTableData.Select(x => new InsertGhre_ExamStaffInput() { ExamId = id, diff --git a/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs b/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs index c52937b2..89babff2 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs @@ -784,8 +784,9 @@ public class Ghre_QuestionServices : BaseServices> ImportExcel(IFormFile file) + public override async Task> ImportExcel(IFormFile file) { + var data = new ExcelData(); long id = SnowFlakeSingle.instance.getID(); var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot"; var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}import{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}"; @@ -941,13 +942,14 @@ public class Ghre_QuestionServices : BaseServices a)); isExistError = true; continue; } else { - + data.SuccessCount++; var id = await base.Add(insert); insertAnswers.ForEach(x => x.QuestionId = id); await _ghre_QuestionAnswerServices.Add(insertAnswers); @@ -964,13 +966,16 @@ public class Ghre_QuestionServices : BaseServices.OprateFailed("导入文件存在错误,请下载后查看!", errorFileName); + return ServiceResult.OprateFailed("导入文件存在错误,请下载后查看!", data); else - return ServiceResult.OprateSuccess("导入成功!"); + return ServiceResult.OprateSuccess("导入成功!"); } #endregion } \ No newline at end of file