diff --git a/Model/Tiobon.Web.pdm b/Model/Tiobon.Web.pdm index f48f3a05..b016940b 100644 --- a/Model/Tiobon.Web.pdm +++ b/Model/Tiobon.Web.pdm @@ -1,5 +1,5 @@ - + @@ -13672,11 +13672,11 @@ LABL 0 Arial Unicode MS,8,N CourseName 1713839845 Administrator -1713839945 +1735014381 Administrator 课程名称 -nvarchar(32) -32 +nvarchar(64) +64 1335D331-DAA5-4CD0-9A46-A58317A9F23F diff --git a/Tiobon.Core.Services/BASE/BaseServices.cs b/Tiobon.Core.Services/BASE/BaseServices.cs index 7ee5ef18..504170bb 100644 --- a/Tiobon.Core.Services/BASE/BaseServices.cs +++ b/Tiobon.Core.Services/BASE/BaseServices.cs @@ -827,7 +827,7 @@ public class BaseServices : IBaseServ NPOIHelper.ExportExcel(dt, body.exportSet.TitleName, "sheet1", physicsPath + path); var result = new ExcelData(); - result.filePath = path; + result.filePath = "/Advanced" + path; result.fileName = body.exportSet.TitleName + ".xlsx"; return ServiceResult.OprateSuccess("导出成功", result); } diff --git a/Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs b/Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs index 5d93a27d..e58c3ae8 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs @@ -1,4 +1,6 @@ -namespace Tiobon.Core.Services; +using NPOI.SS.UserModel; + +namespace Tiobon.Core.Services; /// /// 课程场景 (服务) @@ -58,4 +60,130 @@ public class Ghre_CourseSceneServices : BaseServices> DownloadExcel(string menuName) + { + 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(Ghre_CourseScene); + var fileName = entityType.GetEntityTableName() + ".xlsx"; + + + var physicsPath1 = physicsPath + path + fileName; + //if (dataSourceLists.Any()) + // physicsPath1 = physicsPath + path + newFileName; + var result = ServiceResult.OprateSuccess("课程场景_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1); + return result; + } + 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}"}"; + if (!Directory.Exists(physicsPath + path)) + Directory.CreateDirectory(physicsPath + path); + + var filepath = physicsPath + path + file.FileName; + using (var stream = File.Create(filepath)) + { + await file.CopyToAsync(stream); + } + string extension = Path.GetExtension(filepath); + + bool isExistError = false; + var id1 = SnowFlakeSingle.instance.getID(); + string errorFileName = path + SnowFlakeSingle.instance.getID() + extension; + + var dt = NPOIHelper.ImportExcel(filepath, "课程场景"); + if (dt.Columns["Comments"] == null) + dt.Columns.Add("Comments", typeof(string)); + + for (int i = 0; i < dt.Rows.Count; i++) + { + var comments = new List(); + + if (!dt.Columns.Contains("场景编号")) + { + comments.Add("未查询到【场景编号】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("场景名称")) + { + comments.Add("未查询到【场景名称】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("备注")) + { + comments.Add("未查询到【备注】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + + var SceneNo = dt.Rows[i]["场景编号"].ToString(); + var SceneName = dt.Rows[i]["场景名称"].ToString(); + if (SceneNo.IsNullOrEmpty() && SceneName.IsNullOrEmpty()) + continue; + + var remarkSz = dt.Rows[i]["备注"].ToString(); + + if (await base.AnyAsync(x => x.SceneName == SceneName && x.SceneNo == SceneNo)) + { + comments.Add($"系统已存在相同编号名称课程场景数据!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + + var dict = new Dictionary + { + { "Id", SnowFlakeSingle.Instance.NextId() }, + { "CreateBy", App.User.ID }, + { "CreateTime", DateTime.Now }, + { "SceneNo", SceneNo }, + { "SceneName", SceneName }, + { "RemarkSz", remarkSz } + }; + try + { + await Db.Insertable(dict).AS("Ghre_CourseScene").ExecuteCommandAsync(); + data.SuccessCount++; + //data.SuccessCount += list.Count; + } + catch (Exception E) + { + comments.Add(E.Message); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + } + + if (isExistError) + { + NPOIHelper.ExportExcel(dt, null, "课程场景", physicsPath + errorFileName); + data.filePath = errorFileName; + } + return ServiceResult.OprateSuccess("导入成功!", data); + } + #endregion } \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghre/Ghre_CourseServices.cs b/Tiobon.Core.Services/Ghre/Ghre_CourseServices.cs index 65ed7601..375b6578 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_CourseServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_CourseServices.cs @@ -1,4 +1,6 @@ -using NPOI.SS.UserModel; +using NPOI.SS.Formula.Functions; +using NPOI.SS.UserModel; +using NPOI.Util; using static Tiobon.Core.Model.Consts; namespace Tiobon.Core.Services; @@ -617,7 +619,7 @@ public class Ghre_CourseServices : BaseServices.OprateSuccess("导出成功", result); } @@ -689,6 +691,243 @@ public class Ghre_CourseServices : BaseServices.OprateSuccess("课程管理_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1); return result; } + 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}"}"; + if (!Directory.Exists(physicsPath + path)) + Directory.CreateDirectory(physicsPath + path); + + var filepath = physicsPath + path + file.FileName; + using (var stream = File.Create(filepath)) + { + await file.CopyToAsync(stream); + } + string extension = Path.GetExtension(filepath); + + bool isExistError = false; + var id1 = SnowFlakeSingle.instance.getID(); + string errorFileName = path + SnowFlakeSingle.instance.getID() + extension; + + var dt = NPOIHelper.ImportExcel(filepath, "课程管理"); + if (dt.Columns["Comments"] == null) + dt.Columns.Add("Comments", typeof(string)); + + for (int i = 0; i < dt.Rows.Count; i++) + { + var comments = new List(); + + if (!dt.Columns.Contains("课程编号(必填)")) + { + comments.Add("未查询到【课程编号】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("课程名称(必填)")) + { + comments.Add("未查询到【课程名称】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + if (!dt.Columns.Contains("课程分类(必填)")) + { + comments.Add("未查询到【课程分类】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("课程场景")) + { + comments.Add("未查询到【课程场景】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + if (!dt.Columns.Contains("标准课时(必填)")) + { + comments.Add("未查询到【标准课时】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("学分(必填)")) + { + comments.Add("未查询到【学分】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("内/外训")) + { + comments.Add("未查询到【内/外训】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("是否公开课(必填)")) + { + comments.Add("未查询到【是否公开课】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("培训有效期(月)")) + { + comments.Add("未查询到【培训有效期(月)】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("课程大纲")) + { + comments.Add("未查询到【课程大纲】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("课前准备")) + { + comments.Add("未查询到【课前准备】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (!dt.Columns.Contains("备注")) + { + comments.Add("未查询到【备注】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + var courseNo = dt.Rows[i]["课程编号(必填)"].ToString(); + long? courseClassId = null; + var courseClass = dt.Rows[i]["课程分类(必填)"].ToString(); + var courseName = dt.Rows[i]["课程名称(必填)"].ToString(); + long? courseSceneId = null; + var courseScene = dt.Rows[i]["课程场景"].ToString(); + var standardHour = dt.Rows[i]["标准课时(必填)"].ToString(); + var creditPoints = dt.Rows[i]["学分(必填)"].ToString(); + var inOrOut = dt.Rows[i]["内/外训"].ToString(); + var isOPen = dt.Rows[i]["是否公开课(必填)"].ToString(); + var validityPeriod = dt.Rows[i]["培训有效期(月)"].ToString(); + var outline = dt.Rows[i]["课程大纲"].ToString(); + var beforeReady = dt.Rows[i]["课前准备"].ToString(); + var remarkSz = dt.Rows[i]["备注"].ToString(); + + if (await base.AnyAsync(x => x.CourseNo == courseNo && x.CourseName == courseName)) + { + comments.Add($"系统已存在相同编号名称课程数据!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + if (courseClass.IsNotEmptyOrNull()) + { + courseClassId = (await _ghre_CourseClassServices.QuerySingle(x => x.ClassName == courseClass))?.Id; + if (courseClassId is null) + courseClassId = await _ghre_CourseClassServices.Add(new InsertGhre_CourseClassInput() + { + ClassNo = courseClass, + ClassName = courseClass + + }); + } + else + { + comments.Add($"课程分类为空!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + if (courseScene.IsNotEmptyOrNull()) + { + await Db.Queryable().Where(x => x.CourseName == courseScene).FirstAsync(); + courseSceneId = (await Db.Queryable().Where(x => x.CourseName == courseScene).FirstAsync())?.Id; + } + + + if (standardHour.IsNullOrEmpty()) + standardHour = "0"; + if (creditPoints.IsNullOrEmpty()) + creditPoints = "0"; + + if (inOrOut.IsNotEmptyOrNull()) + { + var items = await GetParaList("CourseInOrOut"); + inOrOut = items.Where(x => x.ParaDetailName == inOrOut).FirstOrDefault()?.ParaDetailNo ?? "In"; + } + + if (isOPen.IsNullOrEmpty() || isOPen == "否") + isOPen = "是"; + + List courseClassId1 = [courseClassId]; + var dict = new Dictionary + { + { "Id", SnowFlakeSingle.Instance.NextId() }, + { "CreateBy", App.User.ID }, + { "CreateTime", DateTime.Now }, + { "CourseClassId",JsonHelper.ObjToJson(courseClassId1) }, + { "CourseNo", courseNo }, + { "CourseName", courseName }, + { "CourseSceneId",courseSceneId }, + { "StandardHour", standardHour }, + { "CreditPoints", creditPoints }, + { "InOrOut", inOrOut }, + { "IsOPen", isOPen=="是" ? true:false }, + { "ValidityPeriod", validityPeriod }, + { "Outline", outline }, + { "BeforeReady", beforeReady }, + { "Status", "Draft" }, + { "UseDefaultCoverImage", true }, + { "DefaultCoverImageName", "defaultCourseCover1" }, + { "RemarkSz", remarkSz } + }; + try + { + await Db.Insertable(dict).AS("Ghre_Course").ExecuteCommandAsync(); + data.SuccessCount++; + //data.SuccessCount += list.Count; + } + catch (Exception E) + { + comments.Add(E.Message); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + + } + + if (isExistError) + { + NPOIHelper.ExportExcel(dt, null, "课程管理", physicsPath + errorFileName); + data.filePath = errorFileName; + } + return ServiceResult.OprateSuccess("导入成功!", data); + } #region 获取公开课查询条件 public async Task> QueryPublicSearchFields(QueryBody body)