using System.Data; using System.Text; using BrilliantSightClient.Model.Entity.ApiEntity; using BrilliantSightClient.Model.Extension; using BrilliantSightClient.Model.GradeLevel.Entity; using BrilliantSightClient.Model.GradeLevel.Entity.DatabaseEntity; using BrilliantSightClient.Model.GradeLevel.Entity.Enum; using BrilliantSightClient.Model.GradeResult.Entity; using BrilliantSightClient.Model.Helper; using BrilliantSightClient.Views.Dialog; using BaseEntity = BrilliantSightClient.Model.GradeLevel.Entity.BaseEntity; namespace BrilliantSightClient.Model.GradeLevel.Helper; /// /// 配置文件导入方法 /// public class LevelConfigImportHelper { public static bool ImportLevelConfig(MasterLevelEntity master, List useDatasets, BaseEntity baseTree) { //主数据做成 GradeLevelMst mst = new GradeLevelMst() { Name = master.Name, EName = master.EName, RunMode = master.RunMode.GetValue(), Shape = master.Shape.GetValue(), Crown = master.Crown, Pavilion = master.Pavilion, }; mst.GenerateSign(); //级别设定 List gradeLevelSets = new List(); foreach (var levelSet in master.CutLevelSet) { var temp = new GradeLevelSet() { Mst_Name = mst.Name, Mst_Sign = mst.Sign, Set_Type = GradeType.Cut.GetValue(), Name = levelSet.Name, EName = levelSet.EName, AName = levelSet.AName, Short = levelSet.Short, Sign = levelSet.Sign, }; if (temp.Sign.IsNullOrEmpty()) temp.GenerateSign(); gradeLevelSets.Add(temp); } foreach (var levelSet in master.SymLevelSet) { var temp = new GradeLevelSet() { Mst_Name = mst.Name, Mst_Sign = mst.Sign, Set_Type = GradeType.Sym.GetValue(), Name = levelSet.Name, EName = levelSet.EName, AName = levelSet.AName, Short = levelSet.Short, Sign = levelSet.Sign, }; if (temp.Sign.IsNullOrEmpty()) temp.GenerateSign(); gradeLevelSets.Add(temp); } //定级数据配置 List dataSets = new List(); List CutDataSets = new List(); List SymDataSets = new List(); foreach (var useData in useDatasets) { var temp = new GradeLevelDataSet() { Mst_Name = mst.Name, Mst_Sign = mst.Sign, Name = useData.Name, EName = useData.EName, KName = useData.Key, Unit = useData.Unit, HasSym = useData.HasSym ? 1 : 0, HasCut = useData.HasCut ? 1 : 0, }; temp.GenerateSign(); if(master.CutTotalRuleSet.UserDataSets.Exists(e => e.Name == temp.Name) && temp.HasCut == 1) CutDataSets.Add(temp); if(master.SymTotalRuleSet.UserDataSets.Exists(e => e.Name == temp.Name) && temp.HasSym == 1) SymDataSets.Add(temp); dataSets.Add(temp); } #region 综合评级设定 List totalSets = new List(); if (master.CutTotalRuleSet != null) { StringBuilder sbCutDataSigns = new StringBuilder(); StringBuilder sbCutDataNames = new StringBuilder(); CutDataSets.ForEach(e => { sbCutDataSigns.Append(e.Sign + ","); sbCutDataNames.Append(e.Name + ","); }); GradeLevelTotalSet cutTotalSet = new GradeLevelTotalSet() { Mst_Name = mst.Name, Mst_Sign = mst.Sign, Set_Type = GradeType.Cut.GetValue(), Statistics = master.CutTotalRuleSet.Type.GetValue(), DataNames = sbCutDataNames.ToString(0, sbCutDataNames.Length-1), DataSigns = sbCutDataSigns.ToString(0, sbCutDataSigns.Length-1), }; cutTotalSet.GenerateSign(); totalSets.Add(cutTotalSet); } if (master.SymTotalRuleSet != null) { StringBuilder sbCutDataSigns = new StringBuilder(); StringBuilder sbCutDataNames = new StringBuilder(); SymDataSets.ForEach(e => { sbCutDataSigns.Append(e.Sign + ","); sbCutDataNames.Append(e.Name + ","); }); GradeLevelTotalSet symTotalSet = new GradeLevelTotalSet() { Mst_Name = mst.Name, Mst_Sign = mst.Sign, Set_Type = GradeType.Sym.GetValue(), Statistics = master.SymTotalRuleSet.Type.GetValue(), DataNames = sbCutDataNames.ToString(0, sbCutDataNames.Length-1), DataSigns = sbCutDataSigns.ToString(0, sbCutDataSigns.Length-1), }; symTotalSet.GenerateSign(); totalSets.Add(symTotalSet); } #endregion //评级树和评级 List treeSets = ConvertToTreeList(baseTree, mst, dataSets,gradeLevelSets); List dtlSets = new List(); foreach (var treeSet in treeSets) { dtlSets.AddRange(treeSet.GetLevelSetDtls()); } //数据库登入 //检查是否存在 ->存在删除 string checkSql = $"SELECT SIGN FROM GRADE_LEVEL_MST WHERE NAME = '{mst.Name}' AND RUNMODE = '{mst.RunMode}' AND SHAPE = '{mst.Shape}' AND CROWN = '{mst.Crown}' AND PAVILION = '{mst.Pavilion}'"; DataTable checkResult = DataBaseHelper.ExecuteQuery(checkSql); if (checkResult.Rows.Count > 0) { string Sign = checkResult.Rows[0]["SIGN"].ToString(); string Where = $"WHERE MST_NAME = '{mst.Name}' AND MST_SIGN = '{Sign}'"; List deleteSql = new List(); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_MST WHERE SIGN = '{Sign}'"); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_SET {Where}"); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_DATA_SET {Where}"); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_TOTAL_SET {Where}"); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_TREE_SET {Where}"); deleteSql.Add( $"DELETE FROM GRADE_LEVEL_SET_DTL {Where}"); deleteSql.ForEach(e => DataBaseHelper.ExecuteNonQuery(e)); } List insertSql = new List(); insertSql.Add(mst.GenerateInsertSql()); gradeLevelSets.ForEach(e => insertSql.Add(e.GenerateInsertSql())); dataSets.ForEach(e => insertSql.Add(e.GenerateInsertSql())); totalSets.ForEach(e => insertSql.Add(e.GenerateInsertSql())); treeSets.ForEach(e => insertSql.Add(e.GenerateInsertSql())); dtlSets.ForEach(e => insertSql.Add(e.GenerateInsertSql())); int kakeCount = 0; foreach (var item in insertSql) { kakeCount += DataBaseHelper.ExecuteNonQuery(item); } if (kakeCount >= insertSql.Count) { new MessageBox().Show("配置已导入"); } return false; } private static List ConvertToTreeList(BaseEntity root, GradeLevelMst master, List useDatasets, List gradeLevelSets) { var result = new List(); void ConvertNode(BaseEntity node, string parentSign) { var useData = useDatasets.FirstOrDefault(e => e.KName == node.DimensionKey); var treeSetNode = new GradeLevelTreeSet { Mst_Sign = master.Sign, Mst_Name = master.Name, Header = node.Header, NodeType = node.NodeType, HasData = node.HasData, IsTop = node.IsTops ? 1 : 0, // 转换bool为int DimensionValue = node.DimensionValue, DimensionSign = useData==null?string.Empty:useData.Sign, ParentSign = parentSign }; treeSetNode.GenerateSign(); if (node.GradeSet != null && node.GradeSet.Count > 0) { foreach (var gradeSet in node.GradeSet) { var nowUseData = useDatasets.FirstOrDefault(e => e.KName == gradeSet.DataSet.Key); gradeSet.NumSets.ForEach(numSet => { var levelSet = gradeLevelSets.FirstOrDefault(e => e.Set_Type == node.NodeType-1 && e.Name.Equals(numSet.Name)); var temp = new GradeLevelSetDtl() { Mst_Sign = master.Sign, Mst_Name = master.Name, Tree_Sign = treeSetNode.Sign, DataSet_Sign = nowUseData.Sign, Level_Sign = levelSet.Sign, Max_Value = numSet.MaxValue, Min_Value = numSet.MinValue, }; temp.GenerateSign(); treeSetNode.AddSetDtl(temp); }); } } result.Add(treeSetNode); if (node.Children != null && node.Children.Any()) { foreach (var child in node.Children) { ConvertNode(child, treeSetNode.Sign); } } } ConvertNode(root, string.Empty); return result; } }