using HMI.Base;
using HMI.Core.Entity;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using HMI.Util.Alarm;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.IO;
using System.Windows;
using System.Windows.Controls;
namespace HMI.AlarmInfoManage
{
///
/// UserControl1.xaml 的交互逻辑
///
public partial class AlarmInfoManage : PluginControl
{
private string alarmTextPath;
private string dbPath;
private SqliteHelper sqliteHelper;
//private string opcIP = "127.0.0.1";
//private int opcPort = 6543;
//private int localPort = 18888;
//private SCADAApi lTSCADAApi = new OPCClient();
private ObservableCollection datasource = new ObservableCollection();
public ObservableCollection Datasource
{
get { return datasource; }
set { Set(ref datasource, value); }
}
///
/// 报警文本列表
///
private ObservableCollection alarmTexts = new ObservableCollection();
public ObservableCollection AlarmTexts
{
get { return alarmTexts; }
set { Set(ref alarmTexts, value); }
}
private double size = 30;
private int currentPage = 0;
public int CurrentPage
{
get => currentPage;
set
{
Set(ref currentPage, value);
RefreshData();
}
}
private int maxPage = 0;
public int MaxPage
{
get => maxPage;
set
{
Set(ref maxPage, value);
}
}
public AlarmInfoManage()
{
DataContext = this;
InitializeComponent();
}
public override void SetBaseFolder(string folder)
{
base.SetBaseFolder(folder);
dbPath = Path.Combine(BaseFolder, "alarm.db");
alarmTextPath = Path.Combine(BaseFolder, "AlarmText.data");
}
public override void InitFinish()
{
if (!File.Exists(dbPath))
{
SqliteHelper.CreateDatabase(dbPath);
}
sqliteHelper = new SqliteHelper(dbPath);
sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS Alarm (
id INTEGER PRIMARY KEY AUTOINCREMENT,
source TEXT NOT NULL,
alarmcode TEXT,
alarminfo TEXT,
time DATETIME);");
LoadAlarmText();
AlarmUtil.OnAlarm += AlarmUtil_OnAlarm;
//if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out string errMsg))
//{
//}
//else
//{
// this.MonitorTimer.Start();
//}
}
private void AlarmUtil_OnAlarm(object sender, List e)
{
foreach (AlarmText alarm in e)
{
var sql = string.Empty;
if (alarm.IsPLCAlarm)
{
var currentInfo = alarm.AlarmInfo;
sql = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');",
alarm.Source, alarm.AlarmCode, currentInfo, alarm.Time);
}
else
{
sql = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');",
alarm.Source, alarm.AlarmCode, alarm.AlarmInfo, alarm.Time);
}
sqliteHelper.ExecuteSql(sql);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
switch (btn.Name)
{
case "settingBtn":
OpenSettingWindow();
break;
case "refreshBtn":
LoadAlarmText();
RefreshPage(CurrentPage);
break;
case "importBtn":
ImportText();
break;
default:
break;
}
}
private void OpenSettingWindow()
{
AlarmSettingList listModal = new AlarmSettingList(log)
{
Owner = Window.GetWindow(this)
};
listModal.ShowDialog();
}
private void RefreshPage(int? page = null)
{
var sql = "SELECT COUNT (*) as num FROM Alarm;";
var dt = sqliteHelper.GetDataTable(sql);
if (dt.Rows.Count <= 0)
{
CurrentPage = 1;
MaxPage = 1;
return;
}
int count = int.Parse(dt.Rows[0]["num"].ToString());
MaxPage = (int)Math.Ceiling(count / size);
if (page != null)
{
CurrentPage = page.Value;
}
else if (CurrentPage > MaxPage)
{
CurrentPage = MaxPage;
}
}
private void RefreshData()
{
var list = new ObservableCollection();
var sql = $"SELECT source, alarmcode, alarminfo, time FROM Alarm ORDER BY time DESC LIMIT ({CurrentPage - 1} * {size}), {size};";
var dt = sqliteHelper.GetDataTable(sql);
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
var at = new AlarmText
{
Source = dr["source"].ToString(),
AlarmCode = dr["alarmcode"].ToString(),
AlarmInfo = dr["alarminfo"].ToString(),
Time = dr["time"].ToString(),
};
list.Add(at);
}
}
Datasource = list;
}
private void ImportText()
{
try
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "Files (*.xlsm)|*.xlsm";
if (openDialog.ShowDialog() == true)
{
this.ImportExcelAlarmText(openDialog.FileName);
}
}
catch (Exception ex)
{
log.Error("AlarmText Import Failed.", ex);
ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.ImportFailed")}: {ex.Message}");
}
}
///
/// 导入报警代码文本
///
/// 电子设计表格文件
//private void ImportExcelAlarmText(string excelFile)
//{
// int index = 0;
// try
// {
// if (excelFile.IndexOf(".xlsm") < 0)
// {
// this.Warning(this.lang("Alm.OnlySupportXlsm"));
// return;
// }
// this.alarmTexts.Clear();
// XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
// XSSFSheet sheet = (XSSFSheet)workbook.GetSheet("sheet1");
// XSSFRow row = null;
// for (int i = 2; i < (sheet.LastRowNum + 1); i++)
// {
// index = i;
// row = (XSSFRow)sheet.GetRow(i);
// if (row != null)
// {
// AlarmText alarm = new AlarmText();
// alarm.AlarmCode = row.Cells[0].StringCellValue;
// alarm.OpNo = row.Cells[1].StringCellValue;
// alarm.ModuleNo = row.Cells[2].StringCellValue;
// alarm.ModuleName_CN = row.Cells[3].StringCellValue;
// alarm.ModuleName_EN = row.Cells[4].StringCellValue;
// alarm.MAlarmCode = row.Cells[5].StringCellValue;
// alarm.MAlarmText_CN = row.Cells[6].StringCellValue;
// alarm.MAlarmText_EN = row.Cells[7].StringCellValue;
// this.alarmTexts.Add(alarm);
// }
// }
// if (sheet.LastRowNum > 0)
// {
// XmlHelper.SerializeToXml(textSettingPath, this.alarmTexts);
// }
// this.Success(this.lang("App.ImportSuccess"));
// }
// catch (Exception ex)
// {
// log.Error($"Row {index} AlarmText Import Failed.", ex);
// this.Error($"{this.lang("Alm.RowImportFailed", index)}: {ex.Message}");
// }
//}
///
/// 导入报警代码文本
///
/// 电子设计表格文件
private void ImportExcelAlarmText(string excelFile)
{
int index = 0;
try
{
if (excelFile.IndexOf(".xlsm") < 0)
{
this.Warning(this.lang("Alm.OnlySupportXlsm"));
return;
}
this.alarmTexts = new ObservableCollection
(ExcelHelper.ReadFromExcel(excelFile));
if (alarmTexts.Count > 0)
{
XmlHelper.SerializeToXml(alarmTextPath, this.alarmTexts);
}
LoadAlarmText();
this.Success(this.lang("App.ImportSuccess"));
}
catch (Exception ex)
{
log.Error($"Row {index} AlarmText Import Failed.", ex);
this.Error($"{this.lang("Alm.RowImportFailed", index)}: {ex.Message}");
}
}
private void LoadAlarmText()
{
try
{
if (string.IsNullOrEmpty(alarmTextPath) || !File.Exists(alarmTextPath))
{
AlarmTexts = new ObservableCollection();
}
else
{
AlarmTexts = XmlHelper.DeserializeFromXml>(alarmTextPath);
}
}
catch (Exception ex)
{
log.Error("LoadAlarmText Error.", ex);
AlarmTexts = new ObservableCollection();
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
//if (!string.IsNullOrEmpty(systemSetting.PlcIp))
//{
// if (this.plc.isConnection)
// {
// this.plc.Simens_S7_ConnectPLC(systemSetting.PlcIp, 102, 0, 1, string.Empty);
// }
//}
RefreshPage(1);
Loaded -= UserControl_Loaded;
}
public override void DoClose(object sender, EventArgs e)
{
// AlarmUtil.OnAlarm -= AlarmUtil_OnAlarm;
}
//private void MonitorTimer_Elapsed_bak(object sender, ElapsedEventArgs e)
//{
// try
// {
// this.MonitorTimer.Enabled = false;
// isHaveAlarm = false;
// foreach (var item in signAlarmSetting)
// {
// //isHaveAlarm = isHaveAlarm ||
// // this.plc.Simens_S7_ReadBool_DB(item.DBAddress, item.StartAddress, item.Length);
// }
// ////有报警
// if (isHaveAlarm)
// {
// this.isNewAlarm = false;
// this.currentAlarmCachePlc.Clear();
// RefreshDBSetting();
// for (int i = 0; i < ((int)alarmCodeBytes.Length / 4); i++)
// {
// int code = S7.GetDIntAt(alarmCodeBytes, 4 * i);
// ////有报警
// if (code != 0)
// {
// string acode = string.Format("{0:d10}", code);
// alarm = AlarmTexts.FirstOrDefault(item => item.AlarmCode == acode);
// if (alarm != null)
// {
// alarm.Source = "PLC";
// alarm.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// this.currentAlarmCachePlc.Add(alarm);
// ////有新报警
// if (this.preAlarmCachePlc.Find(alarm => alarm.AlarmCode == acode) == null)
// {
// this.isNewAlarm = true;
// this.SendLogMsg(alarm.ModuleName_CN + alarm.MAlarmText_CN);
// }
// }
// }
// }
// ////有新报警和报警减少时刷新报警表
// if (this.isNewAlarm || (this.currentAlarmCachePlc.Count != this.preAlarmCachePlc.Count))
// {
// this.currentAlarmCachePlcToMain = XmlHelper.DeepClone(this.currentAlarmCachePlc);
// this.RefershAlarm();
// }
// this.preAlarmCachePlc.Clear();
// this.preAlarmCachePlc = XmlHelper.DeepClone(this.currentAlarmCachePlc);
// }
// else
// {
// if (this.preAlarmCachePlc.Count != 0 || this.currentAlarmCachePlcToMain.Count != 0 || this.currentAlarmCachePlc.Count != 0)
// {
// this.preAlarmCachePlc.Clear();
// this.currentAlarmCachePlcToMain.Clear();
// this.currentAlarmCachePlc.Clear();
// this.RefershAlarm();
// }
// }
// }
// catch (Exception ex)
// {
// log.Error("sdadsa", ex);
// }
// finally
// {
// this.MonitorTimer.Enabled = true;
// }
//}
}
}