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