public ActionResult Edit(Models.ClassAllotStudent.Edit vm) { using (var db = new XkSystem.Models.DbContext()) { var error = new List <string>(); if (error.Count == decimal.Zero) { if (vm.ClassAllotStudentEdit.Id != 0) { var tb = db.Set <Basis.Entity.tbClassAllotStudent>().Find(vm.ClassAllotStudentEdit.Id); tb.tbYear = db.Set <Basis.Entity.tbYear>().Find(vm.ClassAllotStudentEdit.YearId); tb.Score = vm.ClassAllotStudentEdit.Score; tb.tbClassType = db.Set <Basis.Entity.tbClassType>().Find(vm.ClassAllotStudentEdit.ClassTypeId); tb.tbGrade = db.Set <Basis.Entity.tbGrade>().Find(vm.ClassAllotStudentEdit.GradeId); tb.tbStudent = db.Table <Student.Entity.tbStudent>().Where(d => d.StudentCode == vm.ClassAllotStudentEdit.StudentCode).FirstOrDefault(); } else { var student = new Student.Entity.tbStudent(); if (db.Table <Student.Entity.tbStudent>().Where(d => d.StudentCode == vm.ClassAllotStudentEdit.StudentCode && d.StudentName == vm.ClassAllotStudentEdit.StudentName).Count() == 0) { var studentEdit = new Student.Dto.Student.Edit() { StudentCode = vm.ClassAllotStudentEdit.StudentCode, StudentName = vm.ClassAllotStudentEdit.StudentName }; var studentEditList = new List <Student.Dto.Student.Edit>(); studentEditList.Add(studentEdit); student = Student.Controllers.StudentController.BuildList(db, studentEditList).FirstOrDefault(); } else { student = db.Table <Student.Entity.tbStudent>().Where(d => d.StudentCode == vm.ClassAllotStudentEdit.StudentCode && d.StudentName == vm.ClassAllotStudentEdit.StudentName).FirstOrDefault(); } var tb = new Basis.Entity.tbClassAllotStudent() { tbYear = db.Set <Basis.Entity.tbYear>().Find(vm.ClassAllotStudentEdit.YearId), Score = vm.ClassAllotStudentEdit.Score, tbClassType = db.Set <Basis.Entity.tbClassType>().Find(vm.ClassAllotStudentEdit.ClassTypeId), tbGrade = db.Set <Basis.Entity.tbGrade>().Find(vm.ClassAllotStudentEdit.GradeId), tbStudent = student }; db.Set <Basis.Entity.tbClassAllotStudent>().Add(tb); } if (db.SaveChanges() > 0) { XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("添加/修改了分班学生"); } } return(Code.MvcHelper.Post(error)); } }
public ActionResult Import(Models.ClassAllotStudent.Import vm) { vm.ImportStudentList = new List <Dto.ClassAllotStudent.Import>(); 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 dto = new Dto.ClassAllotStudent.Import() { StudentCode = Convert.ToString(dr["学号"]), StudentName = Convert.ToString(dr["姓名"]), GradeName = Convert.ToString(dr["年级"]), ClassTypeName = Convert.ToString(dr["班级类型"]), Score = Convert.ToString(dr["分班成绩"]) }; if (vm.ImportStudentList.Where(d => d.StudentCode == dto.StudentCode && d.StudentName == dto.StudentName && d.GradeName == dto.GradeName && d.ClassTypeName == dto.ClassTypeName && d.Score == dto.Score).Count() == 0) { vm.ImportStudentList.Add(dto); } } vm.ImportStudentList.RemoveAll(d => string.IsNullOrEmpty(d.StudentCode) && string.IsNullOrEmpty(d.StudentName) && string.IsNullOrEmpty(d.GradeName) && string.IsNullOrEmpty(d.ClassTypeName) && string.IsNullOrEmpty(d.Score) ); #endregion if (vm.ImportStudentList.Count == 0 && vm.ImportStudentList.Count == 0) { ModelState.AddModelError("", "未读取到任何有效数据!"); return(View(vm)); } var studentList = (from p in db.Table <Student.Entity.tbStudent>() select p).ToList(); var classStudentList = db.Table <Basis.Entity.tbClassStudent>().Where(d => d.tbStudent.IsDeleted == false).ToList(); var classAllotStudentList = db.Table <Basis.Entity.tbClassAllotStudent>() .Where(d => d.tbStudent.IsDeleted == false) .Include(d => d.tbStudent).ToList(); var yearList = db.Table <Basis.Entity.tbYear>().ToList(); var gradeList = db.Table <Basis.Entity.tbGrade>().ToList(); var classTypeList = db.Table <Basis.Entity.tbClassType>().ToList(); #region 验证数据格式是否正确 foreach (var item in vm.ImportStudentList) { if (string.IsNullOrEmpty(item.StudentName)) { item.Error += "姓名不能为空!"; } if (string.IsNullOrEmpty(item.StudentCode)) { item.Error += "学号不能为空!"; } if (!vm.IsAddStudent) { if (studentList.Where(d => d.StudentCode == item.StudentCode).Count() == 0) { item.Error += "学生不存在!"; } if (studentList.Where(d => d.StudentCode == item.StudentCode).Count() > 0 && studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).Count() == 0) { item.Error += "学号已存在,但姓名不匹配!"; } if (classStudentList.Where(d => d.tbStudent.StudentCode == item.StudentCode).Count() > 0) { item.Error += "学生已存在其他行政班内!"; } if (studentList.Where(d => d.StudentCode == item.StudentCode).Count() > 1) { item.Error += "学号对应多条学生记录,无法确认需要添加的记录!"; } } if (gradeList.Where(d => d.GradeName == item.GradeName).Count() == 0) { item.Error += "年级不存在;"; } if (string.IsNullOrEmpty(item.Score)) { item.Error += "分班成绩不能为空!"; } else { decimal d = 0; if (!decimal.TryParse(item.Score, out d)) { item.Error += "分班成绩必须为数字!"; } } } if (vm.ImportStudentList.Where(d => !string.IsNullOrEmpty(d.Error)).Count() > 0) { vm.ImportStudentList.RemoveAll(d => string.IsNullOrEmpty(d.Error)); return(View(vm)); } #endregion #region 创建外键 var editStudentList = new List <Student.Dto.Student.Edit>(); foreach (var v in vm.ImportStudentList) { if (studentList.Where(d => d.StudentCode == v.StudentCode && d.StudentName == v.StudentName).Count() == 0) { var editStudent = new Student.Dto.Student.Edit() { StudentCode = v.StudentCode, StudentName = v.StudentName }; if (editStudentList.Where(d => d.StudentCode == v.StudentCode && d.StudentName == v.StudentName).Count() == 0) { editStudentList.Add(editStudent); } } } var addStudentList = new List <Student.Entity.tbStudent>(); if (editStudentList.Count > 0) { addStudentList = Student.Controllers.StudentController.BuildList(db, editStudentList); } #endregion #region 数据导入,判断关键字,存在的数据做更新,不存在的做新增 var addClassAllotStudentList = new List <Basis.Entity.tbClassAllotStudent>(); var year = db.Set <Basis.Entity.tbYear>().Find(vm.YearId); foreach (var item in vm.ImportStudentList) { Basis.Entity.tbClassAllotStudent tb = null; var yearId = yearList.Where(e => e.IsDefault).FirstOrDefault().Id; if (classAllotStudentList.Where(d => d.tbStudent.StudentCode == item.StudentCode).Count() > 0) { if (vm.IsUpdate) { #region 修改 tb = classAllotStudentList.Where(d => d.tbStudent.StudentCode == item.StudentCode).FirstOrDefault(); tb.Score = item.Score.ConvertToDecimal(); tb.tbStudent = studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).FirstOrDefault(); tb.tbYear = year; #region 添加外键 if (!string.IsNullOrEmpty(item.StudentCode) && !string.IsNullOrEmpty(item.StudentName)) { if (vm.IsAddStudent && studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).Count() == 0) { tb.tbStudent = addStudentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).FirstOrDefault(); } else { tb.tbStudent = studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).FirstOrDefault(); } } if (!string.IsNullOrEmpty(item.GradeName)) { tb.tbGrade = gradeList.Where(d => d.GradeName == item.GradeName).FirstOrDefault(); } #endregion #endregion } } else { #region 新增 tb = new Basis.Entity.tbClassAllotStudent(); tb.tbYear = year; tb.Score = item.Score.ConvertToDecimal(); tb.tbClassType = classTypeList.Where(d => d.ClassTypeName == item.ClassTypeName).FirstOrDefault(); #region 添加外键 if (!string.IsNullOrEmpty(item.StudentCode) && !string.IsNullOrEmpty(item.StudentName)) { if (vm.IsAddStudent && studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).Count() == 0) { tb.tbStudent = addStudentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).FirstOrDefault(); } else { tb.tbStudent = studentList.Where(d => d.StudentCode == item.StudentCode && d.StudentName == item.StudentName).FirstOrDefault(); } } if (!string.IsNullOrEmpty(item.GradeName)) { tb.tbGrade = gradeList.Where(d => d.GradeName == item.GradeName).FirstOrDefault(); } #endregion addClassAllotStudentList.Add(tb); #endregion } } #endregion db.Set <Basis.Entity.tbClassAllotStudent>().AddRange(addClassAllotStudentList); if (db.SaveChanges() > 0) { XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("批量导入了行政班"); vm.Status = true; } } } vm.ImportStudentList.RemoveAll(d => string.IsNullOrEmpty(d.Error)); return(View(vm)); }