using Microsoft.Win32;
using NEIntelligentControl2.Models.Alarm;
using NEIntelligentControl2.Models.Messages;
using NEIntelligentControl2.Models.Station;
using NEIntelligentControl2.Service.Station;
using NEIntelligentControl2.Service.WebSocket;
using NEIntelligentControl2.Service.Windturbine;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace NEIntelligentControl2.Windows.Alarm
{
///
/// 历史报警窗口
///
public partial class HistoryAlarmWindow : Window
{
private StationManager _StationManager;
private WEBHelper _WEBHelper;
private InfoManager _InfoManager;
private UrlManager _UrlManager;
private string _Url;
private StationInfo _CurrentStationInfo;// 场站
private AlarmTypeItem _ClassTypeInfo;// 级别
private AlarmTypeItem _TypeInfo;// 类型
private AlarmTypeItem _STypeInfo;// 子类型
private List _AlarmInfos;
private AlarmTypeInfo _AlarmTypeInfo;
private string _WindturbineId;
public string KeyString { get; set; }
private bool _IsWindturbineFilter;
private bool _IsLoaded;
private string _StartTime;
private string _EndTime;
private int _PageIndex;// 页索引
private int _EachPageCount;// 每页条数
private List _CurrentAlarmInfos;
public HistoryAlarmWindow(StationManager sm, WEBHelper web, InfoManager im, UrlManager um)
{
InitializeComponent();
_StationManager = sm;
_WEBHelper = web;
_InfoManager = im;
_UrlManager = um;
_TBStartTime.Text = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
_TBEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Init();
}
private void Init()
{
_Url = _UrlManager.AlarmPath;
var ls = _StationManager.GetStationInfos().Where(i => i.Type != Models.Station.StationType.Other).ToList();
if (ls == null) return;
_CBStation.ItemsSource = ls;
_AlarmTypeInfo = _InfoManager.GetAlarmTypeInfo();
_CBClass.ItemsSource = _AlarmTypeInfo.RankInfo;
_CBType.ItemsSource = _AlarmTypeInfo.DeviceType;
_IBMain.OnPagination = OnPagination;
}
private void ContentControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
switch (((FrameworkElement)sender).Tag)
{
case "close":
this.Close();
break;
case "maximized":
Maximized();
break;
default: return;
}
}
private void Maximized()
{
if (this.WindowState == WindowState.Maximized)
{
this.WindowState = WindowState.Normal;
}
else
{
this.WindowState = WindowState.Maximized;
}
}
public static void ShowWindow()
{
HistoryAlarmWindow haw = App.ServiceProvider.GetService(typeof(HistoryAlarmWindow)) as HistoryAlarmWindow;
haw.Owner = Application.Current.MainWindow;
haw.ShowDialog();
}
private void InitTime()
{
DateTime.TryParse(_TBStartTime.Text, out DateTime ds);
DateTime.TryParse(_TBEndTime.Text, out DateTime de);
_StartTime = ds.ToString("yyyy-MM-dd HH:mm:ss");
_EndTime = de.ToString("yyyy-MM-dd HH:mm:ss");
_PageIndex = _IBMain.PageIndex;
_EachPageCount = _IBMain.EachPageCount;
}
private void OnPagination(int arg1, int arg2)
{
InitTime();
Task.Run(Search);
}
///
/// 场站
///
private void _CBStation_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0) return;
var v = e.AddedItems[0] as StationInfo;
if (v == null) return;
if (_CurrentStationInfo != null && _CurrentStationInfo.Id == v.Id) return;
_CurrentStationInfo = v;
InitTime();
Task.Run(Search);
}
///
/// 级别
///
private void _CBClass_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0) return;
var v = e.AddedItems[0] as AlarmTypeItem;
if (v == null) return;
_ClassTypeInfo = v;
_IsWindturbineFilter = false;
InitTime();
Task.Run(Search);
}
///
/// 类型
///
private void _CBType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0) return;
var v = e.AddedItems[0] as AlarmTypeItem;
if (v == null) return;
_TypeInfo = v;
_CBSType.ItemsSource = v.SubItem;
_CBSType.SelectedIndex = 0;
_IsWindturbineFilter = false;
InitTime();
Task.Run(Search);
}
///
/// 子类型
///
private void _CBSType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0) return;
var v = e.AddedItems[0] as AlarmTypeItem;
if (v == null) return;
_STypeInfo = v;
_IsWindturbineFilter = false;
InitTime();
Task.Run(Search);
}
///
/// 风机
///
private void _CBWindturbine_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count <= 0) return;
var v = e.AddedItems[0] as string;
if (v == null) return;
_WindturbineId = v == "全部" ? "" : v;
_IsWindturbineFilter = true;
InitTime();
Task.Run(Search);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
switch (((Control)sender).Tag)
{
case "search":
InitTime();
Task.Run(Search);
break;
case "output":
Output();
break;
default:return;
}
}
///
/// 导出数据
///
///
private void Output()
{
SaveFileDialog dialog = new SaveFileDialog
{
Title = "保存csv文件",
Filter = "csv文件(*.csv) |*.csv |所有文件(*.*) |*.*",
FilterIndex = 1
};
var v = dialog.ShowDialog();
if (v != true) return;
var path = dialog.FileName;
OutputToFile(path);
}
private void OutputToFile(string path)
{
Task.Run(() =>
{
try
{
_IBMain.Inof("导出数据...");
if (File.Exists(path))
{
File.Delete(path);
}
using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
{
sw.WriteLine("时间,设备,报警信息,级别,报警类型,停机类型,故障类型,故障原因");
if (_CurrentAlarmInfos == null || _CurrentAlarmInfos.Count <= 0)
{
_IBMain.Success();
return;
}
foreach (var v in _CurrentAlarmInfos)
{
sw.WriteLine(string.Format("{0},{1},{2},{3},{4},{5},{6},{7}", v.AlertTimeTimeString,
v.ObjectName, v.AlertText, v.RankString, v.Category1String, "", "", ""));
}
}
_IBMain.Success();
Dispatcher.Invoke(() => MessageWindow.ShowMessage("数据导出成功!"));
}
catch (Exception ex)
{
_IBMain.Warning($"导出数据出现错误:{ex.Message}");
}
});
}
private void Search()
{
if (!_IsLoaded) return;
var ur = $"{_Url}/alarm/history/page?pagenum={_PageIndex}&pagesize={_EachPageCount}" +
$"&stationid={_CurrentStationInfo.Id}&starttime={_StartTime}&endtime={_EndTime}&windturbineid={(string.IsNullOrWhiteSpace(_WindturbineId) ? "" : _WindturbineId)}" +
$"&rank={GetInfoString(_ClassTypeInfo)}&category1={GetInfoString(_TypeInfo)}&category2={GetInfoString(_STypeInfo)}&keyword={(string.IsNullOrWhiteSpace(KeyString) ? "" : KeyString)}";
try
{
_IBMain.Inof("查询数据...");
var vs = _WEBHelper.HttpGetJSON(ur);
_AlarmInfos = vs.Records;
ShowData();
_IBMain.Success();
Dispatcher.Invoke(() =>
{
_IBMain.PageCount = vs.Pages;
});
}
catch (Exception ex)
{
_IBMain.Warning($"查询数据出现错误:{ex.Message}");
}
}
///
/// 展示信息
///
///
private void ShowData()
{
if (_AlarmInfos == null || _AlarmInfos.Count <= 0)
{
_AlarmInfos = new List();
}
var ids = new HashSet() { "全部" };
foreach (var v in _AlarmInfos)
{
if (!string.IsNullOrWhiteSpace(v.WindturbineId))
{
ids.Add(v.WindturbineId);
}
}
Dispatcher.Invoke(() =>
{
if (!_IsWindturbineFilter)
{
_CBWindturbine.ItemsSource = ids;
}
_DGMain.ItemsSource = _AlarmInfos;
_CurrentAlarmInfos = _AlarmInfos;
});
}
private object GetInfoString(AlarmTypeItem ati)
{
if (ati == null) return "";
return ati.Id == "all" ? "" : ati.Id;
}
private void _CBKeyString_LostFocus(object sender, RoutedEventArgs e)
{
KeyString = _CBKeyString.Text;
}
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter) return;
InitTime();
Task.Run(Search);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
_IsLoaded = true;
InitTime();
Task.Run(Search);
}
}
}