diff --git a/labs/Teacher/Infrastructure/Views/Shared/Search.cshtml b/labs/Teacher/Infrastructure/Views/Shared/Search.cshtml index 03459666..fc1bb4df 100644 --- a/labs/Teacher/Infrastructure/Views/Shared/Search.cshtml +++ b/labs/Teacher/Infrastructure/Views/Shared/Search.cshtml @@ -34,7 +34,7 @@ { uihit = "String"; } -
+
diff --git a/labs/Teacher/TeacherExt/Controllers/HomeController.cs b/labs/Teacher/TeacherExt/Controllers/HomeController.cs index dbb878d6..ee352d7d 100644 --- a/labs/Teacher/TeacherExt/Controllers/HomeController.cs +++ b/labs/Teacher/TeacherExt/Controllers/HomeController.cs @@ -15,6 +15,8 @@ using System.IO; using TeacherExt.Entities; using TeacherExt.Models; using NPOI.XSSF.UserModel; +using TeacherExt.Infra; +using NPOI.SS.UserModel; namespace TeacherExt.Controllers { @@ -43,11 +45,52 @@ namespace TeacherExt.Controllers var template = Path.Combine(this._env.ContentRootPath,"wwwroot", "teacher.xlsx"); using var fs = System.IO.File.OpenRead(template); var wk = new XSSFWorkbook(fs); + var sheet = wk.GetSheetAt(0); + this.ExportInternal(sheet); + for (int i = 0; i < 68; i++) + { + sheet.AutoSizeColumn(i); + } using var ms = new MemoryStream(); wk.Write(ms); return File(ms.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",$"教师列表_{DateTime.Now.ToString("yyyy_MM-dd_HH_mm_ss")}.xlsx"); } + private void ExportInternal(ISheet sheet) + { + var style = sheet.Workbook.CreateCellStyle(); + style.BorderTop = BorderStyle.Thin; + style.BorderRight = BorderStyle.Thin; + style.BorderBottom = BorderStyle.Thin; + style.BorderLeft = BorderStyle.Thin; + var list = this._teacherRepo.ReadOnlyTable() + .ToList().Select(o => + { + var m = o.To(); + this.EntityToModel(o, m); + this.ToDisplayModel(o, m); + return m; + }) + .ToList(); + for (int i = 0; i < list.Count; i++) + { + var teacher = list[i]; + var rowNumber = i + 1; + var rowIndex = i + 4; + var row = sheet.CreateRow(rowIndex); + var colIndex = -1; + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.Numeric).SetCellValue(rowNumber); + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Organ); + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.UserType); + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.RealName); + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Sex); + if(teacher.Birthday.HasValue) + { + row.CreateCell(++colIndex).SetStyle(style).SetType(CellType.String).SetCellValue(teacher.Birthday.Value.ToString("yyyy-MM")); + } + } + } + public override void OnActionExecuting(ActionExecutingContext context) { } @@ -65,15 +108,15 @@ namespace TeacherExt.Controllers public override void EntityToModel(Teacher entity, EditTeacherModel model) { - if (string.IsNullOrEmpty(entity.IdNumber)) + if (!string.IsNullOrEmpty(entity.IdNumber)) { - var value = entity.IdNumber.Length == 15 ? $"19{entity.IdNumber.Substring(5, 6)}" : entity.IdNumber.Substring(5, 8); + var value = entity.IdNumber.Length == 15 ? $"19{entity.IdNumber.Substring(6, 6)}" : entity.IdNumber.Substring(6, 8); var birthday = DateTime.ParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture); model.Age = DateTime.Now.Year - birthday.Year; } if (entity.JobStart.HasValue) { - model.Age = DateTime.Now.Year - entity.JobStart.Value.Year; + model.JobAge = DateTime.Now.Year - entity.JobStart.Value.Year; } } diff --git a/labs/Teacher/TeacherExt/Infra/NPOIExt.cs b/labs/Teacher/TeacherExt/Infra/NPOIExt.cs new file mode 100644 index 00000000..5b37959f --- /dev/null +++ b/labs/Teacher/TeacherExt/Infra/NPOIExt.cs @@ -0,0 +1,19 @@ +using NPOI.SS.UserModel; + +namespace TeacherExt.Infra +{ + public static class NPOIExt + { + public static ICell SetType(this ICell cell, CellType type) + { + cell.SetCellType(type); + return cell; + } + + public static ICell SetStyle(this ICell cell, ICellStyle style) + { + cell.CellStyle = style; + return cell; + } + } +} diff --git a/labs/Teacher/TeacherExt/wwwroot/teacher.xlsx b/labs/Teacher/TeacherExt/wwwroot/teacher.xlsx index 107f24c5..080a0e23 100644 Binary files a/labs/Teacher/TeacherExt/wwwroot/teacher.xlsx and b/labs/Teacher/TeacherExt/wwwroot/teacher.xlsx differ