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> [67]; 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 { //0、输入 List <PValue> input = new List <PValue>(); //0.1、输入处理:输入长度。当输入为空时,则输出项也为空. if (inputs == null || inputs.Length == 0 || inputs[0] == null) { return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } else { input = inputs[0]; } //0.2、输入处理:截止时刻值。该算法不需要截止时刻点参与计算。 if (input.Count > 1) { input.RemoveAt(input.Count - 1); } //0.3、输入处理:标志位。该算法考虑标志位不为0的情况,先过滤这些点。 for (i = input.Count - 1; i >= 0; i--) { if (input[i].Status != 0) { input.RemoveAt(i); } } //0.4、输入处理:过滤后结果。 //——如果去除了截止时刻点,过滤后长度小于1(计算要求至少有一个有效数据),则直接返回null //——如果没取除截止时刻点,过滤后长度小于2(计算要求至少有一个有效数据和一个截止时刻值) if (input.Count < 1) { _warningFlag = true; _warningInfo = "对应时间段内的源数据状态位全部异常。"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } //读取参数 double N1, N2, N3, k, b, stbl, nostbl; string mode; string[] paras = calcuinfo.fparas.Split(';'); N1 = int.Parse(paras[0]); N2 = int.Parse(paras[1]); N3 = double.Parse(paras[2]); k = double.Parse(paras[3]); b = double.Parse(paras[4]); stbl = double.Parse(paras[5]); nostbl = double.Parse(paras[6]); //tagId string type = calcuinfo.fsourtagids[0].ToString(); #region 短周期计算 //短周期算法 //将输入input(分钟数据) 转化成 List<MPVBaseMessageInBadClass> List <MPVBaseMessageInBadClass> valueList = new List <MPVBaseMessageInBadClass>(); valueList = Helper.AlgorithmHelper.transformValue(input); #endregion #region 短周期算法输出 // //调用短周期算法数据是把每分钟的数据结果进行处理 小时级别时间数据运算 MPVBaseMessageOutBadClass res = MPVBaseCaculate.shortMPVBase(valueList, N1, N2, N3, k, b, stbl, nostbl); string year = string.Empty; string month = string.Empty; string day = string.Empty; string hour = string.Empty; DateTime dt = Convert.ToDateTime(valueList[valueList.Count - 1].valueDate); year = dt.Year.ToString(); month = dt.Month.ToString(); day = dt.Day.ToString(); hour = dt.Hour.ToString(); //计算结果存入数据库 bool isok = BLL.AlgorithmBLL.insertMPVBase(res, type, year, month, day, hour); if (isok) { return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } else { _fatalFlag = true; _fatalInfo = "MPVBase短周期数据录入数据库是失败"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } #endregion } 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(DataSet 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> [67]; 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; string[] paras = calcuinfo.fparas.Split(';'); N1 = int.Parse(paras[0]); N2 = int.Parse(paras[1]); N3 = double.Parse(paras[2]); k = double.Parse(paras[3]); b = double.Parse(paras[4]); stbl = double.Parse(paras[5]); nostbl = double.Parse(paras[6]); string year = calcuinfo.fstarttime.Year.ToString(); string month = calcuinfo.fstarttime.Month.ToString(); string day = calcuinfo.fstarttime.Day.ToString(); string hour = "0"; //tagId string tagid = calcuinfo.fsourtagids[0].ToString(); //获取短周期数据 DataSet ds = BLL.AlgorithmBLL.getShortData("psl_mpvbase", tagid, year, month, day); //0.1、输入处理:过滤后结果。 //——如果去除了截止时刻点,过滤后长度小于1(计算要求至少有一个有效数据),则直接返回null //——如果没取除截止时刻点,过滤后长度小于2(计算要求至少有一个有效数据和一个截止时刻值) if (ds == null || ds.Tables.Count == 0 || ds.Tables[0] == null || ds.Tables[0].Rows.Count < 1) { _warningFlag = true; _warningInfo = "对应时间段内的源数据状态位全部异常。"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } List <MPVBaseMessageOutClass> effectiveData = new DatatableToEntity <MPVBaseMessageOutClass>().FillModel(ds.Tables[0]); #region 长周期算法输出 // //调用短周期算法数据是把每分钟的数据结果进行处理 小时级别时间数据运算 MPVBaseMessageOutClass res = MPVBaseCaculate.longMPVBase(effectiveData, N1, N2, N3, k, b, stbl, nostbl); //计算结果存入数据库 bool isok = BLL.AlgorithmBLL.insertLongMPVBase(res, tagid, year, month, day, hour); if (isok) { return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } else { _fatalFlag = true; _fatalInfo = "MPVBase长周期数据录入数据库是失败"; return(new Results(results, _errorFlag, _errorInfo, _warningFlag, _warningInfo, _fatalFlag, _fatalInfo)); } #endregion } 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)); } }