| | |
| | | { |
| | | 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> |
| | | /// 构建计算辅助类 |
| | |
| | | /// <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; |
| | | |
| | |
| | | //if (tabPageDebug.PageVisible) |
| | | // this.listBoxDebug.Items.Add(info); |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | | //不许切泵时间 |
| | | if (IStation.AnaGlobalParas.Setting.SwitchPumpIgnoreTimes != null && IStation.AnaGlobalParas.Setting.SwitchPumpIgnoreTimes.Count > 0) |
| | |
| | | rangeStartTime.Day, st_h, t.StartMinute, 0); |
| | | } |
| | | |
| | | |
| | | bool isNext = ed_h > 23 ? true : false; |
| | | if (isNext) |
| | | { |
| | |
| | | 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) |
| | | { |
| | |
| | | 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; |
| | |
| | | last_range = new TimeRange(); |
| | | last_range.Start = dt; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | 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() |
| | | { |
| | |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | private void InitialElePrice() |
| | | { |
| | | |
| | | var allPrices = IStation.Common.ElecPrice.GetAll(); |
| | | _elePriceMonthList = allPrices.First().Settings.MonthList; |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #endregion 初始化 |
| | | } |
| | | } |
| | | } |