using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using ICSharpCode.Core;
using Mesnac.Controls.Base;
using Mesnac.Action.Base;
using Mesnac.Codd.Session;
using Mesnac.Action.ChemicalWeighing.Entity;
using Mesnac.Action.ChemicalWeighing.Technical;
using Mesnac.Action.ChemicalWeighing.Alarm;
using Mesnac.Action.ChemicalWeighing.Entity.PptPlan;
using Mesnac.Action.ChemicalWeighing.Show;
using System.Timers;
using Mesnac.Action.ChemicalWeighing.Product.XlPlan;
namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SCADAHelper
{
public class AlarmRefreshAction : ChemicalWeighingAction,IAction
{
#region 事件定义
///
/// 刷新计划事件
///
public static event EventHandler OnAlarmRefresh;
#endregion
#region 字段定义
bool flag = true;
private RuntimeParameter _runtime;
private IBaseControl _clientGridControl = null; //报警信息列表控件
private IBaseControl _clientAlarmInfoControl = null; //报警控件容器
#endregion
#region IAction接口实现
public void Run(RuntimeParameter runtime)
{
// Global.PublicVar.Instance.isFlashFlag = false;
base.RunIni(runtime); //必须要调用的
this._runtime = runtime;
#region 事件订阅
if (true)
{
Mesnac.Basic.InvokeHelper.OnAlarmRefresh -= Process_Event;
Mesnac.Basic.InvokeHelper.OnAlarmRefresh += Process_Event;
//报警刷新保存事件绑定
SaveHelper.AlarmSaveHelper.sender = runtime;
SaveHelper.AlarmSaveHelper.OnAlarmSave -= Process_Event;
SaveHelper.AlarmSaveHelper.OnAlarmSave += Process_Event;
}
#endregion
IBaseControl baseControl = null;
IBaseControl infoControl = null;
bool gridFlag = false;
bool infoFlag = false;
foreach(IBaseControl ib in GetAllMCControls())
{
if(ib.MCKey == null)
{
continue;
}
else
{
if(ib.MCKey == "alarmDG")
{
baseControl = ib;
gridFlag = true;
}
if(ib.MCKey == "alarmInfoList")
{
infoControl = ib;
infoFlag = true;
}
}
if(gridFlag && infoFlag)
{
break;
}
}
if (baseControl == null || !(baseControl is DataGridView))
{
ICSharpCode.Core.LoggingService.Error("{预警管理—刷新}缺少本机台网格控件...");
//return;
}
this._clientGridControl = baseControl;
this._clientAlarmInfoControl = infoControl;
this.DoWork();
}
#endregion
#region 方法定义
///
/// 刷新计划
///
protected void DoWork()
{
#region 业务实现
DataTable table = DataListShow();
lock (String.Empty)
{
//本地计划
if (this._clientGridControl != null && this._clientAlarmInfoControl != null)
{
if (table != null)
{
this._clientGridControl.BindDataSource = null;
this._clientGridControl.BindDataSource = table;
//if (Global.PublicVar.Instance.AlarmStrList != null && Global.PublicVar.Instance.AlarmStrList.Count != 0)
//{
// this._clientAlarmInfoControl.MCVisible = true;
//}
//else
//{
// this._clientAlarmInfoControl.MCVisible = false;
//}
}
else
{
//this._clientAlarmInfoControl.MCVisible = false;
}
}
else
{
ICSharpCode.Core.LoggingService.Warn("刷新本地计划失败:本地计划控件为Null...");
}
}
#endregion
ServerStart();
#region 触发事件
if (OnAlarmRefresh != null)
{
OnAlarmRefresh(this._runtime.BaseControl.MCRoot, System.EventArgs.Empty);
}
#endregion
}
#endregion
#region 事件处理方法
private void Process_Event(object sender, EventArgs e)
{
if (sender is RuntimeParameter)
{
this.Run(sender as RuntimeParameter);
}
else
{
this.Run(this._runtime);
}
}
#endregion
#region DataTable数据整理显示
private DataTable DataListShow()
{
DataTable dataTable = AlarmHelper.QueryAlarmLogDataTable();
//if(Global.PublicVar.Instance.AlarmStrList != null && Global.PublicVar.Instance.AlarmStrList.Count > 0)
//{
// dataTable = new DataTable();
// DataColumn SerialNumColumnText = new DataColumn("SerialNum", Type.GetType("System.String"));
// DataColumn ShowTextColumnText = new DataColumn("ShowText", Type.GetType("System.String"));
// dataTable.Columns.Add(SerialNumColumnText);
// dataTable.Columns.Add(ShowTextColumnText);
// for (int i = 0;i< Global.PublicVar.Instance.AlarmStrList.Count;i++)
// {
// DataRow dataRow = dataTable.NewRow();
// dataRow["SerialNum"] = (i + 1).ToString();
// dataRow["ShowText"] = Global.PublicVar.Instance.AlarmStrList[i];
// dataTable.Rows.Add(dataRow);
// }
//}
return dataTable;
}
#endregion
private void ServerStart()
{
try
{
if (flag)
{
flag = false;
var lblRecipeName = base.GetControlById("lblRecipeName") as System.Windows.Forms.Label;//配方名称
var lblStandardWeight = base.GetControlById("lblStandardWeight") as System.Windows.Forms.Label;//标重
if (lblRecipeName == null) { return; }
List materialList = PlanHelper.GetExecPlan();//正在执行的任务
if (materialList == null) { return; }
int i = 0;
foreach (var item in materialList)
{
if (i == 0)
{
lblRecipeName.Text = item.Recipe_Name;
lblRecipeName.Text = item.Recipe_Name;
lblStandardWeight.Text = item.Total_Weight.ToString();
break;
}
}
DbMCControl clientGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "xl_weigh").FirstOrDefault(); //获取本机台计划控件
if (clientGridControl == null || !(clientGridControl.BaseControl is DataGridView))
{
ICSharpCode.Core.LoggingService.Error("{首页展示}缺少本机台计划网格控件...");
return;
}
lock (String.Empty)
{
//本地计划
if (clientGridControl != null && clientGridControl.BaseControl != null)
{
var data = PlanHelper.GetExecPlanDataTable();
clientGridControl.BaseControl.BindDataSource = null;
clientGridControl.BaseControl.BindDataSource = data;
#region 根据计划状态处理背景色
DataGridView clientGrid = clientGridControl.BaseControl as DataGridView;
SetBackColor(clientGrid);
#endregion
}
else
{
ICSharpCode.Core.LoggingService.Warn("接在首页展示物料失败:本地计划控件为Null...");
}
}
}
}
catch (Exception)
{
throw;
}
finally
{
flag = true;
}
}
#region 设置(网格控件)计划状态背景色
///
/// 设置计划状态背景色
///
///
public static void SetBackColor(DataGridView grid)
{
lock (String.Empty)
{
try
{
if (grid == null || grid.Visible == false)
{
ICSharpCode.Core.LoggingService.Warn("设置背景色失败:网格控件为null或不可见");
return;
}
grid.ClearSelection(); //清空选中行
grid.ColumnHeadersHeight = 25;
grid.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
grid.RowHeadersVisible = false;
grid.RowTemplate.Height = 28;
grid.RowsDefaultCellStyle.Font = new System.Drawing.Font("宋体", 12, System.Drawing.FontStyle.Bold);
foreach (DataGridViewRow row in grid.Rows)
{
row.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(220, 220, 220); //灰色
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("设置背景色失败:" + ex.Message);
}
}
}
#endregion
}
}