You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
9.9 KiB
248 lines
9.9 KiB
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; |
|
|
|
/// <summary> |
|
/// 配置文件导入方法 |
|
/// </summary> |
|
public class LevelConfigImportHelper |
|
{ |
|
public static bool ImportLevelConfig(MasterLevelEntity master, List<UseDataSet> 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<GradeLevelSet> gradeLevelSets = new List<GradeLevelSet>(); |
|
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<GradeLevelDataSet> dataSets = new List<GradeLevelDataSet>(); |
|
List<GradeLevelDataSet> CutDataSets = new List<GradeLevelDataSet>(); |
|
List<GradeLevelDataSet> SymDataSets = new List<GradeLevelDataSet>(); |
|
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<GradeLevelTotalSet> totalSets = new List<GradeLevelTotalSet>(); |
|
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<GradeLevelTreeSet> treeSets = ConvertToTreeList(baseTree, mst, dataSets,gradeLevelSets); |
|
List<GradeLevelSetDtl> dtlSets = new List<GradeLevelSetDtl>(); |
|
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<string> deleteSql = new List<string>(); |
|
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<string> insertSql = new List<string>(); |
|
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<GradeLevelTreeSet> ConvertToTreeList(BaseEntity root, GradeLevelMst master, |
|
List<GradeLevelDataSet> useDatasets, List<GradeLevelSet> gradeLevelSets) |
|
{ |
|
var result = new List<GradeLevelTreeSet>(); |
|
|
|
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; |
|
} |
|
|
|
} |