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; } }
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)); } }
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)); } }
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)); } }