1181 lines
36 KiB
C#
1181 lines
36 KiB
C#
using BaseFunction;
|
||
|
||
using NSAnalysis.DAL;
|
||
using NSAnalysis.Model;
|
||
using NSAnalysis.Properties;
|
||
|
||
using System;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.IO;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using Telerik.WinControls;
|
||
using Telerik.WinControls.UI;
|
||
|
||
namespace NSAnalysis
|
||
{
|
||
public partial class FormMain : Telerik.WinControls.UI.ShapedForm
|
||
{
|
||
private Timer fileSortTimer = new Timer(); // 定时器,用于定时分发任务
|
||
private FileSorter fileSorter = new FileSorter();
|
||
|
||
#region 全局变量
|
||
|
||
private int[] yValues = new int[3];
|
||
private string[] xValues = new string[3];
|
||
private DataTable dtCSVContent = new DataTable();
|
||
|
||
private CjlrDAL tmdal = new CjlrDAL();
|
||
|
||
private bool bReadCSVFlag = false;
|
||
|
||
private int iLastMesureCount = 0;
|
||
|
||
#region 分页全局变量
|
||
|
||
private DataTable PageTable = new DataTable();
|
||
|
||
/// <summary>
|
||
/// 每页记录数
|
||
/// </summary>
|
||
public int pageSize = 20;
|
||
|
||
/// <summary>
|
||
/// 总记录数
|
||
/// </summary>
|
||
public int recordCount = 0;
|
||
|
||
/// <summary>
|
||
/// 总页数
|
||
/// </summary>
|
||
public int pageCount = 0;
|
||
|
||
/// <summary>
|
||
/// 当前页
|
||
/// </summary>
|
||
public int currentPage = 0;
|
||
|
||
#endregion 分页全局变量
|
||
|
||
#endregion 全局变量
|
||
|
||
#region 主窗口事件
|
||
|
||
public FormMain()
|
||
{
|
||
InitializeComponent();
|
||
SQLHelper.connStr = DatabaseDfn.SqlConnectStr();
|
||
|
||
//加载皮肤
|
||
ThemeResolutionService.LoadPackageFile(ConfigDfn.strTheme);
|
||
this.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5);
|
||
RPV.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5);
|
||
}
|
||
|
||
private void FormMain_Load(object sender, EventArgs e)
|
||
{
|
||
//初始化全局变量
|
||
|
||
MyBase.rleMessage = rleMessage;
|
||
rdtpStartTime.Text = DateTime.Now.ToString("yyyy-MM-dd");
|
||
rdtpEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd");
|
||
|
||
// 定时处理任务
|
||
fileSortTimer.Interval = 10000; // 每60秒检查一次分发任务
|
||
fileSortTimer.Tick += FileSortTimer_Tick;
|
||
fileSortTimer.Start();
|
||
|
||
// 订阅处理中事件
|
||
fileSorter.OnFileParsed += FileSorter_OnFileParsed;
|
||
|
||
|
||
|
||
//绑定按钮
|
||
lpcSoftwareSetup.labPicture.Click += new EventHandler(lpcSoftwareSetup_Click);
|
||
lpcSoftwareSetup.labText.Click += new EventHandler(lpcSoftwareSetup_Click);
|
||
|
||
lpcToleranceSetup.labPicture.Click += new EventHandler(lpcToleranceSetup_Click);
|
||
lpcToleranceSetup.labText.Click += new EventHandler(lpcToleranceSetup_Click);
|
||
|
||
lpcAboutSoftware.labPicture.Click += new EventHandler(lpcAboutSoftware_Click);
|
||
lpcAboutSoftware.labText.Click += new EventHandler(lpcAboutSoftware_Click);
|
||
|
||
lpcShowLog.labPicture.Click += new EventHandler(lpcShowLog_Click);
|
||
lpcShowLog.labText.Click += new EventHandler(lpcShowLog_Click);
|
||
|
||
iLastMesureCount = tmdal.SelectTMeasureResultCount();
|
||
|
||
#region 清空信息
|
||
|
||
labVIN.Text = "";
|
||
labOKCount.Text = "";
|
||
labNGCount.Text = "";
|
||
labRejectCount.Text = "";
|
||
labSumMeasureCount.Text = "";
|
||
labMeaTime.Text = "";
|
||
labResultPercent.Text = "";
|
||
labResult.Text = "";
|
||
labCarType.Text = "";
|
||
|
||
#endregion 清空信息
|
||
|
||
InitTableColumns();
|
||
|
||
}
|
||
|
||
private void InitTableColumns()
|
||
{
|
||
#region 测量数据表始化表
|
||
|
||
//创建虚拟表
|
||
DataColumn column2 = new DataColumn("CarID", Type.GetType("System.String"));
|
||
DataColumn dcCarType = new DataColumn("CarType", Type.GetType("System.String"));
|
||
DataColumn column3 = new DataColumn("MeasPointName", Type.GetType("System.String"));
|
||
DataColumn column4 = new DataColumn("DimensionName", Type.GetType("System.String"));
|
||
DataColumn column5 = new DataColumn("NormalValue", Type.GetType("System.String"));
|
||
DataColumn column6 = new DataColumn("LowerTolVal", Type.GetType("System.String"));
|
||
DataColumn column7 = new DataColumn("UpperTolVal", Type.GetType("System.String"));
|
||
DataColumn column8 = new DataColumn("MeasureValue", Type.GetType("System.String"));
|
||
DataColumn column10 = new DataColumn("MeasureItemResult", Type.GetType("System.String"));
|
||
DataColumn column9 = new DataColumn("MeasureDate", Type.GetType("System.DateTime"));
|
||
DataColumn column1 = new DataColumn("Remark", Type.GetType("System.String"));
|
||
//将列添加到table表中
|
||
|
||
dtCSVContent.Columns.Add(column2);
|
||
dtCSVContent.Columns.Add(dcCarType);
|
||
dtCSVContent.Columns.Add(column3);
|
||
dtCSVContent.Columns.Add(column4);
|
||
dtCSVContent.Columns.Add(column5);
|
||
dtCSVContent.Columns.Add(column6);
|
||
dtCSVContent.Columns.Add(column7);
|
||
dtCSVContent.Columns.Add(column8);
|
||
dtCSVContent.Columns.Add(column10);
|
||
dtCSVContent.Columns.Add(column9);
|
||
dtCSVContent.Columns.Add(column1);
|
||
|
||
#endregion 测量数据表始化表
|
||
|
||
#region 极差数据Table初始化
|
||
|
||
//创建虚拟表
|
||
DataColumn dcCarID = new DataColumn("CarID", Type.GetType("System.String"));
|
||
DataColumn dcRangeName = new DataColumn("RangeName", Type.GetType("System.String"));
|
||
DataColumn dcRangeValue = new DataColumn("RangeValue", Type.GetType("System.String"));
|
||
DataColumn dcRangeLowUpp = new DataColumn("RangeLowUpp", Type.GetType("System.String"));
|
||
DataColumn dcResult = new DataColumn("Result", Type.GetType("System.String"));
|
||
DataColumn dcCreateTime = new DataColumn("CreateTime", Type.GetType("System.DateTime"));
|
||
DataColumn dcRemark = new DataColumn("Remark", Type.GetType("System.String"));
|
||
//将列添加到table表中
|
||
|
||
#endregion 极差数据Table初始化
|
||
|
||
#region 分页相关
|
||
|
||
//创建分页虚拟表
|
||
DataColumn column11 = new DataColumn("CarID", Type.GetType("System.String"));
|
||
DataColumn column12 = new DataColumn("MeasPointName", Type.GetType("System.String"));
|
||
DataColumn column13 = new DataColumn("DimensionName", Type.GetType("System.String"));
|
||
DataColumn column14 = new DataColumn("NormalValue", Type.GetType("System.String"));
|
||
DataColumn column15 = new DataColumn("LowerTolVal", Type.GetType("System.String"));
|
||
DataColumn column16 = new DataColumn("UpperTolVal", Type.GetType("System.String"));
|
||
DataColumn column17 = new DataColumn("MeasureValue", Type.GetType("System.String"));
|
||
DataColumn column18 = new DataColumn("MeasureDate", Type.GetType("System.String"));
|
||
DataColumn column19 = new DataColumn("MeasureItemResult", Type.GetType("System.String"));
|
||
|
||
//将列添加到table表中
|
||
PageTable.Columns.Add(column11);
|
||
PageTable.Columns.Add(column12);
|
||
PageTable.Columns.Add(column13);
|
||
PageTable.Columns.Add(column14);
|
||
PageTable.Columns.Add(column15);
|
||
PageTable.Columns.Add(column16);
|
||
PageTable.Columns.Add(column17);
|
||
PageTable.Columns.Add(column18);
|
||
PageTable.Columns.Add(column19);
|
||
|
||
labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页
|
||
labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数
|
||
labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数
|
||
rddlPageRecorderCount.SelectedIndex = 0;
|
||
|
||
#endregion 分页相关
|
||
}
|
||
|
||
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
if (DialogResult.Yes == MessageBox.Show("警告:您确定要退出该软件系统吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
|
||
{
|
||
}
|
||
else
|
||
{
|
||
e.Cancel = true;
|
||
}
|
||
}
|
||
|
||
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
|
||
{
|
||
MyBase.TraceWriteLine("-------------海克斯康面隙分析软件程序关闭---------------------");
|
||
LogDebugDfn.strEndTime = DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss");
|
||
string CopyFileName = ConfigDfn.strFileFolder + "\\DebugFiles\\" + "Debug(" + LogDebugDfn.strStartTime + " To " + LogDebugDfn.strEndTime + ")" + ".txt";
|
||
if (File.Exists(LogDebugDfn.strDebugFile))
|
||
File.Copy(LogDebugDfn.strDebugFile, CopyFileName);
|
||
System.Environment.Exit(0);
|
||
}
|
||
|
||
#endregion 主窗口事件
|
||
|
||
private void tmSystem_Tick(object sender, EventArgs e)
|
||
{
|
||
rleTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
if (ConfigDfn.iAnalysisCSVFlag == 1)
|
||
rleReadCSVStatus.ForeColor = bReadCSVFlag ? Color.Green : Color.White;
|
||
bReadCSVFlag = !bReadCSVFlag;
|
||
}
|
||
|
||
private void FileSortTimer_Tick(object sender, EventArgs e) //分发定时器
|
||
{
|
||
// 后台运行,避免阻塞UI
|
||
Task.Run(() =>
|
||
{
|
||
try
|
||
{
|
||
fileSorter.ProcessFiles();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine($"分发任务异常: {ex.Message}");
|
||
}
|
||
});
|
||
}
|
||
|
||
private void DisplayMeasureData(string strCarID)
|
||
{
|
||
try
|
||
{
|
||
#region 左侧统计和饼图、合格率
|
||
|
||
MyBase.TraceWriteLine("正在查询车ID为:" + strCarID + " 的测量结果。");
|
||
DataTable sampleData = tmdal.SelectMeasureResultByCarID(strCarID);
|
||
|
||
AnalysisResult analysis = AnalysisResult.AnalyzeMeasureData(sampleData);
|
||
AnalysisResult.DisplayAnalysisResult(analysis);
|
||
|
||
// 记录正在查询
|
||
|
||
//表格行数
|
||
int dtRowCount = analysis.TotalCount;
|
||
//超差个数
|
||
double OutCount = analysis.OutCount;
|
||
//Ok个数
|
||
double OKCount = analysis.OKCount;
|
||
//异常个数
|
||
double RejectedCount = analysis.RejectedCount;
|
||
//合格率
|
||
double FPYPercent = analysis.FPYPercent;
|
||
|
||
labVIN.Text = strCarID;
|
||
labCarType.Text = ConfigDfn.strCarModel;
|
||
TMeasureResultModel tmrm = new TMeasureResultModel();
|
||
labNGCount.Text = OutCount.ToString();
|
||
labOKCount.Text = OKCount.ToString();
|
||
labRejectCount.Text = RejectedCount.ToString();
|
||
labMeaTime.Text = ConfigDfn.strMeasureTime;
|
||
labSumMeasureCount.Text = dtRowCount.ToString();
|
||
FPYPercent = OKCount / (OKCount + OutCount);
|
||
if (FPYPercent >= ConfigDfn.dFPY)
|
||
{
|
||
labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%";
|
||
labResult.Text = "合格";
|
||
labResultPercent.ForeColor = Color.LimeGreen;
|
||
labResult.ForeColor = Color.LimeGreen;
|
||
pbResult.Image = Resources.OK;
|
||
tmrm.Result = 1;
|
||
}
|
||
else if (FPYPercent >= ConfigDfn.dFPY2 && FPYPercent < ConfigDfn.dFPY)
|
||
{
|
||
labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%";
|
||
labResult.Text = "合格";
|
||
labResultPercent.ForeColor = Color.Yellow;
|
||
labResult.ForeColor = Color.Yellow;
|
||
pbResult.Image = Resources.OK;
|
||
tmrm.Result = 1;
|
||
}
|
||
else
|
||
{
|
||
labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%";
|
||
labResult.Text = "不合格";
|
||
labResultPercent.ForeColor = Color.Red;
|
||
labResult.ForeColor = Color.Red;
|
||
pbResult.Image = Resources.NG;
|
||
tmrm.Result = 2;
|
||
}
|
||
xValues[0] = "合格 : " + OKCount.ToString();
|
||
xValues[1] = "不合格 : " + OutCount.ToString();
|
||
xValues[2] = "异常 : " + RejectedCount.ToString();
|
||
yValues[0] = (int)OKCount;
|
||
yValues[1] = (int)OutCount;
|
||
yValues[2] = (int)RejectedCount;
|
||
chartResultPie.Series[0].Points.DataBindXY(xValues, yValues);
|
||
|
||
string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%";
|
||
|
||
tmrm.CarID = strCarID;
|
||
tmrm.CarType = ConfigDfn.strCarModel;
|
||
tmrm.SumMeasureItems = dtRowCount;
|
||
tmrm.GoodMeasureItems = (int)OKCount;
|
||
tmrm.NoGoodMeasureItems = (int)OutCount;
|
||
tmrm.RejectMeasureItems = (int)RejectedCount;
|
||
tmrm.FPY = FPYPercent.ToString("F4");
|
||
tmrm.Remark = "";
|
||
tmrm.MeasureDate = ConfigDfn.strMeasureTime;
|
||
tmdal.InsertTMeasureResult(tmrm);
|
||
MyBase.TraceWriteLine("将总结果插入数据库完毕。");
|
||
|
||
#endregion 左侧统计和饼图、合格率
|
||
|
||
#region 表单区填充
|
||
|
||
DataTable dataTable = tmdal.SelectMeasureDataByCarID(strCarID);
|
||
|
||
// 判断是否有数据
|
||
if (dataTable == null || dataTable.Rows.Count == 0)
|
||
{
|
||
MyBase.TraceWriteLine("没有找到车ID为:" + strCarID + " 的测量数据。");
|
||
return;
|
||
}
|
||
dgvMeasureContent.DataSource = dataTable;
|
||
|
||
this.dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.White;
|
||
if (dgvMeasureContent.Rows.Count > 0)
|
||
{
|
||
SetdgvRowBgColor(dgvMeasureContent);
|
||
for (int i = 0; i < dgvMeasureContent.Rows.Count; i++)
|
||
{
|
||
//if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ok"))
|
||
//{
|
||
// dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange;
|
||
//}
|
||
if (dgvMeasureContent.Rows[i].Cells["Classification"].Value.ToString().ToLower().Contains("ng"))
|
||
{
|
||
dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange;
|
||
}
|
||
else if (string.IsNullOrEmpty(dgvMeasureContent.Rows[i].Cells["Classification"].Value.ToString()))
|
||
{
|
||
dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Red;
|
||
}
|
||
else
|
||
{
|
||
}
|
||
}
|
||
}
|
||
|
||
#endregion 表单区填充
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine("[AnalysisNextSenseCSV] 函数分析异常:" + ex.ToString());
|
||
}
|
||
}
|
||
|
||
private void FileSorter_OnFileParsed(string strCarID)
|
||
{
|
||
// 线程安全更新 UI
|
||
if (InvokeRequired)
|
||
{
|
||
Invoke(new Action<string>(FileSorter_OnFileParsed), strCarID);
|
||
return;
|
||
}
|
||
|
||
// 这里可以更新界面控件,例如 ListBox、Label 等
|
||
// 例如:listBoxParsedFiles.Items.Add(fileName);
|
||
// 或 rleMessage.Text = $"已解析: {fileName}";
|
||
rleMessage.Text = $"已解析: {strCarID}";
|
||
|
||
|
||
// 显示数据, 此时为左侧或右侧数据
|
||
DisplayMeasureData(strCarID);
|
||
|
||
|
||
}
|
||
|
||
|
||
/// 通过给定的文件流,判断文件的编码类型
|
||
/// <param name="fs">文件流</param>
|
||
/// <returns>文件的编码类型</returns>
|
||
public static Encoding GetType(FileStream fs)
|
||
{
|
||
byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
|
||
byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
|
||
byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM
|
||
System.Text.Encoding reVal = System.Text.Encoding.Default;
|
||
|
||
System.IO.BinaryReader r = new System.IO.BinaryReader(fs, System.Text.Encoding.Default);
|
||
int i;
|
||
int.TryParse(fs.Length.ToString(), out i);
|
||
byte[] ss = r.ReadBytes(i);
|
||
if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
|
||
{
|
||
reVal = System.Text.Encoding.UTF8;
|
||
}
|
||
else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
|
||
{
|
||
reVal = System.Text.Encoding.BigEndianUnicode;
|
||
}
|
||
else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
|
||
{
|
||
reVal = System.Text.Encoding.Unicode;
|
||
}
|
||
r.Close();
|
||
return reVal;
|
||
}
|
||
|
||
/// 判断是否是不带 BOM 的 UTF8 格式
|
||
/// <param name="data"></param>
|
||
/// <returns></returns>
|
||
private static bool IsUTF8Bytes(byte[] data)
|
||
{
|
||
int charByteCounter = 1; //计算当前正分析的字符应还有的字节数
|
||
byte curByte; //当前分析的字节.
|
||
for (int i = 0; i < data.Length; i++)
|
||
{
|
||
curByte = data[i];
|
||
if (charByteCounter == 1)
|
||
{
|
||
if (curByte >= 0x80)
|
||
{
|
||
//判断当前
|
||
while (((curByte <<= 1) & 0x80) != 0)
|
||
{
|
||
charByteCounter++;
|
||
}
|
||
//标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X
|
||
if (charByteCounter == 1 || charByteCounter > 6)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//若是UTF-8 此时第一位必须为1
|
||
if ((curByte & 0xC0) != 0x80)
|
||
{
|
||
return false;
|
||
}
|
||
charByteCounter--;
|
||
}
|
||
}
|
||
if (charByteCounter > 1)
|
||
{
|
||
throw new Exception("非预期的byte格式");
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public Encoding GetType(string FileName)
|
||
{
|
||
FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
|
||
Encoding er = GetType(fs);
|
||
fs.Close();
|
||
return er;
|
||
}
|
||
|
||
private void btn_MouseHover(object sender, EventArgs e)
|
||
{
|
||
RadButton btn = sender as RadButton;
|
||
btn.BackColor = Color.FromArgb(0, 151, 186);
|
||
}
|
||
|
||
private void btn_MouseLeave(object sender, EventArgs e)
|
||
{
|
||
RadButton btn = sender as RadButton;
|
||
btn.BackColor = Color.FromArgb(19, 46, 53);
|
||
}
|
||
|
||
public void SetdgvRowBgColor(DataGridView dgv) //设置DataGridView各行变色
|
||
{
|
||
if (dgv.Rows.Count > 0)
|
||
{
|
||
foreach (DataGridViewRow item in dgv.Rows)
|
||
{
|
||
if (item.Index % 2 == 0)
|
||
{
|
||
item.DefaultCellStyle.BackColor = Color.FromArgb(19, 46, 53);
|
||
}
|
||
else
|
||
{
|
||
item.DefaultCellStyle.BackColor = Color.FromArgb(27, 60, 68);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
#region 按钮事件
|
||
|
||
#region datagridview分页功能
|
||
|
||
private void LoadPage()
|
||
{
|
||
if (currentPage < 1) currentPage = 1;
|
||
if (currentPage > pageCount) currentPage = pageCount;
|
||
|
||
int beginRecord; //开始指针
|
||
int endRecord; //结束指针
|
||
DataTable dtTemp;
|
||
dtTemp = PageTable.Clone();//Clone方法只会复制DataTable的结构(列定义),而不会复制数据行的引用。
|
||
|
||
beginRecord = pageSize * (currentPage - 1);
|
||
if (currentPage == 1) beginRecord = 0;
|
||
endRecord = pageSize * currentPage;
|
||
|
||
if (currentPage == pageCount) endRecord = recordCount;
|
||
for (int i = beginRecord; i < endRecord; i++)
|
||
{
|
||
// 使用ImportRow方法将源PageTable的行导入到目标dtTemp
|
||
dtTemp.ImportRow(PageTable.Rows[i]);
|
||
}
|
||
|
||
dgvSelectMeasureData.Rows.Clear();
|
||
|
||
for (int i = 0; i < dtTemp.Rows.Count; i++)
|
||
{
|
||
dgvSelectMeasureData.Rows.Add(new object[] { dtTemp.Rows[i][0], dtTemp.Rows[i][1], dtTemp.Rows[i][2], dtTemp.Rows[i][3], dtTemp.Rows[i][4], dtTemp.Rows[i][5], dtTemp.Rows[i][6], dtTemp.Rows[i][7], dtTemp.Rows[i][8] });
|
||
}
|
||
SetdgvRowBgColor(dgvSelectMeasureData);
|
||
for (int i = 0; i < dgvSelectMeasureData.Rows.Count; i++)
|
||
{
|
||
string strResult = dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Value.ToString();
|
||
if (strResult.ToLower().Contains("ng"))
|
||
{
|
||
//dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Orange;
|
||
dgvSelectMeasureData.Rows[i].DefaultCellStyle.BackColor = Color.Orange;
|
||
}
|
||
if (strResult.ToLower().Contains("rej"))
|
||
{
|
||
dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Red;
|
||
}
|
||
}
|
||
labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页
|
||
labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数
|
||
labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数
|
||
}
|
||
|
||
private void rbtnFirtstPage_Click(object sender, EventArgs e)
|
||
{
|
||
if (currentPage == 1)
|
||
{ return; }
|
||
currentPage = 1;
|
||
LoadPage();
|
||
}
|
||
|
||
private void rbtnPrevPage_Click(object sender, EventArgs e)
|
||
{
|
||
if (currentPage == 1)
|
||
{ return; }
|
||
currentPage--;
|
||
LoadPage();
|
||
}
|
||
|
||
private void rbtnNextPage_Click(object sender, EventArgs e)
|
||
{
|
||
if (currentPage == pageCount)
|
||
{ return; }
|
||
currentPage++;
|
||
LoadPage();
|
||
}
|
||
|
||
private void rbtnLastPage_Click(object sender, EventArgs e)
|
||
{
|
||
if (currentPage == pageCount)
|
||
{ return; }
|
||
currentPage = pageCount;
|
||
LoadPage();
|
||
}
|
||
|
||
private void rddlPageRecorderCount_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
|
||
{
|
||
pageSize = int.Parse(rddlPageRecorderCount.Text.Trim());
|
||
//PageSorter();
|
||
}
|
||
|
||
#endregion datagridview分页功能
|
||
|
||
private void rbtnSearchMeaserData_Click(object sender, EventArgs e)
|
||
{
|
||
dgvFPYResult.Visible = false;
|
||
chartFPYLine.Visible = false;
|
||
rbtnExportCSVReport.Visible = false;
|
||
string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00";
|
||
string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59";
|
||
string strCarID = rtbPartID.Text.Trim();
|
||
PageTable.Clear();
|
||
PageTable = tmdal.SelectTMeasureDataByCarIDAndTime(strCarID, strStartTime, strEndTime);
|
||
if (PageTable.Rows.Count > 0)
|
||
{
|
||
recordCount = PageTable.Rows.Count; //记录总行数
|
||
pageCount = (recordCount / pageSize);
|
||
if ((recordCount % pageSize) > 0)
|
||
{
|
||
pageCount++;
|
||
}
|
||
|
||
//默认第一页
|
||
currentPage = 1;
|
||
|
||
LoadPage();//调用加载数据的方法
|
||
dgvSelectMeasureData.Visible = true;
|
||
rbtnExportCSVReport.Visible = true;
|
||
pnlPage.Visible = true;
|
||
labSearchResult.Visible = false;
|
||
pnlPage.Visible = true;
|
||
}
|
||
else
|
||
{
|
||
dgvSelectMeasureData.Visible = false;
|
||
labSearchResult.Visible = true;
|
||
rbtnExportCSVReport.Visible = false;
|
||
pnlPage.Visible = false;
|
||
}
|
||
}
|
||
|
||
private void rbtSelectFPY_Click(object sender, EventArgs e)
|
||
{
|
||
dgvSelectMeasureData.Visible = false;
|
||
rbtnExportCSVReport.Visible = false;
|
||
pnlPage.Visible = false;
|
||
string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00";
|
||
string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59";
|
||
string strCarID = rtbPartID.Text.Trim();
|
||
DataTable dtFPY = new DataTable();
|
||
dtFPY = tmdal.SelectTMeasureResultByTime(strCarID, strStartTime, strEndTime);
|
||
if (dtFPY.Rows.Count > 0)
|
||
{
|
||
dgvFPYResult.Visible = true;
|
||
labSearchResult.Visible = false;
|
||
rbtnExportCSVReport.Visible = true;
|
||
chartFPYLine.Visible = true;
|
||
dgvFPYResult.DataSource = dtFPY;
|
||
SetdgvRowBgColor(dgvFPYResult);
|
||
for (int i = 0; i < dgvFPYResult.Rows.Count; i++)
|
||
{
|
||
if (dgvFPYResult.Rows[i].Cells["SMResult"].Value.ToString().ToLower().Contains("不合格"))
|
||
{
|
||
dgvFPYResult.Rows[i].Cells["SMResult"].Style.ForeColor = Color.Red;
|
||
}
|
||
}
|
||
|
||
#region 合格率折线图
|
||
|
||
//合格率折线图
|
||
string[] strXDate = new string[dtFPY.Rows.Count];
|
||
double[] dFPYResult = new double[dtFPY.Rows.Count];
|
||
for (int i = 0; i < dtFPY.Rows.Count; i++)
|
||
{
|
||
strXDate[i] = dtFPY.Rows[i]["CarID"].ToString();
|
||
}
|
||
for (int i = 0; i < dtFPY.Rows.Count; i++)
|
||
{
|
||
double dResult = double.Parse(dtFPY.Rows[i]["FPY"].ToString());
|
||
dFPYResult[i] = dResult * 100.00;
|
||
}
|
||
chartFPYLine.ChartAreas[0].AxisX.LabelStyle.Angle = -50; //X轴标签倾斜角度设置
|
||
chartFPYLine.ChartAreas[0].AxisY.LabelStyle.Format = "{0:F2}" + "%"; //设置Y轴值的格式化 带%
|
||
chartFPYLine.Series[0].Label = "#VAL%"; //设置显示Y的值
|
||
chartFPYLine.Series[0].LabelForeColor = Color.White;
|
||
chartFPYLine.Series[0].ToolTip = "车身编号 : #VALX \r\n合格率 : #VAL%"; //鼠标移动到对应点显示数值
|
||
chartFPYLine.Series[0].Points.DataBindXY(strXDate, dFPYResult);
|
||
|
||
#endregion 合格率折线图
|
||
}
|
||
else
|
||
{
|
||
dgvFPYResult.Visible = false;
|
||
labSearchResult.Visible = true;
|
||
rbtnExportCSVReport.Visible = false;
|
||
chartFPYLine.Visible = false;
|
||
}
|
||
}
|
||
|
||
public static void ExportdgvDataToCsv(DataGridView dataGridView, string filePath)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
|
||
// 添加列标题
|
||
foreach (DataGridViewColumn column in dataGridView.Columns)
|
||
{
|
||
sb.Append(column.HeaderText);
|
||
sb.Append(",");
|
||
}
|
||
sb.Remove(sb.Length - 1, 1);
|
||
sb.AppendLine();
|
||
|
||
// 添加行数据
|
||
foreach (DataGridViewRow row in dataGridView.Rows)
|
||
{
|
||
foreach (DataGridViewCell cell in row.Cells)
|
||
{
|
||
sb.Append(cell.Value);
|
||
sb.Append(",");
|
||
}
|
||
sb.Remove(sb.Length - 1, 1);
|
||
sb.AppendLine();
|
||
}
|
||
|
||
// 将数据写入CSV文件
|
||
File.WriteAllText(filePath, sb.ToString(), Encoding.GetEncoding("GBK"));
|
||
}
|
||
|
||
public static void ExportDataTableDataToCsv(DataTable dt, string filePath)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
|
||
// 添加列标题
|
||
foreach (DataColumn column in dt.Columns)
|
||
{
|
||
sb.Append(column.ColumnName);
|
||
sb.Append(",");
|
||
}
|
||
sb.Remove(sb.Length - 1, 1);
|
||
sb.AppendLine();
|
||
|
||
// 添加行数据
|
||
foreach (DataRow row in dt.Rows)
|
||
{
|
||
foreach (object item in row.ItemArray)
|
||
{
|
||
sb.Append(item);
|
||
sb.Append(",");
|
||
}
|
||
sb.Remove(sb.Length - 1, 1);
|
||
sb.AppendLine();
|
||
}
|
||
|
||
// 将数据写入CSV文件
|
||
File.WriteAllText(filePath, sb.ToString());
|
||
}
|
||
|
||
private void rbtnExportCSVReport_Click(object sender, EventArgs e)
|
||
{
|
||
string strCSVExportPath = "";
|
||
string strExportTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
||
FolderBrowserDialog m_Folder = new FolderBrowserDialog();
|
||
m_Folder.Description = "请选择要导出的CSV文件的路径";
|
||
m_Folder.RootFolder = Environment.SpecialFolder.Desktop;
|
||
if (dgvFPYResult.Visible == true && dgvFPYResult.Rows.Count > 0)
|
||
{
|
||
m_Folder.ShowDialog();
|
||
if (Directory.Exists(m_Folder.SelectedPath))
|
||
{
|
||
strCSVExportPath = m_Folder.SelectedPath + "\\合格率" + strExportTime + ".CSV";
|
||
|
||
try
|
||
{
|
||
ExportdgvDataToCsv(dgvFPYResult, strCSVExportPath);
|
||
MyBase.TraceWriteLine("合格率数据导出成功,路径为:" + strCSVExportPath);
|
||
//弹窗 提示
|
||
MessageBox.Show("合格率数据导出成功,路径为:" + strCSVExportPath, "导出成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine("导出合格率数据时发生错误:" + ex.Message);
|
||
}
|
||
}
|
||
}
|
||
if (dgvSelectMeasureData.Visible == true && dgvSelectMeasureData.Rows.Count > 0)
|
||
{
|
||
m_Folder.ShowDialog();
|
||
if (Directory.Exists(m_Folder.SelectedPath))
|
||
{
|
||
strCSVExportPath = m_Folder.SelectedPath + "\\车身尺寸数据" + strExportTime + ".CSV";
|
||
|
||
try
|
||
{
|
||
ExportDataTableDataToCsv(PageTable, strCSVExportPath);
|
||
MyBase.TraceWriteLine("车身尺寸数据导出成功,路径为:" + strCSVExportPath);
|
||
|
||
//弹窗 提示
|
||
MessageBox.Show("车身尺寸数据导出成功,路径为:" + strCSVExportPath, "导出成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine("导出车身尺寸数据时发生错误:" + ex.Message);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void dgvFPYResult_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
|
||
{
|
||
e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
|
||
}
|
||
|
||
private void dgvSelectMeasureData_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
|
||
{
|
||
e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
|
||
}
|
||
|
||
private void tmrMonitorDBToCreateReport_Tick(object sender, EventArgs e)
|
||
{
|
||
tmrMonitorDBToCreateReport.Stop();
|
||
int iCurrentMeasureCount = tmdal.SelectTMeasureResultCount();
|
||
if (iCurrentMeasureCount > iLastMesureCount && (iCurrentMeasureCount == (iLastMesureCount + 1)))
|
||
{
|
||
MyBase.TraceWriteLine("监控数据库,开始生成ipn文件:");
|
||
DataTable dtMeaResult = tmdal.SelectNewestTMeasureResult();
|
||
string strVIN = dtMeaResult.Rows[0]["CarID"].ToString();
|
||
DateTime dateMeaDate = Convert.ToDateTime(dtMeaResult.Rows[0]["Remark"].ToString());
|
||
DataTable dtMeaContent = tmdal.SelectCJLRMeaDataByCarID(strVIN);
|
||
string strCarType = dtMeaContent.Rows[0][2].ToString();
|
||
int iMeaCount = dtMeaContent.Rows.Count;
|
||
|
||
#region 解析完报告后,重新生成客户模板报告
|
||
|
||
string filePath = "";
|
||
if (strCarType.ToLower().Contains("tava"))
|
||
{
|
||
filePath = ConfigDfn.strReportPath + "\\" + strCarType + "_" + strVIN + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".ipn";
|
||
}
|
||
else
|
||
{
|
||
filePath = ConfigDfn.strReportPath2 + "\\" + strCarType + "_" + strVIN + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".ipn";
|
||
}
|
||
|
||
StringBuilder sb = new StringBuilder();
|
||
|
||
#region 添加表头
|
||
|
||
sb.Append("GAUGE ID");
|
||
sb.Append("\t");
|
||
sb.Append("JSN");
|
||
sb.Append("\t");
|
||
sb.Append("MO");
|
||
sb.Append("\t");
|
||
sb.Append("DAY");
|
||
sb.Append("\t");
|
||
sb.Append("YR");
|
||
sb.Append("\t");
|
||
sb.Append("HR");
|
||
sb.Append("\t");
|
||
sb.Append("MIN");
|
||
sb.Append("\t");
|
||
sb.Append("SEC");
|
||
sb.Append("\t");
|
||
sb.Append("MODEL");
|
||
sb.Append("\t");
|
||
sb.Append("AuxID1");
|
||
sb.Append("\t");
|
||
sb.Append("AuxID2");
|
||
sb.Append("\t");
|
||
sb.Append("QUAL");
|
||
sb.Append("\t");
|
||
sb.Append("SHIFT");
|
||
sb.Append("\t");
|
||
sb.Append("DATA TYPE");
|
||
sb.Append("\t");
|
||
sb.Append("FIXTURE");
|
||
sb.Append("\t");
|
||
for (int i = 0; i < iMeaCount / 2; i++)
|
||
{
|
||
string strMeaPointName = dtMeaContent.Rows[i * 2]["MeasPointName"].ToString();
|
||
string strMPF = strMeaPointName + " Flush";
|
||
string strMPG = strMeaPointName + " Gap";
|
||
sb.Append("D " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("D " + strMPG);
|
||
sb.Append("\t");
|
||
|
||
sb.Append("B " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("B " + strMPG);
|
||
sb.Append("\t");
|
||
|
||
sb.Append("A " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("A " + strMPG);
|
||
sb.Append("\t");
|
||
|
||
sb.Append("US " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("LS " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("US " + strMPG);
|
||
sb.Append("\t");
|
||
sb.Append("LS " + strMPG);
|
||
sb.Append("\t");
|
||
|
||
sb.Append("UR " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("LR " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("UR " + strMPG);
|
||
sb.Append("\t");
|
||
sb.Append("LR " + strMPG);
|
||
sb.Append("\t");
|
||
|
||
sb.Append("UT " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("LT " + strMPF);
|
||
sb.Append("\t");
|
||
sb.Append("UT " + strMPG);
|
||
sb.Append("\t");
|
||
sb.Append("LT " + strMPG);
|
||
sb.Append("\t");
|
||
}
|
||
|
||
#endregion 添加表头
|
||
|
||
sb.AppendLine();
|
||
|
||
#region 添加内容
|
||
|
||
sb.Append(ConfigDfn.strStationName);
|
||
sb.Append("\t");
|
||
sb.Append(strVIN);
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Month.ToString());
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Day.ToString());
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Year.ToString().Substring(2));
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Hour.ToString());
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Minute.ToString());
|
||
sb.Append("\t");
|
||
sb.Append(dateMeaDate.Second.ToString());
|
||
sb.Append("\t");
|
||
if (strCarType.ToLower().Contains("tava"))
|
||
sb.Append(ConfigDfn.strUploadPath);
|
||
else
|
||
{
|
||
sb.Append(ConfigDfn.strUploadPath2);
|
||
}
|
||
sb.Append("\t");
|
||
sb.Append("Unknow");
|
||
sb.Append("\t");
|
||
sb.Append("Unknow");
|
||
sb.Append("\t");
|
||
sb.Append("2");
|
||
sb.Append("\t");
|
||
sb.Append("");
|
||
sb.Append("\t");
|
||
sb.Append("AUTO");
|
||
sb.Append("\t");
|
||
sb.Append("NONE");
|
||
sb.Append("\t");
|
||
|
||
double dDevFVal = 0;
|
||
double dDevGVal = 0;
|
||
|
||
double dMeaFVal = 0;
|
||
double dMeaGVal = 0;
|
||
|
||
double dNorFVal = 0;
|
||
double dNorGVal = 0;
|
||
|
||
double dFUpper = 0;
|
||
double dFLower = 0;
|
||
double dGUpper = 0;
|
||
double dGLower = 0;
|
||
|
||
double dFUpper2 = 0;
|
||
double dFLower2 = 0;
|
||
double dGUpper2 = 0;
|
||
double dGLower2 = 0;
|
||
|
||
double dFUpper3 = 0;
|
||
double dFLower3 = 0;
|
||
double dGUpper3 = 0;
|
||
double dGLower3 = 0;
|
||
for (int i = 0; i < iMeaCount / 2; i++)
|
||
{
|
||
string strMeasureFValue = dtMeaContent.Rows[i * 2]["MeasureValue"].ToString();
|
||
string strMeasureGValue = dtMeaContent.Rows[i * 2 + 1]["MeasureValue"].ToString();
|
||
string strNormalFValue = dtMeaContent.Rows[i * 2]["NormalValue"].ToString();
|
||
string strNormalGValue = dtMeaContent.Rows[i * 2 + 1]["NormalValue"].ToString();
|
||
|
||
dNorFVal = double.Parse(strNormalFValue);
|
||
dNorGVal = double.Parse(strNormalGValue);
|
||
dFUpper = double.Parse(dtMeaContent.Rows[i * 2]["UpperTolVal"].ToString());
|
||
dFLower = double.Parse(dtMeaContent.Rows[i * 2]["LowerTolVal"].ToString());
|
||
dGUpper = double.Parse(dtMeaContent.Rows[i * 2 + 1]["UpperTolVal"].ToString());
|
||
dGLower = double.Parse(dtMeaContent.Rows[i * 2 + 1]["LowerTolVal"].ToString());
|
||
|
||
dFUpper2 = dFUpper * ConfigDfn.dLevel2;
|
||
dFLower2 = dFLower * ConfigDfn.dLevel2;
|
||
dGUpper2 = dGUpper * ConfigDfn.dLevel2;
|
||
dGLower2 = dGLower * ConfigDfn.dLevel2;
|
||
|
||
dFUpper3 = dFUpper * ConfigDfn.dLevel3;
|
||
dFLower3 = dFLower * ConfigDfn.dLevel3;
|
||
dGUpper3 = dGUpper * ConfigDfn.dLevel3;
|
||
dGLower3 = dGLower * ConfigDfn.dLevel3;
|
||
|
||
if (strMeasureFValue.Contains("inv"))
|
||
{
|
||
sb.Append("inv");
|
||
sb.Append("\t");
|
||
}
|
||
else
|
||
{
|
||
dMeaFVal = double.Parse(strMeasureFValue);
|
||
dDevFVal = dMeaFVal - dNorFVal;
|
||
sb.Append(dDevFVal.ToString("F3"));
|
||
sb.Append("\t");
|
||
}
|
||
if (strMeasureGValue.Contains("inv"))
|
||
{
|
||
sb.Append("inv");
|
||
sb.Append("\t");
|
||
}
|
||
else
|
||
{
|
||
dMeaGVal = double.Parse(strMeasureGValue);
|
||
dDevGVal = dMeaGVal - dNorGVal;
|
||
sb.Append(dDevGVal.ToString("F3"));
|
||
sb.Append("\t");
|
||
}
|
||
|
||
sb.Append(strNormalFValue);
|
||
sb.Append("\t");
|
||
sb.Append(strNormalGValue);
|
||
sb.Append("\t");
|
||
|
||
sb.Append(strMeasureFValue);
|
||
sb.Append("\t");
|
||
sb.Append(strMeasureGValue);
|
||
sb.Append("\t");
|
||
|
||
sb.Append(dFUpper.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dFLower.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGUpper.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGLower.ToString("F3"));
|
||
sb.Append("\t");
|
||
|
||
sb.Append(dFUpper2.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dFLower2.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGUpper2.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGLower2.ToString("F3"));
|
||
sb.Append("\t");
|
||
|
||
sb.Append(dFUpper3.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dFLower3.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGUpper3.ToString("F3"));
|
||
sb.Append("\t");
|
||
sb.Append(dGLower3.ToString("F3"));
|
||
sb.Append("\t");
|
||
}
|
||
|
||
#endregion 添加内容
|
||
|
||
// 将数据写入CSV文件
|
||
File.WriteAllText(filePath, sb.ToString());
|
||
MyBase.TraceWriteLine("客户定制ipn报告生成完毕,路径为:" + filePath);
|
||
|
||
#endregion 解析完报告后,重新生成客户模板报告
|
||
}
|
||
iLastMesureCount = iCurrentMeasureCount;
|
||
tmrMonitorDBToCreateReport.Start();
|
||
}
|
||
|
||
private void lpcSoftwareSetup_Click(object sender, EventArgs e)
|
||
{
|
||
string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消");
|
||
if (strInputPwd.Contains("-999.999"))
|
||
{
|
||
return;
|
||
}
|
||
else if (strInputPwd == ConfigDfn.strPwd)
|
||
{
|
||
FSoftwareSetup fss = new FSoftwareSetup();
|
||
fss.ShowDialog(this);
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
}
|
||
|
||
private void lpcToleranceSetup_Click(object sender, EventArgs e)
|
||
{
|
||
string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消");
|
||
if (strInputPwd.Contains("-999.999"))
|
||
{
|
||
return;
|
||
}
|
||
else if (strInputPwd == ConfigDfn.strPwd)
|
||
{
|
||
FToleranceSetup fts = new FToleranceSetup();
|
||
fts.ShowDialog(this);
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
}
|
||
}
|
||
|
||
private void lpcAboutSoftware_Click(object sender, EventArgs e)
|
||
{
|
||
AboutSoftwareInfo asi = new AboutSoftwareInfo();
|
||
asi.ShowDialog();
|
||
}
|
||
|
||
private void lpcShowLog_Click(object sender, EventArgs e)
|
||
{
|
||
System.Diagnostics.Process.Start("notepad.exe", LogDebugDfn.strDebugFile);
|
||
}
|
||
|
||
#endregion 按钮事件
|
||
}
|
||
|
||
public class AnalysisResult
|
||
{
|
||
public string CarID { get; set; }
|
||
public int TotalCount { get; set; }
|
||
public int OutCount { get; set; }
|
||
public int OKCount { get; set; }
|
||
public int RejectedCount { get; set; }
|
||
public double FPYPercent { get; set; }
|
||
|
||
public static AnalysisResult AnalyzeMeasureData(DataTable dt)
|
||
{
|
||
var result = new AnalysisResult();
|
||
|
||
if (dt == null || dt.Rows.Count == 0)
|
||
return result;
|
||
|
||
// Accessing the first row of the DataTable to retrieve values
|
||
var firstRow = dt.Rows[0];
|
||
|
||
result.CarID = firstRow["CarID"].ToString();
|
||
result.TotalCount = Convert.ToInt32(firstRow["TotalCount"]);
|
||
result.OKCount = Convert.ToInt32(firstRow["PassCount"]);
|
||
result.OutCount = Convert.ToInt32(firstRow["NGCount"]);
|
||
result.RejectedCount = Convert.ToInt32(firstRow["RejectCount"]);
|
||
result.FPYPercent = Convert.ToDouble(firstRow["FPY"]);
|
||
|
||
return result;
|
||
}
|
||
|
||
public static void DisplayAnalysisResult(AnalysisResult result)
|
||
{
|
||
Console.WriteLine("===== 测量结果分析 =====");
|
||
Console.WriteLine($"车身编号: {result.CarID}");
|
||
Console.WriteLine($"总测量项: {result.TotalCount}");
|
||
Console.WriteLine($"合格项(OK): {result.OKCount}");
|
||
Console.WriteLine($"超差项(Out): {result.OutCount}");
|
||
Console.WriteLine($"异常项(Rejected): {result.RejectedCount}");
|
||
Console.WriteLine($"首次通过率(FPY): {result.FPYPercent:F2}%");
|
||
}
|
||
}
|
||
} |