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
|
{
|
/// <summary>
|
/// 计划分析计算器接口
|
/// </summary>
|
public class PlanAnaBaseCalculator
|
{
|
/// <summary>
|
///
|
/// </summary>
|
protected IStation.Calculation.DispatchAna.IOptAnaCalc _dispatchAnaCalc = null;
|
|
/// <summary>
|
///
|
/// </summary>
|
protected long _corpID = 0;
|
/// <summary>
|
///
|
/// </summary>
|
protected long _stationID = 0;
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="corpID"></param>
|
/// <param name="stationID"></param>
|
public void SetStationID(long corpID,long stationID)
|
{
|
this._corpID = corpID;
|
this._stationID = stationID;
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="tagname"></param>
|
/// <returns></returns>
|
public virtual bool Is液位Monitor(string tagname)
|
{
|
return false;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="tagname"></param>
|
/// <returns></returns>
|
public virtual string GetMonitorNameByTag(string tagname)
|
{
|
return "未知测点";
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="tagname"></param>
|
/// <returns></returns>
|
public virtual bool IsIgnoreAble(string tagname)
|
{
|
return false;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
public virtual List<Dto.MonthCalcuResult> Calc (
|
Model.Station station,int factoryId,
|
List<Dto.MonthSumRecord> allMonthSumRecord,
|
out string error_info)
|
{
|
if(_dispatchAnaCalc == null)
|
{
|
//由继承类设置调度辅助类
|
error_info = "未构建DispatchAna.IOptAnaCalc";
|
return null;
|
}
|
int year = DateTime.Now.Year;
|
|
List<Dto.MonthCalcuResult> monthRecordList = new List<Dto.MonthCalcuResult>();
|
foreach (var monthRecord in allMonthSumRecord)
|
{
|
//构建每小时的参数
|
List<IStation.Calculation.DispatchAna.Model.HourRequest> 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;
|
error_info = this._dispatchAnaCalc.CalcSumData(monthRecord.Month, allHourRequests, true, out daySum);
|
if (!string.IsNullOrEmpty(error_info))
|
{
|
error_info = String.Format( "{0}月,调度分析失败,原因:{1}" ,monthRecord.Month, error_info);
|
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;
|
}
|
|
/// <summary>
|
/// 构建每小时的参数
|
/// </summary>
|
/// <param name="HourSumRecords"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
protected virtual List<IStation.Calculation.DispatchAna.Model.HourRequest> BuildHourRequest(
|
List<IStation.Dto.HourSumRecord> HourSumRecords,
|
out string error_info)
|
{
|
List<IStation.Calculation.DispatchAna.Model.HourRequest> allHourRequests = new List<DispatchAna.Model.HourRequest>();
|
|
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;
|
}
|
|
/// <summary>
|
/// 根据三高提供的参数,构建调度分析所需的参数, 每个泵站, 这个地方都不一样
|
/// </summary>
|
/// <param name="allRecords_hour"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
protected virtual DispatchAna.Model.RequestParasComplex BuildDispatchAnaRequest(
|
List<IStation.Dto.MonitorRecord4SG> allRecords_hour,
|
out string error_info)
|
{
|
error_info = "未实例化BuildDispatchAnaRequest";
|
return null;
|
}
|
|
}
|
}
|