public ActionResult Import(Models.ClassAllotClass.Import vm) { if (ModelState.IsValid) { var file = Request.Files[nameof(vm.UploadFile)]; var fileSave = System.IO.Path.GetTempFileName(); file.SaveAs(fileSave); using (var db = new XkSystem.Models.DbContext()) { if (Code.Common.GetFileType(file.FileName) != Code.FileType.Excel) { ModelState.AddModelError("", "上传的文件不是正确的EXCLE文件!"); return(View(vm)); } var dt = Code.NpoiHelper.ExcelToDataTable(fileSave, System.IO.Path.GetExtension(file.FileName), string.Empty); if (dt == null) { ModelState.AddModelError("", "无法读取上传的文件,请检查文件格式是否正确!"); return(View(vm)); } var tbList = new List <string>() { "排序", "班级名称", "班级类型", "年级" }; var Text = string.Empty; foreach (var a in tbList) { if (!dt.Columns.Contains(a.ToString())) { Text += a + ","; } } if (!string.IsNullOrEmpty(Text)) { ModelState.AddModelError("", "上传的EXCEL行政班内容与预期不一致,缺少对应的字段:" + Text); return(View(vm)); } #region 将DataTable转为List foreach (System.Data.DataRow dr in dt.Rows) { var dtoClass = new Dto.ClassAllotClass.Import() { No = Convert.ToString(dr["排序"]), ClassName = Convert.ToString(dr["班级名称"]), GradeName = Convert.ToString(dr["年级"]), ClassTypeName = Convert.ToString(dr["班级类型"]) }; if (vm.ImportList.Where(d => d.No == dtoClass.No && d.ClassName == dtoClass.ClassName && d.GradeName == dtoClass.GradeName && d.ClassTypeName == dtoClass.ClassTypeName).Count() == 0) { vm.ImportList.Add(dtoClass); } } vm.ImportList.RemoveAll(d => string.IsNullOrEmpty(d.No) && string.IsNullOrEmpty(d.ClassName) && string.IsNullOrEmpty(d.GradeName) && string.IsNullOrEmpty(d.ClassTypeName) ); if (vm.ImportList.Count == 0) { ModelState.AddModelError("", "未读取到任何有效数据!"); return(View(vm)); } #endregion var gradeList = db.Table <Basis.Entity.tbGrade>().ToList(); var classTypeList = db.Table <Basis.Entity.tbClassType>().ToList(); var classAllotClassList = db.Table <Basis.Entity.tbClassAllotClass>().ToList(); var year = db.Table <Basis.Entity.tbYear>().Where(d => d.IsDefault).FirstOrDefault(); #region 验证数据格式是否正确 foreach (var item in vm.ImportList) { if (string.IsNullOrEmpty(item.ClassName)) { item.Error = item.Error + "班级名称不能为空!"; } int No = 0; if (int.TryParse(item.No, out No) == false || No <= 0) { item.Error = item.Error + "排序必须是正整数!"; } if (classTypeList.Where(d => d.ClassTypeName == item.ClassTypeName).Count() == 0) { item.Error += "班级类型不存在;"; } if (gradeList.Where(d => d.GradeName == item.GradeName).Count() == 0) { item.Error += "年级不存在;"; } } if (vm.ImportList.Where(d => string.IsNullOrEmpty(d.Error) == false).Count() > 0) { vm.ImportList.RemoveAll(d => string.IsNullOrEmpty(d.Error)); return(View(vm)); } #endregion #region 数据导入,判断关键字,存在的数据做更新,不存在的做新增 var addClassAllotClassList = new List <Basis.Entity.tbClassAllotClass>(); foreach (var item in vm.ImportList) { Basis.Entity.tbClassAllotClass tb = null; if (classAllotClassList.Where(d => d.ClassName == item.ClassName && d.tbClassType.ClassTypeName == item.ClassTypeName && d.tbGrade.GradeName == item.GradeName).Count() > 0) { if (vm.IsUpdate) { #region 修改 tb = classAllotClassList.Where(d => d.ClassName == item.ClassName && d.tbClassType.ClassTypeName == item.ClassTypeName && d.tbGrade.GradeName == item.GradeName).FirstOrDefault(); tb.No = item.No.ConvertToInt(); tb.ClassName = item.ClassName; tb.tbYear = year; tb.tbGrade = gradeList.Where(d => d.GradeName.Equals(item.GradeName)).FirstOrDefault(); tb.tbClassType = classTypeList.Where(d => d.ClassTypeName.Equals(item.ClassTypeName)).FirstOrDefault(); #endregion } } else { #region 新增行政班 tb = new Basis.Entity.tbClassAllotClass(); tb.No = item.No.ConvertToInt(); tb.ClassName = item.ClassName; tb.tbYear = year; tb.tbClassType = classTypeList.Where(d => d.ClassTypeName.Equals(item.ClassTypeName)).FirstOrDefault(); tb.tbGrade = gradeList.Where(d => d.GradeName.Equals(item.GradeName)).FirstOrDefault(); addClassAllotClassList.Add(tb); #endregion } } #endregion db.Set <Basis.Entity.tbClassAllotClass>().AddRange(addClassAllotClassList); if (db.SaveChanges() > 0) { XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("批量导入了行政班"); vm.Status = true; } } } vm.ImportList.RemoveAll(d => string.IsNullOrEmpty(d.Error)); return(View(vm)); }
public ActionResult Import() { var vm = new Models.ClassAllotClass.Import(); return(View(vm)); }