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); } }
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("清除完毕"); } }
//用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); } }
//检查别名唯一性 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); } }
//更新概化标签名称和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); } }
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); } }
//检查条件标签在计算配置表和标签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); } }