public static void calucData_leiji(DateTime begin, DateTime end,string dataid) //计算公式 { string sql = "select * from DataID where state ='2' and id='" + dataid + "' "; DataSet ds1 = BaseOperate.getds(sql, "table1"); System.Collections.Hashtable ha = new System.Collections.Hashtable(); for (int m = 0; m < ds1.Tables["table1"].Rows.Count; m++) { string id = ds1.Tables["table1"].Rows[m]["id"].ToString(); string calcu = ds1.Tables["table1"].Rows[m]["Calcu"].ToString(); string[] split = calcu.Split(new Char[] { '+', '-', '*', '/', '(', ')', '=' }); for (int i = 0; i < split.GetLength(0); i++) { string meter_id = split[i]; if (meter_id != "") { if (meter_id.Substring(0, 1) == "$") //($代表累计数据,'代表常数 { string sql2 = "select top 1 value from Original_data where endtime<= '" + end.ToString() + "' and Meterid = '" + meter_id.Substring(1) + "' and endtime ='2000/1/1 0:00:00' order by begintime desc"; DataSet ds2 = BaseOperate.getds(sql2, "1"); string data = ""; try { data = ds2.Tables[0].Rows[0][0].ToString(); } catch { data = "0"; } if (data == "") { data = "0"; } if (data.IndexOf(".") != -1) { if (data.Length > data.IndexOf(".") + 3) //切除多余小数部分 { data = data.Remove(data.IndexOf(".") + 3); } } calcu = calcu.Replace(meter_id, data); } else if (meter_id.Substring(0, 1) != "'") //判断是否是常数 (数字前面带'为常数)) { string sql2 = "select sum(value) from Original_data where begintime>='" + begin.ToString() + "' and endtime<= '" + end.ToString() + "' and Meterid = '" + meter_id + "' and endtime !='2000/1/1 0:00:00' "; DataSet ds2 = BaseOperate.getds(sql2, "1"); string data = ds2.Tables[0].Rows[0][0].ToString(); if (data == "") { data = "0"; } if (data.IndexOf(".") != -1) { if (data.Length > data.IndexOf(".") + 3) //切除多余小数部分 { data = data.Remove(data.IndexOf(".") + 3); } } calcu = calcu.Replace(meter_id, data); } else { calcu = calcu.Replace(meter_id, meter_id.Substring(1)); //将公式替换为数值 } } } ConcSoft.Calculate.CalculateClass c1 = new ConcSoft.Calculate.CalculateClass(); string result = c1.CalculateExpress(calcu, ha); BaseOperate.insertCalData(id, begin, end, Math.Round(Convert.ToDouble(result), 2), "Data_minute"); } }
public static void calucData(DateTime begin, DateTime end, string tableName,string dataid) //计算公式(时段内的和) { string sql = "select * from DataID where state ='1' and id='"+dataid+"' "; DataSet ds1 = BaseOperate.getds(sql, "table1"); System.Collections.Hashtable ha = new System.Collections.Hashtable(); for (int m = 0; m < ds1.Tables["table1"].Rows.Count; m++) { string id = ds1.Tables["table1"].Rows[m]["id"].ToString(); //获得每个dataID string calcu = ds1.Tables["table1"].Rows[m]["Calcu"].ToString(); //获得每个计算公式 string type = ds1.Tables["table1"].Rows[m]["DataType"].ToString(); string[] split = calcu.Split(new Char[] { '+', '-', '*', '/', '(', ')', '=' }); string temp_calcu = ""; ; for (int i = 0; i < split.GetLength(0); i++) { string meter_id = split[i]; if (meter_id != "") { if (meter_id.Substring(0, 1) != "'") //判断是否是常数 (数字前面带'为常数)) { // string sql2 = "select sum(value) from Original_data where begintime>='" + begin.ToString() + "' and endtime<= '" + end.ToString() + "' and Meterid = '" + meter_id + "' and endtime !='2000/1/1 0:00:00' and value > 0 "; string sql2 = "select sum(value) from Original_data where begintime>='" + begin.ToString() + "' and endtime<= '" + end.ToString() + "' and Meterid = '" + meter_id + "' and endtime !='2000/1/1 0:00:00' "; DataSet ds2 = BaseOperate.getds(sql2, "1"); string data = ds2.Tables[0].Rows[0][0].ToString(); if (data == "") { data = "0"; } if (data.IndexOf(".") != -1) { if (data.Length > data.IndexOf(".") + 3) //切除多余小数部分 { data = data.Remove(data.IndexOf(".") + 3); } } if (data.Substring(0, 1) == "-") { data = data.Substring(1); } // temp_calcu = calcu.Substring(0, calcu.IndexOf(meter_id) + meter_id.Length); //**************************************************test calcu = calcu.Substring(0, calcu.IndexOf(meter_id)) + data + calcu.Substring(calcu.IndexOf(meter_id) + meter_id.Length); // calcu = calcu.Replace(meter_id, data); } else { calcu = calcu.Replace(meter_id, meter_id.Substring(1)); //将公式替换为数值 // int ie =calcu.IndexOf(meter_id.Substring(1)); // temp_calcu = calcu.Substring(0, calcu.IndexOf(meter_id.Substring(1)) + meter_id.Length); } } } ConcSoft.Calculate.CalculateClass c1 = new ConcSoft.Calculate.CalculateClass(); string result = c1.CalculateExpress(calcu, ha); if (type == "dian_power" && tableName == "Data_hour") { result = (Convert.ToDouble(result) / 12).ToString(); } BaseOperate.insertCalData(id, begin, end, Convert.ToDouble(result), tableName); } }