Files
CheryFianlAssemblyLineNew/Analysis/CarDataDisplayForm/EHV/FEHVRightCarData.cs
T

479 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using BaseFunction;
using DAL;
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using UserControlClass;
namespace NSAnalysis
{
public partial class FEHVRightCarData : Telerik.WinControls.UI.ShapedForm
{
#region
private TMeasureMSSQLDAL tmdal = new TMeasureMSSQLDAL();
private DataTable dtVINData = new DataTable();
private string strLastVIN = "";
private CenterControl gCC = null;
private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker();
#endregion
public FEHVRightCarData(CenterControl cc)
{
InitializeComponent();
gCC = cc;
}
/// <summary>
/// 指定屏幕显示
/// </summary>
public void SpecifyScreenDisplay1()
{
try
{
Screen[] screens = Screen.AllScreens;
// 指定显示在第二个显示器
Screen secondScreen = screens[1]; //1
// 设置窗体位置和大小
this.StartPosition = FormStartPosition.Manual;
this.Left = secondScreen.Bounds.Left;
this.Top = secondScreen.Bounds.Top;
this.Width = secondScreen.Bounds.Width;
this.Height = secondScreen.Bounds.Height;
this.Show();
}
catch { }
}
#region
private void InitNextSenseControl()
{
string strNSName = "";
UCVWNextSense ucns = null;
for (int i = 1; i <= 25; i++)
{
strNSName = "";//L0" + i.ToString();
if (i <= 9)
strNSName = "R0" + i.ToString();
else
{
strNSName = "R" + i.ToString();
}
ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName));
if (ucns != null)
{
ucns.tlpBackColor = Color.White;
ucns.tlpFBackColor = Color.White;
ucns.tlpGBackColor = Color.White;
ucns.labFVal = "";
ucns.labFLowerUpper = "";
ucns.labGVal = "";
ucns.labGLowerUpper = "";
}
}
}
#endregion
private void FEHVRightCarData_Load(object sender, EventArgs e)
{
MyBase.TraceWriteLine("[FEHVRightCarData] 窗体开始加载");
//InitNextSenseOneItemControl();
InitNextSenseControl();
labVIN.Text = "";
tmrRefreshData.Interval = 1100;
//tmrRefreshData.Start();
m_bgwRefreshCar.WorkerSupportsCancellation = true;
m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork);
m_bgwRefreshCar.RunWorkerAsync();
SpecifyScreenDisplay1();
MyBase.TraceWriteLine("[FEHVRightCarData] 窗体加载完成,后台刷新线程已启动");
}
private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e)
{
while (!m_bgwRefreshCar.CancellationPending)
{
try
{
string strVIN = tmdal.SelectMaintenanceStation7VIN();
RefreshMonitor.LogRefreshActivity("FEHVRightCarData", strVIN, true);
RefreshMonitor.LogDatabaseQuery("FEHVRightCarData", "SelectMaintenanceStation7VIN", strVIN);
if (strLastVIN != strVIN)
{
MyBase.TraceWriteLine($"[FEHVRightCarData] VIN码变更: {strLastVIN} -> {strVIN}");
if (strVIN.ToLower().Contains("empty"))
{
Invoke((MethodInvoker)(() =>
{
labVIN.Text = "VIN码为空";
}));
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEHVRightCarData", "初始化控件(VIN为空)", 25);
MyBase.TraceWriteLine("[FEHVRightCarData] VIN码为空,初始化控件");
}
else
{
if (strVIN.Length == 17)
{
string strSubVIN = strVIN;//.Substring(0, strVIN.Length - 2);
dtVINData.Clear();
Invoke((MethodInvoker)(() =>
{
labVIN.Text = strSubVIN;
}));
string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN);
RefreshMonitor.LogDatabaseQuery("FEHVRightCarData", "SelectCarTypeByVIN", strCarType);
//记录到日志
MyBase.TraceWriteLine($"[FEHVRightCarData] 查询到车型: {strCarType} (VIN长度17)");
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
RefreshMonitor.LogDatabaseQuery("FEHVRightCarData", "SelectTMeasureDataByCarIDAndMPN", "查询测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEHVRightCarData] 获取测量数据: {dtVINData.Rows.Count} 行");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
RefreshMonitor.LogUIUpdate("FEHVRightCarData", "刷新测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEHVRightCarData] UI数据刷新完成,更新了 {dtVINData.Rows.Count} 个测量点");
}
else
{
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEHVRightCarData", "初始化控件(无测量数据)", 25);
MyBase.TraceWriteLine("[FEHVRightCarData] 无测量数据,初始化控件");
}
gCC.ShowCarMeasureDataByCarType(3);
}
else
{
MyBase.TraceWriteLine($"[FEHVRightCarData] 车型不匹配EHV: {strCarType}");
}
}
if (strVIN.Length == 21)
{
string strSubVIN = strVIN.Substring(0, 17);
dtVINData.Clear();
Invoke((MethodInvoker)(() =>
{
labVIN.Text = strSubVIN;
}));
string strCarType = strVIN.Substring(18, 3);
RefreshMonitor.LogDatabaseQuery("FEHVRightCarData", "ExtractCarTypeFromVIN", strCarType);
MyBase.TraceWriteLine($"[FEHVRightCarData] 从VIN提取车型: {strCarType} (VIN长度21)");
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
RefreshMonitor.LogDatabaseQuery("FEHVRightCarData", "SelectTMeasureDataByCarIDAndMPN", "查询测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEHVRightCarData] 获取测量数据: {dtVINData.Rows.Count} 行");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
RefreshMonitor.LogUIUpdate("FEHVRightCarData", "刷新测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEHVRightCarData] UI数据刷新完成,更新了 {dtVINData.Rows.Count} 个测量点");
}
else
{
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEHVRightCarData", "初始化控件(无测量数据)", 25);
MyBase.TraceWriteLine("[FEHVRightCarData] 无测量数据,初始化控件");
}
gCC.ShowCarMeasureDataByCarType(3);
}
else
{
MyBase.TraceWriteLine($"[FEHVRightCarData] 车型不匹配EHV: {strCarType}");
}
}
}
}
strLastVIN = strVIN;
}
catch (Exception ex)
{
RefreshMonitor.LogRefreshActivity("FEHVRightCarData", "ERROR", false);
MyBase.TraceWriteLine("Right EHV UI Refresh m_bgwRefreshCar_DoWork Error:" + ex.Message);
// 异常后等待更长时间再重试
System.Threading.Thread.Sleep(5000);
}
// 添加延时,避免CPU占用过高,同时检查取消请求
for (int i = 0; i < 11; i++) // 总共1100ms延时,分成11次检查
{
if (m_bgwRefreshCar.CancellationPending)
break;
System.Threading.Thread.Sleep(100);
}
}
}
private void btnRefresh_Click(object sender, EventArgs e)
{
SpecifyScreenDisplay1();
string strVIN = tmdal.SelectMaintenanceStation7VIN();
if (strVIN.ToLower().Contains("empty"))
{
labVIN.Text = "VIN码为空";
InitNextSenseControl();
}
else
{
if (strVIN.Length == 17)
{
string strSubVIN = strVIN;// strVIN.Substring(0, strVIN.Length - 2);
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN);
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh Button (strVIN.Length==17)CarType" + strCarType + " ;VIN: " + strSubVIN);
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
}
}
if (strVIN.Length == 21)
{
string strSubVIN = strVIN.Substring(0, strVIN.Length - 4);
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = strVIN.Substring(strVIN.Length - 3, 3);
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh Button (strVIN.Length==21)CarType" + strCarType + " ;VIN: " + strSubVIN);
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
}
}
}
}
private void tmrRefreshData_Tick(object sender, EventArgs e)
{
try
{
tmrRefreshData.Stop();
string strVIN = tmdal.SelectMaintenanceStation7VIN();
if (strLastVIN != strVIN)
{
if (strVIN.ToLower().Contains("empty"))
{
labVIN.Text = "VIN码为空";
//InitNextSenseOneItemControl();
InitNextSenseControl();
}
else
{
if (strVIN.Length == 17)
{
string strSubVIN = strVIN;//.Substring(0, strVIN.Length - 2);
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN);
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh tmrRefreshData (strVIN.Length==17)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
gCC.ShowCarMeasureDataByCarType(3);
}
}
if (strVIN.Length == 21)
{
string strSubVIN = strVIN.Substring(0, 17);
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = strVIN.Substring(18, 3);
if (strCarType.ToUpper().Contains("EHV"))
{
MyBase.TraceWriteLine("Right EHV UI Refresh tmrRefreshData (strVIN.Length==21)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
gCC.ShowCarMeasureDataByCarType(3);
}
}
}
}
strLastVIN = strVIN;
tmrRefreshData.Start();
}
catch (Exception ex)
{
MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message);
}
}
private Color analysisColorbyStatus(string strStatus)
{
Color colStatus = new Color();
switch (strStatus.ToLower())
{
case "best":
colStatus = Color.Lime;
break;
case "good":
colStatus = Color.Lime;
break;
case "ng1":
colStatus = Color.Yellow;
break;
case "ng2":
colStatus = Color.Red;
break;
default:
colStatus = Color.LightGray;
break;
}
return colStatus;
}
private void analysisTitleColor()
{
string strNSName = "";
UCVWNextSense ucns = null;
for (int i = 1; i <= 25; i++)
{
if (i <= 9)
strNSName = "R0" + i.ToString();
else
{
strNSName = "R" + i.ToString();
}
ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName));
Invoke((MethodInvoker)(() =>
{
if (ucns != null)
{
if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red)
{
ucns.tlpBackColor = Color.Red;
}
else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray)
{
ucns.tlpBackColor = Color.LightGray;
}
else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow)
{
ucns.tlpBackColor = Color.Yellow;
}
else
{
ucns.tlpBackColor = Color.Lime;
}
}
}));
}
}
private void refreshCarUIData(DataTable dtData)
{
string strNSName = "";
string strFGName = "";
UCVWNextSense ucns = null;
for (int i = 0; i < dtData.Rows.Count; i++)
{
strNSName = dtData.Rows[i]["MeasPointName"].ToString().Replace("-", "");
strFGName = dtData.Rows[i]["DimensionName"].ToString();
ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName));
Invoke((MethodInvoker)(() =>
{
if (ucns != null)
{
if (strFGName == "F")
{
ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString();
ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString();
ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString());
}
else
{
ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString();
ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString();
ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString());
}
}
}));
}
}
private void FEHVRightCarData_FormClosing(object sender, FormClosingEventArgs e)
{
// 停止后台工作线程
if (m_bgwRefreshCar.IsBusy)
{
m_bgwRefreshCar.CancelAsync();
// 等待线程结束,最多等待3秒
int waitCount = 0;
while (m_bgwRefreshCar.IsBusy && waitCount < 30)
{
System.Threading.Thread.Sleep(100);
waitCount++;
}
}
e.Cancel = true;
this.Hide();
}
}
}