using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; namespace Admin.NET.Application; /// /// 测试学生表服务 /// [ApiDescriptionSettings(ApplicationConst.TestDemoGroupName, Order = 100)] public class TestStudentService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; public TestStudentService(SqlSugarRepository rep) { _rep = rep; } /// /// 分页查询测试学生表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] [Description("TestStudent/Page")] public async Task> Page(TestStudentInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize); } /// /// 不分页查询测试学生表 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [Description("TestStudent/List")] public async Task> List([FromQuery] TestStudentInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").Select().ToListAsync(); } /// /// 增加测试学生表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [Description("TestStudent/Add")] public async Task Add(AddTestStudentInput input) { var entity = input.Adapt(); //重复性验证 await CheckExist(entity); await _rep.InsertAsync(entity); return entity.Id; } /// /// 删除测试学生表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [Description("TestStudent/Delete")] public async Task Delete(DeleteTestStudentInput input) { var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); //await _rep.FakeDeleteAsync(entity); //假删除 await _rep.DeleteAsync(entity); //真删除 } /// /// 更新测试学生表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] [Description("TestStudent/Update")] public async Task Update(UpdateTestStudentInput input) { var entity = input.Adapt(); //重复性验证 await CheckExist(entity,true); await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取测试学生表 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [Description("TestStudent/Detail")] public async Task Detail([FromQuery] QueryByIdTestStudentInput input) { return await _rep.GetFirstAsync(u => u.Id == input.Id); } #region 导入 /// /// Excel模板导入测试学生表功能 /// /// Excel模板文件 /// 导入的记录数 [HttpPost] [ApiDescriptionSettings(Name = "ImportExcel")] [Description("TestStudent/ImportExcel")] public async Task ImportExcelAsync(IFormFile file) { int _HeadStartLine = 2;//第1行是说明,第2行是列名 int _DataStartLine = 3;//第3行开始是数据 DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine); var addList =await CommonImport(importDataTable, _DataStartLine); await _rep.InsertRangeAsync(addList); return addList.Count; } /// /// DataTable转换实体对象列表 /// /// /// 模版列名开始行 /// private async Task> CommonImport(DataTable dataTable, int dataStartLine) { var details = new List(); int index = dataStartLine;//模版列名开始行 foreach (System.Data.DataRow row in dataTable.Rows) { index++; //导入模版定制化代码(替换模版使用) var addItem = new TestStudent(); #region 定义变量 var _RepCheckType = "";//重复性校验方式 var _TeacherId = "";//老师ID(可空) var _TeacherName = "";//老师名字(可空) var _Name = "";//学生姓名 var _AliName = "";//别名(可空) var _Age = "";//学生年龄 var _NianJi = "";//年纪(可空) var _RectorId = "";//校长ID(可空) var _HasMoney = "";//零花钱 var _ShenJia = "";//身价(可空) var _IsInSchool = "";//是否在校 var _IsWDR = "";//是否外地人(可空) var _Gender = "";//性别 var _OtherGender = "";//其他性别(可空) var _BrithDate = "";//出生日期 var _InSchoolDate = "";//入学日期(可空) #endregion #region 取值 _RepCheckType = row["重复性校验方式"]?.ToString() ; _TeacherId = row["老师ID(可空)"]?.ToString() ; _TeacherName = row["老师名字(可空)"]?.ToString() ; _Name = row["学生姓名"]?.ToString() ; _AliName = row["别名(可空)"]?.ToString() ; _Age = row["学生年龄"]?.ToString() ; _NianJi = row["年纪(可空)"]?.ToString() ; _RectorId = row["校长ID(可空)"]?.ToString() ; _HasMoney = row["零花钱"]?.ToString() ; _ShenJia = row["身价(可空)"]?.ToString() ; _IsInSchool = row["是否在校"]?.ToString() ; _IsWDR = row["是否外地人(可空)"]?.ToString() ; _Gender = row["性别"]?.ToString() ; _OtherGender = row["其他性别(可空)"]?.ToString() ; _BrithDate = row["出生日期"]?.ToString() ; _InSchoolDate = row["入学日期(可空)"]?.ToString() ; #endregion #region 验证 if(!string.IsNullOrEmpty(_RepCheckType)) { addItem.RepCheckType = (string)(_RepCheckType.Trim()); } if(!string.IsNullOrEmpty(_TeacherId)) { if (!long.TryParse(_TeacherId, out long outTeacherId)&&!string.IsNullOrEmpty(_TeacherId)) { throw Oops.Oh($"第{index}行[老师ID(可空)]{_TeacherId}值不正确!"); } if (outTeacherId <= 0&&!string.IsNullOrEmpty(_TeacherId)) { throw Oops.Oh($"第{index}行[老师ID(可空)]{_TeacherId}值不能小于等于0!"); } else { addItem.TeacherId = outTeacherId; } } if(!string.IsNullOrEmpty(_TeacherName)) { addItem.TeacherName = (string)(_TeacherName.Trim()); } if (string.IsNullOrEmpty(_Name)) { throw Oops.Oh($"第{index}行[学生姓名]{_Name}不能为空!"); } if(!string.IsNullOrEmpty(_Name)) { addItem.Name = (string)(_Name.Trim()); } if(!string.IsNullOrEmpty(_AliName)) { addItem.AliName = (string)(_AliName.Trim()); } if (string.IsNullOrEmpty(_Age)) { throw Oops.Oh($"第{index}行[学生年龄]{_Age}不能为空!"); } if(!string.IsNullOrEmpty(_Age)) { if (!int.TryParse(_Age, out int outAge)&&!string.IsNullOrEmpty(_Age)) { throw Oops.Oh($"第{index}行[学生年龄]{_Age}值不正确!"); } if (outAge <= 0&&!string.IsNullOrEmpty(_Age)) { throw Oops.Oh($"第{index}行[学生年龄]{_Age}值不能小于等于0!"); } else { addItem.Age = outAge; } } if(!string.IsNullOrEmpty(_NianJi)) { if (!int.TryParse(_NianJi, out int outNianJi)&&!string.IsNullOrEmpty(_NianJi)) { throw Oops.Oh($"第{index}行[年纪(可空)]{_NianJi}值不正确!"); } if (outNianJi <= 0&&!string.IsNullOrEmpty(_NianJi)) { throw Oops.Oh($"第{index}行[年纪(可空)]{_NianJi}值不能小于等于0!"); } else { addItem.NianJi = outNianJi; } } if(!string.IsNullOrEmpty(_RectorId)) { if (!long.TryParse(_RectorId, out long outRectorId)&&!string.IsNullOrEmpty(_RectorId)) { throw Oops.Oh($"第{index}行[校长ID(可空)]{_RectorId}值不正确!"); } if (outRectorId <= 0&&!string.IsNullOrEmpty(_RectorId)) { throw Oops.Oh($"第{index}行[校长ID(可空)]{_RectorId}值不能小于等于0!"); } else { addItem.RectorId = outRectorId; } } if (string.IsNullOrEmpty(_HasMoney)) { throw Oops.Oh($"第{index}行[零花钱]{_HasMoney}不能为空!"); } if(!string.IsNullOrEmpty(_HasMoney)) { if (!decimal.TryParse(_HasMoney, out decimal outHasMoney)&&!string.IsNullOrEmpty(_HasMoney)) { throw Oops.Oh($"第{index}行[零花钱]{_HasMoney}值不正确!"); } if (outHasMoney <= 0&&!string.IsNullOrEmpty(_HasMoney)) { throw Oops.Oh($"第{index}行[零花钱]{_HasMoney}值不能小于等于0!"); } else { addItem.HasMoney = outHasMoney; } } if(!string.IsNullOrEmpty(_ShenJia)) { if (!decimal.TryParse(_ShenJia, out decimal outShenJia)&&!string.IsNullOrEmpty(_ShenJia)) { throw Oops.Oh($"第{index}行[身价(可空)]{_ShenJia}值不正确!"); } if (outShenJia <= 0&&!string.IsNullOrEmpty(_ShenJia)) { throw Oops.Oh($"第{index}行[身价(可空)]{_ShenJia}值不能小于等于0!"); } else { addItem.ShenJia = outShenJia; } } if (string.IsNullOrEmpty(_IsInSchool)) { throw Oops.Oh($"第{index}行[是否在校]{_IsInSchool}不能为空!"); } if(!string.IsNullOrEmpty(_IsInSchool)) { if(!_IsInSchool.Equals("是") && !_IsInSchool.Equals("否")) { throw Oops.Oh($"第{index}行[是否在校]{_IsInSchool}值不正确!"); } else { bool outIsInSchool = _IsInSchool.Equals("是") ? true : false; addItem.IsInSchool = outIsInSchool; } } if(!string.IsNullOrEmpty(_IsWDR)) { if(!_IsWDR.Equals("是") && !_IsWDR.Equals("否")) { throw Oops.Oh($"第{index}行[是否外地人(可空)]{_IsWDR}值不正确!"); } else { bool outIsWDR = _IsWDR.Equals("是") ? true : false; addItem.IsWDR = outIsWDR; } } if (string.IsNullOrEmpty(_Gender)) { throw Oops.Oh($"第{index}行[性别]{_Gender}不能为空!"); } if(!string.IsNullOrEmpty(_Gender)) { Admin.NET.Core.GenderEnum enumGender = default(Admin.NET.Core.GenderEnum); if(!Enum.TryParse(_Gender, out enumGender)&&!string.IsNullOrEmpty(_Gender)) { throw Oops.Oh($"第{index}行[性别]{_Gender}值不正确!"); } else { addItem.Gender = enumGender; } } if(!string.IsNullOrEmpty(_OtherGender)) { Admin.NET.Core.GenderEnum enumOtherGender = default(Admin.NET.Core.GenderEnum); if(!Enum.TryParse(_OtherGender, out enumOtherGender)&&!string.IsNullOrEmpty(_OtherGender)) { throw Oops.Oh($"第{index}行[其他性别(可空)]{_OtherGender}值不正确!"); } else { addItem.OtherGender = enumOtherGender; } } if (string.IsNullOrEmpty(_BrithDate)) { throw Oops.Oh($"第{index}行[出生日期]{_BrithDate}不能为空!"); } if(!string.IsNullOrEmpty(_BrithDate)) { addItem.BrithDate = Convert.ToDateTime(Convert.ToDateTime(_BrithDate.Trim()).ToShortDateString()); } if(!string.IsNullOrEmpty(_InSchoolDate)) { addItem.InSchoolDate = Convert.ToDateTime(Convert.ToDateTime(_InSchoolDate.Trim()).ToShortDateString()); } #endregion details.Add(addItem); } //验重 await CheckExisitForImport(details); return details; } /// /// 根据版本下载测试学生表的Excel导入模板 /// /// 下载的模板文件 [HttpGet] [ApiDescriptionSettings(Name = "DownloadExcelTemplate")] [Description("TestStudent/DownloadExcelTemplate")] public IActionResult DownloadExcelTemplate() { string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\测试学生表{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx"; var fileName = HttpUtility.UrlEncode($"导入模板(测试学生表).xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; } #endregion #region 私有方法 /// /// 公共查询测试学生表条件 /// /// /// private ISugarQueryable CommonPageFilter(TestStudentInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.RepCheckType.Contains(input.SearchKey.Trim()) || u.Name.Contains(input.SearchKey.Trim()) || u.AliName.Contains(input.SearchKey.Trim()) || u.CreateUserName.Contains(input.SearchKey.Trim()) || u.UpdateUserName.Contains(input.SearchKey.Trim()) ) .WhereIF(!string.IsNullOrWhiteSpace(input.RepCheckType), u => u.RepCheckType.Contains(input.RepCheckType.Trim())) .WhereIF(input.TeacherId>0, u => u.TeacherId == input.TeacherId) .WhereIF(!string.IsNullOrWhiteSpace(input.TeacherName), u => u.TeacherName.Contains(input.TeacherName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.AliName), u => u.AliName.Contains(input.AliName.Trim())) .WhereIF(input.Age>0, u => u.Age == input.Age) .WhereIF(input.NianJi>0, u => u.NianJi == input.NianJi) .WhereIF(input.RectorId>0, u => u.RectorId == input.RectorId) .WhereIF(input.IsInSchool.HasValue, u => u.IsInSchool == input.IsInSchool) .WhereIF(input.IsWDR.HasValue, u => u.IsWDR == input.IsWDR) .WhereIF(input.Gender.HasValue, u => u.Gender == input.Gender) .WhereIF(input.OtherGender.HasValue, u => u.OtherGender == input.OtherGender) .Select(); if(input.BrithDateRange != null && input.BrithDateRange.Count >0) { DateTime? start= input.BrithDateRange[0].Value.AddDays(-1); query = query.WhereIF(start.HasValue, u => u.BrithDate > start); if (input.BrithDateRange.Count >1 && input.BrithDateRange[1].HasValue) { var end = input.BrithDateRange[1].Value.AddDays(1); query = query.Where(u => u.BrithDate < end); } } if(input.InSchoolDateRange != null && input.InSchoolDateRange.Count >0) { DateTime? start= input.InSchoolDateRange[0].Value.AddDays(-1); query = query.WhereIF(start.HasValue, u => u.InSchoolDate > start); if (input.InSchoolDateRange.Count >1 && input.InSchoolDateRange[1].HasValue) { var end = input.InSchoolDateRange[1].Value.AddDays(1); query = query.Where(u => u.InSchoolDate < end); } } return query; } /// /// 重复性验证 /// /// 验证对象 /// 是否是编辑 /// private async Task CheckExist( TestStudent input,bool isEdit=false) { //没有配置组合校验,不需要验重 //没有配置单独校验,不需要验重 } /// /// 根据组合校验和单独校验验证数据是否已存在-导入时验证 /// /// /// private async Task CheckExisitForImport(List inputs) { if (inputs?.Count <= 0) { throw Oops.Oh($"导入数据不能为空"); } //根据组合校验验证表格中中是否已存在相同数据 //根据单独校验验证表格中中是否已存在相同数据 } #endregion }