using Microsoft.Win32;
using NEIntelligentControl2.Models;
using NEIntelligentControl2.Models.AGC;
using NEIntelligentControl2.Models.Datas;
using NEIntelligentControl2.Models.Messages;
using NEIntelligentControl2.Service.WebSocket;
using System;
using System.Collections.Generic;
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
{
///
/// AGC曲线窗口
///
public partial class AGCLineWindow : Window
{
private AGCInfo _AGCInfo;
private ViewModel _ViewModel;
private UrlManager _UrlManager;
private WEBHelper _WEBHelper;
private string _HistoyUrl;
public AGCLineWindow(ViewModel vm, AGCInfo info)
{
InitializeComponent();
_ViewModel = vm;
_ViewModel.AxisX.IsZoomEnabled = true;
_ViewModel.AxisX.IsPanEnabled = true;
_AGCInfo = info;
_UrlManager = App.ServiceProvider.GetService(typeof(UrlManager)) as UrlManager;
_WEBHelper = App.ServiceProvider.GetService(typeof(WEBHelper)) as WEBHelper;
_HistoyUrl = _UrlManager.DataServicePath;
Init();
}
private void Init()
{
this.Title = _AGCInfo.Title;
_pv.Model = _ViewModel;
_ViewModel.AxisX.StringFormat = "MM-dd HH:mm";
var dt = DateTime.Now;
_tbStart.Text = dt.AddHours(-8).ToString("yyyy-MM-dd HH:mm:ss");
_tbEnd.Text = dt.ToString("yyyy-MM-dd HH:mm:ss");
}
internal static void ShowWindow(ViewModel vm, AGCInfo info)
{
ViewModel nvm = new ViewModel(vm.ActPower, vm.PowerSet);
AGCLineWindow alw = new AGCLineWindow(nvm, info);
alw.Owner = Application.Current.MainWindow;
alw.ShowDialog();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
switch (((Control)sender).Tag)
{
case "search":// 搜索
Search();
break;
case "output":// 导出
Output();
break;
default: return;
}
}
///
/// 导出
///
private void Output()
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "导出AGC数据";
sfd.Filter = "csv文件(.csv)|*.csv";
var v = sfd.ShowDialog();
if (v != true) return;
var path = sfd.FileName;
try
{
ExportToCSV(path);
MessageWindow.ShowMessage("导出成功!");
}
catch
{
MessageWindow.ShowMessage("导出失败!");
}
}
private void ExportToCSV(string filePathOne)
{
FileStream fs = System.IO.File.Create(filePathOne);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
StringBuilder row_txt = new StringBuilder();
sw.WriteLine($"{this.Title}\n实发有功,有功设定限值,时间戳");
for (int i = 0; i < _ViewModel.ActPower.Count; ++i)
{
DateTime dt = _ViewModel.ActPower[i].Ts.GetLongDateTime();
row_txt.Append(_ViewModel.ActPower[i].Value).Append(",");
if (i < _ViewModel.PowerSet.Count)
{
row_txt.Append(_ViewModel.PowerSet[i].Value).Append(",");
}
row_txt.Append(dt.ToString("yyyy-MM-dd HH:mm:ss")).Append("\n");
}
sw.WriteLine(row_txt.ToString());//写入更改
sw.Flush(); //此处必须有此操作
}
///
/// 搜索
///
private void Search()
{
bool bs = DateTime.TryParse(_tbStart.Text, out DateTime ds);
bool be = DateTime.TryParse(_tbEnd.Text, out DateTime de);
if (!(bs && be))
{
MessageWindow.ShowMessage("时间格式错误!");
return;
}
Task.Run(initHistoryData);
void initHistoryData()
{
var psTag = _AGCInfo.AiPoints.Where(v => v.Type == TagType.PowerSet).FirstOrDefault();
var apTag = _AGCInfo.AiPoints.Where(v => v.Type == TagType.ActualPower).FirstOrDefault();
try
{
var vps = _WEBHelper.HttpGetJSON>($"{_HistoyUrl}/ts/history/snap?interval=60&tagName={psTag?.Tag}&startTs={ds.GetTimeSpan()}&endTs={de.GetTimeSpan()}");
var vap = _WEBHelper.HttpGetJSON>($"{_HistoyUrl}/ts/history/snap?interval=60&tagName={apTag?.Tag}&startTs={ds.GetTimeSpan()}&endTs={de.GetTimeSpan()}");
if (vps != null)
{
_ViewModel.SetValue(psTag, vps);
}
if (vap != null)
{
_ViewModel.SetValue(apTag, vap);
}
Dispatcher.Invoke(() => {
_pv.Model = null;
_pv.Model = _ViewModel;
});
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
MessageWindow.ShowMessage("数据请求出现错误:" + ex.Message);
}
}
}
}
}