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("计算失败,可能没有今日的调度方案");
}
}
}
}