Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
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);
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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));
        }