tangxu
2022-11-08 5b5c4221ec96596e14da1b5cec9e29f27555daa2
Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
@@ -30,18 +30,30 @@
        Dictionary<string, IStation.Calculation.DispatchAna.Model.AnaScheme> _dict = new Dictionary<string, Model.AnaScheme>();
        /// <summary>
        /// 计算汇总数据
        /// 提升出口压力每次提升的百分率
        /// </summary>
        public double UpOutletPressPercent { get; set; } = 0;
        /// <summary>
        /// 提升出口压力次数
        /// </summary>
        public int UpOutletPressCount { get; set; } = 0;
        /// <summary>
        /// 计算汇总数据 :成功返回null, 失败返回错误信息
        /// </summary>
        /// <param name="Month">月份</param>
        /// <param name="HourRequests"></param>
        /// <param name="isUseCache">是否用缓存</param>
        /// <param name="error_info"></param>
        /// <param name="isUseCache">是否用缓存</param>
        /// <param name="daySumData"></param>
        /// <returns></returns>
        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();
            sum.Qt = 0;
        public virtual string  CalcSumData(
             int Month,
             List<Model.HourRequest> HourRequests,
             bool isUseCache,
             out IStation.Calculation.DispatchAna.Model.DaySumData daySumData)
        {
            daySumData = new Model.DaySumData();
            daySumData.Qt = 0;
            foreach (var hourRequest in HourRequests)
            {
                var complex_request_paras = hourRequest.Request;
@@ -49,9 +61,8 @@
                #region 检查数据
                if (complex_request_paras.OutletPipePara == null || complex_request_paras.OutletPipePara.Count < 1)
                {
                    error_info = string.Format("{0}时,分析出错,原因是:{1}",
                        hourRequest.Hour + 1, "出口管路参数有误, 请确认是否赋值, ERROR 35");
                    return null;
                    return string.Format("{0}月的{1}时,分析出错,原因是:{2}",
                        Month, hourRequest.Hour  , "出口管路参数有误, 请确认是否赋值, ERROR 35");
                }
                StringBuilder cacheNameBuilder = new StringBuilder();
@@ -94,22 +105,34 @@
                }
                else
                {
                    var result_anaSchemes = CalcSchemes压力(complex_request_paras, null, out error_info);
                    string error_info = "";
                    List<Calculation.DispatchAna.Model.AnaScheme> result_anaSchemes = null;
                    for (int i = 0; i <= UpOutletPressCount; i++)
                    {
                        result_anaSchemes = CalcSchemes压力(complex_request_paras, null, out error_info);
                        if (result_anaSchemes != null && result_anaSchemes.Count > 0)
                            break;
                        if (UpOutletPressCount > 0 && i != UpOutletPressCount)
                        {
                            foreach (var p in complex_request_paras.OutletPipePara)
                                p.TargetPress = complex_request_paras.OutletPipePara[0].TargetPress * (1.0 + UpOutletPressPercent / 100);
                        }
                    }
                    if (result_anaSchemes == null || result_anaSchemes.Count == 0)
                    {
                        if (string.IsNullOrEmpty(error_info))
                        {
                            error_info = string.Format("{0}时,分析出错,可能是入参数据不合理,请检查",
                                                    hourRequest.Hour + 1 );
                            return  string.Format("{0}月的{1}时,分析出错,可能是入参数据不合理,请检查",
                                                  Month, hourRequest.Hour  );
                        }
                        else
                        {
                            error_info = string.Format("{0}时,分析出错,原因是:{1}",
                                        hourRequest.Hour + 1,
                                        error_info);
                            return string.Format("{0}月的{1}时,分析出错,原因是:{2}",
                                                   Month, hourRequest.Hour  ,
                                                   error_info);
                        }
                        return null;
                    }
                    opt_anaScheme = result_anaSchemes.First();
                    _dict[cacheName] = opt_anaScheme;
@@ -117,13 +140,40 @@
                //汇总
                sum.Qt = sum.Qt + opt_anaScheme.TotalWrkQ;
                sum.Dt = sum.Dt + opt_anaScheme.TotalWrkP;
            }
            sum.WP = CalculateWP(sum.Dt, sum.Qt);
            return sum;
        }
                daySumData.Qt = daySumData.Qt + opt_anaScheme.TotalWrkQ;
                daySumData.Dt = daySumData.Dt + opt_anaScheme.TotalWrkP;
                //
                if(!string.IsNullOrEmpty(opt_anaScheme.ResultStatusInfo))
                daySumData.Info = opt_anaScheme.ResultStatusInfo;
            }
            daySumData.WP = CalculateWP(daySumData.Dt, daySumData.Qt);
            return null;
        }
        /// <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);
        }
    }
}