Ejemplo n.º 1
0
        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");
            }

        }
Ejemplo n.º 2
0
        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);
            }

        }