using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Xml;
|
using System.Data;
|
using XCore;
|
using XHandler.View;
|
using XImagingXhandler.XDAL;
|
using System.IO;
|
using XHandler.Class;
|
using XCommon.Log;
|
|
namespace XHandler.Controls
|
{
|
public class DataExportControl
|
{
|
string strCurrentCulture = "";
|
public RunWnd launchView = null;
|
DataExportBll dataExportBll = new DataExportBll();
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public DataExportControl(string strCurrentCulture)
|
{
|
this.strCurrentCulture = strCurrentCulture;
|
}
|
|
#region 执行吸液,返回结果字符串
|
/// <summary>
|
/// 执行吸液,返回结果字符串
|
/// </summary>
|
/// <param name="methodNode">装载方法属性节点对象</param>
|
/// <param name="dataTable">最终的移液数据表</param>
|
/// <param name="isSimulator">0:连接谁;1:仿真</param>
|
/// <returns></returns>
|
public bool ExecuteDataExport( 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;
|
MethodDataExport methodDataExport = dataExportBll.GenerateMethodDataExport(methodNode);
|
List<ReportColumn> reportColumns = methodDataExport.reportColumns;
|
string filePostfix = methodNode.SelectSingleNode("filePostfix").InnerText;
|
string fileName = methodNode.SelectSingleNode("fileName").InnerText;
|
List<DropdownName> 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.DataExportResource.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.DataExportResource.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.DataExportResource.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)
|
{
|
if (dt.Columns.Contains(r.reportcolumn_sname))
|
{
|
dr[r.reportcolumn_sname] = dataTable.Rows[i][r.reportcolumn_name].ToString();
|
}
|
}
|
dt.Rows.Add(dr);
|
}
|
|
//根据设置导出为csv或excel
|
string fileFullPath = filePath + "\\"+fileName + 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
|
}
|
}
|