using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using IStation.CalcModel; using System.Threading.Tasks; using DevExpress.XtraRichEdit.Model; namespace IStation.WinFrmUI.CalcErQu { public partial class pageCalcParas : XtraUserControl { private bool _isInitialPageFinished = false; public pageCalcParas() { InitializeComponent(); SetStyle(); RegistButtonClick(); this.winBottomPnl.ButtonClick += new DevExpress.XtraBars.Docking2010.ButtonEventHandler(this.winBottomPnl_ButtonClick); this.winBottomPnl.ButtonUnchecked += new DevExpress.XtraBars.Docking2010.ButtonEventHandler(this.winBottomPnl_ButtonUnchecked); this.winBottomPnl.ButtonChecked += new DevExpress.XtraBars.Docking2010.ButtonEventHandler(this.winBottomPnl_ButtonChecked); textEdit最高水位限制.Enabled = textEdit最低水位限制.Enabled = checkEdit水位限制.Checked = false; } /// /// 初始化数据 /// public void InitialDataSource() { var anaSetting = IStation.AnaGlobalParas.Setting; if (anaSetting == null) return; dateEditDay.DateTime = DateTime.Today; dateEditDay.Properties.MaxValue = DateTime.Today.AddDays(1); Task.Run(() => { // 获取今日预测值(24点时) var v = IStation.BLL.ReservoirWaterLevel.GetTodayEndPredictiveValue(); if (v > 0) { this.Invoke(new Action(() => { textEdit当前水库水位.Text = Math.Round( v,2).ToString(); })); } var last3 = BLL.TotalWaterIn.GetLastDay3(); if (last3 != null && last3.Count == 3) { this.Invoke(new Action(() => { this.bci前一日取水总量.Tag = last3[0].ToString(); this.bci前一日取水总量.Caption = string.Format("昨日总量:{0}", last3[0]); this.bci前两日取水总量.Tag = last3[1].ToString(); this.bci前两日取水总量.Caption = string.Format("前日总量:{0}", last3[1]); this.bci前三日取水总量.Tag = last3[2].ToString(); this.bci前三日取水总量.Caption = string.Format("大前日总量:{0}", last3[2]); })); } }); imageComboClacOptType.SelectedIndex = anaSetting.OptSortType; checkEdit供水总量.Checked = anaSetting.HaveTargetTotalFlow; //textEdit当前水库水位.Text = anaSetting.LastReservoirCurrentLevel; //textEdit最低水位限制.Text = anaSetting.LastReservoirMinLevel; //textEdit最高水位限制.Text = anaSetting.LastReservoirMaxLevel; //textEdit供水总量万.Text = anaSetting.LastTargetTotalFlow.ToString(); RefreshRiver(); } #region 获取 public IStation.CalcModel.AnaRequest GetAnaRequest() { IStation.CalcModel.AnaRequest request = new CalcModel.AnaRequest(); request.CalcOptType = GetOptCalcType(); request.StartTime = new DateTime(dateEditDay.DateTime.Year, dateEditDay.DateTime.Month, dateEditDay.DateTime.Day, Convert.ToInt32(spinEditStart.EditValue), 0, 0); if(Convert.ToInt32(spinEditStart.EditValue)<= Convert.ToInt32(spinEditEnd.EditValue)) { request.EndTime = new DateTime(dateEditDay.DateTime.Year, dateEditDay.DateTime.Month, dateEditDay.DateTime.Day, Convert.ToInt32(spinEditEnd.EditValue), 0, 0); } else { request.EndTime = new DateTime(dateEditDay.DateTime.Year, dateEditDay.DateTime.Month, dateEditDay.DateTime.Day, Convert.ToInt32(spinEditEnd.EditValue), 0, 0); request.EndTime.AddDays(1); } request.WaterLevels长江 = this._waterLevels长江; request.StartOpenCount = Convert.ToInt32( imageComboCurrentOpenCount.EditValue); if (string.IsNullOrEmpty(textEdit当前水库水位.Text)) { textEdit当前水库水位.Focus(); MessageBox.Show("请输入 当前水库水位"); return null; } request.CurrentWaterBoxLevel = Convert.ToDouble(textEdit当前水库水位.Text); if (checkEdit供水总量.Checked) { if (string.IsNullOrEmpty(textEdit取水总量万.Text)) { MessageBox.Show("请输入供水总量"); return null; } request.TotalFlow取水总量 = 10000 * Convert.ToDouble(textEdit取水总量万.Text); } if (checkEdit水位限制.Checked) { if (string.IsNullOrEmpty(textEdit最高水位限制.Text)) { textEdit最高水位限制.Focus(); MessageBox.Show("请输入 最高水位限制"); return null; } if (string.IsNullOrEmpty(textEdit最低水位限制.Text)) { textEdit最低水位限制.Focus(); MessageBox.Show("请输入 最低水位限制"); return null; } request.MaxLimitWaterBoxLevel = Convert.ToDouble(textEdit最高水位限制.Text); request.MinLimitWaterBoxLevel = Convert.ToDouble(textEdit最低水位限制.Text); if (request.MinLimitWaterBoxLevel > request.MaxLimitWaterBoxLevel) {//可以相等 textEdit最低水位限制.Focus(); MessageBox.Show("请输入合理的 最低水位限制"); return null; } } var flow_list = reservoirParasRequestCtrl.GetFlowHourValues(); if (flow_list == null || flow_list.Count() < 1) { MessageBox.Show("请输入水库用水参数"); return null; } request.ReservoirDropFlow = flow_list; request.ReservoirMaxLimitHours = reservoirParasRequestCtrl.GetMaxLevelHourValues(); request.ReservoirMinLimitHours = reservoirParasRequestCtrl.GetMinLevelHourValues(); return request; } public eCalcOptType GetOptCalcType() { eCalcOptType sortType = eCalcOptType.功率; if (this.imageComboClacOptType.SelectedIndex == 0) { sortType = eCalcOptType.功率; } else if (this.imageComboClacOptType.SelectedIndex == 1) { sortType = eCalcOptType.电费; } return sortType; } #endregion #region 操作提示 DevExpress.Utils.FlyoutPanel _flyoutPanel = null; public void ShowFlyoutTipInfo() { //if (_flyoutPanel != null) //{ // // if (_flyoutPanel.FlyoutPanelState.IsActive) return; // return; //} //if (!_isCurrentPage) // return; //if (SPump.WinFrmUI.XPump.Properties.Settings.Default.ApplicationHangYeUseNumber > 5) // return; //System.Timers.Timer t = new System.Timers.Timer(2000);//实例化Timer类,设置时间间隔 //t.Elapsed += tShowFlyoutTipInfo;//到达时间的时候执行事件 //t.AutoReset = false;//设置是执行一次(false)还是一直执行(true) //t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件 //Control.CheckForIllegalCrossThreadCalls = false; //SPump.WinFrmUI.XPump.Properties.Settings.Default.ApplicationJieZhiUseNumber++; //SPump.WinFrmUI.XPump.Properties.Settings.Default.Save(); } void tShowFlyoutTipInfo(object source, System.Timers.ElapsedEventArgs e) { //if (this.InvokeRequired) //{ // this.Invoke(new MethodInvoker(delegate { tShowFlyoutTipInfo(source, e); })); // return; //} //this._flyoutPanel = new DevExpress.Utils.FlyoutPanel(); //((System.ComponentModel.ISupportInitialize)(this._flyoutPanel)).BeginInit(); //this._flyoutPanel.SuspendLayout(); //DevExpress.XtraEditors.LabelControl flyoutPanelHintLabel = new DevExpress.XtraEditors.LabelControl(); //flyoutPanelHintLabel.Anchor = System.Windows.Forms.AnchorStyles.None; //flyoutPanelHintLabel.Location = new System.Drawing.Point(15, 20); //flyoutPanelHintLabel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); //flyoutPanelHintLabel.Name = "flyoutPanelHintLabel"; //flyoutPanelHintLabel.Size = new System.Drawing.Size(255, 40); //flyoutPanelHintLabel.TabIndex = 0; //if (SPump.WinFrmUI.Localization.IsCN) // flyoutPanelHintLabel.Text = "提醒:如果您想进入选型状态,\r\n请点击此命令。"; //else // flyoutPanelHintLabel.Text = GetTranslateString("提醒:如果您想进入选型状态") + "\r\n" + GetTranslateString("请点击此命令"); //this._flyoutPanel.Appearance.BackColor = System.Drawing.Color.Pink; //this._flyoutPanel.Appearance.Options.UseBackColor = true; //this._flyoutPanel.Controls.Add(flyoutPanelHintLabel); //this._flyoutPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); //this._flyoutPanel.Name = "flyoutPanel"; //this._flyoutPanel.OptionsBeakPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); //this._flyoutPanel.OptionsBeakPanel.BorderColor = System.Drawing.Color.Silver; //this._flyoutPanel.OptionsButtonPanel.AllowGlyphSkinning = true; //this._flyoutPanel.OptionsButtonPanel.ButtonPanelHeight = 36; //// this._flyoutPanel.OptionsButtonPanel.ButtonPanelLocation = DevExpress.Utils.FlyoutPanelButtonPanelLocation. //DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem(); //toolTipItem1.Text = "Exit"; //DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip(); //superToolTip1.Items.Add(toolTipItem1); //this._flyoutPanel.OptionsButtonPanel.Buttons.AddRange(new DevExpress.XtraEditors.ButtonPanel.IBaseButton[] { //new DevExpress.Utils.PeekFormButton("Button", SPump.WinFrmUI.XPump.Properties.Resources.Close16, -1, DevExpress.XtraEditors.ButtonPanel.ImageLocation.Default, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "Exit", false, -1, true, superToolTip1, true, false, true, null, "Exit", -1, false)}); //this._flyoutPanel.OptionsButtonPanel.ShowButtonPanel = true; //this._flyoutPanel.Padding = new System.Windows.Forms.Padding(0, 36, 0, 0); //this._flyoutPanel.Size = new System.Drawing.Size(280, 72); //this._flyoutPanel.TabIndex = 6; //this._flyoutPanel.ButtonClick += new DevExpress.Utils.FlyoutPanelButtonClickEventHandler(this.OnFlyoutPanelButtonClick); //this._flyoutPanel.OptionsBeakPanel.BeakLocation = DevExpress.Utils.BeakPanelBeakLocation.Bottom; ////this._flyoutPanel.Options. //this.Controls.Add(this._flyoutPanel); //Point pt = new Point(this.winBottomPnl.Width / 2 + this.winBottomPnl.ButtonInterval /2 , 0); //pt = this.winBottomPnl.PointToScreen(pt); //_flyoutPanel.ShowBeakForm(pt); //((System.ComponentModel.ISupportInitialize)(this._flyoutPanel)).EndInit(); //this._flyoutPanel.ResumeLayout(false); //this._flyoutPanel.PerformLayout(); } private void OnFlyoutPanelButtonClick(object sender, DevExpress.Utils.FlyoutPanelButtonClickEventArgs e) { string tag = e.Button.Tag as string; if (string.Equals(tag, "Exit", StringComparison.OrdinalIgnoreCase)) { if (this._flyoutPanel != null) this._flyoutPanel.HideBeakForm(); } } #endregion public event MethodInvoker OnNextPageEvent;//下一步委托事件 // public event MethodInvoker OnBeforePageEvent;//上一步委托事件 private void NextStep() { var anaSetting = IStation.AnaGlobalParas.Setting; if (anaSetting == null) return; anaSetting.OptSortType = imageComboClacOptType.SelectedIndex; anaSetting.HaveTargetTotalFlow = checkEdit供水总量.Checked; //anaSetting.LastReservoirCurrentLevel = // textEdit当前水库水位.Text; //anaSetting.LastReservoirMinLevel = // textEdit最低水位限制.Text; //anaSetting.LastReservoirMaxLevel = // textEdit最高水位限制.Text; //anaSetting.LastTargetTotalFlow = Convert.ToDouble(textEdit供水总量万.Text); //IStation.SettingsHelper.Save(); if (OnNextPageEvent != null) { OnNextPageEvent.Invoke(); } } private void dateEditDay_EditValueChanged(object sender, EventArgs e) { RefreshRiver(); var day = this.dateEditDay.DateTime.Date; var open_num = BLL.AnaPrj.GetLastTimeOpenPumpCount(day.AddDays(-1)); imageComboCurrentOpenCount.EditValue = open_num; } private void btnRefresh水位_Click(object sender, EventArgs e) { RefreshRiver(); } private List _waterLevels长江 = null; private void RefreshRiver() { if (_isInitialPageFinished == false) return; Initial长江水位(); } private bool Initial长江水位() { //DateTime rangeStartTime = this.dateEditDay.DateTime.Date.AddDays(-2); //DateTime rangeEndTime = this.dateEditDay.DateTime.Date.AddDays(1); //GetAnaRangeTime(out rangeStartTime, out rangeEndTime); WaitFrmHelper.ShowWaitForm(this); string error = null; try { string benchmark = ""; _waterLevels长江 = viewRealTimeRiverWaterLevelCtrl1.SetBindingData3Day(this.dateEditDay.DateTime, out benchmark); if (benchmark != null && _waterLevels长江 != null) { var anaSetting = IStation.AnaGlobalParas.Setting; layoutControlGroup2.Text = "长江水位: 暂时认为潮汐查询的数据( 就是陈行基准,如不是,需要修正)"; // layoutControlGroup2.Text = string.Format //("长江水位: 暂时认为潮汐查询的数据( 就是陈行基准,如不是,需要修正),网站返回备注是:{0}", //benchmark); var base_level = anaSetting.RiverWaterLevelBase; if (Math.Abs(base_level) > 0.1) { List waterLevels长江xz = new List(); foreach (var m in _waterLevels长江) { Model.TimeWaterLevel m2 = new Model.TimeWaterLevel(m); m2.Level += base_level; waterLevels长江xz.Add(m2); } this._waterLevels长江 = waterLevels长江xz; } return true; } else { layoutControlGroup2.Text = "长江水位:" + error; return false; } } catch (Exception ex) { error = ex.Message; } finally { WaitFrmHelper.HideWaitForm(this); if (!string.IsNullOrEmpty(error)) { MessageBox.Show(error); } } return false; } /// /// /// /// /// private void GetAnaRangeTime(out DateTime startTime, out DateTime endTime) { var anaSetting = IStation.AnaGlobalParas.Setting; var day = this.dateEditDay.DateTime.Date; var startHour = anaSetting.StartHourPerDay; if (startHour < 1) { startTime = day; endTime = startTime.AddDays(1); } else { startTime = new DateTime(day.Year, day.Month, day.Day, startHour, 0, 0); endTime = startTime.AddDays(1); } } /// /// /// /// /// private void pageCalcParas_Load(object sender, EventArgs e) { _isInitialPageFinished = true; } // private void winBottomPnl_ButtonChecked(object sender, DevExpress.XtraBars.Docking2010.ButtonEventArgs e) { } // private void winBottomPnl_ButtonUnchecked(object sender, DevExpress.XtraBars.Docking2010.ButtonEventArgs e) { //var btn = e.Button as DevExpress.XtraBars.Docking2010.WindowsUIButton; //if (btn == null || btn.Tag == null) // return; //if (_ctrlSelectParas4General == null) // return; //var tag = btn.Tag.ToString(); //if (tag == "更多设计点") //{ // _ctrlSelectParas4General.SetMorePointTab(btn.Checked,false ); //} } // private void winBottomPnl_ButtonClick(object sender, DevExpress.XtraBars.Docking2010.ButtonEventArgs e) { } public void SetStyle() { //this.winBottomPnl.BackColor = SPump.WinFrmUI.CorpSkinStyleHelper.TileNavPane_NormalBackColor; //this.labNext.ForeColor = SPump.WinFrmUI.CorpSkinStyleHelper.SkinMainColor; //this.labPre.ForeColor = SPump.WinFrmUI.CorpSkinStyleHelper.SkinMainColor; //this.labSelected.ForeColor = SPump.WinFrmUI.CorpSkinStyleHelper.SkinMainColor; //this.winBottomPnl.Appearance.BackColor = SPump.WinFrmUI.CorpSkinStyleHelper.TileNavPane_NormalBackColor; //this.winBottomPnl.AppearanceHovered.BackColor = SPump.WinFrmUI.CorpSkinStyleHelper.TileNavPane_HoveredBackColor; //this.winBottomPnl.AppearanceSelected.BackColor = SPump.WinFrmUI.CorpSkinStyleHelper.TileNavPane_SelectBackColor; } //获取翻译语言 private string GetTranslateString(string text) { return text; } /// /// /// private void RegistButtonClick() { foreach (var btn in winBottomPnl.Buttons) { if (btn is DevExpress.XtraBars.Docking2010.WindowsUIButton) { var ui_btn = btn as DevExpress.XtraBars.Docking2010.WindowsUIButton; if (ui_btn == null) continue; if (ui_btn.Tag == null) continue; switch (ui_btn.Tag.ToString()) { case "分析设置": ui_btn.Click += (sender, e) => { AnaSettingMgrDlg frm = new AnaSettingMgrDlg(); if (frm.ShowDialog() != DialogResult.OK) return; }; break; case "电价信息": ui_btn.Click += (sender, e) => { ViewElecPriceByDay frm = new ViewElecPriceByDay(); frm.SetBindingData(dateEditDay.DateTime.Date); frm.Show(); }; break; default: break; } } } foreach (var btn in winStepPnl.Buttons) { if (btn is DevExpress.XtraBars.Docking2010.WindowsUIButton) { var ui_btn = btn as DevExpress.XtraBars.Docking2010.WindowsUIButton; if (ui_btn == null) continue; if (ui_btn.Tag == null) continue; switch (ui_btn.Tag.ToString()) { case "下一步": ui_btn.Click += (sender, e) => { NextStep(); }; break; default: break; } } } } private void checkEdit供水总量_CheckedChanged(object sender, EventArgs e) { textEdit取水总量万.Enabled = checkEdit供水总量.Checked; } internal bool IsReCalc() { return checkEdit重新计算方案.Checked; } private void checkEdit水位限制_CheckedChanged(object sender, EventArgs e) { textEdit最高水位限制.Enabled = textEdit最低水位限制.Enabled = checkEdit水位限制.Checked; } private void BTN计算方案_Click(object sender, EventArgs e) { NextStep(); } private void imageComboSouceWL_SelectedIndexChanged(object sender, EventArgs e) { if (imageComboSouceWL.SelectedIndex == 0) viewRealTimeRiverWaterLevelCtrl1.SetTideSouce(Model.eTideSouce.Book); else viewRealTimeRiverWaterLevelCtrl1.SetTideSouce(Model.eTideSouce.Web); Initial长江水位(); } private void bci前一日取水总量_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { bci前一日取水总量.Checked = true; bci前两日取水总量.Checked = false; bci前三日取水总量.Checked = false; if (bci前一日取水总量.Tag == null) return; textEdit取水总量万.Text = bci前一日取水总量.Tag .ToString(); } private void bci前两日取水总量_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { bci前一日取水总量.Checked = false; bci前两日取水总量.Checked = true; bci前三日取水总量.Checked = false; if (bci前两日取水总量.Tag == null) return; textEdit取水总量万.Text = bci前两日取水总量.Tag.ToString(); } private void bci前三日取水总量_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { bci前两日取水总量.Checked = false; bci前一日取水总量.Checked = false; bci前三日取水总量.Checked = true; if (bci前三日取水总量.Tag == null) return; textEdit取水总量万.Text = bci前三日取水总量.Tag.ToString(); } private void labRefresh水位_Click(object sender, EventArgs e) { // 获取今日预测值(24点时) var v = IStation.BLL.ReservoirWaterLevel.GetTodayEndPredictiveValue(); if (v > 0) { textEdit当前水库水位.Text = Math.Round(v, 2).ToString(); } else { MessageBox.Show("计算失败,可能没有今日的调度方案"); } } } }