using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.Application; using IStation.Dto; namespace IStation.Calculation { /// /// 计划分析计算器接口 /// public class PlanAnaBaseCalculator { /// /// /// protected IStation.Calculation.DispatchAna.IOptAnaCalc _dispatchAnaCalc = null; /// /// /// protected long _corpID = 0; /// /// /// protected long _stationID = 0; /// /// /// /// /// public void SetStationID(long corpID,long stationID) { this._corpID = corpID; this._stationID = stationID; } /// /// /// /// /// public virtual bool Is液位Monitor(string tagname) { return false; } /// /// /// /// /// public virtual string GetMonitorNameByTag(string tagname) { return "未知测点"; } /// /// /// /// /// public virtual bool IsIgnoreAble(string tagname) { return false; } /// /// 修正 /// /// /// /// public virtual double CorrectMonitorValue(string tagname, double value) { return value; } /// /// /// public virtual List Calc ( Model.Station station,int factoryId, List allMonthSumRecord, out string error_info) { if(_dispatchAnaCalc == null) { //由继承类设置调度辅助类 error_info = "未构建DispatchAna.IOptAnaCalc"; return null; } int year = DateTime.Now.Year; List monthRecordList = new List(); foreach (var monthRecord in allMonthSumRecord) { //构建每小时的参数 List allHourRequests = BuildHourRequest(monthRecord.HourRecords,out error_info); if(allHourRequests == null || allHourRequests.Count() == 0) { error_info = "构建 HourRequests 失败,原因:" + error_info; return null; } if (!string.IsNullOrEmpty(error_info)) { error_info = "构建 HourRequests 失败,原因:" + error_info; return null; } //一个月的天数 var dayNumber = DateTime.DaysInMonth(year, monthRecord.Month); //每天的汇总 IStation.Calculation.DispatchAna.Model.DaySumData daySum = null; int hour = 0; bool LogAddOriginInfo = false; error_info = this._dispatchAnaCalc.CalcSumData(monthRecord.Month, allHourRequests, true, out daySum,out hour, out LogAddOriginInfo); if (!string.IsNullOrEmpty(error_info)) { if (LogAddOriginInfo) { StringBuilder sInfo = new StringBuilder(); sInfo.AppendFormat("{0}月,调度分析失败,原因:{1}", monthRecord.Month, error_info); var r = allHourRequests[hour]; { if (r.Request.InletPipePara != null) { foreach (var inlet in r.Request.InletPipePara) sInfo.AppendFormat(";进口:{0}", inlet.Value); } if (r.Request.OutletPipePara != null) { foreach (var inlet in r.Request.OutletPipePara) sInfo.AppendFormat(";出口:{0}, {1}", inlet.TargetFlow, inlet.TargetPress); } } error_info = sInfo.ToString(); } return null; } //计算每月的汇总 Dto.MonthCalcuResult monthSum = new Dto.MonthCalcuResult(); monthSum.Month = monthRecord.Month; if (daySum.Qt > 1) { monthSum.Qt = Math.Round(daySum.Qt * dayNumber, 1); monthSum.Dt = Math.Round(daySum.Dt * dayNumber, 2); monthSum.WP = Math.Round(daySum.WP, 3); monthSum.Info = daySum.Info; } else { monthSum.Qt = 0; monthSum.Dt = 0; monthSum.WP = 0; monthSum.Info = "流量全为0"; } monthRecordList.Add(monthSum); } error_info = null; return monthRecordList; } /// /// 构建每小时的参数 /// /// /// /// protected virtual List BuildHourRequest( List HourSumRecords, out string error_info) { List allHourRequests = new List(); for (int i = 0; i <= 23; i++) { var hourSumRecord = new IStation.Calculation.DispatchAna.Model.HourRequest(); hourSumRecord.Hour = i; var allRecords_hour = HourSumRecords[i].Records; hourSumRecord.Request = BuildDispatchAnaRequest(allRecords_hour,out error_info); if(hourSumRecord.Request == null) { return allHourRequests; } allHourRequests.Add(hourSumRecord); } error_info = null; return allHourRequests; } /// /// 根据三高提供的参数,构建调度分析所需的参数, 每个泵站, 这个地方都不一样 /// /// /// /// protected virtual DispatchAna.Model.RequestParasComplex BuildDispatchAnaRequest( List allRecords_hour, out string error_info) { error_info = "未实例化BuildDispatchAnaRequest"; return null; } } }