//修改标签名称 private void bt_dorevise_Click(object sender, EventArgs e) { //将勾选的标签名称替换掉 //——在计算配置表中进行替换 //——在标签id映射中进行替换 //遍历对象 try { for (int i = 0; i < this.lv_searchresults.Items.Count; i++) { if (this.lv_searchresults.Items[i].Checked) { uint fid = uint.Parse(this.lv_searchresults.Items[i].SubItems[0].Text); string fieldtype = this.lv_searchresults.Items[i].SubItems[2].Text; string[] tagids = this.lv_searchresults.Items[i].SubItems[4].Text.Split(';'); string aftertagname = this.lv_searchresults.Items[i].SubItems[5].Text; string[] tagnames = this.lv_searchresults.Items[i].SubItems[5].Text.Split(';'); //更新配置表 PSLCalcuConfigDAO.UpdateTagnameInfo(fid, fieldtype, aftertagname); //更新id映射表 PSLTagNameIdMapDAO.UpdateTagname(tagids, tagnames); WebTagNameIdMapDAO.UpdateTagname(tagids, tagnames); // this.lv_searchresults.Items[i].Checked = false; } } MessageBox.Show("更新完毕,请检查数据库‘计算配置表’、‘标签id映射表’、‘别名id映射表’。"); } catch (Exception ex) { MessageBox.Show("修改标签名错误,请检查!"); } }
//删除标签子程序 private bool deleteTags(uint[] tagids) { try { PSLTagNameIdMapDAO.DeleteTags(tagids); WebTagNameIdMapDAO.DeleteTags(tagids); MessageBox.Show("计算项对应的计算标签已经删除完毕..."); return(true); } catch { string messageinfo = String.Format("删除标签时发生错误!错误信息见log文件。为了保证数据一致性,请检查两个标签id映射表!"); MessageBox.Show(messageinfo); return(false); } }
//搜索含有原标签名的计算项 private void bt_search_Click(object sender, EventArgs e) { int i, j; //清空lv this.lv_searchresults.Items.Clear(); if (currentTagname == "") { MessageBox.Show("请输原标签名称"); return; } if (afterTagname == "") { MessageBox.Show("请输入修改后的标签名称"); return; } List <PSLCalcuItem> pslcalcuitems = PSLCalcuConfigDAO.ReadConfigContainTagname(currentTagname); if (pslcalcuitems == null || pslcalcuitems.Count == 0) { MessageBox.Show("没有找到要替换的标签名称"); return; } //将要替换的标签名称显示出来 tagname2idMap = PSLTagNameIdMapDAO.ReadMap(); string[] tagnames; uint[] tagids; int tagcount; for (i = 0; i < pslcalcuitems.Count; i++) { PSLCalcuItem pslcalcuitem = pslcalcuitems[i]; string tagnamesStr = ""; tagcount = 0; //判断处理源标签名称 tagnamesStr = pslcalcuitem.sourcetagname; if (tagnamesStr.Contains(currentTagname)) { //计数器 tagcount++; //标签id号 tagnames = tagnamesStr.Split(';'); tagids = new uint[tagnames.Length]; for (j = 0; j < tagnames.Length; j++) { tagids[j] = tagname2idMap[tagnames[j]]; } //添加lv ListViewItem lvitem = this.lv_searchresults.Items.Add((pslcalcuitem.fid).ToString(), (pslcalcuitem.fid).ToString(), -1); //第一列,添加计算项序号 lvitem.Checked = cb_SelectAll.Checked; lvitem.SubItems.Add(tagcount.ToString()); //第2列,是该计算项中含有currentTagname的项的序号 lvitem.SubItems.Add("源标签"); //第3列,是含有currentTagname的字段类型 lvitem.SubItems.Add(tagnamesStr); //第4列,是该计算项中含有currentTagname的字段内容 lvitem.SubItems.Add(String.Join(";", tagids)); //第5列,是该计算项中含有currentTagname的字段内容对应的id号 lvitem.SubItems.Add(tagnamesStr.Replace(currentTagname, afterTagname)); //第6列,是替换后的内容 } //判断处理条件标签名称 tagnamesStr = pslcalcuitem.fcondpslnames; if (tagnamesStr.Contains(currentTagname)) { //计数器 tagcount++; //标签id号 tagnames = tagnamesStr.Split(';'); tagids = new uint[tagnames.Length]; for (j = 0; j < tagnames.Length; j++) { tagids[j] = tagname2idMap[tagnames[j]]; } //添加lv ListViewItem lvitem = this.lv_searchresults.Items.Add((pslcalcuitem.fid).ToString(), (pslcalcuitem.fid).ToString(), -1); //第一列,添加计算项序号 lvitem.Checked = cb_SelectAll.Checked; lvitem.SubItems.Add(tagcount.ToString()); //第2列,是该计算项中含有currentTagname的项的序号 lvitem.SubItems.Add("条件标签"); //第3列,是含有currentTagname的字段类型 lvitem.SubItems.Add(tagnamesStr); //第4列,是该计算项中含有currentTagname的字段内容 lvitem.SubItems.Add(String.Join(";", tagids)); //第5列,是该计算项中含有currentTagname的字段内容对应的id号 lvitem.SubItems.Add(tagnamesStr.Replace(currentTagname, afterTagname)); //第6列,是替换后的内容 } //判断处理结果标签名称 tagnamesStr = pslcalcuitem.foutputpsltagnames; if (tagnamesStr.Contains(currentTagname)) { //计数器 tagcount++; //标签id号 tagnames = tagnamesStr.Split(';'); tagids = new uint[tagnames.Length]; for (j = 0; j < tagnames.Length; j++) { tagids[j] = tagname2idMap[tagnames[j]]; } //添加lv ListViewItem lvitem = this.lv_searchresults.Items.Add((pslcalcuitem.fid).ToString(), (pslcalcuitem.fid).ToString(), -1); //第一列,添加计算项序号 lvitem.Checked = cb_SelectAll.Checked; lvitem.SubItems.Add(tagcount.ToString()); //第2列,是该计算项中含有currentTagname的项的序号 lvitem.SubItems.Add("结果标签"); //第3列,是含有currentTagname的字段类型 lvitem.SubItems.Add(tagnamesStr); //第4列,是该计算项中含有currentTagname的字段内容 lvitem.SubItems.Add(String.Join(";", tagids)); //第5列,是该计算项中含有currentTagname的字段内容对应的id号 lvitem.SubItems.Add(tagnamesStr.Replace(currentTagname, afterTagname)); //第6列,是替换后的内容 } } int temp = 10; }
//更新概化标签名称和id映射表中的中文描述 public static bool UpdateDesc(ConfigCSV configcsv, bool reassign) { ErrorFlag = false; 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 columnfoutputpsltagprefIndex = configcsv.foutputpsltagprefIndex; int columnfoutputpsltagdescIndex = configcsv.foutputpsltagdescIndex; for (int i = configcsv.firstDataRow; i < configcsv.importdata.Length; i++) { string[] psltagstemp = Regex.Split(configcsv.importdata[i][columnfoutputpsltagprefIndex], ";|;"); //如果有;|;|,|,则表示多个标签 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 = PSLTagNameIdMapDAO.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 psltagnameidmap 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); } }