Files
CheryFianlAssemblyLineNew/Analysis/CarDataDisplayForm/FEHVLeftCarData.cs
T
2026-03-16 10:12:40 +08:00

487 lines
15 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 FEH3LeftCarData : Telerik.WinControls.UI.ShapedForm
{
#region
private TMeasureMSSQLDAL tmdal = new TMeasureMSSQLDAL();
private DataTable dtVINData = new DataTable();
private string strLastVIN = "";
private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker();
private CenterControl gCC = null;
#endregion
public FEH3LeftCarData(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.WorkingArea.Left;
this.Top = secondScreen.WorkingArea.Top;
this.Width = secondScreen.WorkingArea.Width;
this.Height = secondScreen.WorkingArea.Height;
this.Show();
}
catch { }
}
#region
private void InitNextSenseControl()
{
string strNSName = "";
UCVWNextSense ucns = null;
for (int i = 1; i <= 30; i++)
{
strNSName = "";//L0" + i.ToString();
if (i <= 9)
strNSName = "L0" + i.ToString();
else
{
strNSName = "L" + 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 FEH3LeftCarData_Load(object sender, EventArgs e)
{
MyBase.TraceWriteLine("[FEH3LeftCarData] 窗体开始加载");
//InitNextSenseOneItemControl();
InitNextSenseControl();
labVIN.Text = "";
tmrRefreshData.Interval = 1000;
//tmrRefreshData.Start();
m_bgwRefreshCar.WorkerSupportsCancellation = true;
m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork);
m_bgwRefreshCar.RunWorkerAsync();
SpecifyScreenDisplay1();
MyBase.TraceWriteLine("[FEH3LeftCarData] 窗体加载完成,后台刷新线程已启动");
}
private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e)
{
MyBase.TraceWriteLine("[FEH3LeftCarData] 后台刷新线程开始运行");
while (!m_bgwRefreshCar.CancellationPending)
{
try
{
string strVIN = tmdal.SelectMaintenanceStation7VIN();
RefreshMonitor.LogRefreshActivity("FEH3LeftCarData", strVIN, true);
RefreshMonitor.LogDatabaseQuery("FEH3LeftCarData", "SelectMaintenanceStation7VIN", strVIN);
if (strLastVIN != strVIN)
{
MyBase.TraceWriteLine($"[FEH3LeftCarData] VIN码变更: {strLastVIN} -> {strVIN}");
if (strVIN.ToLower().Contains("empty"))
{
Invoke((MethodInvoker)(() =>
{
labVIN.Text = "VIN码为空";
}));
//InitNextSenseOneItemControl();
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEH3LeftCarData", "初始化控件(VIN为空)", 30);
MyBase.TraceWriteLine("[FEH3LeftCarData] VIN码为空,初始化控件");
}
else
{
if (strVIN.Length == 17)
{
string strSubVIN = strVIN;
dtVINData.Clear();
Invoke((MethodInvoker)(() =>
{
labVIN.Text = strSubVIN;
}));
string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN);
RefreshMonitor.LogDatabaseQuery("FEH3LeftCarData", "SelectCarTypeByVIN", strCarType);
MyBase.TraceWriteLine($"[FEH3LeftCarData] 查询到车型: {strCarType} (VIN长度17)");
if (strCarType.ToUpper().Contains("EH3"))
{
MyBase.TraceWriteLine("Left EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
RefreshMonitor.LogDatabaseQuery("FEH3LeftCarData", "SelectTMeasureDataByCarIDAndMPN", "查询测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEH3LeftCarData] 获取测量数据: {dtVINData.Rows.Count} 行");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
RefreshMonitor.LogUIUpdate("FEH3LeftCarData", "刷新测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEH3LeftCarData] UI数据刷新完成,更新了 {dtVINData.Rows.Count} 个测量点");
}
else
{
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEH3LeftCarData", "初始化控件(无测量数据)", 30);
MyBase.TraceWriteLine("[FEH3LeftCarData] 无测量数据,初始化控件");
}
gCC.ShowCarMeasureDataByCarType(1);
}
else
{
MyBase.TraceWriteLine($"[FEH3LeftCarData] 车型不匹配EH3: {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("FEH3LeftCarData", "ExtractCarTypeFromVIN", strCarType);
MyBase.TraceWriteLine($"[FEH3LeftCarData] 从VIN提取车型: {strCarType} (VIN长度21)");
if (strCarType.ToUpper().Contains("EH3"))
{
MyBase.TraceWriteLine("Left EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
RefreshMonitor.LogDatabaseQuery("FEH3LeftCarData", "SelectTMeasureDataByCarIDAndMPN", "查询测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEH3LeftCarData] 获取测量数据: {dtVINData.Rows.Count} 行");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
RefreshMonitor.LogUIUpdate("FEH3LeftCarData", "刷新测量数据", dtVINData.Rows.Count);
MyBase.TraceWriteLine($"[FEH3LeftCarData] UI数据刷新完成,更新了 {dtVINData.Rows.Count} 个测量点");
}
else
{
InitNextSenseControl();
RefreshMonitor.LogUIUpdate("FEH3LeftCarData", "初始化控件(无测量数据)", 30);
MyBase.TraceWriteLine("[FEH3LeftCarData] 无测量数据,初始化控件");
}
gCC.ShowCarMeasureDataByCarType(1);
}
else
{
MyBase.TraceWriteLine($"[FEH3LeftCarData] 车型不匹配EH3: {strCarType}");
}
}
}
}
strLastVIN = strVIN;
}
catch (Exception ex)
{
RefreshMonitor.LogRefreshActivity("FEH3LeftCarData", "ERROR", false);
MyBase.TraceWriteLine("[FEH3LeftCarData] 后台刷新线程异常: " + ex.Message);
MyBase.TraceWriteLine("[FEH3LeftCarData] 异常堆栈: " + ex.StackTrace);
// 异常后等待更长时间再重试
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);
}
}
MyBase.TraceWriteLine("[FEH3LeftCarData] 后台刷新线程已停止");
}
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);
MyBase.TraceWriteLine("Left EH3 UI Refresh Button (strVIN.Length==17)CarType" + strCarType + " ;VIN: " + strSubVIN);
if (strCarType.ToUpper().Contains("EH3"))
{
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
}
}
if (strVIN.Length == 21)
{
string strSubVIN = strVIN.Substring(0, 17);
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = strVIN.Substring(18, 3);
MyBase.TraceWriteLine("Left EH3 UI Refresh Button (strVIN.Length==21)CarType" + strCarType + " ;VIN: " + strSubVIN);
if (strCarType.ToUpper().Contains("EH3"))
{
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
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;
dtVINData.Clear();
labVIN.Text = strSubVIN;
string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN);
if (strCarType.ToUpper().Contains("EH3"))
{
MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==17)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
gCC.ShowCarMeasureDataByCarType(1);
}
}
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("EH3"))
{
MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==21)strLastVIN" + strLastVIN + " ;VIN: " + strSubVIN);
SpecifyScreenDisplay1();
dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L");
if (dtVINData.Rows.Count > 0)
{
refreshCarUIData(dtVINData);
analysisTitleColor();
}
else
{
InitNextSenseControl();
}
gCC.ShowCarMeasureDataByCarType(1);
}
}
}
}
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 = "L0" + i.ToString();
else
{
strNSName = "L" + 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 FEH3LeftCarData_FormClosing(object sender, FormClosingEventArgs e)
{
MyBase.TraceWriteLine("[FEH3LeftCarData] 窗体开始关闭");
// 停止后台工作线程
if (m_bgwRefreshCar.IsBusy)
{
MyBase.TraceWriteLine("[FEH3LeftCarData] 正在停止后台刷新线程...");
m_bgwRefreshCar.CancelAsync();
// 等待线程结束,最多等待3秒
int waitCount = 0;
while (m_bgwRefreshCar.IsBusy && waitCount < 30)
{
System.Threading.Thread.Sleep(100);
waitCount++;
}
MyBase.TraceWriteLine($"[FEH3LeftCarData] 后台线程停止完成,等待了 {waitCount * 100}ms");
}
// 输出最终统计信息
MyBase.TraceWriteLine("[FEH3LeftCarData] 最终统计: " + RefreshMonitor.GetStatistics("FEH3LeftCarData"));
e.Cancel = true;
this.Hide();
MyBase.TraceWriteLine("[FEH3LeftCarData] 窗体已隐藏");
}
}
}