コード例 #1
0
        public static bool ImportFromCSV(ConfigCSV configcsv)   //由于要使用wo
        {
            ErrorFlag = false;
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();
                if (configcsv.importdata.Length != 0)
                {
                    string values = "";

                    for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                    {
                        //刷新ui
                        //worker.ReportProgress(i * 100 / configcsv.importdata.Length, String.Format("导入计算配置信息,共{0}条,导入第{1}条!", configcsv.importdata.Length,i));
                        //源标签信息
                        string sourcetagname = configcsv.importdata[i][configcsv.sourcetagnameIndex].Trim();
                        string sourcetagdb   = configcsv.importdata[i][configcsv.sourcetagdbIndex].Trim();
                        string sourcetagdesc = configcsv.importdata[i][configcsv.sourcetagdescIndex].Trim();
                        string sourcetagdim  = configcsv.importdata[i][configcsv.sourcetagdimIndex].Trim();
                        string sourcetagmrb  = configcsv.importdata[i][configcsv.sourcetagmrbIndex].Trim();
                        string sourcetagmre  = configcsv.importdata[i][configcsv.sourcetagmreIndex].Trim();
                        //计算公式信息    1、名称
                        string fmodulename = configcsv.importdata[i][configcsv.fmodulenameIndex].Trim();
                        string fnode       = configcsv.importdata[i][configcsv.fnodeIndex].Trim();
                        string fgroup      = configcsv.importdata[i][configcsv.fgroupIndex].Trim();
                        string forder      = configcsv.importdata[i][configcsv.forderIndex].Trim();
                        //计算公式信息    2、算法
                        string falgorithmsflag = configcsv.importdata[i][configcsv.falgorithmsflagIndex].Trim();
                        string fparas          = configcsv.importdata[i][configcsv.fparasIndex].Trim();
                        string fcondpslnames   = configcsv.importdata[i][configcsv.fcondpslnamesIndex].Trim();
                        string fcondexpression = configcsv.importdata[i][configcsv.fcondexpressionIndex].Trim();
                        //计算公式信息    3、结果
                        string foutputtable       = configcsv.importdata[i][configcsv.foutputtableIndex].Trim();
                        string foutputnumber      = configcsv.importdata[i][configcsv.foutputnumberIndex].Trim();
                        string foutputpsltagnames = configcsv.importdata[i][configcsv.foutputpsltagprefIndex].Trim();

                        //计算公式信息    4、周期
                        string finterval     = configcsv.importdata[i][configcsv.fintervalIndex].Trim();
                        string fintervaltype = configcsv.importdata[i][configcsv.fintervaltypeIndex].Trim();
                        //计算延时信息
                        string fdelay = configcsv.importdata[i][configcsv.fdelayIndex].Trim();
                        //计算起始时间
                        string fstartdate = configcsv.importdata[i][configcsv.fstartdateIndex].Trim();

                        values = values + String.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}'),",
                                                        sourcetagname, sourcetagdb, sourcetagdesc, sourcetagdim, sourcetagmrb, sourcetagmre, //源标签信息
                                                        fmodulename, fnode, fgroup, forder,                                                  //计算公式信息    1、名称
                                                        falgorithmsflag, fparas, fcondpslnames, fcondexpression,                             //计算公式信息    2、算法
                                                        foutputtable, foutputnumber, foutputpsltagnames,                                     //计算公式信息    3、结果
                                                        finterval, fintervaltype, fdelay, fstartdate);                                       //计算公式信息    4、循环

                        //一次写入一百条记录,加快写入速度
                        if (i % 100 == 0 || i == configcsv.importdata.Length - 1)            //i到整除10时,或到最后一行时,进行写入
                        {
                            //刷新ui
                            worker.ReportProgress(i * 100 / configcsv.importdata.Length, String.Format("导入计算配置信息,共{0}条,导入第{1}条!", configcsv.importdata.Length, i));
                            //数据库字段
                            string fileds = "sourcetagname,sourcetagdb,sourcetagdesc,sourcetagdim,sourcetagmrb,sourcetagmre," +
                                            "fmodulename,fnode,fgroup,forder," +
                                            "falgorithmsflag,fparas,fcondpslnames,fcondexpression," +
                                            "foutputtable,foutputnumber,foutputpsltagnames," +
                                            "finterval,fintervaltype,fdelay,fstarttime";
                            values = values.Substring(0, values.Length - 1);
                            sqlStr = String.Format("use psldb;insert into pslcalcuconfig({0}) values {1}", fileds, values);
                            dbhelper.ExecuteNonQuery(sqlStr);
                            //复位
                            values = "";
                        }

                        /*
                         * //数据库字段
                         * string fileds = "sourcetagname,sourcetagdb,sourcetagdesc,sourcetagdim,sourcetagmrb,sourcetagmre," +
                         *               "fmodulename,fgroup,forder," +
                         *               "falgorithmsflag,fparas,fcondpslnames,fcondexpression," +
                         *               "foutputtable,foutputnumber,foutputpsltagnames," +
                         *               "finterval,fintervaltype";
                         *
                         * //概化计算引擎关系库默认database是psldb时,可以不用use psldb
                         * //概化计算引擎关系库默认database不是psldb时,必须使用use psldb
                         * //下面语句,fileds是数据库对应字段。,右侧是上面变量取出的csv数值
                         * sqlStr = String.Format("use psldb;insert into pslcalcuconfig({0}) values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}')",
                         *  fileds,     //数据库字段
                         *  sourcetagname, sourcetagdb, sourcetagdesc, sourcetagdim, sourcetagmrb, sourcetagmre,    //源标签信息
                         *  fmodulename, fgroup, forder,                                //计算公式信息    1、名称
                         *  falgorithmsflag, fparas, fcondpslnames, fcondexpression,     //计算公式信息    2、算法
                         *  foutputtable, foutputnumber, foutputpsltagnames,             //计算公式信息    3、结果
                         *  finterval, fintervaltype);                                  //计算公式信息    4、循环
                         *
                         * DbHelper.ExecuteNonQuery(sqlStr);
                         */
                    } //end for
                     //}//end if
                }     //end if
                return(true);
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层PSLCalcuConfigDAO.ImportFromCSV()错误:---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }
コード例 #2
0
    void OnGUI()
    {
        EditorGUILayout.LabelField("fgui导出文件所在的绝对路径:");
        outExplortPath = EditorGUILayout.TextField(outExplortPath);
        EditorGUILayout.LabelField("fgui声音文件所在的绝对路径:");
        soundPath = EditorGUILayout.TextField(soundPath);
        EditorGUILayout.LabelField("fgui图片资源文件所在的绝对路径:");
        fSpritePath = EditorGUILayout.TextField(fSpritePath);
        EditorGUILayout.LabelField("fgui大图片 图片资源文件所在的绝对路径:");
        fBigPicPath = EditorGUILayout.TextField(fBigPicPath);
        EditorGUILayout.LabelField("laya项目目录文件所在的绝对路径:");
        copyToPath = EditorGUILayout.TextField(copyToPath);

        if (GUILayout.Button("fgui发布前,清理fgui已发布文件", GUILayout.Height(30)))
        {
            fguiClearExportFile();
        }
        if (GUILayout.Button("复制fgui资源", GUILayout.Height(30)))
        {
            outExplortPath = outExplortPath.Replace('\\', '/');
            copyToPath     = copyToPath.Replace('\\', '/');
            copyClear();
        }
        if (GUILayout.Button("复制fguiCode文件", GUILayout.Height(30)))
        {
            outExplortPath = outExplortPath.Replace('\\', '/');
            copyToPath     = copyToPath.Replace('\\', '/');
            //startCope2();
            fguicode.codeInit(outExplortPath, copyToPath);
        }
        if (GUILayout.Button("复制fgui声音文件", GUILayout.Height(30)))
        {
            soundPath  = soundPath.Replace('\\', '/');
            copyToPath = copyToPath.Replace('\\', '/');
            startCopeSound();
        }
        if (GUILayout.Button("复制fgui图片文件", GUILayout.Height(30)))
        {
            fSpritePath = fSpritePath.Replace('\\', '/');
            copyToPath  = copyToPath.Replace('\\', '/');
            fguiSprite.createSprite(fSpritePath, copyToPath);
        }
        if (GUILayout.Button("复制fgui图片文件  大图片", GUILayout.Height(30)))
        {
            fBigPicPath = fBigPicPath.Replace('\\', '/');
            copyToPath  = copyToPath.Replace('\\', '/');
            fguiSprite.createBigSprite(fBigPicPath, copyToPath);
        }
        if (GUILayout.Button("生成可加载文件列表", GUILayout.Height(30)))
        {
            copyToPath = copyToPath.Replace('\\', '/');
            startCopereResInf();
        }
        if (GUILayout.Button("生成配置文件", GUILayout.Height(30)))
        {
            //copyToPath = copyToPath.Replace('\\', '/');
            //startCopeConfigs();
        }
        if (GUILayout.Button("生成Proto协议及event文件", GUILayout.Height(30)))
        {
            copyToPath = copyToPath.Replace('\\', '/');
            startProtoResInf();
        }
        if (GUILayout.Button("生成csv文件", GUILayout.Height(30)))
        {
            copyToPath = copyToPath.Replace('\\', '/');
            //ConfigCSV.csvInit(copyToPath);
            ConfigCSV.newCSVInit(copyToPath);
        }
        if (GUILayout.Button("发布前清除release文件夹", GUILayout.Height(30)))
        {
            clearRelease();
        }
        if (GUILayout.Button("清除不需要提交的文件", GUILayout.Height(30)))
        {
            clearDontUpFile();
            console.log("清除完毕");
        }
    }
コード例 #3
0
        //用csv更新pslconfig表的一般信息:根据唯一的fid进行更新
        public static bool UpdateGeneralInfoFromCSV(ConfigCSV configcsv)
        {
            ErrorFlag = false;
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();
                if (configcsv.importdata.Length != 0)
                {
                    string values = "";

                    for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                    {
                        //刷新ui
                        //worker.ReportProgress(i * 100 / configcsv.importdata.Length, String.Format("导入计算配置信息,共{0}条,导入第{1}条!", configcsv.importdata.Length,i));
                        string fid = configcsv.importdata[i][0];
                        //源标签信息
                        //string sourcetagname = configcsv.importdata[i][configcsv.sourcetagnameIndex].Trim();      //涉及到大小写变换、标签检查、PGIM规则替换。不能直接修改,只能初始化。
                        //string sourcetagdb = configcsv.importdata[i][configcsv.sourcetagdbIndex].Trim();          //涉及到根据类型,对sourcetagname进行重填。不能直接修改,只能初始化。
                        string sourcetagdesc = configcsv.importdata[i][configcsv.sourcetagdescIndex].Trim();        //仅描述性,不参与计算,可以直接修改
                        string sourcetagdim  = configcsv.importdata[i][configcsv.sourcetagdimIndex].Trim();         //仅描述性,不参与计算,可以直接修改
                        string sourcetagmrb  = configcsv.importdata[i][configcsv.sourcetagmrbIndex].Trim();         //仅描述性,不参与计算,可以直接修改
                        string sourcetagmre  = configcsv.importdata[i][configcsv.sourcetagmreIndex].Trim();         //仅描述性,不参与计算,可以直接修改

                        //计算公式信息    1、名称
                        //string fmodulename = configcsv.importdata[i][configcsv.fmodulenameIndex].Trim();          //计算公式,不能变,涉及标签id
                        //string fgroup = configcsv.importdata[i][configcsv.fgroupIndex].Trim();                      //暂时不用
                        //string forder = configcsv.importdata[i][configcsv.forderIndex].Trim();                      //暂时不用

                        //计算公式信息    2、算法
                        string falgorithmsflag = configcsv.importdata[i][configcsv.falgorithmsflagIndex].Trim();    //指定哪些结果保存。不参与计算,可以直接修改
                        string fparas          = configcsv.importdata[i][configcsv.fparasIndex].Trim();             //计算参数。参与计算。可以直接修改
                        //string fcondpslnames = configcsv.importdata[i][configcsv.fcondpslnamesIndex].Trim();      //计算条件。涉及到标签检查。不可直接修改
                        string fcondexpression = configcsv.importdata[i][configcsv.fcondexpressionIndex].Trim();    //计算条件表达式。计算条件如何逻辑运算。可以直接修改

                        //计算公式信息    3、结果
                        //string foutputtable = configcsv.importdata[i][configcsv.foutputtableIndex].Trim();          //暂时不用
                        //string foutputnumber = configcsv.importdata[i][configcsv.foutputnumberIndex].Trim();        //与计算相关,固定值
                        //string foutputpsltagnames = configcsv.importdata[i][configcsv.foutputpsltagprefIndex].Trim(); //涉及到id不能修改。

                        //计算公式信息    4、周期
                        //string finterval = configcsv.importdata[i][configcsv.fintervalIndex].Trim();                   //不可以修改,影响计算结果标签
                        //string fintervaltype = configcsv.importdata[i][configcsv.fintervaltypeIndex].Trim();           //不可以修改,影响计算结果标签
                        //计算延时信息
                        string fdelay = configcsv.importdata[i][configcsv.fdelayIndex].Trim();                          //可以修改
                        //计算起始时间
                        //string fstartdate = configcsv.importdata[i][configcsv.fstartdateIndex].Trim();                  //2018.6.27 修改信息里不包含起始时间

                        values = values + String.Format("sourcetagdesc='{0}',sourcetagdim='{1}',sourcetagmrb='{2}',sourcetagmre='{3}'," +
                                                        "falgorithmsflag='{4}',fparas='{5}',fcondexpression='{6}'," +
                                                        "fdelay='{7}'",
                                                        sourcetagdesc, sourcetagdim, sourcetagmrb, sourcetagmre, //源标签信息
                                                        falgorithmsflag, fparas, fcondexpression,                //计算公式信息    2、算法
                                                        fdelay);                                                 //计算公式信息    4、循环

                        sqlStr = String.Format("use psldb;update pslcalcuconfig set {0} where fid={1}", values, fid);
                        dbhelper.ExecuteNonQuery(sqlStr);

                        //更新UI
                        worker.ReportProgress(i * 100 / configcsv.importdata.Length, String.Format("更新计算配置信息,共{0}条,导入第{1}条!", configcsv.importdata.Length, i));
                        //复位
                        values = "";
                    } //end for
                }     //end if
                return(true);
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层PSLCalcuConfigDAO.UpdateFromCSV()错误:---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }
コード例 #4
0
        //检查别名唯一性
        public static bool CheckUnique(ConfigCSV configcsv)
        {
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();

                //0、将所有标签汇集到psltagname
                Dictionary <string, string> psltagnamesDic      = new Dictionary <string, string>();
                Dictionary <string, int>    psltagCalcuIndexDic = new Dictionary <string, int>();

                //1、先读取映射表中已有的标签
                sqlStr = String.Format("use psldb;select * from webtagnameidmap ");
                IDataReader reader = dbhelper.ExecuteReader(sqlStr);
                List <PSLTagNameIdMapItem> psltagitems = IDataReader2PSLTagNameIdMapItem(reader);
                reader.Close();
                Dictionary <string, System.UInt32> psltagmap = new Dictionary <string, System.UInt32>();
                foreach (PSLTagNameIdMapItem psltagitem in psltagitems)
                {
                    psltagnamesDic.Add(psltagitem.psltagname, "数据库计算配置表");
                    psltagCalcuIndexDic.Add(psltagitem.psltagname, psltagitem.pslcalcuconfigindex);
                }//此时,psltagmap包含所有映射表中已经存在的标签

                //2、向psltagnames添加配置的计算结果表标签。计算结果标签放在importdata[i][foutputpsltagprefIndex]中
                int sum = 0;
                int columnfoutputpsltagaliasIndex = configcsv.foutputpsltagaliasIndex;
                for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                {
                    string[] plstagstemp = Regex.Split(configcsv.importdata[i][columnfoutputpsltagaliasIndex], ";|;");    //如果有;|;|,|,则表示多个标签
                    foreach (string psltag in plstagstemp)
                    {
                        if (psltagnamesDic.ContainsKey(psltag))
                        {
                            sum += 1;
                            string messageStr = String.Format("第{0}行的计算结果标签{1},与{2}中的第{3}行计算的计算结果别名重名,请检查!", i - configcsv.firstDataRow + 1, psltag, psltagnamesDic[psltag], psltagCalcuIndexDic[psltag]);
                            logHelper.Error(messageStr);
                        }
                        else
                        {
                            psltagnamesDic.Add(psltag.Trim(), "CSV计算配置表");
                            psltagCalcuIndexDic.Add(psltag.Trim(), i + 1);
                        }
                    }
                }//此时,psltagnames包含了所有要添加的标签别名

                //3、检查结果
                if (sum == 0)
                {
                    return(true);
                }
                else
                {
                    string messageStr = String.Format("要添加的计算结果标签别名与已经存在的计算结果标签别名重名,请检查log文件!");
                    MessageBox.Show(messageStr);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层WebTagNameIdMapDAO.CheckUnique()错误:检查计算结果标签别名在标签id映射表中是否已经存在时出错---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }
コード例 #5
0
        //更新概化标签名称和id映射表中的中文描述
        public static bool UpdateDesc(ConfigCSV configcsv, bool reassign)
        {
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();

                //1、将所有标签汇集到psltagname,将所有计算结果描述汇集到psltagdesc
                List <string> psltagnames = new List <string>();
                Dictionary <string, string> psltagdesc = new Dictionary <string, string>();

                //2、再向psltagnames添加配置的计算结果表标签。计算结果标签放在importdata[i][foutputpsltagprefIndex]中
                int columnfoutputpsltagaliasIndex = configcsv.foutputpsltagaliasIndex;
                int columnfoutputpsltagdescIndex  = configcsv.foutputpsltagdescIndex;
                for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                {
                    string[] psltagstemp     = Regex.Split(configcsv.importdata[i][columnfoutputpsltagaliasIndex], ";|;");  //如果有;|;|,|,则表示多个标签
                    string[] psltagsdesctemp = Regex.Split(configcsv.importdata[i][columnfoutputpsltagdescIndex], ";|;");   //如果有;|;|,|,则表示多个标签
                    for (int j = 0; j < psltagstemp.Length; j++)
                    {
                        //描述如果数量与输入不一致,不影响程序运行,会得到空描述
                        psltagnames.Add(psltagstemp[j].Trim().ToUpper());
                        try
                        {
                            psltagdesc.Add(psltagstemp[j].Trim().ToUpper(), psltagsdesctemp[j].Trim());
                        }
                        catch
                        {
                            psltagdesc.Add(psltagstemp[j].Trim().ToUpper(), "");
                        }
                    }
                }
                //4、读取Map
                Dictionary <string, System.UInt32> tagMap = new Dictionary <string, System.UInt32>();
                tagMap = WebTagNameIdMapDAO.ReadMap();

                //3、更新desc
                int    writecount = 0;
                string valuesStr  = "";
                string idStr      = "";
                foreach (string psltag in psltagnames)
                {
                    writecount = writecount + 1;
                    valuesStr  = valuesStr + String.Format(" when {0} then '{1}'", tagMap[psltag], psltagdesc[psltag]);   //组织字段的实际值字符串。
                    idStr      = idStr + "," + tagMap[psltag].ToString();

                    if (writecount % 100 == 0 || psltag == psltagnames[psltagnames.Count - 1])//凑够100个标签,写入一次;或直到最后一个标签才写入一次。
                    {
                        idStr = "(" + idStr.Substring(1, idStr.Length - 1) + ")";

                        //批量写入数据
                        sqlStr = String.Format("use psldb;update webtagnameidmap set psltagdesc = case psltagid {0} end where psltagid in {1}", valuesStr, idStr);
                        dbhelper.ExecuteNonQuery(sqlStr);
                        //刷新ui
                        worker.ReportProgress(writecount * 100 / psltagnames.Count, String.Format("更新标签别名中文描述,共{0}条,已导入第{1}条!", psltagnames.Count, writecount));
                        //重置
                        valuesStr = "";
                        idStr     = "";
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层PSLTagNameIdMapDAO.generateMap()错误:抽取计算标签名称id映射表时出错---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }
コード例 #6
0
        public static BackgroundWorker worker;      //给generateMap,用于更新进度条界面
        //抽取概化标签别名和id映射表:reassign=1为重新建立标签序号映射;reassign=0为添加标签
        public static bool generateMap(ConfigCSV configcsv, bool reassign)
        {
            //用配置文件中的psltagnames字段的最后一段(以“.”分段,如果是pgim,则是以“^”分段)填写的名称作为计算结果的标签名
            //该接口在读取概化计算配置表后,紧跟着执行
            //1、reassign为true,则全部重新分配id
            //2、reassing为false,则仅向后添加
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();

                //reassign=1,则全部重新分配id.
                //reassign="0",则不重新对于没添加的tag,向后使用新id

                //根据psltagname生成映射表
                //去掉名称重复的标签名:在ConfigCSV.checkPSLNameUnique()中已经检查过计算结果标签唯一性。这里可以保证计算结果标签都是唯一的。
                //string[] trimpslnames = psltagnames.Distinct().ToArray();


                //1、如果reassign=1、清空表数据
                if (reassign)
                {
                    sqlStr = String.Format("use psldb;delete from webtagnameidmap;truncate table webtagnameidmap;alter table webtagnameidmap  auto_increment={0}", MAX_NUMBER_CONSTTAG);
                    dbhelper.ExecuteNonQuery(sqlStr);
                }

                //2、将所有标签汇集到psltagname,将所有计算结果描述汇集到psltagdesc
                List <string> consttagnames = new List <string>();                                  //常数标签名
                Dictionary <string, string> consttagdesc       = new Dictionary <string, string>(); //常数标签描述字典
                Dictionary <string, int>    consttagcalcuindex = new Dictionary <string, int>();    //常数标签计算项序号字典
                Dictionary <string, string> consttaggroup      = new Dictionary <string, string>(); //常数标签组名字典
                Dictionary <string, int>    consttagorder      = new Dictionary <string, int>();    //常数标签组序号字典

                List <string> psltagnames = new List <string>();                                    //概化标签名
                Dictionary <string, string> psltagdesc       = new Dictionary <string, string>();   //概化标签名描述字典
                Dictionary <string, int>    psltagcalcuindex = new Dictionary <string, int>();      //概化标签名计算项序号字典
                Dictionary <string, string> psltaggroup      = new Dictionary <string, string>();   //常数标签组名字典
                Dictionary <string, int>    psltagorder      = new Dictionary <string, int>();      //常数标签组序号字典


                //2.1、先向psltagnames添加特定标签
                if (reassign)
                {
                    psltagnames.Add("CurrentSpan");  //tagid=100,tagname=CurrentSpan,表示当前计算周期,用于时间逻辑表达式要找当前周期时。
                    psltagdesc.Add("CurrentSpan", "当前计算时间段");
                    psltagcalcuindex.Add("CurrentSpan", 0);
                    psltaggroup.Add("CurrentSpan", "");
                    psltagorder.Add("CurrentSpan", 0);
                }

                //2.2、再向consttagnames、psltagnames添加配置的计算结果表标签。计算结果标签放在importdata[i][foutputpsltagprefIndex]中
                int columncalcuitemindex          = configcsv.calcuitemindex;               //计算项序号
                int columnfoutputpsltagaliasIndex = configcsv.foutputpsltagaliasIndex;      //标签别名,注意web端使用别名项
                int columnfoutputpsltagdescIndex  = configcsv.foutputpsltagdescIndex;       //标签描述
                int columnsouredbIndex            = configcsv.sourcetagdbIndex;             //标签源类型
                int columnfmodulename             = configcsv.fmodulenameIndex;             //计算项名称
                int columnforderIndex             = configcsv.forderIndex;
                int columnfgroupIndex             = configcsv.fgroupIndex;

                for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                {
                    //统计非常数标签
                    if (configcsv.importdata[i][columnfmodulename].Trim() != "MReadConst")
                    {
                        string[] psltagstemp     = Regex.Split(configcsv.importdata[i][columnfoutputpsltagaliasIndex], ";|;");  //如果有;|;|,|,则表示多个标签
                        string[] psltagsdesctemp = Regex.Split(configcsv.importdata[i][columnfoutputpsltagdescIndex], ";|;");   //如果有;|;|,|,则表示多个标签

                        for (int j = 0; j < psltagstemp.Length; j++)
                        {
                            //描述如果数量与输入不一致,不影响程序运行,会得到空描述
                            psltagnames.Add(psltagstemp[j].Trim().ToUpper());
                            try
                            {
                                psltagcalcuindex.Add(psltagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columncalcuitemindex])); //csv的第三行数据,对应这里i=2,实际应该是第一行数据。所以index为i-1
                                if (j < psltagsdesctemp.Length)                                                                                  //描述的数量如果和标签数据不符,则给描述填写空值。
                                {
                                    psltagdesc.Add(psltagstemp[j].Trim().ToUpper(), psltagsdesctemp[j].Trim());
                                }
                                else
                                {
                                    psltagdesc.Add(psltagstemp[j].Trim().ToUpper(), "");
                                }
                            }
                            catch
                            {
                                psltagcalcuindex.Add(psltagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columncalcuitemindex]));   //csv的第三行数据,对应这里i=2,实际应该是第一行数据。所以index为i-1
                                psltagdesc.Add(psltagstemp[j].Trim().ToUpper(), "");
                            }
                            psltaggroup.Add(psltagstemp[j].Trim().ToUpper(), configcsv.importdata[i][columnfgroupIndex]);
                            psltagorder.Add(psltagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columnforderIndex]));
                        }
                    }
                    else
                    {
                        //统计常数标签
                        string[] consttagstemp    = Regex.Split(configcsv.importdata[i][columnfoutputpsltagaliasIndex], ";|;");  //如果有;|;|,|,则表示多个标签
                        string[] consttagdesctemp = Regex.Split(configcsv.importdata[i][columnfoutputpsltagdescIndex], ";|;");   //如果有;|;|,|,则表示多个标签
                        for (int j = 0; j < consttagstemp.Length; j++)
                        {
                            //描述如果数量与输入不一致,不影响程序运行,会得到空描述
                            consttagnames.Add(consttagstemp[j].Trim().ToUpper());
                            try
                            {
                                consttagcalcuindex.Add(consttagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columncalcuitemindex])); //csv的第三行数据,对应这里i=2,实际应该是第一行数据。所以index为i-1
                                if (j < consttagdesctemp.Length)                                                                                     //描述的数量如果和标签数据不符,则给描述填写空值。
                                {
                                    consttagdesc.Add(consttagstemp[j].Trim().ToUpper(), consttagdesctemp[j].Trim());
                                }
                                else
                                {
                                    consttagdesc.Add(consttagstemp[j].Trim().ToUpper(), "");
                                }
                            }
                            catch
                            {
                                consttagcalcuindex.Add(consttagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columncalcuitemindex]));   //csv的第三行数据,对应这里i=2,实际应该是第一行数据。所以index为i-1
                                consttagdesc.Add(consttagstemp[j].Trim().ToUpper(), "");
                            }
                            consttaggroup.Add(consttagstemp[j].Trim().ToUpper(), configcsv.importdata[i][columnfgroupIndex]);
                            consttagorder.Add(consttagstemp[j].Trim().ToUpper(), int.Parse(configcsv.importdata[i][columnforderIndex]));
                        }
                    }
                }

                //3、重新分配id
                int    writecount;
                string values;
                //分配常数标签别名,常数标签使用10000以下的id号,在检查常数配置标签的时候,要检查总数量不能大于10000
                //只有在重置标签的情况下,才写常数标签
                if (reassign)
                {
                    writecount = 0;
                    values     = "";
                    int pointid4const = 1;

                    foreach (string contag in consttagnames)
                    {
                        writecount = writecount + 1;
                        values     = values + String.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}'),", pointid4const, contag, consttagcalcuindex[contag], consttagdesc[contag], consttaggroup[contag], consttagorder[contag], ""); //组织字段的实际值字符串。
                        pointid4const++;
                        if (writecount % 100 == 0 || contag == consttagnames[consttagnames.Count - 1])                                                                                                                                  //凑够100个标签,写入一次;或直到最后一个标签才写入一次。
                        {
                            //刷新ui
                            worker.ReportProgress(writecount * 100 / consttagnames.Count, String.Format("建立计算引擎内部常数标签名称和id映射,共{0}条,已导入第{1}条!", consttagnames.Count, writecount));
                            //批量写入数据
                            values = values.Substring(0, values.Length - 1);
                            sqlStr = String.Format("use psldb;insert into webtagnameidmap (psltagid,psltagname,pslcalcuconfigindex,psltagdesc,psltaggroup,psltagorder,outputtablename) values {0}", values);
                            dbhelper.ExecuteNonQuery(sqlStr);
                            values = "";
                        }
                    }
                }
                //分配概化标签别名
                writecount = 0;
                values     = "";
                foreach (string psltag in psltagnames)
                {
                    writecount = writecount + 1;
                    values     = values + String.Format("('{0}','{1}','{2}','{3}','{4}','{5}'),", psltag, psltagcalcuindex[psltag], psltagdesc[psltag], psltaggroup[psltag], psltagorder[psltag], ""); //组织字段的实际值字符串。
                    if (writecount % 100 == 0 || psltag == psltagnames[psltagnames.Count - 1])                                                                                                         //凑够100个标签,写入一次;或直到最后一个标签才写入一次。
                    {
                        //刷新ui
                        worker.ReportProgress(writecount * 100 / psltagnames.Count, String.Format("建立web端概化标签别名和id映射,共{0}条,已导入第{1}条!", psltagnames.Count, writecount));
                        //批量写入数据
                        values = values.Substring(0, values.Length - 1);
                        sqlStr = String.Format("use psldb;insert into webtagnameidmap (psltagname,pslcalcuconfigindex,psltagdesc,psltaggroup,psltagorder,outputtablename) values {0}", values);
                        dbhelper.ExecuteNonQuery(sqlStr);
                        values = "";
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层WebTagNameIdMapDAO.generateMap()错误:抽取计算标签别名id映射表时出错---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }
コード例 #7
0
        //检查条件标签在计算配置表和标签id映射表中是否存在
        public static bool CheckCondPSLName(ConfigCSV configcsv)
        {
            ErrorFlag = false;
            //——该检查必须在AutoGeneratePSLTags之后进行。该方法后,计算结果标签均放入foutputpsltagprefIndex中。位于计算条件的标签名称均应该在foutputpsltagprefIndex可以找到
            string sqlStr = "";

            try
            {
                DbHelper dbhelper = new DbHelper();

                //1、读取当前配置信息中的计算结果标签名到outputtagnamelist
                int columnoutputplsnames = configcsv.foutputpsltagprefIndex;    //由程序生成的计算结果标签AutoGeneratePSLTags都在foutputpsltagprefIndex字段内。
                //输出项名称用分号分隔,
                Dictionary <string, int> outputtagnamelist = new Dictionary <string, int>();
                //取出所有计算结果标签
                for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                {
                    string[] outputtagsArray = Regex.Split(configcsv.importdata[i][columnoutputplsnames], ";|;");
                    for (int j = 0; j < outputtagsArray.Length; j++)
                    {
                        outputtagnamelist.Add(outputtagsArray[j], i);   //由于前面已经检查了计算结果标签是否重复,如果可以进行到这里,计算结果标签肯定不重复。这里直接添加即可。
                    }
                }

                //2、读取数据库中的计算结果标签名到outputtagnamelist
                sqlStr = String.Format("use psldb;select * from psltagnameidmap ");
                IDataReader reader = dbhelper.ExecuteReader(sqlStr);
                List <PSLTagNameIdMapItem> psltagitems = IDataReader2PSLTagNameIdMapItem(reader);
                reader.Close();

                /*
                 * foreach (var item in outputtagnamelist)
                 *
                 * {
                 *
                 *  Console.WriteLine(item.Key + item.Value);
                 *
                 * }
                 */
                foreach (PSLTagNameIdMapItem psltagitem in psltagitems)
                {
                    outputtagnamelist.Add(psltagitem.psltagname, 0);     //由于前面已经检查了计算结果标签和库中已经有的标签不重复。这里直接添加即可。
                }//此时,psltagmap包含所有已经存在的标签

                //3、依顺序检查条件标签
                int sum = 0;
                int columncondplsnames = configcsv.fcondpslnamesIndex;
                for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++)
                {
                    string[] condpsltagsArray = Regex.Split(configcsv.importdata[i][columncondplsnames].ToUpper(), ";|;");
                    for (int j = 0; j < condpsltagsArray.Length; j++)
                    {
                        if (condpsltagsArray[j] != "" && outputtagnamelist.ContainsKey(condpsltagsArray[j]) == false)
                        {
                            sum += 1;
                            string messageStr = String.Format("第{0}行的计算条件标签{1},在计算结果标签(已在库中的标签和要导入的配置表标签)中不存在,请检查!", i - configcsv.firstDataRow + 1, condpsltagsArray[j]);
                            logHelper.Error(messageStr);
                        }
                    }
                }

                if (sum != 0)
                {
                    string messageStr = String.Format("概化计算组态文件计算条件标签中有不存在标签项,请检查log文件!");
                    MessageBox.Show(messageStr);
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            catch (Exception ex)
            {
                ErrorFlag = true;
                string messageStr;
                messageStr = String.Format("DAO层PSLTagNameIdMapDAO.CheckCondPSLName()错误:检查计算条件标签名称是否已经存在时出错---------->") + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("sql语句:{0}", sqlStr) + Environment.NewLine;
                //logHelper.Error(messageStr);
                messageStr += String.Format("错误信息:{0}", ex.ToString());
                logHelper.Error(messageStr);
                return(false);
            }
        }