コード例 #1
0
ファイル: AlgorithmBLL.cs プロジェクト: JSYXX/development_c
 public static bool insertMDevLimitSft(MDevLimitShtClass newClass, bool isNew)
 {
     try
     {
         bool isok = false;
         if (isNew)
         {
             isok = DAL.AlgorithmDAL.insertMDevLimitSft(newClass);
         }
         else
         {
             isok = DAL.AlgorithmDAL.updateMDevLimitSft(newClass);
         }
         return(isok);
     }
     catch (Exception)
     {
         throw;
     }
 }
コード例 #2
0
        public static Results Calcu(List <PValue>[] inputs, CalcuInfo calcuinfo)
        {
            //公用变量
            bool   _errorFlag   = false;
            string _errorInfo   = "";
            bool   _warningFlag = false;
            string _warningInfo = "";
            bool   _fatalFlag   = false;
            string _fatalInfo   = "";

            int i;

            //0输出初始化:该算法如果没有有效输入值(inputs为null)或者输入值得有效值为null,给出的计算结果。值为0,计算标志位为StatusConst.InputIsNull
            List <PValue>[] results = new List <PValue> [17];
            for (i = 0; i < results.Length; i++)
            {
                results[i] = new List <PValue>();
            }

            try
            {
                //读取参数

                MDevLimitShtClass mDevMessageInClass = new MDevLimitShtClass();
                double            LimitHH, LimitH, LimitRP, LimitOO, LimitRN, LimitL, LimitLL;
                string            mode;
                string[]          paras = calcuinfo.fparas.Split(';');

                LimitHH = int.Parse(paras[0]);
                LimitH  = int.Parse(paras[1]);
                LimitRP = double.Parse(paras[2]);
                LimitOO = double.Parse(paras[3]);
                LimitRN = double.Parse(paras[4]);
                LimitL  = double.Parse(paras[5]);
                LimitLL = double.Parse(paras[6]);
                string        type = calcuinfo.fsourtagids[0].ToString();
                List <string> dutyList = new List <string>();
                for (int l = 7; l < paras.Length; l += 2)
                {
                    dutyList.Add(paras[l] + ":" + paras[l + 1]);
                }
                List <PValue> input = new List <PValue>();
                input = inputs[0];


                //0.1、输入处理:过滤后结果。
                //——如果去除了截止时刻点,过滤后长度小于1(计算要求至少有一个有效数据),则直接返回null
                //——如果没取除截止时刻点,过滤后长度小于2(计算要求至少有一个有效数据和一个截止时刻值)
                if (input.Count < 1)
                {
                    _warningFlag = true;
                    _warningInfo = "对应时间段内的源数据状态位全部异常。";
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }

                string dutyEndTime = string.Empty;
                string dutyTime = AlgorithmBLL.getDutyConst(input[0].Timestamp, dutyList, ref dutyEndTime);
                if (Convert.ToDateTime(dutyTime).Ticks > input[0].Timestamp.Ticks)
                {
                    _warningFlag = true;
                    _warningInfo = "数据对应时间小于值次时间。";
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }
                uint[] foutputpsltagids = calcuinfo.foutputpsltagids;
                if (dutyTime == input[0].Timestamp.ToString("yyyy-MM-dd HH:mm"))
                {
                    AlgorithmBLL.deleteOldData(dutyTime, foutputpsltagids);
                }
                DataTable dt = AlgorithmBLL.getMPVBasePlusSftOriOldData(dutyTime, foutputpsltagids);
                mDevMessageInClass.type = type;
                bool isNewAdd = false;
                if (dt == null || dt.Rows.Count == 0)
                {
                    isNewAdd = true;
                    mDevMessageInClass.dutyTime = dutyTime;
                    double x          = Convert.ToDouble(input[input.Count() - 1].Value.ToString());
                    int    DevHLHHLLT = 0;
                    if ((LimitHH > x && x >= LimitH) || (LimitL >= x && x > LimitLL))
                    {
                        DevHLHHLLT++;
                    }
                    int DevHHT = 0;
                    if (x > LimitHH)
                    {
                        DevHHT++;
                    }
                    int DevHT = 0;
                    if (LimitHH > x && x >= LimitH)
                    {
                        DevHT++;
                    }
                    int DevRPT = 0;
                    if (LimitH > x && x >= LimitRP)
                    {
                        DevRPT++;
                    }
                    int Dev0PT = 0;
                    if (LimitRP > x && x >= LimitOO)
                    {
                        Dev0PT++;
                    }
                    int Dev0NT = 0;
                    if (LimitOO > x && x >= LimitRN)
                    {
                        Dev0NT++;
                    }
                    int DevRNT = 0;
                    if (LimitRN > x && x >= LimitL)
                    {
                        DevRNT++;
                    }
                    int DevLT = 0;
                    if (LimitL > x && x >= LimitLL)
                    {
                        DevLT++;
                    }
                    int DevLLT = 0;
                    if (LimitLL > x)
                    {
                        DevLLT++;
                    }
                    int Dev0HT = 0;
                    if (LimitH > x && x >= LimitOO)
                    {
                        Dev0HT++;
                    }
                    int Dev0L = 0;
                    if (LimitOO > x && x > LimitL)
                    {
                        Dev0L++;
                    }
                    int DevHHLLT = 0;
                    if (x <= LimitLL || x >= LimitHH)
                    {
                        DevHHLLT++;
                    }
                    int DevRPRMHLT = 0;
                    if ((LimitH > x && x >= LimitRP) || (LimitRN >= x && x > LimitL))
                    {
                        DevRPRMHLT++;
                    }
                    int Dev0RPRMT = 0;
                    if (LimitRP > x && x > LimitRN)
                    {
                        Dev0RPRMT++;
                    }
                    int DevHLT = 0;
                    if (LimitH > x && x > LimitL)
                    {
                        DevHLT++;
                    }
                    mDevMessageInClass.DevHLHHLLR     = MathHelper.returnProportionStr(DevHLHHLLT, 1);
                    mDevMessageInClass.DevHHR         = MathHelper.returnProportionStr(DevHHT, 1);
                    mDevMessageInClass.DevHR          = MathHelper.returnProportionStr(DevHT, 1);
                    mDevMessageInClass.DevRPR         = MathHelper.returnProportionStr(DevRPT, 1);
                    mDevMessageInClass.Dev0PR         = MathHelper.returnProportionStr(Dev0PT, 1);
                    mDevMessageInClass.Dev0NR         = MathHelper.returnProportionStr(Dev0NT, 1);
                    mDevMessageInClass.DevRNR         = MathHelper.returnProportionStr(DevRNT, 1);
                    mDevMessageInClass.DevLR          = MathHelper.returnProportionStr(DevLT, 1);
                    mDevMessageInClass.DevLLR         = MathHelper.returnProportionStr(DevLLT, 1);
                    mDevMessageInClass.Dev0HTR        = MathHelper.returnProportionStr(Dev0HT, 1);
                    mDevMessageInClass.Dev0LR         = MathHelper.returnProportionStr(Dev0L, 1);
                    mDevMessageInClass.DevHHLLTR      = MathHelper.returnProportionStr(DevHHLLT, 1);
                    mDevMessageInClass.DevRPRMHLTR    = MathHelper.returnProportionStr(DevRPRMHLT, 1);
                    mDevMessageInClass.Dev0RPRMTR     = MathHelper.returnProportionStr(Dev0RPRMT, 1);
                    mDevMessageInClass.DevHLTR        = MathHelper.returnProportionStr(DevHLT, 1);
                    mDevMessageInClass.UpdateTime     = input[0].Timestamp.ToString("yyyy-MM-dd HH:mm");
                    mDevMessageInClass.EffectiveCount = "1";
                }
                else
                {
                    MDevLimitShtClass mDevClass = new MDevLimitShtClass();
                    mDevClass.DevHLHHLLR     = dt.Rows[0]["tagvalue"].ToString();
                    mDevClass.DevHHR         = dt.Rows[1]["tagvalue"].ToString();
                    mDevClass.DevHR          = dt.Rows[2]["tagvalue"].ToString();
                    mDevClass.DevRPR         = dt.Rows[3]["tagvalue"].ToString();
                    mDevClass.Dev0PR         = dt.Rows[4]["tagvalue"].ToString();
                    mDevClass.Dev0NR         = dt.Rows[5]["tagvalue"].ToString();
                    mDevClass.DevRNR         = dt.Rows[6]["tagvalue"].ToString();
                    mDevClass.DevLR          = dt.Rows[7]["tagvalue"].ToString();
                    mDevClass.DevLLR         = dt.Rows[8]["tagvalue"].ToString();
                    mDevClass.Dev0HTR        = dt.Rows[9]["tagvalue"].ToString();
                    mDevClass.Dev0LR         = dt.Rows[10]["tagvalue"].ToString();
                    mDevClass.DevHHLLTR      = dt.Rows[11]["tagvalue"].ToString();
                    mDevClass.DevRPRMHLTR    = dt.Rows[12]["tagvalue"].ToString();
                    mDevClass.Dev0RPRMTR     = dt.Rows[13]["tagvalue"].ToString();
                    mDevClass.DevHLTR        = dt.Rows[14]["tagvalue"].ToString();
                    mDevClass.UpdateTime     = MathHelper.returnAllStr(dt.Rows[15]["tagvalue"].ToString());
                    mDevClass.EffectiveCount = dt.Rows[16]["tagvalue"].ToString();


                    double x          = Convert.ToDouble(input[input.Count() - 1].Value.ToString());
                    int    DevHLHHLLT = 0;
                    if ((LimitHH > x && x >= LimitH) || (LimitL >= x && x > LimitLL))
                    {
                        DevHLHHLLT++;
                    }
                    int DevHHT = 0;
                    if (x > LimitHH)
                    {
                        DevHHT++;
                    }
                    int DevHT = 0;
                    if (LimitHH > x && x >= LimitH)
                    {
                        DevHT++;
                    }
                    int DevRPT = 0;
                    if (LimitH > x && x >= LimitRP)
                    {
                        DevRPT++;
                    }
                    int Dev0PT = 0;
                    if (LimitRP > x && x >= LimitOO)
                    {
                        Dev0PT++;
                    }
                    int Dev0NT = 0;
                    if (LimitOO > x && x >= LimitRN)
                    {
                        Dev0NT++;
                    }
                    int DevRNT = 0;
                    if (LimitRN > x && x >= LimitL)
                    {
                        DevRNT++;
                    }
                    int DevLT = 0;
                    if (LimitL > x && x >= LimitLL)
                    {
                        DevLT++;
                    }
                    int DevLLT = 0;
                    if (LimitLL > x)
                    {
                        DevLLT++;
                    }
                    int Dev0HT = 0;
                    if (LimitH > x && x >= LimitOO)
                    {
                        Dev0HT++;
                    }
                    int Dev0L = 0;
                    if (LimitOO > x && x > LimitL)
                    {
                        Dev0L++;
                    }
                    int DevHHLLT = 0;
                    if (x <= LimitLL || x >= LimitHH)
                    {
                        DevHHLLT++;
                    }
                    int DevRPRMHLT = 0;
                    if ((LimitH > x && x >= LimitRP) || (LimitRN >= x && x > LimitL))
                    {
                        DevRPRMHLT++;
                    }
                    int Dev0RPRMT = 0;
                    if (LimitRP > x && x > LimitRN)
                    {
                        Dev0RPRMT++;
                    }
                    int DevHLT = 0;
                    if (LimitH > x && x > LimitL)
                    {
                        DevHLT++;
                    }
                    int effectiveCount = Convert.ToInt32(mDevClass.EffectiveCount);
                    mDevMessageInClass.DevHLHHLLR     = MathHelper.returnProportionUpdateStr(DevHLHHLLT, effectiveCount, mDevClass.DevHLHHLLR);
                    mDevMessageInClass.DevHHR         = MathHelper.returnProportionUpdateStr(DevHHT, effectiveCount, mDevClass.DevHHR);
                    mDevMessageInClass.DevHR          = MathHelper.returnProportionUpdateStr(DevHT, effectiveCount, mDevClass.DevHR);
                    mDevMessageInClass.DevRPR         = MathHelper.returnProportionUpdateStr(DevRPT, effectiveCount, mDevClass.DevRPR);
                    mDevMessageInClass.Dev0PR         = MathHelper.returnProportionUpdateStr(Dev0PT, effectiveCount, mDevClass.Dev0PR);
                    mDevMessageInClass.Dev0NR         = MathHelper.returnProportionUpdateStr(Dev0NT, effectiveCount, mDevClass.Dev0NR);
                    mDevMessageInClass.DevRNR         = MathHelper.returnProportionUpdateStr(DevRNT, effectiveCount, mDevClass.DevRNR);
                    mDevMessageInClass.DevLR          = MathHelper.returnProportionUpdateStr(DevLT, effectiveCount, mDevClass.DevLR);
                    mDevMessageInClass.DevLLR         = MathHelper.returnProportionUpdateStr(DevLLT, effectiveCount, mDevClass.DevLLR);
                    mDevMessageInClass.Dev0HTR        = MathHelper.returnProportionUpdateStr(Dev0HT, effectiveCount, mDevClass.Dev0HTR);
                    mDevMessageInClass.Dev0LR         = MathHelper.returnProportionUpdateStr(Dev0L, effectiveCount, mDevClass.Dev0LR);
                    mDevMessageInClass.DevHHLLTR      = MathHelper.returnProportionUpdateStr(DevHHLLT, effectiveCount, mDevClass.DevHHLLTR);
                    mDevMessageInClass.DevRPRMHLTR    = MathHelper.returnProportionUpdateStr(DevRPRMHLT, effectiveCount, mDevClass.DevRPRMHLTR);
                    mDevMessageInClass.Dev0RPRMTR     = MathHelper.returnProportionUpdateStr(Dev0RPRMT, effectiveCount, mDevClass.Dev0RPRMTR);
                    mDevMessageInClass.DevHLTR        = MathHelper.returnProportionUpdateStr(DevHLT, effectiveCount, mDevClass.DevHLTR);
                    mDevMessageInClass.UpdateTime     = input[0].Timestamp.ToString("yyyy-MM-dd HH:mm");
                    mDevMessageInClass.EffectiveCount = (effectiveCount + 1).ToString();
                }
                //初始化
                results[0].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevHLHHLLR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[1].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevHHR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[2].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevHR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[3].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevRPR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[4].Add(new PValue(Convert.ToDouble(mDevMessageInClass.Dev0PR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[5].Add(new PValue(Convert.ToDouble(mDevMessageInClass.Dev0NR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[6].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevRNR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[7].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevLR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[8].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevLLR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[9].Add(new PValue(Convert.ToDouble(mDevMessageInClass.Dev0HTR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[10].Add(new PValue(Convert.ToDouble(mDevMessageInClass.Dev0LR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[11].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevHHLLTR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[12].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevRPRMHLTR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[13].Add(new PValue(Convert.ToDouble(mDevMessageInClass.Dev0RPRMTR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[14].Add(new PValue(Convert.ToDouble(mDevMessageInClass.DevHLTR), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[15].Add(new PValue(Convert.ToDateTime(mDevMessageInClass.UpdateTime).Ticks, Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                results[16].Add(new PValue(Convert.ToDouble(mDevMessageInClass.EffectiveCount), Convert.ToDateTime(dutyTime), Convert.ToDateTime(dutyEndTime), 0));
                return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                //计算结果存入数据库
                //bool isok = BLL.AlgorithmBLL.insertMPVBasePlusSft(mpvMessageInClass, isNewAdd);
                //if (isok)
                //{
                //    return new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo);
                //}
                //else
                //{
                //    _fatalFlag = true;
                //    _fatalInfo = "MPVBasePlusSft录入数据失败";
                //    return new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo);
                //}
            }
            catch (Exception ex)
            {
                //计算中出任何错误,则需要记录log
                //LogHelper.Write(LogType.Error, "计算模块错误!");
                //记录计算模块的名称、当前标签、起始时间、结束时间
                //string moduleInfo = string.Format("——计算模块的名称是:{0},当前计算源标签是:{1},计算起始时间是:{2},计算结束时间是:{3}。", calcuInfo.fmodulename, calcuInfo.sourcetagname, calcuinfo.fstarttime.ToString(), calcuinfo.fendtime.ToString());
                //LogHelper.Write(LogType.Error, moduleInfo);
                //计算引擎报错具体信息
                //string errInfo = string.Format("——具体报错信息:{0}。", ex.ToString());
                //LogHelper.Write(LogType.Error, errInfo);
                //返回null供计算引擎处理
                _fatalFlag = true;
                _fatalInfo = ex.ToString();
                return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
            }
        }
コード例 #3
0
ファイル: MDevLimitSft.cs プロジェクト: JSYXX/development_c
        public static Results Calcu(List <PValue>[] inputs, CalcuInfo calcuinfo)
        {
            //公用变量
            bool   _errorFlag   = false;
            string _errorInfo   = "";
            bool   _warningFlag = false;
            string _warningInfo = "";
            bool   _fatalFlag   = false;
            string _fatalInfo   = "";

            int i;

            //0输出初始化:该算法如果没有有效输入值(inputs为null)或者输入值得有效值为null,给出的计算结果。值为0,计算标志位为StatusConst.InputIsNull
            List <PValue>[] results = new List <PValue> [16];
            for (i = 0; i < results.Length; i++)
            {
                results[i] = new List <PValue>();
                results[i].Add(new PValue(0, calcuinfo.fstarttime, calcuinfo.fendtime, (long)StatusConst.InputIsNull));
            }

            try
            {
                //读取参数

                double            N1, N2, N3, k, b, stbl, nostbl;
                string            mode;
                MDevLimitShtClass mDevMessageInClass = new MDevLimitShtClass();
                double            LimitHH, LimitH, LimitRP, LimitOO, LimitRN, LimitL, LimitLL;
                string[]          paras = calcuinfo.fparas.Split(';');

                LimitHH = int.Parse(paras[0]);
                LimitH  = int.Parse(paras[1]);
                LimitRP = double.Parse(paras[2]);
                LimitOO = double.Parse(paras[3]);
                LimitRN = double.Parse(paras[4]);
                LimitL  = double.Parse(paras[5]);
                LimitLL = double.Parse(paras[6]);
                List <PValue> input = new List <PValue>();
                input = inputs[0];
                //tagId
                string        type = calcuInfo.fsourtagids[0].ToString();
                List <string> dutyList = new List <string>();
                for (int l = 7; l < paras.Length; l += 2)
                {
                    dutyList.Add(paras[l] + ":" + paras[l + 1]);
                }



                //0.1、输入处理:截止时刻值。该算法不需要截止时刻点参与计算。
                if (input.Count > 1)
                {
                    input.RemoveAt(input.Count - 1);
                }
                //0.2、输入处理:过滤后结果。
                //——如果去除了截止时刻点,过滤后长度小于1(计算要求至少有一个有效数据),则直接返回null
                //——如果没取除截止时刻点,过滤后长度小于2(计算要求至少有一个有效数据和一个截止时刻值)
                if (input.Count < 1)
                {
                    _warningFlag = true;
                    _warningInfo = "对应时间段内的源数据状态位全部异常。";
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }
                string  dutyEndTime = string.Empty;
                string  dutyTime = AlgorithmBLL.getDutyConst(input[0].Timestamp, dutyList, ref dutyEndTime);
                DataSet ds = BLL.AlgorithmBLL.getSftData("psl_mdevlimitsft", type, dutyTime);
                for (int l = 0; l < ds.Tables[1].Rows.Count; l++)
                {
                    PValue newClass = new PValue();
                }
                mDevMessageInClass.type = type;
                bool isNewAdd = false;
                if (ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0)
                {
                    isNewAdd = true;
                    mDevMessageInClass.dutyTime = dutyTime;
                    double x          = Convert.ToDouble(input[input.Count() - 1].Value.ToString());
                    int    DevHLHHLLT = 0;
                    if ((LimitHH > x && x >= LimitH) || (LimitL >= x && x > LimitLL))
                    {
                        DevHLHHLLT++;
                    }
                    int DevHHT = 0;
                    if (x > LimitHH)
                    {
                        DevHHT++;
                    }
                    int DevHT = 0;
                    if (LimitHH > x && x >= LimitH)
                    {
                        DevHT++;
                    }
                    int DevRPT = 0;
                    if (LimitH > x && x >= LimitRP)
                    {
                        DevRPT++;
                    }
                    int Dev0PT = 0;
                    if (LimitRP > x && x >= LimitOO)
                    {
                        Dev0PT++;
                    }
                    int Dev0NT = 0;
                    if (LimitOO > x && x >= LimitRN)
                    {
                        Dev0NT++;
                    }
                    int DevRNT = 0;
                    if (LimitRN > x && x >= LimitL)
                    {
                        DevRNT++;
                    }
                    int DevLT = 0;
                    if (LimitL > x && x >= LimitLL)
                    {
                        DevLT++;
                    }
                    int DevLLT = 0;
                    if (LimitLL > x)
                    {
                        DevLLT++;
                    }
                    int Dev0HT = 0;
                    if (LimitH > x && x >= LimitOO)
                    {
                        Dev0HT++;
                    }
                    int Dev0L = 0;
                    if (LimitOO > x && x > LimitL)
                    {
                        Dev0L++;
                    }
                    int DevHHLLT = 0;
                    if (x <= LimitLL || x >= LimitHH)
                    {
                        DevHHLLT++;
                    }
                    int DevRPRMHLT = 0;
                    if ((LimitH > x && x >= LimitRP) || (LimitRN >= x && x > LimitL))
                    {
                        DevRPRMHLT++;
                    }
                    int Dev0RPRMT = 0;
                    if (LimitRP > x && x > LimitRN)
                    {
                        Dev0RPRMT++;
                    }
                    int DevHLT = 0;
                    if (LimitH > x && x > LimitL)
                    {
                        DevHLT++;
                    }
                    mDevMessageInClass.DevHLHHLLR     = MathHelper.returnProportionStr(DevHLHHLLT, 1);
                    mDevMessageInClass.DevHHR         = MathHelper.returnProportionStr(DevHHT, 1);
                    mDevMessageInClass.DevHR          = MathHelper.returnProportionStr(DevHT, 1);
                    mDevMessageInClass.DevRPR         = MathHelper.returnProportionStr(DevRPT, 1);
                    mDevMessageInClass.Dev0PR         = MathHelper.returnProportionStr(Dev0PT, 1);
                    mDevMessageInClass.Dev0NR         = MathHelper.returnProportionStr(Dev0NT, 1);
                    mDevMessageInClass.DevRNR         = MathHelper.returnProportionStr(DevRNT, 1);
                    mDevMessageInClass.DevLR          = MathHelper.returnProportionStr(DevLT, 1);
                    mDevMessageInClass.DevLLR         = MathHelper.returnProportionStr(DevLLT, 1);
                    mDevMessageInClass.Dev0HTR        = MathHelper.returnProportionStr(Dev0HT, 1);
                    mDevMessageInClass.Dev0LR         = MathHelper.returnProportionStr(Dev0L, 1);
                    mDevMessageInClass.DevHHLLTR      = MathHelper.returnProportionStr(DevHHLLT, 1);
                    mDevMessageInClass.DevRPRMHLTR    = MathHelper.returnProportionStr(DevRPRMHLT, 1);
                    mDevMessageInClass.Dev0RPRMTR     = MathHelper.returnProportionStr(Dev0RPRMT, 1);
                    mDevMessageInClass.DevHLTR        = MathHelper.returnProportionStr(DevHLT, 1);
                    mDevMessageInClass.UpdateTime     = input[0].Timestamp.ToString("yyyy-MM-dd HH:mm");
                    mDevMessageInClass.EffectiveCount = "1";
                }
                else
                {
                    MDevLimitShtClass mDevClass = new MDevLimitShtClass();
                    mDevClass.id             = Convert.ToInt32(ds.Tables[0].Rows[0]["id"].ToString());
                    mDevClass.DevHLHHLLR     = ds.Tables[0].Rows[0]["DevHLHHLLR"].ToString();
                    mDevClass.DevHHR         = ds.Tables[0].Rows[0]["DevHHR"].ToString();
                    mDevClass.DevHR          = ds.Tables[0].Rows[0]["DevHR"].ToString();
                    mDevClass.DevRPR         = ds.Tables[0].Rows[0]["DevRPR"].ToString();
                    mDevClass.Dev0PR         = ds.Tables[0].Rows[0]["Dev0PR"].ToString();
                    mDevClass.Dev0NR         = ds.Tables[0].Rows[0]["Dev0NR"].ToString();
                    mDevClass.DevRNR         = ds.Tables[0].Rows[0]["DevRNR"].ToString();
                    mDevClass.DevLR          = ds.Tables[0].Rows[0]["DevLR"].ToString();
                    mDevClass.DevLLR         = ds.Tables[0].Rows[0]["DevLLR"].ToString();
                    mDevClass.Dev0HTR        = ds.Tables[0].Rows[0]["Dev0HTR"].ToString();
                    mDevClass.Dev0LR         = ds.Tables[0].Rows[0]["Dev0LR"].ToString();
                    mDevClass.DevHHLLTR      = ds.Tables[0].Rows[0]["DevHHLLTR"].ToString();
                    mDevClass.DevRPRMHLTR    = ds.Tables[0].Rows[0]["DevRPRMHLTR"].ToString();
                    mDevClass.Dev0RPRMTR     = ds.Tables[0].Rows[0]["Dev0RPRMTR"].ToString();
                    mDevClass.DevHLTR        = ds.Tables[0].Rows[0]["DevHLTR"].ToString();
                    mDevClass.UpdateTime     = ds.Tables[0].Rows[0]["UpdateTime"].ToString();
                    mDevClass.EffectiveCount = ds.Tables[0].Rows[0]["EffectiveCount"].ToString();


                    double x          = Convert.ToDouble(input[input.Count() - 1].Value.ToString());
                    int    DevHLHHLLT = 0;
                    if ((LimitHH > x && x >= LimitH) || (LimitL >= x && x > LimitLL))
                    {
                        DevHLHHLLT++;
                    }
                    int DevHHT = 0;
                    if (x > LimitHH)
                    {
                        DevHHT++;
                    }
                    int DevHT = 0;
                    if (LimitHH > x && x >= LimitH)
                    {
                        DevHT++;
                    }
                    int DevRPT = 0;
                    if (LimitH > x && x >= LimitRP)
                    {
                        DevRPT++;
                    }
                    int Dev0PT = 0;
                    if (LimitRP > x && x >= LimitOO)
                    {
                        Dev0PT++;
                    }
                    int Dev0NT = 0;
                    if (LimitOO > x && x >= LimitRN)
                    {
                        Dev0NT++;
                    }
                    int DevRNT = 0;
                    if (LimitRN > x && x >= LimitL)
                    {
                        DevRNT++;
                    }
                    int DevLT = 0;
                    if (LimitL > x && x >= LimitLL)
                    {
                        DevLT++;
                    }
                    int DevLLT = 0;
                    if (LimitLL > x)
                    {
                        DevLLT++;
                    }
                    int Dev0HT = 0;
                    if (LimitH > x && x >= LimitOO)
                    {
                        Dev0HT++;
                    }
                    int Dev0L = 0;
                    if (LimitOO > x && x > LimitL)
                    {
                        Dev0L++;
                    }
                    int DevHHLLT = 0;
                    if (x <= LimitLL || x >= LimitHH)
                    {
                        DevHHLLT++;
                    }
                    int DevRPRMHLT = 0;
                    if ((LimitH > x && x >= LimitRP) || (LimitRN >= x && x > LimitL))
                    {
                        DevRPRMHLT++;
                    }
                    int Dev0RPRMT = 0;
                    if (LimitRP > x && x > LimitRN)
                    {
                        Dev0RPRMT++;
                    }
                    int DevHLT = 0;
                    if (LimitH > x && x > LimitL)
                    {
                        DevHLT++;
                    }
                    int effectiveCount = Convert.ToInt32(mDevClass.EffectiveCount);
                    mDevMessageInClass.DevHLHHLLR     = MathHelper.returnProportionUpdateStr(DevHLHHLLT, effectiveCount, mDevClass.DevHLHHLLR);
                    mDevMessageInClass.DevHHR         = MathHelper.returnProportionUpdateStr(DevHHT, effectiveCount, mDevClass.DevHHR);
                    mDevMessageInClass.DevHR          = MathHelper.returnProportionUpdateStr(DevHT, effectiveCount, mDevClass.DevHR);
                    mDevMessageInClass.DevRPR         = MathHelper.returnProportionUpdateStr(DevRPT, effectiveCount, mDevClass.DevRPR);
                    mDevMessageInClass.Dev0PR         = MathHelper.returnProportionUpdateStr(Dev0PT, effectiveCount, mDevClass.Dev0PR);
                    mDevMessageInClass.Dev0NR         = MathHelper.returnProportionUpdateStr(Dev0NT, effectiveCount, mDevClass.Dev0NR);
                    mDevMessageInClass.DevRNR         = MathHelper.returnProportionUpdateStr(DevRNT, effectiveCount, mDevClass.DevRNR);
                    mDevMessageInClass.DevLR          = MathHelper.returnProportionUpdateStr(DevLT, effectiveCount, mDevClass.DevLR);
                    mDevMessageInClass.DevLLR         = MathHelper.returnProportionUpdateStr(DevLLT, effectiveCount, mDevClass.DevLLR);
                    mDevMessageInClass.Dev0HTR        = MathHelper.returnProportionUpdateStr(Dev0HT, effectiveCount, mDevClass.Dev0HTR);
                    mDevMessageInClass.Dev0LR         = MathHelper.returnProportionUpdateStr(Dev0L, effectiveCount, mDevClass.Dev0LR);
                    mDevMessageInClass.DevHHLLTR      = MathHelper.returnProportionUpdateStr(DevHHLLT, effectiveCount, mDevClass.DevHHLLTR);
                    mDevMessageInClass.DevRPRMHLTR    = MathHelper.returnProportionUpdateStr(DevRPRMHLT, effectiveCount, mDevClass.DevRPRMHLTR);
                    mDevMessageInClass.Dev0RPRMTR     = MathHelper.returnProportionUpdateStr(Dev0RPRMT, effectiveCount, mDevClass.Dev0RPRMTR);
                    mDevMessageInClass.DevHLTR        = MathHelper.returnProportionUpdateStr(DevHLT, effectiveCount, mDevClass.DevHLTR);
                    mDevMessageInClass.UpdateTime     = input[0].Timestamp.ToString("yyyy-MM-dd HH:mm");
                    mDevMessageInClass.EffectiveCount = (effectiveCount + 1).ToString();
                    mDevMessageInClass.id             = mDevClass.id;
                }
                bool isok = BLL.AlgorithmBLL.insertMDevLimitSft(mDevMessageInClass, isNewAdd);
                if (isok)
                {
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }
                else
                {
                    _fatalFlag = true;
                    _fatalInfo = "MPVBasePlusSft录入数据失败";
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }
            }
            catch (Exception ex)
            {
                //计算中出任何错误,则需要记录log
                //LogHelper.Write(LogType.Error, "计算模块错误!");
                //记录计算模块的名称、当前标签、起始时间、结束时间
                //string moduleInfo = string.Format("——计算模块的名称是:{0},当前计算源标签是:{1},计算起始时间是:{2},计算结束时间是:{3}。", calcuInfo.fmodulename, calcuInfo.sourcetagname, calcuinfo.fstarttime.ToString(), calcuinfo.fendtime.ToString());
                //LogHelper.Write(LogType.Error, moduleInfo);
                //计算引擎报错具体信息
                //string errInfo = string.Format("——具体报错信息:{0}。", ex.ToString());
                //LogHelper.Write(LogType.Error, errInfo);
                //返回null供计算引擎处理
                _fatalFlag = true;
                _fatalInfo = ex.ToString();
                return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
            }
        }
コード例 #4
0
        public static Results Calcu(List <PValue>[] inputs, CalcuInfo calcuinfo)
        {
            //公用变量
            bool   _errorFlag   = false;
            string _errorInfo   = "";
            bool   _warningFlag = false;
            string _warningInfo = "";
            bool   _fatalFlag   = false;
            string _fatalInfo   = "";

            int i;

            //0输出初始化:该算法如果没有有效输入值(inputs为null)或者输入值得有效值为null,给出的计算结果。值为0,计算标志位为StatusConst.InputIsNull
            List <PValue>[] results = new List <PValue> [36];
            for (i = 0; i < results.Length; i++)
            {
                results[i] = new List <PValue>();
            }

            try
            {
                //读取参数

                MDevLimitShtClass mDevMessageInClass = new MDevLimitShtClass();
                double            LimitHH, LimitH, LimitRP, LimitOO, LimitRN, LimitL, LimitLL;
                string            mode;
                string[]          paras = calcuinfo.fparas.Split(';');

                LimitHH = int.Parse(paras[0]);
                LimitH  = int.Parse(paras[1]);
                LimitRP = double.Parse(paras[2]);
                LimitOO = double.Parse(paras[3]);
                LimitRN = double.Parse(paras[4]);
                LimitL  = double.Parse(paras[5]);
                LimitLL = double.Parse(paras[6]);
                string type             = calcuinfo.fsourtagids[0].ToString();

                List <PValue> input     = new List <PValue>();
                foreach (List <PValue> item in inputs)
                {
                    input.Add(item[0]);
                }


                //0.1、输入处理:过滤后结果。
                //——如果去除了截止时刻点,过滤后长度小于1(计算要求至少有一个有效数据),则直接返回null
                //——如果没取除截止时刻点,过滤后长度小于2(计算要求至少有一个有效数据和一个截止时刻值)
                if (input.Count < 1)
                {
                    _warningFlag = true;
                    _warningInfo = "对应时间段内的源数据状态位全部异常。";
                    return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
                }
                MetalTemperatureClass newClass = MultiMetalTemperature.MultiMetalTemperatureCaculate(input, LimitHH, LimitH, LimitRP, LimitOO, LimitRN, LimitL, LimitLL);
                results[0].Add(new PValue(Convert.ToDouble(newClass.Min), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[1].Add(new PValue(Convert.ToDateTime(newClass.MinN).Ticks, calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[2].Add(new PValue(Convert.ToDouble(newClass.Max), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[3].Add(new PValue(Convert.ToDateTime(newClass.MaxN).Ticks, calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[4].Add(new PValue(Convert.ToDouble(newClass.Avg), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[5].Add(new PValue(Convert.ToDouble(newClass.AvgN), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[6].Add(new PValue(Convert.ToDouble(newClass.dX), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[7].Add(new PValue(Convert.ToDouble(newClass.dXNR), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[8].Add(new PValue(Convert.ToDouble(newClass.dMaxB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[9].Add(new PValue(Convert.ToDouble(newClass.dMaxBN), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[10].Add(new PValue(Convert.ToDouble(newClass.sigma), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[11].Add(new PValue(Convert.ToDouble(newClass.lk), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[12].Add(new PValue(Convert.ToDouble(newClass.lb), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[13].Add(new PValue(Convert.ToDouble(newClass.lr), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[14].Add(new PValue(Convert.ToDouble(newClass.qa), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[15].Add(new PValue(Convert.ToDouble(newClass.qb), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[16].Add(new PValue(Convert.ToDouble(newClass.qc), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[17].Add(new PValue(Convert.ToDouble(newClass.qr), calcuinfo.fstarttime, calcuinfo.fendtime, 0));

                results[18].Add(new PValue(Convert.ToDouble(newClass.Bulge), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[19].Add(new PValue(Convert.ToDouble(newClass.BulgeN), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[20].Add(new PValue(Convert.ToDouble(newClass.Cave), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[21].Add(new PValue(Convert.ToDouble(newClass.CaveN), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[22].Add(new PValue(Convert.ToDouble(newClass.HHG), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[23].Add(new PValue(Convert.ToDouble(newClass.HHHB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[24].Add(new PValue(Convert.ToDouble(newClass.HRPB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[25].Add(new PValue(Convert.ToDouble(newClass.RP0B), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[26].Add(new PValue(Convert.ToDouble(newClass.RM0B), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[27].Add(new PValue(Convert.ToDouble(newClass.RMLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[28].Add(new PValue(Convert.ToDouble(newClass.LLLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[29].Add(new PValue(Convert.ToDouble(newClass.LLL), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[30].Add(new PValue(Convert.ToDouble(newClass.RPRMB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[31].Add(new PValue(Convert.ToDouble(newClass.HLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[32].Add(new PValue(Convert.ToDouble(newClass.HHHLLLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[33].Add(new PValue(Convert.ToDouble(newClass.HHLLGL), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[34].Add(new PValue(Convert.ToDouble(newClass.HG), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                results[35].Add(new PValue(Convert.ToDouble(newClass.LL), calcuinfo.fstarttime, calcuinfo.fendtime, 0));
                return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
            }
            catch (Exception ex)
            {
                //计算中出任何错误,则需要记录log
                //LogHelper.Write(LogType.Error, "计算模块错误!");
                //记录计算模块的名称、当前标签、起始时间、结束时间
                //string moduleInfo = string.Format("——计算模块的名称是:{0},当前计算源标签是:{1},计算起始时间是:{2},计算结束时间是:{3}。", calcuInfo.fmodulename, calcuInfo.sourcetagname, calcuinfo.fstarttime.ToString(), calcuinfo.fendtime.ToString());
                //LogHelper.Write(LogType.Error, moduleInfo);
                //计算引擎报错具体信息
                //string errInfo = string.Format("——具体报错信息:{0}。", ex.ToString());
                //LogHelper.Write(LogType.Error, errInfo);
                //返回null供计算引擎处理
                _fatalFlag = true;
                _fatalInfo = ex.ToString();
                return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo));
            }
        }