/// <summary> /// 转义为KKS编码,通过 EDOSOriginalCode.xls 文件转义 /// </summary> public static int OriginalKKSCode(FileInfo file, string createfilePath) { if (file.Exists == false) { return(1); } Bll bll = new Bll(); List <KKSCode> kksList = bll.KKSCodes.ToList(); if (kksList != null /*&& kksList.Count == 0*/) { string strFolderName = file.Directory.Name; DataTable table = new DataTable(); table.Columns.Add("标签名", typeof(string)); table.Columns.Add("数据库标签名", typeof(string)); table.Columns.Add("描述", typeof(string)); table.Columns.Add("单位", typeof(string)); table.Columns.Add("类型", typeof(string)); table.Columns.Add("转义后的KKS编码", typeof(string)); table.Columns.Add("转义后的父类KKS编码", typeof(string)); DataTable dtTable = ExcelHelper.Load(new FileInfo(file.FullName), false).Tables[0].Copy(); dtTable.Rows.RemoveAt(0); foreach (DataRow dr in dtTable.Rows) { string strTagName = dr[0].ToString(); int index = strTagName.IndexOf('.'); strTagName = strTagName.Substring(index + 1); strTagName = strTagName.Replace("_", " "); string strNodeKKS = strTagName; TagToKKSInfo tagToKKS = GetKKSCode(strTagName, kksList); DataRow dr2 = table.NewRow(); dr2["标签名"] = dr[0].ToString(); dr2["数据库标签名"] = dr[2].ToString(); dr2["描述"] = dr[3].ToString(); dr2["单位"] = dr[4].ToString(); dr2["类型"] = dr[5].ToString(); dr2["转义后的KKS编码"] = strNodeKKS; dr2["转义后的父类KKS编码"] = tagToKKS.Key; table.Rows.Add(dr2); } ExcelHelper.Save(table, new FileInfo(createfilePath), null); } return(0); }
public static TagToKKSInfo ReParese(List <KKSCode> kksCodes, string parentKKS, string kks) { List <KKSCode> kksDevs = kksCodes.FindAll(i => i.Code.StartsWith(parentKKS)); List <KKSCode> kksDevs2 = KKSCodeHelper.FindCommonParent(kksDevs); if (kksDevs2.Count == 1) { //monitorNode.ParentKKS = kksDevs2[0].Code; //monitorNode.ParseResult = 1; //editMonitorNodes.Add(monitorNode); TagToKKSInfo info = new TagToKKSInfo(parentKKS); info.KKSList = kksDevs2; return(info); } else { List <KKSCode> kksDevs3 = KKSCodeHelper.FindCommonAncestor(kksDevs2); if (kksDevs3.Count == 1) { //monitorNode.ParentKKS = kksDevs3[0].Code; //monitorNode.ParseResult = 1; //editMonitorNodes.Add(monitorNode); TagToKKSInfo info = new TagToKKSInfo(parentKKS); info.KKSList = kksDevs3; return(info); } else { TagToKKSInfo info = KKSCodeHelper.GetKKSCode(parentKKS, kksDevs3); var code = info.GetParentCode(); //if (info.Type == 1) //{ // monitorNode.ParentKKS = code; // monitorNode.ParseResult = info.Type; // editMonitorNodes.Add(monitorNode); //} //else //{ //} return(info); } } }
public static TagToKKSInfo GetKKSCode(string tagName, List <KKSCode> kksList) { TagToKKSInfo info = new TagToKKSInfo(tagName); if (tagName == "") { return(info); } string key = tagName; List <KKSCode> kksCodes = null; while (key.Length > 0) { if (kksDict.ContainsKey(key)) { kksCodes = kksDict[key]; //从缓存取,考虑可能很多个测点是相同的kks } else { kksCodes = kksList.Where(p => p.Code.StartsWith(key)).ToList(); if (kksCodes.Count > 0 && key.Length > 1) { KKSCode kks = kksCodes.Find(p => p.Code == key);//完全相同的 if (kks != null) { kksCodes = new List <KKSCode>() { kks }; //使用一个 } else { var kksCodes2 = FindCommonParent(kksCodes); //if (kksCodes2.Count > 1) //{ // info = ReParese(kksList, key, tagName); // return info; //} //else //{ // kksCodes = kksCodes2; //} kksCodes = kksCodes2; } } kksDict.Add(key, kksCodes); } if (kksCodes.Count == 0) { int nLength = key.Length; key = key.Substring(0, nLength - 1); } else { info.Key = key; break; } } info.KKSList = kksCodes; return(info); }
/// <summary> /// 转义为KKS编码,通过 UDPoints20190321.xlsx 文件转义 /// </summary> /// <param name="file"></param> /// <param name="createfilePath"></param> /// <returns></returns> public static DataTable OriginalKKSCode_New(FileInfo file, bool loadAll) { if (file.Exists == false) { return(null); } Bll bll = new Bll(); List <KKSCode> kksList = bll.KKSCodes.ToListEx(); string strFolderName = file.Directory.Name; DataTable table = new DataTable(); table.Columns.Add("标签名", typeof(string)); table.Columns.Add("数据库标签名", typeof(string)); table.Columns.Add("描述", typeof(string)); table.Columns.Add("单位", typeof(string)); table.Columns.Add("类型", typeof(string)); table.Columns.Add("KKS编码", typeof(string)); table.Columns.Add("父类KKS编码", typeof(string)); table.Columns.Add("父类KKS编码类型", typeof(string)); DataTable dtTable = ExcelHelper.Load(new FileInfo(file.FullName), false).Tables[0].Copy(); dtTable.Rows.RemoveAt(0); int count = 0; for (int i = 0; i < dtTable.Rows.Count; i++) { DataRow dr = dtTable.Rows[i]; string strTagName0 = dr[0].ToString(); int index = strTagName0.IndexOf('.'); string strTagName = strTagName0.Substring(index + 1); strTagName = strTagName.Replace("_", " "); string strNodeKKS = strTagName; string describe = dr[2].ToString().Trim(); if (describe == "Ovation Control Builder") { continue; //不用管的 } TagToKKSInfo strDevKKS = GetKKSCode(strTagName, kksList); if (strDevKKS.Key == "") { if (loadAll == false) { continue; //测点不存在对应的kks则过滤掉 } } DataRow dr2 = table.NewRow(); dr2["标签名"] = dr[0].ToString(); dr2["数据库标签名"] = ""; dr2["描述"] = dr[2].ToString(); dr2["单位"] = dr[3].ToString(); dr2["类型"] = dr[4].ToString(); dr2["KKS编码"] = strNodeKKS; dr2["父类KKS编码"] = strDevKKS.GetParentCode(); dr2["父类KKS编码类型"] = strDevKKS.Type; if (strDevKKS.Type == 0) { count++; } table.Rows.Add(dr2); if (i % 20 == 0) { Log.Info(LogTags.KKS, string.Format("获取数据:({2}/{3},{4:P2}){0}[{1}]", dr[2].ToString(), strTagName, i, dtTable.Rows.Count, (float)i / (float)dtTable.Rows.Count)); } } Log.Info(LogTags.KKS, string.Format("找到匹配KKS数量:{0}", count)); //ExcelHelper.Save(table, new FileInfo(createfilePath), null); return(table); }
/// <summary> /// 重新分析测点数据,原来未找到kks的进行二次深入分析 /// </summary> public static void ReParseMonitPoint(bool fromFile) { DateTime start = DateTime.Now; Log.Info(LogTags.KKS, "重新分析设备监控节点"); Bll bll = new Bll(); List <DbModel.Location.AreaAndDev.DevMonitorNode> monitors = null; if (fromFile) //从文件读取 { string basePath = AppDomain.CurrentDomain.BaseDirectory; Log.Info(LogTags.KKS, "BaseDirectory:" + basePath); string filePath = basePath + "Data\\KKS\\EDOS_New.xls"; monitors = DevInfoHelper.CreateDevMonitorNodeListFromFile <DbModel.Location.AreaAndDev.DevMonitorNode>( new FileInfo(filePath)); } else //从数据库读取 { monitors = bll.DevMonitorNodes.ToList(); } var kksCodes = bll.KKSCodes.ToListEx(); var kksDict = KKSCode.ToDict(kksCodes); for (int i = 0; i < monitors.Count; i++) { DbModel.Location.AreaAndDev.DevMonitorNode monitor = monitors[i]; if (i > 0) { monitor.PreNode = monitors[i - 1]; } if (i < monitors.Count - 1) { monitor.NextMode = monitors[i + 1]; } if (kksDict.ContainsKey(monitor.ParentKKS)) { monitor.KKSCode = kksDict[monitor.ParentKKS]; } } var monitors1 = monitors.Where(i => i.ParseResult == "0").ToList(); var monitors2 = monitors.Where(i => i.ParseResult == "1").ToList(); var monitors31 = monitors.Where(i => i.ParseResult == "-1").ToList(); var monitors311 = monitors31.Where(i => i.Unit != "").ToList(); var monitors32 = monitors.Where(i => i.ParseResult == "-2").ToList(); var monitors321 = monitors32.Where(i => i.Unit != "").ToList(); var monitors4 = monitors.Where(i => i.ParseResult.ToInt() > 1).ToList(); List <DbModel.Location.AreaAndDev.DevMonitorNode> editMonitorNodes = new List <DbModel.Location.AreaAndDev.DevMonitorNode>(); for (int i = 0; i < monitors4.Count; i++) { DbModel.Location.AreaAndDev.DevMonitorNode monitorNode = monitors4[i]; try { var parentCode = monitorNode.ParentKKS; TagToKKSInfo info = KKSCodeHelper.ReParese(kksCodes, monitorNode.ParentKKS, monitorNode.KKS); var code = info.GetParentCode(); if (info.Type == 1 || info.Type == 0) { monitorNode.ParentKKS = code; monitorNode.ParseResult = "1"; //这里统一为1 editMonitorNodes.Add(monitorNode); Log.Info(LogTags.KKS, string.Format("解析测点:{0}=>{1}[{2}],({3}/{4})", parentCode, code, info.KKS, i, monitors4.Count)); } else { if (monitorNode.PreNode != null) { if (monitorNode.PreNode.KKSCode != null) { var kksCode = monitorNode.PreNode.KKSCode.GetAncestor("系统"); if (kksCode != null) { monitorNode.ParentKKS = kksCode.Code; monitorNode.ParseResult = "1"; //感觉这里要区分开来了 editMonitorNodes.Add(monitorNode); } else { Log.Info(LogTags.KKS, string.Format("monitorNode.PreNode.KKSCode 未找到系统节点:{0}", monitorNode.PreNode.KKSCode)); } } else { Log.Info(LogTags.KKS, string.Format("monitorNode.PreNode.KKSCode == null:{0}", monitorNode.PreNode)); } } else { } } } catch (Exception e) { Log.Error(LogTags.KKS, monitorNode + "\n" + e + ""); } } bll.DevMonitorNodes.EditRange(editMonitorNodes); TimeSpan time = DateTime.Now - start; Log.Info(LogTags.KKS, string.Format("【4】【ReParseMonitPoint】完成 用时:{0}", time)); }