#260316 新增EHV车型的界面设计

This commit is contained in:
zhengxuan.zhang
2026-03-16 10:12:40 +08:00
parent ae7348c629
commit ea00a90056
6 changed files with 10588 additions and 0 deletions
@@ -0,0 +1,487 @@
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] 窗体已隐藏");
}
}
}