using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Windows.Shapes; using System.Xml; using XCommon.Log; using XCore; using XHandler.Class; using XHandler.View; using XImagingXhandler.XDAL; namespace XHandler.Controls { public class CoatingReportControl { private string strCurrentCulture = ""; public RunWnd launchView = null; private CoatingReportBll dataExportBll = new CoatingReportBll(); /// /// 构造函数 /// public CoatingReportControl(string strCurrentCulture) { this.strCurrentCulture = strCurrentCulture; } #region 执行吸液,返回结果字符串 /// /// 执行吸液,返回结果字符串 /// /// 装载方法属性节点对象 /// 最终的移液数据表 /// 0:连接谁;1:仿真 /// public bool ExecuteCoatingFileExport(XmlNode methodNode, DataTable dataTable, bool isSimulator) { bool result = true; try { if (launchView._cancelSource.IsCancellationRequested) { result = false; return result; } if (strCurrentCulture.Equals("zh-CN")) { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strStart.ToString()); } else { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】start:"); } #region 数据准备 string name = methodNode.SelectSingleNode("name").InnerText; string filePath = methodNode.SelectSingleNode("filePath").InnerText; MethodCoatingReport methodDataExport = dataExportBll.GenerateMethodDataExport(methodNode); List reportColumns = methodDataExport.reportColumns; string filePostfix = methodNode.SelectSingleNode("filePostfix").InnerText; string fileName = methodNode.SelectSingleNode("fileName").InnerText; List dropdownNames = dataExportBll.GenerateReportColumn(); #endregion #region 数据验证 if (string.IsNullOrEmpty(fileName)) { if (strCurrentCulture.Equals("zh-CN")) { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】" + Properties.CoatingReportResource.strFileNameEmpty.ToString()); } else { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】:" + "file name is empty."); } result = false; return result; } if (reportColumns.Count == 0) { if (strCurrentCulture.Equals("zh-CN")) { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】" + Properties.CoatingReportResource.strColumnEmpty.ToString()); } else { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】:" + "file column don't set."); } result = false; return result; } if (string.IsNullOrEmpty(filePath)) { if (strCurrentCulture.Equals("zh-CN")) { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】" + Properties.CoatingReportResource.strFilePathEmpty.ToString()); } else { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + name + "】:" + "file path don't set."); } result = false; return result; } #endregion #region 执行 DataTable dt = new DataTable(); if (dataTable != null) { //创建表结构 foreach (DataColumn c in dataTable.Columns) { foreach (ReportColumn r in reportColumns) { DataColumn d = new DataColumn(); d.ColumnName = r.reportcolumn_sname; if (r.reportcolumn_name == dropdownNames[0].dropdown_name && c.ColumnName == r.reportcolumn_name)//表Id { dt.Columns.Add(d); break; } if (r.reportcolumn_name == dropdownNames[1].dropdown_name && c.ColumnName == r.reportcolumn_name)//来源板名称 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[2].dropdown_name && c.ColumnName == r.reportcolumn_name)//来源板barcode { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[3].dropdown_name && c.ColumnName == r.reportcolumn_name)//来源板孔位 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[4].dropdown_name && c.ColumnName == r.reportcolumn_name)//目标板名称 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[5].dropdown_name && c.ColumnName == r.reportcolumn_name)//目标板barcode { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[6].dropdown_name && c.ColumnName == r.reportcolumn_name)//目标板孔位 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[7].dropdown_name && c.ColumnName == r.reportcolumn_name)//移液体积 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[8].dropdown_name && c.ColumnName == r.reportcolumn_name)//移液开始时间 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[9].dropdown_name && c.ColumnName == r.reportcolumn_name)//移液完成时间 { dt.Columns.Add(d); break; } if (c.ColumnName == dropdownNames[10].dropdown_name && c.ColumnName == r.reportcolumn_name)//移液完成结果 { dt.Columns.Add(d); break; } } } //复制表数据 for (int i = 0; i < dataTable.Rows.Count; i++) { DataRow dr = dt.NewRow(); foreach (ReportColumn r in reportColumns) { dr[r.reportcolumn_sname] = dataTable.Rows[i][r.reportcolumn_name].ToString(); } dt.Rows.Add(dr); } #region 自动创建文件夹路径 if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } #endregion //根据设置导出为csv或excel //string fileFullPath = filePath + "\\" + fileName + filePostfix; string fileFullPath = string.Format("{0}\\{1}_{2}{3}", filePath, fileName, DateTime.Now.ToString("yyyyMMddHHmmss"), filePostfix); if (filePostfix == ".csv") { if (File.Exists(fileFullPath)) { File.Delete(fileFullPath); } ExcelAndCsvHelper.WriteDataTableToCSV(dt, fileFullPath); } else if (filePostfix == ".xls") { if (File.Exists(fileFullPath)) { File.Delete(fileFullPath); } ExcelAndCsvHelper.WriteDataTableToExcelFile(dt, fileFullPath); } if (strCurrentCulture.Equals("zh-CN")) { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.MachineRunResource.strEnd.ToString()); } else { launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】progress: complete;"); } } #endregion } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); result = false; } return result; } #endregion } }