public static EquBaseClass longEquBase(List <EquBaseClass> valueList) { try { EquBaseClass returnClass = new EquBaseClass(); double equMin = Convert.ToDouble(valueList[0].equMin); string equMinN = valueList[0].equMinP; string equMinT = valueList[0].equMinT; double equMax = Convert.ToDouble(valueList[0].equMax); string equMaxN = valueList[0].equMaxP; string equMaxT = valueList[0].equMaxT; double equAvgSum = 0; List <string> equAvgNList = new List <string>(); double equBulge = Convert.ToDouble(valueList[0].equBulge); string equBulgeN = valueList[0].equBulgeP; double equCave = Convert.ToDouble(valueList[0].equCave); string equCaveN = valueList[0].equCaveP; double equHHG = 0; double equHG = 0; double equHHHB = 0; double equHRPB = 0; double equRP0B = 0; double equRM0B = 0; double equRMLB = 0; double equLLLB = 0; double equLL = 0; double equLLL = 0; double equRPRMB = 0; double equHLB = 0; double equHHHLLLB = 0; double equHHLLGL = 0; foreach (EquBaseClass item in valueList) { if (equMin > Convert.ToDouble(item.equMin)) { equMin = Convert.ToDouble(item.equMin); equMinN = item.equMinP; equMinT = item.equMinT; } if (equMax < Convert.ToDouble(item.equMax)) { equMax = Convert.ToDouble(item.equMax); equMaxN = item.equMaxP; equMaxT = item.equMaxT; } equAvgSum += Convert.ToDouble(item.equAvg); if (equBulge < Convert.ToDouble(item.equBulge)) { equBulge = Convert.ToDouble(item.equBulge); equBulgeN = item.equBulgeP; } if (equCave > Convert.ToDouble(item.equCave)) { equCave = Convert.ToDouble(item.equCave); equCaveN = item.equCaveP; } equHHG += Convert.ToDouble(item.equHHG); equHG += Convert.ToDouble(item.equHG); equHHHB += Convert.ToDouble(item.equHHHB); equHRPB += Convert.ToDouble(item.equHRPB); equRP0B += Convert.ToDouble(item.equRP0B); equRM0B += Convert.ToDouble(item.equRM0B); equRMLB += Convert.ToDouble(item.equRMLB); equLLLB += Convert.ToDouble(item.equLLLB); equLL += Convert.ToDouble(item.equLL); equLLL += Convert.ToDouble(item.equLLL); equRPRMB += Convert.ToDouble(item.equRPRMB); equHLB += Convert.ToDouble(item.equHLB); equHHHLLLB += Convert.ToDouble(item.equHHHLLLB); equHHLLGL += Convert.ToDouble(item.equHHLLGL); } returnClass.equMin = equMin.ToString(); returnClass.equMinP = equMinN; returnClass.equMinT = equMinT; returnClass.equMax = equMax.ToString(); returnClass.equMaxP = equMaxN; returnClass.equMaxT = equMaxT; returnClass.equAvg = Math.Round(equAvgSum / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equAvgCP = valueList.GroupBy(x => x.equAvgCP).OrderBy(y => y.Count()).First().Key; returnClass.equAvgFP = valueList.GroupBy(x => x.equAvgFP).OrderBy(y => y.Count()).First().Key; returnClass.equdX = (equMax - equMin).ToString(); returnClass.equSDMaxP = valueList.GroupBy(x => x.equSDMaxP).OrderBy(y => y.Count()).First().Key; returnClass.equBulge = equBulge.ToString(); returnClass.equBulgeP = equBulgeN; returnClass.equCave = equCave.ToString(); returnClass.equCaveP = equCaveN; returnClass.equHHG = Math.Round(equHHG / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHG = Math.Round(equHG / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHHB = Math.Round(equHHHB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHRPB = Math.Round(equHRPB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRP0B = Math.Round(equRP0B / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRM0B = Math.Round(equRM0B / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRMLB = Math.Round(equRMLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLLLB = Math.Round(equLLLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLL = Math.Round(equLL / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLLL = Math.Round(equLLL / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRPRMB = Math.Round(equRPRMB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHLB = Math.Round(equHLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHHLLLB = Math.Round(equHHHLLLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHLLGL = Math.Round(equHHLLGL / Convert.ToDouble(valueList.Count), 3).ToString(); return(returnClass); } catch (Exception ex) { throw ex; } }
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> [27]; for (i = 0; i < results.Length; i++) { results[i] = new List <PValue>(); } try { //读取参数 string mode; string[] paras = calcuinfo.fparas.Split(';'); mode = paras[0]; EquBaseClass newClass = new EquBaseClass(); if (mode == "S") { List <MetalTemperatureClass> valueList = new List <MetalTemperatureClass>(); int l = 1; foreach (List <PValue> item in inputs) { MetalTemperatureClass inClass = new MetalTemperatureClass(); inClass.point = l++; inClass.Min = item[0].Value.ToString(); inClass.MinN = item[1].Value.ToString(); inClass.Max = item[2].Value.ToString(); inClass.MaxN = item[3].Value.ToString(); inClass.Avg = item[4].Value.ToString(); inClass.AvgN = item[5].Value.ToString(); inClass.dX = item[6].Value.ToString(); inClass.dXNR = item[7].Value.ToString(); inClass.dMaxB = item[8].Value.ToString(); inClass.dMaxBN = item[9].Value.ToString(); inClass.sigma = item[10].Value.ToString(); inClass.lk = item[11].Value.ToString(); inClass.lb = item[12].Value.ToString(); inClass.lr = item[13].Value.ToString(); inClass.qa = item[14].Value.ToString(); inClass.qb = item[15].Value.ToString(); inClass.qc = item[16].Value.ToString(); inClass.qr = item[17].Value.ToString(); inClass.Bulge = item[18].Value.ToString(); inClass.BulgeN = item[19].Value.ToString(); inClass.Cave = item[20].Value.ToString(); inClass.CaveN = item[21].Value.ToString(); inClass.HHG = item[22].Value.ToString(); inClass.HHHB = item[23].Value.ToString(); inClass.HRPB = item[24].Value.ToString(); inClass.RP0B = item[25].Value.ToString(); inClass.RM0B = item[26].Value.ToString(); inClass.RMLB = item[27].Value.ToString(); inClass.LLLB = item[28].Value.ToString(); inClass.LLL = item[29].Value.ToString(); inClass.RPRMB = item[30].Value.ToString(); inClass.HLB = item[31].Value.ToString(); inClass.HHHLLLB = item[32].Value.ToString(); inClass.HHLLGL = item[33].Value.ToString(); inClass.HG = item[34].Value.ToString(); inClass.LL = item[35].Value.ToString(); inClass.effectiveDateTime = item[36].Value.ToString(); valueList.Add(inClass); } if (valueList.Count < 1) { _warningFlag = true; _warningInfo = "对应时间段内的源数据状态位全部异常。"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } newClass = EquBaseCaculate.shortEquBase(valueList); } else { List <EquBaseClass> valueList = new List <EquBaseClass>(); foreach (List <PValue> item in inputs) { EquBaseClass inClass = new EquBaseClass(); inClass.equMin = item[0].Value.ToString(); inClass.equMinP = item[1].Value.ToString(); inClass.equMinT = item[2].Value.ToString(); inClass.equMax = item[3].Value.ToString(); inClass.equMaxP = item[4].Value.ToString(); inClass.equMaxT = item[5].Value.ToString(); inClass.equAvg = item[6].Value.ToString(); inClass.equAvgCP = item[7].Value.ToString(); inClass.equAvgFP = item[8].Value.ToString(); inClass.equdX = item[9].Value.ToString(); inClass.equSDMaxP = item[10].Value.ToString(); inClass.equBulge = item[11].Value.ToString(); inClass.equBulgeP = item[12].Value.ToString(); inClass.equCave = item[13].Value.ToString(); inClass.equCaveP = item[14].Value.ToString(); inClass.equHHG = item[15].Value.ToString(); inClass.equHG = item[16].Value.ToString(); inClass.equHHHB = item[17].Value.ToString(); inClass.equHRPB = item[18].Value.ToString(); inClass.equRP0B = item[19].Value.ToString(); inClass.equRM0B = item[20].Value.ToString(); inClass.equRMLB = item[21].Value.ToString(); inClass.equLLLB = item[22].Value.ToString(); inClass.equLL = item[23].Value.ToString(); inClass.equLLL = item[24].Value.ToString(); inClass.equRPRMB = item[25].Value.ToString(); inClass.equHLB = item[26].Value.ToString(); inClass.equHHHLLLB = item[27].Value.ToString(); inClass.equHHLLGL = item[28].Value.ToString(); inClass.equHHRMaxP = item[29].Value.ToString(); inClass.equLLRMaxP = item[30].Value.ToString(); inClass.equHHLLRMaxP = item[31].Value.ToString(); valueList.Add(inClass); } if (valueList.Count < 1) { _warningFlag = true; _warningInfo = "对应时间段内的源数据状态位全部异常。"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } newClass = EquBaseCaculate.longEquBase(valueList); } results[0].Add(new PValue(Convert.ToDouble(newClass.equMin), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equMinP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equMinT), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equMax), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equMaxP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equMaxT), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equAvg), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equAvgCP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equAvgFP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equdX), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equSDMaxP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equBulge), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equBulgeP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equCave), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equCaveP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHG), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHG), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHHB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHRPB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equRP0B), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equRM0B), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equRMLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equLLLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equLL), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equLLL), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equRPRMB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHHLLLB), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHLLGL), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHRMaxP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equLLRMaxP), calcuinfo.fstarttime, calcuinfo.fendtime, 0)); results[0].Add(new PValue(Convert.ToDouble(newClass.equHHLLRMaxP), 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)); } }
public static EquBaseClass shortEquBase(List <MetalTemperatureClass> valueList) { try { EquBaseClass returnClass = new EquBaseClass(); double equMin = Convert.ToDouble(valueList[0].Min); string equMinN = valueList[0].MinN; string equMinT = valueList[0].effectiveDateTime; double equMax = Convert.ToDouble(valueList[0].Max); string equMaxN = valueList[0].MaxN; string equMaxT = valueList[0].effectiveDateTime; double equAvgSum = 0; List <string> equAvgNList = new List <string>(); double equBulge = Convert.ToDouble(valueList[0].Bulge); string equBulgeN = valueList[0].BulgeN; double equCave = Convert.ToDouble(valueList[0].Cave); string equCaveN = valueList[0].CaveN; double equHHG = 0; double equHG = 0; double equHHHB = 0; double equHRPB = 0; double equRP0B = 0; double equRM0B = 0; double equRMLB = 0; double equLLLB = 0; double equLL = 0; double equLLL = 0; double equRPRMB = 0; double equHLB = 0; double equHHHLLLB = 0; double equHHLLGL = 0; int equHHRMaxP = valueList[0].point; int equLLRMaxP = valueList[0].point; int equHHLLRMaxP = valueList[0].point; double equHHRMax = Convert.ToDouble(valueList[0].HHG); double equLLRMax = Convert.ToDouble(valueList[0].LLL); double equHHLLRMax = Convert.ToDouble(valueList[0].HHLLGL); int equSDMaxP = valueList[0].point; double equSDMax = Convert.ToDouble(valueList[0].dX); foreach (MetalTemperatureClass item in valueList) { if (equMin > Convert.ToDouble(item.Min)) { equMin = Convert.ToDouble(item.Min); equMinN = item.MinN; equMinT = item.effectiveDateTime; } if (equMax < Convert.ToDouble(item.Max)) { equMax = Convert.ToDouble(item.Max); equMaxN = item.MaxN; equMaxT = item.effectiveDateTime; } equAvgSum += Convert.ToDouble(item.Avg); equAvgNList.Add(item.AvgN); if (equBulge < Convert.ToDouble(item.Bulge)) { equBulge = Convert.ToDouble(item.Bulge); equBulgeN = item.BulgeN; } if (equCave > Convert.ToDouble(item.Cave)) { equCave = Convert.ToDouble(item.Cave); equCaveN = item.CaveN; } equHHG += Convert.ToDouble(item.HHG); equHG += Convert.ToDouble(item.HG); equHHHB += Convert.ToDouble(item.HHHB); equHRPB += Convert.ToDouble(item.HRPB); equRP0B += Convert.ToDouble(item.RP0B); equRM0B += Convert.ToDouble(item.RM0B); equRMLB += Convert.ToDouble(item.RMLB); equLLLB += Convert.ToDouble(item.LLLB); equLL += Convert.ToDouble(item.LL); equLLL += Convert.ToDouble(item.LLL); equRPRMB += Convert.ToDouble(item.RPRMB); equHLB += Convert.ToDouble(item.HLB); equHHHLLLB += Convert.ToDouble(item.HHHLLLB); equHHLLGL += Convert.ToDouble(item.HHLLGL); if (equHHRMax < Convert.ToDouble(item.HHG)) { equHHRMax = Convert.ToDouble(item.HHG); equHHRMaxP = item.point; } if (equLLRMax < Convert.ToDouble(item.LLL)) { equLLRMax = Convert.ToDouble(item.LLL); equLLRMaxP = item.point; } if (equHHLLRMax < Convert.ToDouble(item.HHLLGL)) { equHHLLRMax = Convert.ToDouble(item.HHLLGL); equHHLLRMaxP = item.point; } if (equSDMax < Convert.ToDouble(item.dX)) { equSDMax = Convert.ToDouble(item.dX); equSDMaxP = item.point; } } returnClass.equMin = equMin.ToString(); returnClass.equMinP = equMinN; returnClass.equMinT = equMinT; returnClass.equMax = equMax.ToString(); returnClass.equMaxP = equMaxN; returnClass.equMaxT = equMaxT; returnClass.equAvg = Math.Round(equAvgSum / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equAvgCP = equAvgNList.GroupBy(x => x).OrderBy(y => y.Count()).First().Key; returnClass.equAvgFP = equAvgNList.GroupBy(x => x).OrderByDescending(y => y.Count()).First().Key; returnClass.equdX = (equMax - equMin).ToString(); returnClass.equSDMaxP = equSDMaxP.ToString(); returnClass.equdXR = ((equMax - equMin) / (Math.Abs(Convert.ToDouble(equMaxN) - Convert.ToDouble(equMinN)) + 1)).ToString(); returnClass.equBulge = equBulge.ToString(); returnClass.equBulgeP = equBulgeN; returnClass.equCave = equCave.ToString(); returnClass.equCaveP = equCaveN; returnClass.equHHG = Math.Round(equHHG / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHG = Math.Round(equHG / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHHB = Math.Round(equHHHB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHRPB = Math.Round(equHRPB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRP0B = Math.Round(equRP0B / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRM0B = Math.Round(equRM0B / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRMLB = Math.Round(equRMLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLLLB = Math.Round(equLLLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLL = Math.Round(equLL / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equLLL = Math.Round(equLLL / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equRPRMB = Math.Round(equRPRMB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHLB = Math.Round(equHLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHHLLLB = Math.Round(equHHHLLLB / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHLLGL = Math.Round(equHHLLGL / Convert.ToDouble(valueList.Count), 3).ToString(); returnClass.equHHRMaxP = equHHRMaxP.ToString(); returnClass.equLLRMaxP = equLLRMaxP.ToString(); returnClass.equHHLLRMaxP = equHHLLRMaxP.ToString(); return(returnClass); } catch (Exception ex) { throw ex; } }