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 bool IsIgnoreAble(string tagname)
{
return false;
}
///
///
///
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);
//每天的汇总
var daySum = this._dispatchAnaCalc.CalcSumData(allHourRequests,true, out error_info);
if (daySum == null || daySum.Qt <= 0)
{
error_info = "青草沙,调度分析失败,原因:" + error_info;
return null;
}
//计算每月的汇总
Dto.MonthCalcuResult monthSum = new Dto.MonthCalcuResult();
monthSum.Month = monthRecord.Month;
monthSum.Qt = Math.Round(daySum.Qt * dayNumber, 1);
monthSum.Dt = Math.Round(daySum.Dt * dayNumber, 2);
monthSum.WP = Math.Round(daySum.WP, 3);
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;
}
}
}