Example #1
0
        public ActionResult Import(Models.MoralItem.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())
                {
                    var ExList = new List <string>()
                    {
                        ".xlsx"
                    };
                    if (!ExList.Contains(System.IO.Path.GetExtension(file.FileName)))
                    {
                        ModelState.AddModelError(string.Empty, "上传的文件不是正确的excel文件!");
                        return(View(vm));
                    }
                    else
                    {
                        var dt = Code.NpoiHelper.ExcelToDataTable(fileSave, System.IO.Path.GetExtension(file.FileName), string.Empty);
                        if (dt == null)
                        {
                            ModelState.AddModelError(string.Empty, "无法读取上传的文件,请检查文件格式是否正确!");
                            return(View(vm));
                        }
                        else
                        {
                            var tbList = new List <string>()
                            {
                                "项目名称", "德育分组", "最小分值", "最大分值", "初始分值", "选项类型", "表达式", "德育选项"
                            };
                            foreach (var name in tbList)
                            {
                                var text = string.Empty;
                                text += !dt.Columns.Contains(name) ? name + "," : "";
                                if (!string.IsNullOrWhiteSpace(text))
                                {
                                    ModelState.AddModelError(string.Empty, "上传的excel文件内容与预期不一致!错误详细:" + text);
                                    return(View(vm));
                                }
                            }
                            if (dt.Rows.Count == 0)
                            {
                                ModelState.AddModelError(string.Empty, "上传的文件不包含任何有效数据!");
                                return(View(vm));
                            }

                            var listMoralGroup    = (from p in db.Table <Moral.Entity.tbMoralGroup>().Include(p => p.tbMoral) where p.tbMoral.Id == vm.MoralId select p).ToList();
                            var listMoralItem     = (from p in db.Table <Moral.Entity.tbMoralItem>().Include(p => p.tbMoralGroup) where p.tbMoralGroup.tbMoral.Id == vm.MoralId select p).ToList();
                            var moralExpressList  = typeof(Code.EnumHelper.MoralExpress).ToItemList();
                            var moralItemTypeList = typeof(Code.EnumHelper.MoralItemType).ToItemList();

                            for (var i = 0; i < dt.Rows.Count; i++)
                            {
                                var dr          = dt.Rows[i];
                                var importModel = new Dto.MoralItem.Import()
                                {
                                    MoralItemName     = dr["项目名称"].ConvertToString(),
                                    MoralGroupName    = dr["德育分组"].ConvertToString(),
                                    MinScore          = dr["最小分值"].ConvertToString(),
                                    MaxScore          = dr["最大分值"].ConvertToString(),
                                    InitScore         = dr["初始分值"].ConvertToString(),
                                    MoralExpress      = dr["表达式"].ConvertToString(),
                                    MoralItemType     = dr["选项类型"].ConvertToString(),
                                    MoralOptionString = dr["德育选项"].ConvertToString(),
                                };

                                if (string.IsNullOrWhiteSpace(importModel.MoralItemName))
                                {
                                    importModel.ImportError += "项目名称为空;";
                                }
                                else
                                {
                                    if (listMoralItem.Count(p => p.tbMoralGroup.tbMoral.Id == vm.MoralId && p.MoralItemName.Equals(importModel.MoralItemName)) > 0)
                                    {
                                        importModel.ImportError += "系统中已存在相同名称的记录;";
                                    }
                                }
                                if (string.IsNullOrWhiteSpace(importModel.MoralGroupName))
                                {
                                    importModel.ImportError += "德育分组为空;";
                                }
                                else
                                {
                                    if (listMoralGroup.Count(p => p.tbMoral.Id == vm.MoralId && p.MoralGroupName.Equals(importModel.MoralGroupName)) == 0)
                                    {
                                        importModel.ImportError += "找不到相应的德育分组;";
                                    }
                                }

                                if (importModel.MinScore.ConvertToDecimal() <= decimal.Zero)
                                {
                                    importModel.ImportError += "最小分值不合法或小于等于0;";
                                }
                                if (importModel.MaxScore.ConvertToDecimal() <= decimal.Zero)
                                {
                                    importModel.ImportError += "最大分值不合法或小于等于0;";
                                }

                                if (importModel.InitScore.ConvertToDecimal() < importModel.MinScore.ConvertToDecimal() || importModel.InitScore.ConvertToDecimal() > importModel.MaxScore.ConvertToDecimal())
                                {
                                    importModel.ImportError += "初始分值必须介于最大最小分值之间;";
                                }


                                if (string.IsNullOrWhiteSpace(importModel.MoralExpress) || !moralExpressList.Exists(p => p.Text.Equals(importModel.MoralExpress)))
                                {
                                    importModel.ImportError += $"表达式值只能是 [{string.Join("、", moralExpressList.Select(p => p.Text).ToList())}]中的一种;";
                                }


                                if (string.IsNullOrWhiteSpace(importModel.MoralItemType) || !moralItemTypeList.Exists(p => p.Text.Equals(importModel.MoralItemType)))
                                {
                                    importModel.ImportError += $"选项类型值只能是[{string.Join("、", moralItemTypeList.Select(p => p.Text).ToList())}]中的一种;";
                                }
                                else
                                {
                                    Code.EnumHelper.MoralItemType _moralItemType = (Code.EnumHelper.MoralItemType)System.Enum.Parse(typeof(Code.EnumHelper.MoralItemType), moralItemTypeList.Where(p => p.Text.Equals(importModel.MoralItemType)).Select(p => p.Value).First());
                                    if (_moralItemType == Code.EnumHelper.MoralItemType.Select)
                                    {
                                        if (string.IsNullOrWhiteSpace(importModel.MoralOptionString))
                                        {
                                            importModel.ImportError += $"选项类型为{_moralItemType.GetDescription()}时德育选项不能为空;";
                                        }
                                        else
                                        {
                                            var optionList = importModel.MoralOptionString.Split('|').ToList();
                                            foreach (var p in optionList)
                                            {
                                                var option = p.Split(',');
                                                if (option == null || !option.Any() || option.Length != 2)
                                                {
                                                    importModel.ImportError += "德育选项值不正确;";
                                                    break;
                                                }
                                                else if (option[1].ConvertToDecimal() < importModel.MinScore.ConvertToDecimal() || option[1].ConvertToDecimal() > importModel.MaxScore.ConvertToDecimal())
                                                {
                                                    importModel.ImportError += "德育选项中的值必须介于最小分值和最大分值之间;";
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }

                                vm.ImportList.Add(importModel);
                            }

                            if (vm.ImportList.Count(p => !string.IsNullOrWhiteSpace(p.ImportError)) > 0)
                            {
                                vm.ImportList.RemoveAll(p => string.IsNullOrWhiteSpace(p.ImportError));
                                return(View(vm));
                            }


                            var groupByItemName = vm.ImportList.GroupBy(p => p.MoralItemName).Where(p => p.Count() > 1).Select(p => p.Key).ToList();
                            if (groupByItemName != null && groupByItemName.Any())
                            {
                                vm.ImportList.Where(p => groupByItemName.Contains(p.MoralItemName)).ToList().ForEach(p =>
                                {
                                    p.ImportError += "项目名称重复;";
                                });
                            }

                            if (vm.ImportList.Count(p => !string.IsNullOrWhiteSpace(p.ImportError)) > 0)
                            {
                                vm.ImportList.RemoveAll(p => string.IsNullOrWhiteSpace(p.ImportError));
                                return(View(vm));
                            }


                            var list = new List <Moral.Entity.tbMoralItem>();
                            list.AddRange(vm.ImportList.Select(p => new Moral.Entity.tbMoralItem()
                            {
                                MoralItemName = p.MoralItemName,
                                MoralItemType = (Code.EnumHelper.MoralItemType)System.Enum.Parse(typeof(Code.EnumHelper.MoralItemType), moralItemTypeList.Where(t => t.Text.Equals(p.MoralItemType)).Select(t => t.Value).First()),
                                MoralExpress  = (Code.EnumHelper.MoralExpress)System.Enum.Parse(typeof(Code.EnumHelper.MoralExpress), moralExpressList.Where(e => e.Text.Equals(p.MoralExpress)).Select(e => e.Value).First()),
                                InitScore     = p.InitScore.ConvertToDecimal(),
                                MaxScore      = p.MaxScore.ConvertToDecimal(),
                                MinScore      = p.MinScore.ConvertToDecimal(),
                                tbMoralGroup  = listMoralGroup.FirstOrDefault(g => g.MoralGroupName.Equals(p.MoralGroupName)),
                                No            = db.Table <Moral.Entity.tbMoralItem>().Where(i => i.tbMoralGroup.tbMoral.Id == vm.MoralId && i.tbMoralGroup.MoralGroupName.Equals(p.MoralGroupName)).Select(g => g.No).DefaultIfEmpty(0).Max() + 1,

                                MoralItemKind = Code.EnumHelper.MoralItemKind.Student,
                                DefaultValue  = decimal.Zero
                            }));

                            db.Set <Moral.Entity.tbMoralItem>().AddRange(list);

                            var listMoralOption = new List <Moral.Entity.tbMoralOption>();
                            list.Where(p => p.MoralItemType == Code.EnumHelper.MoralItemType.Select).ToList().ForEach(p =>
                            {
                                var optionList = vm.ImportList.FirstOrDefault(l => l.MoralItemName.Equals(p.MoralItemName)).MoralOptionString.Split('|');
                                listMoralOption.AddRange(optionList.Select(o => new Moral.Entity.tbMoralOption()
                                {
                                    No = db.Table <Moral.Entity.tbMoralOption>().Where(i => i.tbMoralItem.MoralItemName.Equals(p.MoralItemName)).Select(g => g.No).DefaultIfEmpty(0).Max() + 1,
                                    MoralOptionName  = o.Split(',')[0],
                                    MoralOptionValue = o.Split(',')[1].ConvertToDecimal(),
                                    tbMoralItem      = p
                                }).ToList());
                            });

                            db.Set <Moral.Entity.tbMoralOption>().AddRange(listMoralOption);

                            if (db.SaveChanges() > 0)
                            {
                                Sys.Controllers.SysUserLogController.Insert("批量导入了德育项目!");
                                vm.ImportList.RemoveAll(p => string.IsNullOrWhiteSpace(p.ImportError));
                                vm.Status = true;
                            }
                        }
                    }
                }
            }
            return(View(vm));
        }
Example #2
0
        public ActionResult Import()
        {
            var vm = new Models.MoralItem.Import();

            return(View(vm));
        }