1403 lines
44 KiB
C#
1403 lines
44 KiB
C#
using BaseFunction;
|
||
|
||
using NSAnalysis.DAL;
|
||
using NSAnalysis.Model;
|
||
using NSAnalysis.Properties;
|
||
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Globalization;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using Telerik.WinControls;
|
||
using Telerik.WinControls.UI;
|
||
|
||
namespace NSAnalysis
|
||
{
|
||
public partial class FormMain : Telerik.WinControls.UI.ShapedForm
|
||
{
|
||
#region 全局变量
|
||
|
||
private int[] yValues = new int[3];
|
||
private string[] xValues = new string[3];
|
||
private DataTable dtCSVContent = new DataTable();
|
||
private DataTable dtRangeData = new DataTable();
|
||
private CjlrDAL tmdal = new CjlrDAL();
|
||
private string strSaveReprotPath = "";
|
||
private bool bReadCSVFlag = false;
|
||
|
||
private int iCurrentMeasureItemsFailedCount = 0;
|
||
|
||
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");
|
||
|
||
MyBase.TraceWriteLine(" 进入解析CSV文件模式,开始解析扫码CSV文件!");
|
||
tmReadNextsenseCSV.Interval = 5000;
|
||
tmReadNextsenseCSV.Start();
|
||
|
||
if (Directory.Exists(ConfigDfn.strNextSenseCSVEH3Path))
|
||
{
|
||
MyBase.TraceWriteLine("软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:" + ConfigDfn.strNextSenseCSVEH3Path);
|
||
}
|
||
else
|
||
{
|
||
string strTip = "错误:软件首次启动,读取NextSense生成EH3 CSV报告的路径:" + ConfigDfn.strNextSenseCSVEH3Path + " 不存在!请检查并进行修改!点击是按钮,软件将自动创建该路径!";
|
||
MyBase.TraceWriteLine(strTip);
|
||
Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEH3Path);
|
||
}
|
||
|
||
//绑定按钮
|
||
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();
|
||
strSaveReprotPath = ConfigDfn.strReportPath + @"\";
|
||
}
|
||
|
||
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表中
|
||
|
||
dtRangeData.Columns.Add(dcCarID);
|
||
dtRangeData.Columns.Add(dcRangeName);
|
||
dtRangeData.Columns.Add(dcRangeValue);
|
||
dtRangeData.Columns.Add(dcRangeLowUpp);
|
||
dtRangeData.Columns.Add(dcResult);
|
||
dtRangeData.Columns.Add(dcCreateTime);
|
||
dtRangeData.Columns.Add(dcRemark);
|
||
|
||
#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);
|
||
}
|
||
|
||
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;
|
||
}
|
||
|
||
#endregion 主窗口事件
|
||
|
||
private void tmReadNextsenseCSV_Tick(object sender, EventArgs e)
|
||
{
|
||
tmReadNextsenseCSV.Stop();
|
||
|
||
//AnalysisNxsCSV();
|
||
|
||
tmReadNextsenseCSV.Start();
|
||
}
|
||
|
||
public void ImportCsv2Sql(string filePath)
|
||
{
|
||
var records = new List<CJLR_MeaDataModel>();
|
||
var lineNo = 0; // 行号计数器
|
||
decimal dimensionValue;
|
||
using (var reader = new StreamReader(filePath))
|
||
{
|
||
// Skip header
|
||
reader.ReadLine();
|
||
|
||
lineNo = 1; // 初始化行号计数器
|
||
while (!reader.EndOfStream)
|
||
{
|
||
lineNo++; // 增加行号计数器
|
||
var line = reader.ReadLine();
|
||
var values = line.Split(','); // 假设 CSV 使用制表符分隔
|
||
|
||
// 跳过前两行(如果有标题行或其他非数据行
|
||
if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#") || line.StartsWith("//") || line.StartsWith("MeasPoint.Name"))
|
||
{
|
||
continue; // 跳过空行或注释行
|
||
}
|
||
|
||
// 跳过前两行(如果有标题行或其他非数据行)
|
||
if (values.Length < 22)
|
||
{
|
||
MyBase.TraceWriteLine("CSV行数据不完整,跳过该行:" + line);
|
||
continue; // 跳过不完整的行
|
||
}
|
||
if (!decimal.TryParse(values[8], NumberStyles.Any, CultureInfo.InvariantCulture, out dimensionValue))
|
||
{
|
||
MyBase.TraceWriteLine($"CSV第{lineNo}行,DimensionValue字段格式不正确,值为:{values[8]},跳过该行。");
|
||
continue; // 跳过该行
|
||
}
|
||
// 创建 MeasurementRecord 对象并填充数据
|
||
var record = new CJLR_MeaDataModel
|
||
{
|
||
PointName = values[0],
|
||
GroupName = values[1],
|
||
ProductNum = values[2],
|
||
Model = values[3],
|
||
Station = values[4],
|
||
Method = values[5],
|
||
Standard = values[6],
|
||
DimensionName = values[7],
|
||
DimensionValue = decimal.Parse(values[8], CultureInfo.InvariantCulture),
|
||
DimensionUnit = values[9],
|
||
IsManual = bool.Parse(values[10]),
|
||
Classification = values[11],
|
||
ToleranceName0 = values[12],
|
||
ToleranceLower0 = decimal.Parse(values[13], CultureInfo.InvariantCulture),
|
||
ToleranceUpper0 = decimal.Parse(values[14], CultureInfo.InvariantCulture),
|
||
ToleranceName1 = values[15],
|
||
ToleranceLower1 = decimal.Parse(values[16], CultureInfo.InvariantCulture),
|
||
ToleranceUpper1 = decimal.Parse(values[17], CultureInfo.InvariantCulture),
|
||
NominalValue = decimal.Parse(values[18], CultureInfo.InvariantCulture),
|
||
MeasureDate = DateTime.ParseExact(values[19], "yyyyMMdd", CultureInfo.InvariantCulture),
|
||
MeasureTime = TimeSpan.ParseExact(values[20], "hhmmss", CultureInfo.InvariantCulture),
|
||
SequenceNum = int.Parse(values[21])
|
||
};
|
||
|
||
records.Add(record);
|
||
}
|
||
}
|
||
|
||
try
|
||
{
|
||
// 取第一条记录的时间作为测量时间
|
||
if (records.Count > 0)
|
||
{
|
||
var firstRecord = records[0];
|
||
ConfigDfn.strMeasureTime = firstRecord.MeasureDate.ToString("yyyy-MM-dd") + " " + firstRecord.MeasureTime.ToString(@"hh\:mm\:ss");
|
||
|
||
// 获取车号
|
||
MyBase.TraceWriteLine("--------------------------------------------------------");
|
||
|
||
var strCarID = firstRecord.ProductNum;
|
||
MyBase.TraceWriteLine("车号:" + strCarID);
|
||
//获取车型
|
||
ConfigDfn.strCarModel = firstRecord.Model;
|
||
MyBase.TraceWriteLine("车型:" + ConfigDfn.strCarModel);
|
||
MyBase.TraceWriteLine("测量时间:" + ConfigDfn.strMeasureTime);
|
||
}
|
||
else
|
||
{
|
||
MyBase.TraceWriteLine("没有找到有效的测量记录,无法设置测量时间。");
|
||
|
||
// 将文件移动到 未导入文件夹,如果不存在则新建该文件夹
|
||
string strNotImportPath = ConfigDfn.strFileFolder + "\\NextSenseCSVNotImport\\";
|
||
if (!Directory.Exists(strNotImportPath))
|
||
{
|
||
Directory.CreateDirectory(strNotImportPath);
|
||
}
|
||
string destFilePath = Path.Combine(strNotImportPath, Path.GetFileName(filePath));
|
||
File.Move(filePath, destFilePath);
|
||
MyBase.TraceWriteLine("将文件移动到未导入文件夹,路径为:" + destFilePath);
|
||
|
||
return;
|
||
}
|
||
|
||
// 逐条插入数据到数据库
|
||
foreach (var record in records)
|
||
{
|
||
tmdal.InsertCJLRMeaData(record);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine("导入CSV文件时发生错误:" + ex.Message);
|
||
return;
|
||
}
|
||
}
|
||
|
||
private void AnalysisNxsCSV(string scanFolderPath) //解析EH3 CSV文件函数
|
||
{
|
||
// 打印正在扫描的路径
|
||
MyBase.TraceWriteLine("正在扫描 CSV文件路径:" + scanFolderPath);
|
||
// 判断该路径是否存在
|
||
if (!Directory.Exists(scanFolderPath))
|
||
{
|
||
MyBase.TraceWriteLine("错误: CSV文件路径:" + scanFolderPath + " 不存在!请检查并进行修改!");
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
lbCSVFiles.Items.Clear();
|
||
FileInfo[] fileInfos = null;
|
||
if (Directory.Exists(scanFolderPath))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(scanFolderPath);
|
||
fileInfos = di.GetFiles("*.CSV");
|
||
if (fileInfos.Count() >= 1)
|
||
{
|
||
MyBase.TraceWriteLine("存在CSV文件,开始解析:");
|
||
List<string> listCSVTitleInfo = new List<string>();
|
||
string strCarID = "";
|
||
foreach (FileInfo fi in fileInfos)
|
||
{
|
||
listCSVTitleInfo.Clear();
|
||
|
||
dtCSVContent.Clear();
|
||
// 直接清空数据源
|
||
if (dgvMeasureContent.DataSource is DataTable dt)
|
||
{
|
||
dt.Rows.Clear();
|
||
}
|
||
|
||
string strCSVName = fi.FullName;
|
||
|
||
#region 解析EH3 CSV报告
|
||
|
||
MyBase.TraceWriteLine("开始解析 CSV 报告:" + strCSVName);
|
||
ImportCsv2Sql(strCSVName);
|
||
|
||
// 备份数据
|
||
File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true);
|
||
MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成");
|
||
lbCSVFiles.Items.Add(fi.Name);
|
||
MyBase.TraceWriteLine("解析 CSV 报告完毕!");
|
||
|
||
#endregion 解析EH3 CSV报告
|
||
|
||
#region 左侧统计和饼图、合格率
|
||
|
||
// 从文件名 strCSVName 提取文件名中的车ID
|
||
int startIndex = strCSVName.LastIndexOf("\\") + 1;
|
||
int endIndex = strCSVName.LastIndexOf(".");
|
||
strCarID = strCSVName.Substring(startIndex, endIndex - startIndex);
|
||
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("将总结果插入数据库完毕。");
|
||
MyBase.TraceWriteLine("全部插入解析完毕,删除文件:" + fi.Name);
|
||
fi.Delete();
|
||
|
||
#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 表单区填充
|
||
|
||
//生成客户的 CSV文件
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MyBase.TraceWriteLine("[AnalysisNextSenseCSV] 函数分析异常:" + ex.ToString());
|
||
}
|
||
}
|
||
|
||
private void GenCustomerReport()
|
||
{
|
||
//#region 解析完报告后,重新生成客户模板报告
|
||
|
||
//string filePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改
|
||
//string strWithoutLCarVin = strCarID.Substring(1);
|
||
//StringBuilder sb = new StringBuilder();
|
||
////添加表头
|
||
//sb.Append("Measurement Info Name");
|
||
//sb.Append(",");
|
||
//sb.Append("Measurement Info");
|
||
//sb.AppendLine();
|
||
//sb.Append("Date_Time");
|
||
//sb.Append(",");
|
||
//sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||
//sb.AppendLine();
|
||
//for (int i = 0; i < listCSVTitleInfo.Count; i++)
|
||
//{
|
||
// if (listCSVTitleInfo[i].Contains("prodnum"))
|
||
// {
|
||
// listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace("prodnum", "Part_ident");
|
||
// }
|
||
// if (listCSVTitleInfo[i].Contains(strWithoutLCarVin))
|
||
// {
|
||
// listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace(strWithoutLCarVin, strCarID);
|
||
// }
|
||
// sb.Append(listCSVTitleInfo[i]);
|
||
// sb.AppendLine();
|
||
//}
|
||
//sb.AppendLine();
|
||
//sb.AppendLine();
|
||
//sb.AppendLine();
|
||
//sb.AppendLine();
|
||
//sb.AppendLine();
|
||
////添加测量数据
|
||
//sb.Append("Characteristic");
|
||
//sb.Append(",");
|
||
//sb.Append("Extension");
|
||
//sb.Append(",");
|
||
//sb.Append("Measured_Value");
|
||
//sb.AppendLine();
|
||
//foreach (DataRow row in dtCSVContent.Rows)
|
||
//{
|
||
// sb.Append(row.ItemArray[2]);
|
||
// sb.Append(",");
|
||
// sb.Append(row.ItemArray[3]);
|
||
// sb.Append(",");
|
||
// sb.Append(row.ItemArray[7]);
|
||
// sb.AppendLine();
|
||
//}
|
||
|
||
//sb.Append("POP");
|
||
//sb.Append(",");
|
||
//sb.Append("P");
|
||
//sb.Append(",");
|
||
//sb.Append(Math.Round(FPYPercent * 100.00d, 2).ToString("F2"));
|
||
//sb.AppendLine();
|
||
//// 将数据写入CSV文件
|
||
//File.WriteAllText(filePath, sb.ToString());
|
||
//MyBase.TraceWriteLine("客户csv报告生成完毕,路径为:" + filePath);
|
||
|
||
//#endregion 解析完报告后,重新生成客户模板报告
|
||
}
|
||
|
||
/// 通过给定的文件流,判断文件的编码类型
|
||
/// <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分页功能
|
||
|
||
/// <summary>
|
||
/// LoadPage方法
|
||
/// </summary>
|
||
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}%");
|
||
}
|
||
}
|
||
} |