using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Core.Mes.Client.Comm.Tool;
using Core.StlMes.Client.LgClassModel;
using CoreFS.CA06;
using Infragistics.Win;
using Infragistics.Win.UltraWinEditors;
using Infragistics.Win.UltraWinGrid;
namespace Core.StlMes.Client.LgCommon
{
///
/// 实绩管理响应炉号选中事件
///
public delegate void GetStoveResultDelegate(PlnSteelforfurnaceEntity PlnSteelforfurnaceEntity,bool Refresh);
public partial class ucStoveQuery : UserControl
{
public event GetStoveResultDelegate GetStoveResultDelegate;
private OpeBase Ob;
private List _plines;
private string Stove;
private volatile bool refresh;
private Task rereshTast;
private DateTime LastQuery = DateTime.Now;
private bool Run = true;
private LG_PROCESS _process;
private object lockHelper = new object();
public Func GiveUp =null;
private bool AskGiveUp = false;
private UltraGridRow ugActiveRow;
public ucStoveQuery()
{
InitializeComponent();
}
private bool _orderByPline = true;
public bool OrderByPline
{
get { return _orderByPline; }
set
{
_orderByPline = value;
ugPlan.DisplayLayout.Bands[0].Columns["CastNo"].Hidden = _orderByPline;
}
}
public string uceStatusText
{
get
{
return uceStatus.Text;
}
set { uceStatus.Text = value; }
}
public void Init(OpeBase Ob,List Plines,LG_PROCESS process)
{
this.Ob = Ob;
_plines = Plines;
_process = process;
InitDropDowList();
dtpStart.Value = DateTime.Now.AddDays(-1);
dtpEnd.Value = DateTime.Now.AddDays(1);
QueryStovePlan();
ClsControlPack.RefreshAndAutoSize(ugPlan);
GoNext();
rereshTast = new Task(RereshTask);
rereshTast.Start();
}
public void RereshTask()
{
while (Run)
{
try
{
Thread.Sleep(2000);
if (cbx_AutoRefresh==null) break;
if (!cbx_AutoRefresh.Checked) continue;
TimeSpan timeSpan = DateTime.Now - LastQuery;
if(timeSpan.Seconds<10) continue;
if (AskGiveUp) continue;
QueryStovePlan();
}
catch (Exception)
{
}
}
}
// 刷新炉次信息
///
/// 刷新炉次信息
///
public void QueryStovePlan()
{
/*lock (lockHelper)
{*/
try{
LastQuery = DateTime.Now;
var status = uceStatus.CheckedItems.Select(p => p.DataValue.ToString()).ToList();
if (!chbStatus.Checked || !status.Any()) status = new List(){"10","20","30","40"};
var datas =
EntityHelper.GetData(
"Core.LgMes.Server.LgDeviceManager.PerformanceManage.SelectPlnSteelforfurnaceEntity",
new[]
{
chbStove.Checked?Edt_StoveNo.Text:"",
_plines,
!chbGrade.Checked || cbEdt_Steel.SelectedItem==null?"": cbEdt_Steel.SelectedItem.DataValue,
status,
_process,
chbStart.Checked? dtpStart.Value.ToString("yyyyMMdd"):"",
chbEnd.Checked? dtpEnd.Value.ToString("yyyyMMdd"):"",
OrderByPline
}, Ob);
ClsControlPack.SaftRefreshUI(ugPlan, () =>
{
plnSteelforfurnaceEntityBindingSource.DataSource = datas;
});
}
catch (Exception ex)
{
// ignored
}
/* }*/
}
#region 初始化
public void InitDropDowList()
{
var vlistGradeCode = ClsBusinessPack.GetValuelistSteel(Ob);
cbEdt_Steel.ValueList = vlistGradeCode;
var list = ClsBusinessPack.GetStatus();
ClsControlPack.SetGridValuelist(ref ugPlan, "Status", ref list);
}
#endregion
#region 事件
private void btnQuery_Click(object sender, EventArgs e)
{
QueryStovePlan();
}
public void GoNext()
{
Stove = "";
ugPlan.ActiveRow = ugPlan.Rows.AsEnumerable().Where(p =>
{
var row = p.ListObject as PlnSteelforfurnaceEntity;
if (row != null)
{
int HeatState = 0;
int CurrentState = ClsBusinessPack.GetHeatState(_process);
int.TryParse(row.HeatState, out HeatState);
if ((HeatState <= CurrentState) || row.Status == "10")
return true;
}
return false;
}).FirstOrDefault();
if (ugPlan.ActiveRow!=null) ugPlan.Rows[ugPlan.ActiveRow.Index].Activate();
ugPlan_AfterRowActivate(null, null);
}
private void cbx_AutoRefresh_CheckedChanged(object sender, EventArgs e)
{
try
{
btnQuery.Enabled = !cbx_AutoRefresh.Checked;
cbEdt_Steel.Enabled = Edt_StoveNo.Enabled = !cbx_AutoRefresh.Checked;
uceStatus.Enabled = Edt_StoveNo.Enabled = !cbx_AutoRefresh.Checked;
dtpStart.Enabled = Edt_StoveNo.Enabled = !cbx_AutoRefresh.Checked;
dtpEnd.Enabled = Edt_StoveNo.Enabled = !cbx_AutoRefresh.Checked;
}
catch
{
// ignored
}
}
private void Edt_HeatNo_EditorButtonClick(object sender, EditorButtonEventArgs e)
{
try
{
if (cbx_AutoRefresh.Checked) return;
if (e.Button.Key.ToUpper().Equals("CLEAR".ToUpper()))
{
if (!string.IsNullOrEmpty(Edt_StoveNo.Text.Trim()))
{
Edt_StoveNo.Tag = Edt_StoveNo.Text.Trim();
Edt_StoveNo.Clear();
}
else if (Edt_StoveNo.Tag != null) Edt_StoveNo.Text = Convert.ToString(Edt_StoveNo.Tag);
}
else if (e.Button.Key.ToUpper().Equals("EDIT".ToUpper()))
{
var frm = new frmHeatNoEditor {InputText = Edt_StoveNo.Text.Trim()};
frm.Location = ClsControlPack.GetChildWindowLocation(frm.Size);
if (frm.ShowDialog() == DialogResult.OK)
Edt_StoveNo.Text = frm.InputText;
}
}
catch
{
// ignored
}
}
#endregion
private void ucStoveQuery_Load(object sender, EventArgs e)
{
ClsControlPack.SetReadOnly(ugPlan);
EntityHelper.ShowGridCaption(ugPlan.DisplayLayout.Bands[0]);
ValueList vlist = ClsBusinessPack.GetHeatStatus();
ClsControlPack.SetGridValuelist(ref ugPlan, "HEATSTATE", ref vlist);
ugPlan.DisplayLayout.Bands[0].Columns["CastNo"].MergedCellStyle = MergedCellStyle.Always;
}
private void ugPlan_AfterRowActivate(object sender, EventArgs e)
{
// if (Activing) return;
/* if (bGiveUp)
{
ugPlan.ActiveRow = ugActiveRow;
bGiveUp = false;
// Activing = false;
return;
}*/
if (refresh) return;
if (GetStoveResultDelegate != null && ugPlan.ActiveRow != null)
{
var plnSteelforfurnaceEntity = ugPlan.ActiveRow.ListObject as PlnSteelforfurnaceEntity;
if (plnSteelforfurnaceEntity != null )
{
if ( plnSteelforfurnaceEntity.StoveNo!=Stove && Stove != "" && GiveUp != null )
{
//询问是否放弃编辑的时候 不刷新界面
AskGiveUp = true;
if (!GiveUp())
{
//放弃更改炉计划 则聚焦原炉计划
ugPlan.ActiveRow = ugPlan.Rows.AsEnumerable().Where(p =>
{
var row = p.ListObject as PlnSteelforfurnaceEntity;
if (row != null && row.StoveNo == Stove)
{
return true;
}
return false;
}).FirstOrDefault();
AskGiveUp = false;
return;
}
}
GetStoveResultDelegate(plnSteelforfurnaceEntity, plnSteelforfurnaceEntity.StoveNo == Stove);
Stove = plnSteelforfurnaceEntity.StoveNo;
AskGiveUp = false;
}
}
//Activing = false;
}
private void ugPlan_InitializeRow(object sender, InitializeRowEventArgs e)
{
PlnSteelforfurnaceEntity plnSteelforfurnaceEntity = e.Row.ListObject as PlnSteelforfurnaceEntity;
if (plnSteelforfurnaceEntity==null) return;
switch (_process)
{
case LG_PROCESS.EAF:
if (plnSteelforfurnaceEntity.BofStarttime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.BofStarttime) )
{
e.Row.Appearance.ResetBackColor();
}
else if (plnSteelforfurnaceEntity.BofEndtime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.BofEndtime))
{
e.Row.Appearance.BackColor = Color.LightGreen;
}
else
{
e.Row.Appearance.BackColor = Color.Yellow;
}
break;
case LG_PROCESS.LF:
if (plnSteelforfurnaceEntity.LfsStarttime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.LfsStarttime))
{
e.Row.Appearance.ResetBackColor();
}
else if (plnSteelforfurnaceEntity.LfsEndtime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.LfsEndtime))
{
e.Row.Appearance.BackColor = Color.LightGreen;
}
else
{
e.Row.Appearance.BackColor = Color.Yellow;
}
break;
case LG_PROCESS.VD:
if (plnSteelforfurnaceEntity.VdStarttime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.VdStarttime))
{
e.Row.Appearance.ResetBackColor();
}
else if (plnSteelforfurnaceEntity.VdEndtime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.VdEndtime))
{
e.Row.Appearance.BackColor = Color.LightGreen;
}
else
{
e.Row.Appearance.BackColor = Color.Yellow;
}
break;
case LG_PROCESS.RH:
if (plnSteelforfurnaceEntity.RhStarttime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.RhStarttime))
{
e.Row.Appearance.ResetBackColor();
}
else if (plnSteelforfurnaceEntity.RhEndtime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.RhEndtime))
{
e.Row.Appearance.BackColor = Color.LightGreen;
}
else
{
e.Row.Appearance.BackColor = Color.Yellow;
}
break;
case LG_PROCESS.CCM:
if (plnSteelforfurnaceEntity.CcmStarttime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.CcmStarttime))
{
e.Row.Appearance.ResetBackColor();
}
else if (plnSteelforfurnaceEntity.CcmEndtime == null || string.IsNullOrEmpty(plnSteelforfurnaceEntity.CcmEndtime))
{
e.Row.Appearance.BackColor = Color.LightGreen;
}
else
{
e.Row.Appearance.BackColor = Color.Yellow;
}
break;
}
}
}
}