using DevExpress.XtraEditors; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace IStation.WinFrmUI.CalcErQu { public partial class SetPrjItemSpanTimeCtrl : XtraUserControl { public SetPrjItemSpanTimeCtrl() { InitializeComponent(); var anaSetting = IStation.AnaGlobalParas.Setting; if (anaSetting == null) return; for (int i = 0;i< anaSetting.MaxPumpSwitchCountQ; i++) { _gridModels.Add(new CurrentViewModel() { Index = i+1 }); } this.bindingSourceGrid.DataSource = _gridModels; toggleSwitchStyle.IsOn = IStation.WinFrmUI.CalcErQu.Properties.Settings.Default.IsTimeBlockCtrl; InitialTimeControl(IStation.WinFrmUI.CalcErQu.Properties.Settings.Default.IsTimeBlockCtrl); lbl一台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(1); lbl两台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(2); lbl三台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(3); lbl四台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(4); lbl四台.AppearanceItemCaption.ForeColor = Color.White; rangeDefinePanel.OnFreshPumpRunRange += ( ) => { if(OnFreshPumpRunRange != null) { OnFreshPumpRunRange.Invoke( ); } //_bindList.Clear(); //foreach(var item in list) //{ // var vm = new CurrentViewModel( ); // vm.PumpNumber = item.PumpNumber; // vm.StartH = item.StartTime.Hour; // vm.StartM = item.StartTime.Minute; // vm.EndH = item.EndTime.Hour; // vm.EndM = item.EndTime.Minute; // vm.StartDay = item.StartTime; // vm.EndDay = item.EndTime; // _bindList.Add(vm); //} //this.bindingSource1.DataSource = _bindList; }; } public class CurrentViewModel { public int Index { get; set; } public string StartTime { get; set; } public string EndTime { get; set; } public int? OpenNumber { get; set; } } private BindingList _gridModels = new BindingList(); public Action OnFreshPumpRunRange = null; public void InitialTimeBlock(int CalcSpaceMinute) { this.rangeDefinePanel.InitialTimeBlock(CalcSpaceMinute); } public Action> OnRefreshData = null; DateTime _anaDay; internal void SetAnaDay(DateTime anaDay) { this._anaDay = anaDay; } /// /// /// /// /// /// /// public void SetRangePumpCount(DateTime start, DateTime end, int pumpCount) { this.rangeDefinePanel.SetRangePumpCount(this._anaDay, start, end, pumpCount, true); } /// /// /// /// internal void SetRangePumpCount(CalcModel.AnaPrj anaPrj) { this._anaDay = anaPrj.StartTime.Date; this.rangeDefinePanel.SetRangePumpCount(anaPrj); } #region 台数 按钮 private void lbl台数_MouseDown(object sender, MouseEventArgs e) { var labl = sender as DevExpress.XtraLayout.SimpleLabelItem; labl.AppearanceItemCaption.BackColor = System.Drawing.Color.FromArgb(0, 0, 64); labl.AppearanceItemCaption.ForeColor = Color.White; } private void lbl台数_MouseUp(object sender, MouseEventArgs e) { var labl = sender as DevExpress.XtraLayout.SimpleLabelItem; if (labl == lbl一台) { lbl一台.AppearanceItemCaption.ForeColor = Color.Black; lbl一台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(1); } else if (labl == lbl两台) { lbl两台.AppearanceItemCaption.ForeColor = Color.Black; lbl两台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(2); } else if (labl == lbl三台) { lbl三台.AppearanceItemCaption.ForeColor = Color.Black; lbl三台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(3); } else if (labl == lbl四台) { lbl四台.AppearanceItemCaption.ForeColor = Color.Black; lbl四台.AppearanceItemCaption.BackColor = TimeSmallBlock.GetColor(4); } else { labl.AppearanceItemCaption.BackColor = Color.White; labl.AppearanceItemCaption.ForeColor = System.Drawing.Color.FromArgb(0, 0, 64); } } private void lbl全关_Click(object sender, EventArgs e) { rangeDefinePanel.SetSelctItemPumpCount(0); } private void lbl一台_Click(object sender, EventArgs e) { rangeDefinePanel.SetSelctItemPumpCount(1); } private void lbl两台_Click(object sender, EventArgs e) { rangeDefinePanel.SetSelctItemPumpCount(2); } private void lbl三台_Click(object sender, EventArgs e) { rangeDefinePanel.SetSelctItemPumpCount(3); } private void lbl四台_Click(object sender, EventArgs e) { rangeDefinePanel.SetSelctItemPumpCount(4); } private void lblReset_Click(object sender, EventArgs e) { } private void lblEmpty_Click(object sender, EventArgs e) { ClearPumpRunRange(); } private void lbl重选_Click(object sender, EventArgs e) { rangeDefinePanel.ClearSelect(); } #endregion private bool _isInitialTemplateList = false; private void popupContainerEdit1_QueryPopUp(object sender, CancelEventArgs e) { if (!SettingsHelper.IsDesingMode()) { if (_isInitialTemplateList) return; _isInitialTemplateList = true; InitialTemplateList(); } } private void InitialTemplateList() { var folderPath = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "PrjItemSpanTimeTemplate"); if (!System.IO.Directory.Exists(folderPath)) { return; } DirectoryInfo folder = new DirectoryInfo(folderPath); listBoxControl1.Items.Clear(); foreach (FileInfo file in folder.GetFiles("*.json", SearchOption.AllDirectories)) { // 处理每个文件 this.listBoxControl1.Items.Add(file.Name); } } private void LoadTemplate(string filePath) { if (!System.IO.File.Exists(filePath)) { return; } //文件流读取 System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open); System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.GetEncoding("gb2312")); var contents = sr.ReadToEnd(); sr.Close(); fs.Close(); var templates = JsonHelper.Json2Object>(contents); if (templates == null) { return; } foreach(var template in templates) { template.StartTime = new DateTime(this._anaDay.Year, _anaDay.Month, _anaDay.Day, template.StartTime.Hour, template.StartTime.Minute, 0); template.EndTime = new DateTime(this._anaDay.Year, _anaDay.Month, _anaDay.Day, template.EndTime.Hour, template.EndTime.Minute, 0); if(template.EndTime< template.StartTime) { template.EndTime = template.EndTime.AddDays(1); } } SetPumpRunRange( templates); } private void SaveAsTemplate() { var rootFolder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "PrjItemSpanTimeTemplate"); if (!System.IO.Directory.Exists(rootFolder)) { System.IO.Directory.CreateDirectory(rootFolder); } InputTemplateNameDlg frm = new InputTemplateNameDlg(); if (frm.ShowDialog() != DialogResult.OK) return; List values = GePumpRunRange(); if (values == null || values.Count == 0) return; var fileContents = JsonHelper.Object2Json(values); var name = frm.TemplateName; var fileName = System.IO.Path.Combine(rootFolder, name.Trim() + ".json"); if (System.IO.File.Exists(fileName)) { System.IO.File.Delete(fileName); } StreamWriter streamWriter = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("gb2312")); streamWriter.Write(fileContents); streamWriter.Flush(); streamWriter.Close(); MessageBox.Show("保存成功"); } public List GetRunRangeList(DateTime anaDay) { if (_isTimeBlockCtrl) return this.rangeDefinePanel.GetRunRangeList(anaDay); else return GetRunRangeList4Grid(anaDay); } private List GePumpRunRange() { if (_isTimeBlockCtrl) return this.rangeDefinePanel.GetRunRangeList(this._anaDay); else return GetRunRangeList4Grid(this._anaDay); } private void SetPumpRunRange(List ranges) { if(_isTimeBlockCtrl) rangeDefinePanel.SetRangePumpCount(this._anaDay, ranges); } private void ClearPumpRunRange() { if (_isTimeBlockCtrl) rangeDefinePanel.EmptyAllItem(); } private void btn保存为模板_Click(object sender, EventArgs e) { SaveAsTemplate(); } private void listBoxControl1_DoubleClick(object sender, EventArgs e) { if(listBoxControl1.SelectedValue == null) return; var fileName = listBoxControl1.SelectedValue.ToString(); var folderPath = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "PrjItemSpanTimeTemplate"); if (!System.IO.Directory.Exists(folderPath)) { return; } LoadTemplate(System.IO.Path.Combine(folderPath, fileName)); } private void toggleSwitchStyle_Toggled(object sender, EventArgs e) { InitialTimeControl(toggleSwitchStyle.IsOn); IStation.WinFrmUI.CalcErQu.Properties.Settings.Default.IsTimeBlockCtrl = toggleSwitchStyle.IsOn; IStation.WinFrmUI.CalcErQu.Properties.Settings.Default.Save(); } private bool _isTimeBlockCtrl = false; private void InitialTimeControl(bool isTimeBlockCtrl) { this._isTimeBlockCtrl = isTimeBlockCtrl; if (this._isTimeBlockCtrl) { lbl一台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; lbl两台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; lbl三台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; lbl四台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; lbl四台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; lbl全关.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; rangeDefinePanel.Dock = DockStyle.Fill; rangeDefinePanel.Visible = true; vGridControl1.Visible = false; splitContainer1.Panel2Collapsed = true ; } else { lbl一台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; lbl两台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; lbl三台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; lbl四台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; lbl四台.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; lbl全关.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; vGridControl1.Dock = DockStyle.Fill; vGridControl1.Visible = true; rangeDefinePanel.Visible = false; splitContainer1.Panel2Collapsed = false ; } } public List GetRunRangeList4Grid(DateTime anaDay) { if (_gridModels == null) { return null; } var anaSetting = IStation.AnaGlobalParas.Setting; var startHour = anaSetting.StartHourPerDay; var statTime = anaDay.AddHours(startHour); List listRange = new List(); foreach (var item in _gridModels) { if (item.OpenNumber == null || item.OpenNumber <= 0 || item.OpenNumber > 4) { continue; } if (string.IsNullOrEmpty(item.StartTime)) { continue; } if (string.IsNullOrEmpty(item.EndTime)) { continue; } string st = string.Format("{0} {1}:00:00", anaDay.ToString("yyyy-MM-dd "), item.StartTime); if (item.StartTime.Contains(":")) { st = string.Format("{0} {1}:00", anaDay.ToString("yyyy-MM-dd "), item.StartTime); } DateTime st_time; if (!DateTime.TryParse(st, out st_time)) { MessageBox.Show("时间格式不对"); return null; } DateTime ed_time; if (item.EndTime == "24") { ed_time = anaDay.AddDays(1); } else { string ed = string.Format("{0} {1}:00:00", anaDay.ToString("yyyy-MM-dd "), item.EndTime); if (item.EndTime.Contains(":")) { ed = string.Format("{0} {1}:00", anaDay.ToString("yyyy-MM-dd "), item.EndTime); } if (!DateTime.TryParse(ed, out ed_time)) { MessageBox.Show("时间格式不对"); return null; } } CalcModel.PumpRunRange lastSelBlck = new CalcModel.PumpRunRange() { PumpNumber = item.OpenNumber.Value, StartTime = st_time, EndTime = ed_time }; listRange.Add(lastSelBlck); } return listRange; } private void vGridControl1_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e) { var list = GetRunRangeList4Grid(DateTime.Today); if (list == null || list.Count() == 0) return; runTimeRangePanel1.SetRangePumpCount(list); } } }