tangxu
2024-12-19 9acdf3c826311bd67180821ce19c625d0e384ca8
Calc/IStation.Calc.Core/CalcPrj.cs
@@ -9,43 +9,65 @@
{
    public class CalcPrjHelper
    {
        bool isLimitLevel = false;
        //bool isLimitLevel = false;
        private List<Model.ElecPriceMonthSetting> _elePriceMonthList = null;
        private List<IStation.CalcModel.PumpInfo> _allCalcPumpInfos;
        public CalcPrjHelper() { }
        public CalcPrjHelper()
        { }
        public string Calc(IStation.CalcModel.AnaRequest anaRequest, out AnaPrj defaultPrj)
        public string Calc(IStation.CalcModel.AnaRequest anaRequest, out AnaPrj optPrj)
        {
            if (!InitalPumpInfo())
            {
                defaultPrj = null;
                optPrj = null;
                return "数据初始化失败";
            }
            InitialElePrice();
            var calcHelper = GetCalcHelper(anaRequest);
            string error_info;
            var anaPrjs = calcHelper.CalcOptPrjs(out error_info);
            optPrj = calcHelper.CalcOptPrj(out error_info);
            if (!string.IsNullOrEmpty(error_info) || anaPrjs == null || anaPrjs.Count() == 0)
            if (!string.IsNullOrEmpty(error_info) || optPrj == null)
            {
                defaultPrj = null;
                optPrj = null;
                return error_info;
            }
            anaPrjs.Sort(new AnaPrj.Comparer(anaRequest.CalcOptType));
            //anaPrjs.Sort(new AnaPrj.Comparer(anaRequest.CalcOptType));
            //optPrj = anaPrjs.First();
            defaultPrj = anaPrjs.First();
            defaultPrj.Name = DateTime.Now.ToString();
            //
            double maxHeight = 0;
            DateTime maxHeightTime = optPrj.StartTime;
            if (optPrj.BlockTimes != null)
            {
                foreach (var bt in optPrj.BlockTimes)
                {
                    if (bt.OpenPumpIndexs == null)
                        continue;
                    if (bt.PointTimes != null)
                    {
                        foreach (var bt2 in bt.PointTimes)
                        {
                            if (maxHeight < bt2.WaterLevelH)
                            {
                                maxHeight = bt2.WaterLevelH;
                                //maxHeight = Math.Max(maxHeight, bt2.WaterLevelH);
                                maxHeightTime = bt2.Time;
                            }
                        }
                    }
                }
            }
            optPrj.MaxWaterLevelH = maxHeight;
            optPrj.MaxWaterLevelTime = maxHeightTime;
            return null;
        }
        /// <summary>
        /// 构建计算辅助类
@@ -53,27 +75,21 @@
        /// <param name="isIgnoreOpenLimitAble"></param>
        /// <returns></returns>
        private IStation.Calc.ErQuCalcBaseHelper GetCalcHelper(IStation.CalcModel.AnaRequest anaRequest)
        {
        {
            IStation.Calc.ErQuCalcBaseHelper calcHelper = IStation.Calc.ErQuCalcBaseHelper.Build(anaRequest);
            calcHelper.MinOpenPumpMinute = IStation.AnaGlobalParas.Setting.MinOpenTimeMinute;
            calcHelper.MinSwitchPumpMinute = IStation.AnaGlobalParas.Setting.MinSwitchTimeMinute;
            calcHelper.SetOpenPumpIndexs(IStation.AnaGlobalParas.Setting.OpenPumpIndexs);
            calcHelper.SetOptimalPumpIndexs(
                IStation.AnaGlobalParas.Setting.OptimalPumpIndexSequence,
                IStation.AnaGlobalParas.Setting.UnablePumpIndexArray);
            if (isLimitLevel)
            {
                calcHelper.CalcSpaceMinute = IStation.AnaGlobalParas.Setting.CalcSpaceMinuteL;
                calcHelper.MaxPumpSwitchCount = IStation.AnaGlobalParas.Setting.MaxPumpSwitchCountL;
            }
            else
            {
                calcHelper.CalcSpaceMinute = IStation.AnaGlobalParas.Setting.CalcSpaceMinuteQ;
                calcHelper.MaxPumpSwitchCount = IStation.AnaGlobalParas.Setting.MaxPumpSwitchCountQ;
            }
            calcHelper.CalcSpaceMinute = IStation.AnaGlobalParas.Setting.CalcSpaceMinute;
            calcHelper.MaxPumpSwitchCount = IStation.AnaGlobalParas.Setting.MaxPumpSwitchCount;
            DateTime rangeStartTime = anaRequest.StartTime;
            DateTime rangeEndTime = anaRequest.EndTime;
            calcHelper.SetPumpInfo(_allCalcPumpInfos);
            calcHelper.SetCalcTimeRange(rangeStartTime, rangeEndTime);
            calcHelper.StartOpenCount = anaRequest.StartOpenCount;// Convert.ToInt32(imageComboCurrentOpenCount.EditValue);
            calcHelper.SetCalcTimeRange(rangeStartTime, rangeEndTime, IStation.AnaGlobalParas.Setting.CalcSpaceMinute);
            calcHelper.ElecPrice = _elePriceMonthList;
@@ -83,9 +99,6 @@
                //if (tabPageDebug.PageVisible)
                //    this.listBoxDebug.Items.Add(info);
            };
            //不许切泵时间
            if (IStation.AnaGlobalParas.Setting.SwitchPumpIgnoreTimes != null && IStation.AnaGlobalParas.Setting.SwitchPumpIgnoreTimes.Count > 0)
@@ -113,7 +126,6 @@
    rangeStartTime.Day, st_h, t.StartMinute, 0);
                    }
                    bool isNext = ed_h > 23 ? true : false;
                    if (isNext)
                    {
@@ -134,15 +146,15 @@
                calcHelper.LimitSwitchPumpTimes = limit_times;
            }
            CalcLimitOpenPumpTime(ref calcHelper, anaRequest);
            calcHelper.SetAnaRequest(anaRequest);
            return calcHelper;
        }
        //不许开泵时间
        private void CalcLimitOpenPumpTime(ref IStation.Calc.ErQuCalcBaseHelper calcHelper, IStation.CalcModel.AnaRequest anaRequest)
        {
@@ -156,9 +168,10 @@
            var listUse = (from x in IStation.AnaGlobalParas.Setting.OpenPumpTimes where x.IsUse select x).ToList();
            if (listUse.Count == 0)
                return;
            //LogHelper.Info("Json转换" + JsonHelper.Object2Json(listUse));
            DateTime rangeStartTime = anaRequest.StartTime;
            DateTime rangeEndTime = anaRequest.EndTime;
            List<IStation.CalcModel.TimeRange> limit_times = new List<IStation.CalcModel.TimeRange>();
            IStation.CalcModel.TimeRange last_range = null;
@@ -181,7 +194,6 @@
                        last_range = new TimeRange();
                        last_range.Start = dt;
                    }
                }
                else
                {
@@ -194,27 +206,27 @@
                }
            }
            calcHelper.LimitOpenPumpTimes = limit_times;
            if (limit_times.Count > 0)
            {
                //LogHelper.Info("limit_times[0].Start时间:" + limit_times[0].Start.ToString());
                //LogHelper.Info("rangeStartTime时间:" + rangeStartTime.ToString());
                if (limit_times[0].Start == rangeStartTime)
                {
                    anaRequest.StartOpenCount = -1;//不考虑
                    if (anaRequest.StartOpenPumpIndexArray != null)
                        anaRequest.StartOpenPumpIndexArray.Clear();
                    else
                        anaRequest.StartOpenPumpIndexArray = new List<int>();
                    anaRequest.IsKnownStartOpenPump = true;//不考虑 ???
                }
            }
        }
        #region 初始化
        /// <summary>
        ///
        ///
        /// </summary>
        private bool InitalPumpInfo()
        {
@@ -247,17 +259,16 @@
            }
            return true;
        }
        /// <summary>
        ///
        ///
        /// </summary>
        private void InitialElePrice()
        {
            var allPrices = IStation.Common.ElecPrice.GetAll();
            _elePriceMonthList = allPrices.First().Settings.MonthList;
        }
        #endregion
        #endregion 初始化
    }
}
}