| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.IO.Pipelines; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | |
| | | public class CalculatorOptAnaBase: CalculatorBase |
| | | { |
| | | /// <summary> |
| | | /// |
| | | /// 计算最优方案 |
| | | /// </summary> |
| | | /// <param name="complex_request_paras"></param> |
| | | /// <param name="machine_run_status"></param> |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | Dictionary<string, IStation.Calculation.DispatchAna.Model.AnaScheme> _dict = new Dictionary<string, Model.AnaScheme>(); |
| | | /// <summary> |
| | | /// 计算汇总数据 |
| | | /// </summary> |
| | | /// <param name="HourRequests"></param> |
| | | /// <param name="isUseCache">是否用缓存</param> |
| | | /// <param name="error_info"></param> |
| | | /// <returns></returns> |
| | | public virtual IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData( |
| | | List<Model.HourRequest> HourRequests, out string error_info) |
| | | public virtual IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData( |
| | | List<Model.HourRequest> HourRequests, bool isUseCache, out string error_info) |
| | | { |
| | | error_info = null; |
| | | IStation.Calculation.DispatchAna.Model.DaySumData sum = new Model.DaySumData(); |
| | |
| | | foreach (var hourRequest in HourRequests) |
| | | { |
| | | var complex_request_paras = hourRequest.Request; |
| | | |
| | | #region 检查数据 |
| | | if (complex_request_paras.OutletPipePara == null || complex_request_paras.OutletPipePara.Count < 1) |
| | | { |
| | | error_info = string.Format("第{0},分析出错,原因是:{1}", |
| | | error_info = string.Format("{0}时,分析出错,原因是:{1}", |
| | | hourRequest.Hour + 1, "出口管路参数有误, 请确认是否赋值, ERROR 35"); |
| | | return null; |
| | | } |
| | | double target_flow = complex_request_paras.OutletPipePara[0].TargetFlow; |
| | | if (target_flow < 50) |
| | | |
| | | StringBuilder cacheNameBuilder = new StringBuilder(); |
| | | |
| | | double target_flow = 0; |
| | | bool isHaveSetPress = false; |
| | | foreach (var pipe in complex_request_paras.OutletPipePara) |
| | | { |
| | | target_flow += pipe.TargetFlow; |
| | | if (pipe.TargetPress > 0.01) |
| | | { |
| | | isHaveSetPress = true; |
| | | } |
| | | cacheNameBuilder.AppendFormat("Q{0}H{1}", Math.Round(pipe.TargetFlow, 0), Math.Round(pipe.TargetPress, 3)); |
| | | } |
| | | if (target_flow < 50) |
| | | {//检查流量 |
| | | continue; |
| | | } |
| | | |
| | | var result_anaSchemes = CalcSchemes压力(hourRequest.Request, null, out error_info); |
| | | if (result_anaSchemes == null || result_anaSchemes.Count == 0) |
| | | { |
| | | error_info = string.Format("第{0},分析出错,原因是:{1}", hourRequest.Hour + 1, error_info); |
| | | return null; |
| | | if (!isHaveSetPress) |
| | | {//检查压力 |
| | | continue; |
| | | } |
| | | var opt_anaScheme = result_anaSchemes.First(); |
| | | if (complex_request_paras.InletPipePara != null) |
| | | { |
| | | foreach (var wl in complex_request_paras.InletPipePara) |
| | | { |
| | | cacheNameBuilder.AppendFormat("V{0}", Math.Round(wl.Value, 0)); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | //由于循环调取,所以以前分析数据缓存起来 |
| | | var cacheName = cacheNameBuilder.ToString(); |
| | | IStation.Calculation.DispatchAna.Model.AnaScheme opt_anaScheme; |
| | | if (_dict.ContainsKey(cacheName)) |
| | | { |
| | | opt_anaScheme = _dict[cacheName]; |
| | | } |
| | | else |
| | | { |
| | | var result_anaSchemes = CalcSchemes压力(complex_request_paras, null, out error_info); |
| | | if (result_anaSchemes == null || result_anaSchemes.Count == 0) |
| | | { |
| | | if (string.IsNullOrEmpty(error_info)) |
| | | { |
| | | error_info = string.Format("{0}时,分析出错,可能是入参数据不合理,请检查", |
| | | hourRequest.Hour + 1 ); |
| | | } |
| | | else |
| | | { |
| | | error_info = string.Format("{0}时,分析出错,原因是:{1}", |
| | | hourRequest.Hour + 1, |
| | | error_info); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | opt_anaScheme = result_anaSchemes.First(); |
| | | _dict[cacheName] = opt_anaScheme; |
| | | } |
| | | |
| | | |
| | | //汇总 |
| | | sum.Qt = sum.Qt + opt_anaScheme.TotalWrkQ; |
| | | sum.Dt = sum.Dt + opt_anaScheme.TotalWrkP; |
| | | } |
| | | sum.WP = CalculateWP(sum.Dt, sum.Qt); |
| | | return sum; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="pipes"></param> |
| | | /// <returns></returns> |
| | | protected static double CalcConnectPipeEta(List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipes) |
| | | { |
| | | double eta = 0; |
| | | double qh = 0; |
| | | int count = 0; |
| | | foreach (var pipe in pipes) |
| | | { |
| | | if (pipe == null) |
| | | continue; |
| | | if (pipe.TotalWrkQ < 1 || pipe.TotalWrkH < 0.1) |
| | | continue; |
| | | qh += pipe.TotalWrkQ * pipe.TotalWrkH; |
| | | eta += pipe.TotalWrkQ * pipe.TotalWrkH * pipe.TotalWrkE; |
| | | count++; |
| | | } |
| | | if (count <= 0) |
| | | return 0; |
| | | return Math.Round(eta / qh, 2); |
| | | } |
| | | } |
| | | } |