protected void btnCheck_Click(object sender, EventArgs e) { lbxInfor.Items.Clear(); lerror.Clear(); ////////////////////////////////////////////////////////////////////////////// //指标 Dictionary <string, double> dicTags = new Dictionary <string, double>(); ////////////////////////////////////////////////////////////////////////////// //经济指标 List <ECTagEntity> lts = ECTagDal.GetAllEntity(); lbxInfor.Items.Add("查询所有的经济指标!"); foreach (ECTagEntity ltone in lts) { //lbxInfor.Items.Add("开始校验:" + ltone.ECCode + "--" + ltone.ECName ); //有就不变,没有就添加; string strTagCode = "'" + ltone.ECCode.ToUpper().Trim() + "'"; dicTags[strTagCode] = 0.0; //校验计算公式 if (cbxCheckForEcTag.Items[0].Selected && (ltone.ECCalcExp.Replace("'", "''").Length - ltone.ECCalcExp.Length) % 2 != 0) { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + ": 计算公式解析失败! " + ltone.ECCalcExp); lerror.Add(ltone.ECCalcExp); } ///////////////////////////////////////////////////////////////// //校验Xline曲线 if (cbxCheckForEcTag.Items[1].Selected && !ECTagDal.CheckEntityForXline(ltone)) { //相同X不能存在。 lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + ": 曲线解析失败! " + ltone.ECXLineType.ToString() + "--" + ltone.ECXLineXYZ); lerror.Add(ltone.ECXLineXYZ); } //////////////////////////////////////////////////////////////// //校验ScoreExp if (cbxCheckForEcTag.Items[2].Selected && !ECTagDal.CheckEntityForScore(ltone)) { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + ": 得分计算解析失败! " + ltone.ECScoreExp); lerror.Add(ltone.ECScoreExp); } //////////////////////////////////////////////////////////////// //校验Optimal if (cbxCheckForEcTag.Items[2].Selected && !ECTagDal.CheckEntityForOptimal(ltone)) { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + ": 最优区间数量不等于1! " + ltone.ECScoreExp); lerror.Add(ltone.ECScoreExp); } } ////////////////////////////////////////////////////////// //实时指标 List <KPI_RealTagEntity> rls = KPI_RealTagDal.GetAllEntity(); lbxInfor.Items.Add("查询所有的实时指标!"); foreach (KPI_RealTagEntity ltone in rls) { //有就不变,没有就添加; string strTagCode = "'" + ltone.RealCode.ToUpper().Trim() + "'"; dicTags[strTagCode] = 0.0; if (cbxCheckForRealTag.Items[0].Selected) { //lbxInfor.Items.Add("开始校验:" + ltone.RealCode + "--" + ltone.RealDesc); string strtag = ltone.RealCode; if (!DBAccess.GetRealTime().ExistPoint(strtag)) { lbxInfor.Items.Add(ltone.RealCode + "--" + ltone.RealDesc + ": 不存在! "); lerror.Add(ltone.RealCode); } } } ////////////////////////////////////////////// //所有指标 lbxInfor.Items.Add("校验经济指标的标签引用!"); foreach (ECTagEntity ltone in lts) { //lbxInfor.Items.Add("开始校验:" + ltone.ECCode + "--" + ltone.ECName ); //////////////////////////////////////////////////////////////// //校验Calc Tag Dictionary <String, double> dic1 = new Dictionary <String, double>(); string expression = ltone.ECCalcExp.Trim(); if (expression == "") { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + " 计算表达式为空!"); continue; } ExpDone parser = new ExpDone(); if (parser.ExpEvaluate(expression, ref dic1) != 0) { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + " 指标解析错误:" + ltone.ECCalcExp); lerror.Add(ltone.ECCalcExp); continue; } foreach (KeyValuePair <string, double> kvp in dic1) { string tagcode = kvp.Key.ToUpper().Trim(); if (!dicTags.ContainsKey(tagcode)) { lbxInfor.Items.Add(ltone.ECCode + "--" + ltone.ECName + ": 的标签点引用失败! " + kvp.Key); lerror.Add(kvp.Key); } } } }