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

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;
}
}