using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Text; using Business.EntityFrameworkCore.SqlRepositories; using Business.StructuredDB.Sqe; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using Volo.Abp.Application.Services; namespace Business.VSM { /// /// Sqe数据导入接口实现 /// public class SqeExcelService : ApplicationService, ISqeExcelService { LoggerHelper WLLog; private readonly ISqeRepository _sqe_cto_process; private readonly ISqeRepository _sqe_cto_process_data; private readonly ISqeRepository _sqe_cto_process_standard; private readonly ISqeRepository _sqe_cto_test; private readonly ISqeRepository _sqe_cto_test_data; private readonly ISqeRepository _sqe_cto_test_standard; private readonly ISqeRepository _sqe_file_data; private readonly ISqeRepository _sqe_file_upload; private readonly ISqeRepository _sqe_oqc; private readonly ISqeRepository _sqe_oqc_data; private readonly ISqeRepository _sqe_oqc_standard; private readonly ISqeRepository _sqe_fpy; private readonly ISqeRepository _sqe_fpy_data; private readonly ISqeRepository _sqe_op; private readonly ISqeRepository _sqe_op_data; private readonly ISqeRepository _sqe_op_data_detail; private readonly ISqeRepository _sqe_fct; private readonly ISqeRepository _sqe_fct_data; public SqeExcelService( ISqeRepository sqe_cto_process, ISqeRepository sqe_cto_process_data, ISqeRepository sqe_cto_process_standard, ISqeRepository sqe_cto_test, ISqeRepository sqe_cto_test_data, ISqeRepository sqe_cto_test_standard, ISqeRepository sqe_file_data, ISqeRepository sqe_file_upload, ISqeRepository sqe_oqc, ISqeRepository sqe_oqc_data, ISqeRepository sqe_oqc_standard, ISqeRepository sqe_fpy, ISqeRepository sqe_fpy_data, ISqeRepository sqe_op, ISqeRepository sqe_op_data, ISqeRepository sqe_op_data_detail, ISqeRepository sqe_fct, ISqeRepository sqe_fct_data ) { WLLog = new LoggerHelper(); _sqe_cto_process = sqe_cto_process; _sqe_cto_process_data = sqe_cto_process_data; _sqe_cto_process_standard = sqe_cto_process_standard; _sqe_cto_test = sqe_cto_test; _sqe_cto_test_data = sqe_cto_test_data; _sqe_cto_test_standard = sqe_cto_test_standard; _sqe_file_data = sqe_file_data; _sqe_file_upload = sqe_file_upload; _sqe_oqc = sqe_oqc; _sqe_oqc_data = sqe_oqc_data; _sqe_oqc_standard = sqe_oqc_standard; _sqe_fpy = sqe_fpy; _sqe_fpy_data = sqe_fpy_data; _sqe_op = sqe_op; _sqe_op_data = sqe_op_data; _sqe_op_data_detail = sqe_op_data_detail; _sqe_fct = sqe_fct; _sqe_fct_data = sqe_fct_data; } ///// ///// 导入Excel文件的sheetName的sheet页面到数据表 ///// ///// ///// ///// //public DataTable ImportExcelSheetToDataTable_test(string filePath, string sheetName) //{ // FileStream file = null; // DataTable dt = new DataTable(); // int index = 0; // try // { // file = new FileStream(filePath, FileMode.Open, FileAccess.Read); // //打开Excel对象 // IWorkbook workbook; // IRow row; // string fileExt = Path.GetExtension(filePath).ToLower(); // workbook = null; // if (fileExt == ".xlsx") // { // workbook = new XSSFWorkbook(file); // } // else // { // if (fileExt == ".xls") // { // workbook = new HSSFWorkbook(file); // } // else // { // workbook = null; // } // } // if (workbook == null) { return null; } // //Excel的Sheet对象 // NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet(sheetName); // //获取Sheet的所有的行 // System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); // //int colCountMax = 0; // dt.TableName = sheetName; // //判断是否拥有首行 // bool firstLine = true; // //if (!haveColumnName) // //{ // // firstLine = false; // //} // bool bDate = false; // while (rows.MoveNext()) // { // index++; // bDate = false; // if (fileExt == ".xlsx") // { // row = (XSSFRow)rows.Current; // } // else // { // row = (HSSFRow)rows.Current; // } // if (!firstLine) // { // //生成表结构 // //仅当首次调用时会进行循环生成 // for (int i = dt.Columns.Count; i < row.Cells.Count; i++) // { // dt.Columns.Add(Convert.ToChar(((int)'A') + i).ToString()); // } // } // else // { // //依据首行进行字段生成 // for (int i = dt.Columns.Count; i < row.Cells.Count; i++) // { // dt.Columns.Add(row.Cells[i].ToString()); // } // } // //没有首行,生成数据 // if (!firstLine) // { // DataRow dr = dt.NewRow(); // for (int i = 0; i < row.LastCellNum - 1; i++) // { // NPOI.SS.UserModel.ICell cell = row.GetCell(i); // String s = ""; // if (cell != null) // { // switch (cell.CellType) // { // case NPOI.SS.UserModel.CellType.Unknown: // break; // case NPOI.SS.UserModel.CellType.Numeric: // if (HSSFDateUtil.IsCellDateFormatted(cell)) // { // if (index < 6) // { // s = cell.DateCellValue.ToString(); // } // else // { // s = cell.ToString(); // } // } // else // { // s = cell.NumericCellValue.ToString(); // } // break; // case NPOI.SS.UserModel.CellType.String: // s = cell.StringCellValue; // break; // case NPOI.SS.UserModel.CellType.Formula: // if (i == 0 || i == 1) // { // s = cell.StringCellValue; // } // else // { // try // { // if (cell.CellFormula == "序号") // { // s = cell.ToString(); // } // else // { // s = cell.NumericCellValue != null ? cell.NumericCellValue.ToString() : null; // } // } // catch (Exception ex) // { // WLLog.Error("Excel导入问题:", ex); // } // } // break; // case NPOI.SS.UserModel.CellType.Blank: // if (bDate) // { // //对于日期的特殊处理 // s = dr[i - 1].ToString(); // } // else // { // s = cell.StringCellValue; // } // break; // case NPOI.SS.UserModel.CellType.Boolean: // break; // case NPOI.SS.UserModel.CellType.Error: // break; // default: // break; // } // } // dr[i] = s; // } // dt.Rows.Add(dr); // } // firstLine = false; // } // return dt; // } // catch (Exception ex) // { // WLLog.Error("Excel导入问题:", ex); // } // finally // { // if (file != null) // { // file.Close(); // } // } // return dt; //} //public DataTable ImportExcelSheetToDataTable_process(string filePath, string sheetName) //{ // FileStream file = null; // DataTable dt = new DataTable(); // int index = 0; // try // { // file = new FileStream(filePath, FileMode.Open, FileAccess.Read); // //打开Excel对象 // IWorkbook workbook; // IRow row; // string fileExt = Path.GetExtension(filePath).ToLower(); // workbook = null; // if (fileExt == ".xlsx") // { // workbook = new XSSFWorkbook(file); // } // else // { // if (fileExt == ".xls") // { // workbook = new HSSFWorkbook(file); // } // else // { // workbook = null; // } // } // if (workbook == null) { return null; } // //Excel的Sheet对象 // NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet(sheetName); // //获取Sheet的所有的行 // System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); // //int colCountMax = 0; // dt.TableName = sheetName; // //判断是否拥有首行 // bool firstLine = true; // //if (!haveColumnName) // //{ // // firstLine = false; // //} // bool bDate = false; // while (rows.MoveNext()) // { // index++; // bDate = false; // if (fileExt == ".xlsx") // { // row = (XSSFRow)rows.Current; // } // else // { // row = (HSSFRow)rows.Current; // } // if (!firstLine) // { // //生成表结构 // //仅当首次调用时会进行循环生成 // for (int i = dt.Columns.Count; i < row.Cells.Count; i++) // { // dt.Columns.Add(Convert.ToChar(((int)'A') + i).ToString()); // } // } // else // { // //依据首行进行字段生成 // for (int i = dt.Columns.Count; i < row.Cells.Count; i++) // { // dt.Columns.Add(row.Cells[i].ToString()); // } // } // //没有首行,生成数据 // if (!firstLine) // { // DataRow dr = dt.NewRow(); // for (int i = 0; i < row.LastCellNum - 1; i++) // { // NPOI.SS.UserModel.ICell cell = row.GetCell(i); // String s = ""; // if (cell != null) // { // switch (cell.CellType) // { // case NPOI.SS.UserModel.CellType.Unknown: // break; // case NPOI.SS.UserModel.CellType.Numeric: // if (HSSFDateUtil.IsCellDateFormatted(cell)) // { // if (index < 6) // { // s = cell.DateCellValue.ToString(); // } // else // { // s = cell.ToString(); // } // } // else // { // s = cell.NumericCellValue.ToString(); // } // break; // case NPOI.SS.UserModel.CellType.String: // s = cell.StringCellValue; // break; // case NPOI.SS.UserModel.CellType.Formula: // try // { // if (cell.CellFormula == "序号") // { // s = cell.ToString(); // } // else // { // s = cell.NumericCellValue != null ? cell.NumericCellValue.ToString() : null; // } // } // catch (Exception ex) // { // WLLog.Error("Excel导入问题:", ex); // } // break; // case NPOI.SS.UserModel.CellType.Blank: // if (bDate) // { // //对于日期的特殊处理 // s = dr[i - 1].ToString(); // } // else // { // s = cell.StringCellValue; // } // break; // case NPOI.SS.UserModel.CellType.Boolean: // break; // case NPOI.SS.UserModel.CellType.Error: // break; // default: // break; // } // } // dr[i] = s; // } // dt.Rows.Add(dr); // } // firstLine = false; // } // return dt; // } // catch (Exception ex) // { // WLLog.Error("Excel导入问题:", ex); // } // finally // { // if (file != null) // { // file.Close(); // } // } // return dt; //} ///// ///// 获取Excel文件Sheet名称列表,与Jet引擎不一致,获取的时候没有$多余字符。 ///// ///// ///// //public List GetSheetNames(string filePath) //{ // List tables = null; // FileStream file = null; // try // { // tables = new List(); // file = new FileStream(filePath, FileMode.Open, FileAccess.Read); // HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); // int i = 0; // while (true) // { // try // { // String s = hssfworkbook.GetSheetName(i); // if (s != null) // { // tables.Add(s); // i++; // } // else // { // break; // } // } // catch (Exception ex) // { // break; // } // } // } // catch (Exception ex) // { // WLLog.Error("Excel导入问题:", ex); // } // finally // { // if (file != null) // { // file.Close(); // } // } // return tables; //} /// /// 导入数据到检验表 sqe_cto_test、sqe_cto_test_standard、sqe_cto_test_data /// /// /// /// /// /// public string Import_Test_From_Data(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); try { List datas = LoadData_file_data(upload_id); if (datas == null || datas.Count == 0) { stringBuilder.AppendLine("导入数据信息不存在!"); return stringBuilder.ToString(); } //产品特性的文件格式校验 if (datas[0].c1.CompareTo("产品过程检验记录") != 0) { stringBuilder.AppendLine("文件不是【产品过程检验记录】要求的格式"); return stringBuilder.ToString(); } if (datas[1].c1.CompareTo("生产时间") != 0 || datas[1].c3.CompareTo("生产班次") != 0 || datas[1].c5.CompareTo("物料号") != 0 || datas[1].c7.CompareTo("物料名称") != 0) { stringBuilder.AppendLine("文件不是【产品过程检验记录】要求的格式"); return stringBuilder.ToString(); } if (datas[2].c1.CompareTo("对应原材料批次号") != 0 || datas[2].c3.CompareTo("原材料使用数量") != 0 || datas[2].c5.CompareTo("物料批次号") != 0 || datas[2].c7.CompareTo("物料数量") != 0) { stringBuilder.AppendLine("文件不是【产品过程检验记录】要求的格式"); return stringBuilder.ToString(); } string errorMsg; sqe_cto_test test = File_data_ToModel_test(datas, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_test.BeginTransaction(); _sqe_cto_test.Insert(test); errorMsg = null; List standards = File_data_ToModel_test_standard(datas, test, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_cto_test.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_test_standard.BeginTransaction(); _sqe_cto_test_standard.Insert(standards); List test_Datas = File_data_ToModel_test_data(datas, test, standards, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_cto_test.Rollback(); _sqe_cto_test_standard.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_test_data.Insert(test_Datas); _sqe_cto_test.CommitTransaction(); _sqe_cto_test_standard.CommitTransaction(); } catch (Exception ex) { stringBuilder.Append("数据导入失败!"); } finally { } return stringBuilder.ToString(); } /// /// 依据id,从sqe_file_upload和sqe_file_data,加载数据 /// /// /// public List LoadData_file_data(int upload_id) { List datas = _sqe_file_data.Select(a => a.file_id == upload_id).OrderBy(a => a.id).ToList(); return datas; } #region 产品特性 public sqe_cto_test File_data_ToModel_test(List datas, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); sqe_cto_test model = new sqe_cto_test(); DateTime timeValue; decimal realValuel; if (datas != null && datas.Count >= 5) { try { sqe_file_data data = datas[1]; if (DateTime.TryParse(data.c2, out timeValue)) { model.product_time = timeValue; } else { //model.product_time = DateTime.Parse("2000-01-01"); model.product_time = DateTime.Now; } model.shift_no = data.c4; model.item_no = data.c6; model.item_name = data.c8; data = datas[2]; model.material_batch = data.c2; if (decimal.TryParse(data.c4, out realValuel)) { model.material_used = realValuel; } model.item_batch = data.c6; if (decimal.TryParse(data.c8, out realValuel)) { model.item_qty = realValuel; } data = datas[3]; model.op_pre = data.c2; model.op_pre_batch = data.c4; model.op_current = data.c6; model.op_batch = data.c8; data = datas[4]; model.device_name = data.c2; model.device_no = data.c4; if (decimal.TryParse(data.c8, out realValuel)) { model.sampling_number = realValuel; } } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; errorMsg = string.Empty; return model; } else { errorMsg = stringBuilder.ToString(); return null; } } public List File_data_ToModel_test_standard(List datas, sqe_cto_test test, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 13) { try { //标准的起始位置 int index = 5; sqe_file_data dataRow = datas[index]; #region 处理尺寸的表头 if (dataRow.c3 != null && dataRow.c3.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c3; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c4 != null && dataRow.c4.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c4; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c5 != null && dataRow.c5.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c5; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c6 != null && dataRow.c6.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c6; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c7 != null && dataRow.c7.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c7; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c8 != null && dataRow.c8.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c8; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c9 != null && dataRow.c9.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c9; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c10 != null && dataRow.c10.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c10; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } if (dataRow.c11 != null && dataRow.c11.Length > 0) { sqe_cto_test_standard model = new sqe_cto_test_standard(); model.standard_no = dataRow.c11; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.test_id = test.id; modelList.Add(model); } #endregion 处理尺寸的表头 if (modelList.Count > 0) { sqe_cto_test_standard model = modelList[0]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c3); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c3; dataRow = datas[index + 3]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 1) { sqe_cto_test_standard model = modelList[1]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c4); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c4; dataRow = datas[index + 3]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 2) { sqe_cto_test_standard model = modelList[2]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c5); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c5; dataRow = datas[index + 3]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 3) { sqe_cto_test_standard model = modelList[3]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c6); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c6; dataRow = datas[index + 3]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 4) { sqe_cto_test_standard model = modelList[4]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c7); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c7; dataRow = datas[index + 3]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 5) { sqe_cto_test_standard model = modelList[5]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c8); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c8; dataRow = datas[index + 3]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 6) { sqe_cto_test_standard model = modelList[6]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c9); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c9; dataRow = datas[index + 3]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 7) { sqe_cto_test_standard model = modelList[7]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c10); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c10; dataRow = datas[index + 3]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 8) { sqe_cto_test_standard model = modelList[8]; dataRow = datas[index + 1]; model.sampling_count = int.Parse(dataRow.c11); dataRow = datas[index + 2]; model.is_associated_size = dataRow.c11; dataRow = datas[index + 3]; if (dataRow.c11 != null && decimal.TryParse(dataRow.c11, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 4]; if (dataRow.c11 != null && decimal.TryParse(dataRow.c11, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 5]; if (dataRow.c11 != null && decimal.TryParse(dataRow.c11, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 6]; if (dataRow.c11 != null && decimal.TryParse(dataRow.c11, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 7]; if (dataRow.c11 != null && decimal.TryParse(dataRow.c11, out realValuel)) { model.standard_min = realValuel; } } } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } errorMsg = stringBuilder.ToString(); return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } public List File_data_ToModel_test_data(List datas, sqe_cto_test test, List standards, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 15) { for (int i = 14; i < datas.Count; i++) { sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0 || dataRow.c1 == "0") && (dataRow.c2 == null || dataRow.c2.Length == 0)) { break; } //初始化每一层的数据集合 List test_datas = new List(); for (int j = 0; j < standards.Count; j++) { sqe_cto_test_data data = new sqe_cto_test_data(); data.test_id = standards[j].test_id; data.standard_id = standards[j].id; data.create_by = create_by; data.create_date = create_date; data.create_org = create_org; test_datas.Add(data); } try { //将每一个检测标准的值从记录行中取出来 if (test_datas.Count > 0) { sqe_cto_test_data data = test_datas[0]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c3 != null && dataRow.c3.Length > 0 && decimal.TryParse(dataRow.c3, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 1) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c4 != null && dataRow.c4.Length > 0 && decimal.TryParse(dataRow.c4, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 2) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c5 != null && dataRow.c5.Length > 0 && decimal.TryParse(dataRow.c5, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 3) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c6 != null && dataRow.c6.Length > 0 && decimal.TryParse(dataRow.c6, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 4) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c7 != null && dataRow.c7.Length > 0 && decimal.TryParse(dataRow.c7, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 5) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c8 != null && dataRow.c8.Length > 0 && decimal.TryParse(dataRow.c8, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 6) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c9 != null && dataRow.c9.Length > 0 && decimal.TryParse(dataRow.c9, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 7) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c10 != null && dataRow.c10.Length > 0 && decimal.TryParse(dataRow.c10, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 8) { sqe_cto_test_data data = test_datas[1]; data.data_no = dataRow.c1; if (dataRow.c2 != null) { String s = dataRow.c2.ToString(); DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c11 != null && dataRow.c11.Length > 0 && decimal.TryParse(dataRow.c11, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } File_data_ToModel_test_data_Add(modelList, test_datas); } catch (Exception ex) { WLLog.Error("Excel数据解析_原始数据转换到对象实体的问题:", ex); } } errorMsg = string.Empty; return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 将转换的数据插入到返回结果数据集中,处理掉异常数据 /// /// /// private void File_data_ToModel_test_data_Add(List dataDest, List dataSource) { if (dataSource != null && dataSource.Count > 0) { for (int i = 0; i < dataSource.Count; i++) { sqe_cto_test_data data = dataSource[i]; if (data.data_no != null && data.data_no.Length > 0 && data.data_time != null && data.data_value != null) { dataDest.Add(data); } } } } #endregion 产品特性 public string Import_Process_From_Data(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); try { List datas = LoadData_file_data(upload_id); if (datas == null || datas.Count == 0) { stringBuilder.AppendLine("导入数据信息不存在!"); return stringBuilder.ToString(); } //产品过程特性的文件格式校验 if (datas[0].c1.CompareTo("产品过程特性") != 0) { stringBuilder.AppendLine("文件不是【产品过程特性】要求的格式"); return stringBuilder.ToString(); } if (datas[1].c1.CompareTo("生产时间") != 0 || datas[1].c3.CompareTo("生产班次") != 0 || datas[1].c5.CompareTo("物料名称") != 0 || datas[1].c7.CompareTo("物料号") != 0) { stringBuilder.AppendLine("文件不是【产品过程特性】要求的格式"); return stringBuilder.ToString(); } if (datas[2].c1.CompareTo("对应原材料批次号") != 0 || datas[2].c3.CompareTo("原材料使用数量") != 0 || datas[2].c5.CompareTo("物料批次号") != 0 || datas[2].c7.CompareTo("物料数量") != 0) { stringBuilder.AppendLine("文件不是【产品过程特性】要求的格式"); return stringBuilder.ToString(); } string errorMsg; sqe_cto_process test = File_data_ToModel_process(datas, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_process.BeginTransaction(); _sqe_cto_process.Insert(test); errorMsg = null; List standards = File_data_ToModel_process_standard(datas, test, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_cto_process.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_process_standard.BeginTransaction(); _sqe_cto_process_standard.Insert(standards); List test_Datas = File_data_ToModel_process_data(datas, test, standards, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_cto_process.Rollback(); _sqe_cto_process_standard.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_cto_process_data.Insert(test_Datas); _sqe_cto_process.CommitTransaction(); _sqe_cto_process_standard.CommitTransaction(); } catch (Exception ex) { stringBuilder.Append("数据导入失败!"); } finally { } return stringBuilder.ToString(); } #region 产品过程特性 public sqe_cto_process File_data_ToModel_process(List datas, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); sqe_cto_process model = new sqe_cto_process(); DateTime timeValue; decimal realValuel; if (datas != null && datas.Count >= 5) { try { sqe_file_data data = datas[1]; if (DateTime.TryParse(data.c2, out timeValue)) { model.product_time = timeValue; } else { //model.product_time = DateTime.Parse("2000-01-01"); model.product_time = DateTime.Now; } model.shift_no = data.c4; model.item_no = data.c6; model.item_name = data.c8; data = datas[2]; model.material_batch = data.c2; if (decimal.TryParse(data.c4, out realValuel)) { model.material_used = realValuel; } model.item_batch = data.c6; if (decimal.TryParse(data.c8, out realValuel)) { model.item_qty = realValuel; } data = datas[3]; model.op_pre = data.c2; model.op_pre_batch = data.c4; model.op_current = data.c6; model.op_batch = data.c8; data = datas[4]; model.device_name = data.c2; model.device_no = data.c4; if (decimal.TryParse(data.c8, out realValuel)) { model.sampling_number = realValuel; } } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; errorMsg = string.Empty; return model; } else { errorMsg = stringBuilder.ToString(); return null; } } public List File_data_ToModel_process_standard(List datas, sqe_cto_process test, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 13) { try { //标准的起始位置 int index = 5; sqe_file_data dataRow = datas[index]; #region 处理尺寸的表头 if (dataRow.c2 != null && dataRow.c2.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c2; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c3 != null && dataRow.c3.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c3; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c4 != null && dataRow.c4.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c4; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c5 != null && dataRow.c5.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c5; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c6 != null && dataRow.c6.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c6; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c7 != null && dataRow.c7.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c7; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c8 != null && dataRow.c8.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c8; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c9 != null && dataRow.c9.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c9; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } if (dataRow.c10 != null && dataRow.c10.Length > 0) { sqe_cto_process_standard model = new sqe_cto_process_standard(); model.standard_no = dataRow.c10; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.process_id = test.id; modelList.Add(model); } #endregion 处理尺寸的表头 if (modelList.Count > 0) { sqe_cto_process_standard model = modelList[0]; dataRow = datas[index + 1]; if (dataRow.c2 != null && decimal.TryParse(dataRow.c2, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c2 != null && decimal.TryParse(dataRow.c2, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c2 != null && decimal.TryParse(dataRow.c2, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c2 != null && decimal.TryParse(dataRow.c2, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c2 != null && decimal.TryParse(dataRow.c2, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 1) { sqe_cto_process_standard model = modelList[1]; dataRow = datas[index + 1]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c3 != null && decimal.TryParse(dataRow.c3, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 2) { sqe_cto_process_standard model = modelList[2]; dataRow = datas[index + 1]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c4 != null && decimal.TryParse(dataRow.c4, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 3) { sqe_cto_process_standard model = modelList[3]; dataRow = datas[index + 1]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c5 != null && decimal.TryParse(dataRow.c5, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 4) { sqe_cto_process_standard model = modelList[4]; dataRow = datas[index + 1]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c6 != null && decimal.TryParse(dataRow.c6, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 5) { sqe_cto_process_standard model = modelList[5]; dataRow = datas[index + 1]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c7 != null && decimal.TryParse(dataRow.c7, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 6) { sqe_cto_process_standard model = modelList[6]; dataRow = datas[index + 1]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c8 != null && decimal.TryParse(dataRow.c8, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 7) { sqe_cto_process_standard model = modelList[7]; dataRow = datas[index + 1]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c9 != null && decimal.TryParse(dataRow.c9, out realValuel)) { model.standard_min = realValuel; } } if (modelList.Count > 8) { sqe_cto_process_standard model = modelList[8]; dataRow = datas[index + 1]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 2]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 3]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 4]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 5]; if (dataRow.c10 != null && decimal.TryParse(dataRow.c10, out realValuel)) { model.standard_min = realValuel; } } } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } errorMsg = stringBuilder.ToString(); return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } public List File_data_ToModel_process_data(List datas, sqe_cto_process test, List standards, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 12) { for (int i = 11; i < datas.Count; i++) { sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0 || dataRow.c1 == "0") && (dataRow.c2 == null || dataRow.c2.Length == 0)) { break; } //初始化每一层的数据集合 List test_datas = new List(); for (int j = 0; j < standards.Count; j++) { sqe_cto_process_data data = new sqe_cto_process_data(); data.process_id = standards[j].process_id; data.standard_id = standards[j].id; data.create_by = create_by; data.create_date = create_date; data.create_org = create_org; test_datas.Add(data); } try { //将每一个检测标准的值从记录行中取出来 if (test_datas.Count > 0) { sqe_cto_process_data data = test_datas[0]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c2 != null && dataRow.c2.Length > 0 && decimal.TryParse(dataRow.c2, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 1) { sqe_cto_process_data data = test_datas[1]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c3 != null && dataRow.c3.Length > 0 && decimal.TryParse(dataRow.c3, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 2) { sqe_cto_process_data data = test_datas[2]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c4 != null && dataRow.c4.Length > 0 && decimal.TryParse(dataRow.c4, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 3) { sqe_cto_process_data data = test_datas[3]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c5 != null && dataRow.c5.Length > 0 && decimal.TryParse(dataRow.c5, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 4) { sqe_cto_process_data data = test_datas[4]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c6 != null && dataRow.c6.Length > 0 && decimal.TryParse(dataRow.c6, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 5) { sqe_cto_process_data data = test_datas[5]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c7 != null && dataRow.c7.Length > 0 && decimal.TryParse(dataRow.c7, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 6) { sqe_cto_process_data data = test_datas[6]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c8 != null && dataRow.c8.Length > 0 && decimal.TryParse(dataRow.c8, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 7) { sqe_cto_process_data data = test_datas[7]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c9 != null && dataRow.c9.Length > 0 && decimal.TryParse(dataRow.c9, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } if (test_datas.Count > 8) { sqe_cto_process_data data = test_datas[8]; if (dataRow.c1 != null) { String s = dataRow.c1.ToString(); if (s != null && s.Length > 9) { s = s.Substring(s.Length - 9); } DateTime date; if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out date)) { data.data_time = date.ToString("yyyy-MM-dd HH:mm"); } } if (dataRow.c10 != null && dataRow.c10.Length > 0 && decimal.TryParse(dataRow.c10, out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } File_data_ToModel_process_data_Add(modelList, test_datas); } catch (Exception ex) { WLLog.Error("Excel数据解析_原始数据转换到对象实体的问题:", ex); } } errorMsg = string.Empty; return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 将转换的数据插入到返回结果数据集中,处理掉异常数据 /// /// /// private void File_data_ToModel_process_data_Add(List dataDest, List dataSource) { if (dataSource != null && dataSource.Count > 0) { for (int i = 0; i < dataSource.Count; i++) { sqe_cto_process_data data = dataSource[i]; if (data.data_time != null && data.data_value != null) { dataDest.Add(data); } } } } #endregion 产品过程特性 /// /// 依据导入的数据行,生成OP的表头、检验标准和数据行 /// /// /// /// /// /// public string Import_Op_From_Data(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); try { List datas = LoadData_file_data(upload_id); if (datas == null || datas.Count == 0) { stringBuilder.AppendLine("导入数据信息不存在!"); return stringBuilder.ToString(); } //出货检验记录的文件格式校验 if (datas[0].c1.CompareTo("物料名称") != 0 || datas[0].c2.CompareTo("批次号") != 0 || datas[0].c3.CompareTo("工序") != 0 || datas[0].c4.CompareTo("总数量") != 0 || datas[0].c5.CompareTo("良品数") != 0 || datas[0].c6.CompareTo("不良品数") != 0 || datas[0].c7.CompareTo("不良率") != 0) { stringBuilder.AppendLine("文件不是【全检工序】要求的格式"); return stringBuilder.ToString(); } string errorMsg; sqe_op test = File_data_ToModel_op(datas, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_op.BeginTransaction(); _sqe_op.Insert(test); errorMsg = null; List standards = File_data_ToModel_op_data(datas, test, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_op.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_op_data.BeginTransaction(); _sqe_op_data.Insert(standards); List test_Datas = File_data_ToModel_op_data_detail(datas, test, standards, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_op.Rollback(); _sqe_op_data.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_op_data_detail.Insert(test_Datas); _sqe_op.CommitTransaction(); _sqe_op_data.CommitTransaction(); } catch (Exception ex) { stringBuilder.Append("数据导入失败!"); } finally { } return stringBuilder.ToString(); } #region OP /// /// 从原始数据行生成OP的表头数据 /// /// /// /// /// /// /// public sqe_op File_data_ToModel_op(List datas, string create_by, DateTime create_date, string create_org, out string errorMsg) { sqe_op model = new sqe_op(); model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; errorMsg = string.Empty; errorMsg = ""; return model; } /// /// 从原始数据行生成OP的检验标准 /// /// /// /// /// /// /// /// public List File_data_ToModel_op_data(List datas, sqe_op test, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count > 1) { for (int i = 1; i < datas.Count; i++) { sqe_op_data model = new sqe_op_data(); sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0) && (dataRow.c2 == null || dataRow.c2.Length == 0)) { break; } model.item_name = dataRow.c1; model.batch_no = dataRow.c2; model.op_no = dataRow.c3; Object obj = GetFieldValue(dataRow, "c4"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_all = realValuel; } obj = GetFieldValue(dataRow, "c5"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_ok = realValuel; } obj = GetFieldValue(dataRow, "c6"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_error = realValuel; } obj = GetFieldValue(dataRow, "c7"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.percent_ok = realValuel; } obj = GetFieldValue(dataRow, "c8"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.percent_error = realValuel; } model.op_time = DateTime.Now; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; modelList.Add(model); } } errorMsg = stringBuilder.ToString(); return modelList; } /// /// 从原始数据行生成OP的数据 /// /// /// /// /// /// /// /// /// public List File_data_ToModel_op_data_detail(List datas, sqe_op test, List standards, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count > 1) { for (int i = 1; i < datas.Count && i - 1 < standards.Count; i++) { sqe_file_data dataRow = datas[i]; List testDatas = new List(); for (int j = 9; j < 50; j += 4) { Object obj = GetFieldValue(dataRow, "c" + j.ToString()); if (obj != null && obj.ToString().Length > 0) { sqe_op_data_detail data = new sqe_op_data_detail(); data.op_id = standards[i - 1].op_id; data.op_data_id = standards[i - 1].id; data.bad_type = obj.ToString(); obj = GetFieldValue(dataRow, "c" + (j + 1).ToString()); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { data.bad_qty = realValuel; } obj = GetFieldValue(dataRow, "c" + (j + 2).ToString()); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { data.percent_bad_all = realValuel; } obj = GetFieldValue(dataRow, "c" + (j + 3).ToString()); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { data.percent_bad = realValuel; } data.create_by = create_by; data.create_date = create_date; data.create_org = create_org; testDatas.Add(data); } } File_data_ToModel_op_data_detail_Add(modelList, testDatas); } errorMsg = string.Empty; return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 将转换的数据插入到返回结果数据集中,处理掉异常数据 /// /// /// private void File_data_ToModel_op_data_detail_Add(List dataDest, List dataSource) { if (dataSource != null && dataSource.Count > 0) { for (int i = 0; i < dataSource.Count; i++) { sqe_op_data_detail data = dataSource[i]; if (data.bad_type != null && data.bad_type.Length > 0 && data.bad_qty != null) { dataDest.Add(data); } } } } #endregion OP /// /// 依据导入的数据行,生成FPY的表头、检验标准和数据行 /// /// /// /// /// /// public string Import_Fpy_From_Data(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); try { List datas = LoadData_file_data(upload_id); if (datas == null || datas.Count == 0) { stringBuilder.AppendLine("导入数据信息不存在!"); return stringBuilder.ToString(); } //FPY的文件格式校验 if (datas[0].c1.CompareTo("一、供应商上传报表模版") != 0) { stringBuilder.AppendLine("文件不是【FPY】要求的格式"); return stringBuilder.ToString(); } if (datas[0].c1.CompareTo("生产各工序良率统计报表") != 0) { stringBuilder.AppendLine("文件不是【FPY】要求的格式"); return stringBuilder.ToString(); } if (datas[2].c1.CompareTo("NO") != 0 || datas[2].c2.CompareTo("日期") != 0 || datas[2].c3.CompareTo("物料号") != 0 || datas[2].c4.CompareTo("物料名称") != 0 || datas[2].c5.CompareTo("工序") != 0 || datas[2].c6.CompareTo("投入数") != 0 || datas[2].c7.CompareTo("不良数") != 0 || datas[2].c8.CompareTo("良品率") != 0) { stringBuilder.AppendLine("文件不是【产品过程特性】要求的格式"); return stringBuilder.ToString(); } if (datas[2].c1.CompareTo("对应原材料批次号") != 0 || datas[2].c3.CompareTo("原材料使用数量") != 0 || datas[2].c5.CompareTo("物料批次号") != 0 || datas[2].c7.CompareTo("物料数量") != 0) { stringBuilder.AppendLine("文件不是【产品过程特性】要求的格式"); return stringBuilder.ToString(); } string errorMsg; sqe_fpy test = File_data_ToModel_fpy(datas, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_fpy.BeginTransaction(); _sqe_fpy.Insert(test); errorMsg = null; List standards = File_data_ToModel_fpy_data(datas, test, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_fpy.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_fpy_data.BeginTransaction(); _sqe_fpy_data.Insert(standards); _sqe_fpy.CommitTransaction(); _sqe_fpy_data.CommitTransaction(); } catch (Exception ex) { stringBuilder.Append("数据导入失败!"); } finally { } return stringBuilder.ToString(); } #region FPY /// /// 从原始数据行生成FPY的表头数据 /// /// /// /// /// /// /// public sqe_fpy File_data_ToModel_fpy(List datas, string create_by, DateTime create_date, string create_org, out string errorMsg) { sqe_fpy model = new sqe_fpy(); model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; errorMsg = string.Empty; errorMsg = ""; return model; } /// /// 从原始数据行生成FPY的检验标准 /// /// /// /// /// /// /// /// public List File_data_ToModel_fpy_data(List datas, sqe_fpy test, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count > 3) { for (int i = 3; i < datas.Count; i++) { sqe_fpy_data model = new sqe_fpy_data(); sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0) && (dataRow.c3 == null || dataRow.c3.Length == 0)) { break; } int dateLength; DateTime dt; if (DateTime.TryParse(dataRow.c2, out dt)) { model.op_time = dt; } else { if (int.TryParse(dataRow.c2, out dateLength)) { dt = DateTime.Parse("1900-01-01"); model.op_time = dt.AddDays(dateLength - 2); } } model.item_no = dataRow.c3; model.item_name = dataRow.c4; model.op_no = dataRow.c5; Object obj = GetFieldValue(dataRow, "c6"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_all = realValuel; } obj = GetFieldValue(dataRow, "c7"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_error = realValuel; } obj = GetFieldValue(dataRow, "c8"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.percent_ok = realValuel; } model.fpy_id = test.id; model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; modelList.Add(model); } } errorMsg = stringBuilder.ToString(); return modelList; } #endregion FPY /// /// 依据导入的数据行,生成OQC的表头、检验标准和数据行 /// /// /// /// /// /// public string Import_Oqc_From_Data(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); try { List datas = LoadData_file_data(upload_id); if (datas == null || datas.Count == 0) { stringBuilder.AppendLine("导入数据信息不存在!"); return stringBuilder.ToString(); } //出货检验记录的文件格式校验 if (datas[0].c1.CompareTo("出货检验记录") != 0) { stringBuilder.AppendLine("文件不是【出货检验记录】要求的格式"); return stringBuilder.ToString(); } if (datas[1].c1.CompareTo("供应商名") != 0 || datas[1].c3.CompareTo("物料名称") != 0 || datas[1].c5.CompareTo("物料号") != 0 || datas[1].c7.CompareTo("物料版本号") != 0) { stringBuilder.AppendLine("文件不是【出货检验记录】要求的格式"); return stringBuilder.ToString(); } if (datas[2].c1.CompareTo("日期") != 0 || datas[2].c3.CompareTo("批次号") != 0 || datas[2].c5.CompareTo("批次数量") != 0 || datas[2].c7.CompareTo("检验人员") != 0) { stringBuilder.AppendLine("文件不是【出货检验记录】要求的格式"); return stringBuilder.ToString(); } string errorMsg; sqe_oqc test = File_data_ToModel_oqc(datas, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_oqc.BeginTransaction(); _sqe_oqc.Insert(test); errorMsg = null; List standards = File_data_ToModel_oqc_standard(datas, test, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_oqc.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_oqc_standard.BeginTransaction(); _sqe_oqc_standard.Insert(standards); List test_Datas = File_data_ToModel_oqc_data(datas, test, standards, create_by, create_date, create_org, out errorMsg); if (errorMsg != null && errorMsg.Length > 0) { _sqe_oqc.Rollback(); _sqe_oqc_standard.Rollback(); stringBuilder.AppendLine(errorMsg); return stringBuilder.ToString(); } _sqe_oqc_data.Insert(test_Datas); _sqe_oqc.CommitTransaction(); _sqe_oqc_standard.CommitTransaction(); } catch (Exception ex) { stringBuilder.Append("数据导入失败!"); } finally { } return stringBuilder.ToString(); } #region OQC /// /// 从原始数据行生成OQC的表头数据 /// /// /// /// /// /// /// public sqe_oqc File_data_ToModel_oqc(List datas, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); sqe_oqc model = new sqe_oqc(); DateTime timeValue; decimal realValuel; if (datas != null && datas.Count >= 4) { try { sqe_file_data data = datas[1]; model.supp_no = data.c2; model.item_name = data.c4; model.item_no = data.c6; model.item_version = data.c8; data = datas[2]; if (DateTime.TryParse(data.c2, out timeValue)) { model.product_time = timeValue; } else { model.product_time = DateTime.Now; } model.batch_no = data.c4; if (decimal.TryParse(data.c6, out realValuel)) { model.batch_qty = realValuel; } model.test_person = data.c8; data = datas[3]; model.sampling_standard = data.c2; if (decimal.TryParse(data.c4, out realValuel)) { model.sampling_number = realValuel; } model.test_result = data.c8; } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; errorMsg = string.Empty; return model; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 从原始数据行生成OQC的检验标准 /// /// /// /// /// /// /// /// public List File_data_ToModel_oqc_standard(List datas, sqe_oqc test, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 13) { try { //标准的起始位置 int index = 4; sqe_file_data dataRow = datas[index]; #region 处理尺寸的表头 for (int i = 2; i < 10; i++) { Object obj = GetFieldValue(dataRow, "c" + i.ToString()); if (obj != null) { sqe_oqc_standard model = new sqe_oqc_standard(); model.standard_no = obj.ToString(); model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.oqc_id = test.id; modelList.Add(model); } else { break; } } #endregion 处理尺寸的表头 //处理表头的具体值 for (int i = 0; i < 9 && i < modelList.Count; i++) { string fieldName = "c" + (i + 2).ToString(); sqe_oqc_standard model = modelList[i]; dataRow = datas[index + 1]; Object obj = GetFieldValue(dataRow, fieldName); if (obj != null) { model.standard_no = obj.ToString(); } dataRow = datas[index + 2]; obj = GetFieldValue(dataRow, fieldName); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.standard_value = realValuel; } dataRow = datas[index + 3]; obj = GetFieldValue(dataRow, fieldName); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.delta_up = realValuel; } dataRow = datas[index + 4]; obj = GetFieldValue(dataRow, fieldName); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.delta_down = realValuel; } dataRow = datas[index + 5]; obj = GetFieldValue(dataRow, fieldName); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.standard_max = realValuel; } dataRow = datas[index + 6]; obj = GetFieldValue(dataRow, fieldName); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.standard_min = realValuel; } } } catch (Exception ex) { WLLog.Error("Excel数据解析问题:", ex); } errorMsg = stringBuilder.ToString(); return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 获取某个对象的某个属性的值 /// /// /// /// private Object GetFieldValue(Object obj, string fieldName) { //获得对象的所有public属性 PropertyInfo[] pis = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); //如果获得了属性 if (pis != null) { foreach (PropertyInfo pi in pis)//针对每一个属性进行循环 { if (pi.Name.CompareTo(fieldName) == 0) { Object objValue = pi.GetValue(obj); if (objValue != null && objValue.ToString().Length > 0) { return objValue; } } } } return null; } /// /// 从原始数据行生成OQC的数据 /// /// /// /// /// /// /// /// /// public List File_data_ToModel_oqc_data(List datas, sqe_oqc test, List standards, string create_by, DateTime create_date, string create_org, out string errorMsg) { StringBuilder stringBuilder = new StringBuilder(); List modelList = new List(); decimal realValuel; if (datas != null && datas.Count >= 12) { for (int i = 11; i < datas.Count; i++) { sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0 || dataRow.c1 == "0") && (dataRow.c2 == null || dataRow.c2.Length == 0)) { break; } //初始化每一层的数据集合 List test_datas = new List(); for (int j = 0; j < standards.Count; j++) { sqe_oqc_data data = new sqe_oqc_data(); data.oqc_id = standards[j].oqc_id; data.standard_id = standards[j].id; data.create_by = create_by; data.create_date = create_date; data.create_org = create_org; test_datas.Add(data); } try { //将每一个检测标准的值从记录行中取出来 for (int j = 0; j < test_datas.Count; j++) { sqe_oqc_data data = test_datas[j]; data.data_no = dataRow.c1; string fieldName = "c" + (j + 2).ToString(); Object obj = GetFieldValue(dataRow, fieldName); if (obj != null && obj.ToString().Length > 0 && decimal.TryParse(obj.ToString(), out realValuel)) { data.data_value = realValuel; } else { data.data_value = null; } } File_data_ToModel_oqc_data_Add(modelList, test_datas); } catch (Exception ex) { WLLog.Error("Excel数据解析_原始数据转换到对象实体的问题:", ex); } } errorMsg = string.Empty; return modelList; } else { errorMsg = stringBuilder.ToString(); return null; } } /// /// 将转换的数据插入到返回结果数据集中,处理掉异常数据 /// /// /// private void File_data_ToModel_oqc_data_Add(List dataDest, List dataSource) { if (dataSource != null && dataSource.Count > 0) { for (int i = 0; i < dataSource.Count; i++) { sqe_oqc_data data = dataSource[i]; if (data.data_no != null && data.data_no.Length > 0 && data.data_value != null) { dataDest.Add(data); } } } } #endregion OQC } }