using Business.EntityFrameworkCore.SqlRepositories; using Business.StructuredDB; using Business.StructuredDB.Sqe; using MathNet.Numerics.Statistics; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.POIFS.Crypt.Dsig; using NPOI.SS.Formula.Functions; using NPOI.XWPF.UserModel; using RazorEngine.Compilation.ImpromptuInterface.Optimization; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.Intrinsics.X86; using System.Text; using Volo.Abp.Application.Services; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; using static NPOI.POIFS.Crypt.CryptoFunctions; namespace Business.VSM { /// /// Sqe数据导入接口实现 /// public class SqeExcelService : ApplicationService, ISqeExcelService { LoggerHelper WLLog; private readonly ISqeRepository _sqe_chart_data_temp; 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_avg; private readonly ISqeRepository _sqe_cto_test_data; private readonly ISqeRepository _sqe_cto_test_standard; private readonly ISqeRepository _sqe_cto_test_statistics; private readonly ISqeRepository _sqe_fct; private readonly ISqeRepository _sqe_fct_data; private readonly ISqeRepository _sqe_file_data; private readonly ISqeRepository _sqe_file_upload; 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_oqc; private readonly ISqeRepository _sqe_oqc_data; private readonly ISqeRepository _sqe_oqc_standard; private readonly ISqeRepository _sqe_oqc_statistics; private readonly ISqeRepository _v_sqe_cto_process_data; private readonly ISqeRepository _v_sqe_cto_test_avg; private readonly ISqeRepository _v_sqe_cto_test_data; private readonly ISqeRepository _v_sqe_fpy_data; private readonly ISqeRepository _v_sqe_op_data_detail; private readonly ISqeRepository _v_sqe_oqc_data; public SqeExcelService( ISqeRepository sqe_chart_data_temp, ISqeRepository sqe_cto_process, ISqeRepository sqe_cto_process_data, ISqeRepository sqe_cto_process_standard, ISqeRepository sqe_cto_test, ISqeRepository sqe_cto_test_avg, ISqeRepository sqe_cto_test_data, ISqeRepository sqe_cto_test_standard, ISqeRepository sqe_cto_test_statistics, ISqeRepository sqe_fct, ISqeRepository sqe_fct_data, ISqeRepository sqe_file_data, ISqeRepository sqe_file_upload, ISqeRepository sqe_fpy, ISqeRepository sqe_fpy_data, ISqeRepository sqe_op, ISqeRepository sqe_op_data, ISqeRepository sqe_op_data_detail, ISqeRepository sqe_oqc, ISqeRepository sqe_oqc_data, ISqeRepository sqe_oqc_standard, ISqeRepository sqe_oqc_statistics, ISqeRepository v_sqe_cto_process_data, ISqeRepository v_sqe_cto_test_avg, ISqeRepository v_sqe_cto_test_data, ISqeRepository v_sqe_fpy_data, ISqeRepository v_sqe_op_data_detail, ISqeRepository v_sqe_oqc_data ) { WLLog = new LoggerHelper(); _sqe_chart_data_temp = sqe_chart_data_temp; _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_avg = sqe_cto_test_avg; _sqe_cto_test_data = sqe_cto_test_data; _sqe_cto_test_standard = sqe_cto_test_standard; _sqe_cto_test_statistics = sqe_cto_test_statistics; _sqe_fct = sqe_fct; _sqe_fct_data = sqe_fct_data; _sqe_file_data = sqe_file_data; _sqe_file_upload = sqe_file_upload; _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_oqc = sqe_oqc; _sqe_oqc_data = sqe_oqc_data; _sqe_oqc_standard = sqe_oqc_standard; _sqe_oqc_statistics = sqe_oqc_statistics; _v_sqe_cto_process_data = v_sqe_cto_process_data; _v_sqe_cto_test_avg = v_sqe_cto_test_avg; _v_sqe_cto_test_data = v_sqe_cto_test_data; _v_sqe_fpy_data = v_sqe_fpy_data; _v_sqe_op_data_detail = v_sqe_op_data_detail; _v_sqe_oqc_data = v_sqe_oqc_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; //} /// /// 依据上传文件标识,获取上传文件对象 /// /// /// public sqe_file_upload Get_Sqe_file_upload(int upload_id) { try { List uploads = _sqe_file_upload.Select(a => a.id == upload_id); sqe_file_upload _Upload = _sqe_file_upload.Select(a => a.id == upload_id).First(); return _Upload; } catch (Exception ex) { return null; } } /// /// 导入数据到检验表 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 { sqe_file_upload sqe_File_Upload = Get_Sqe_file_upload(upload_id); 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_File_Upload.item_no = test.item_no; sqe_File_Upload.item_name = test.item_name; _sqe_file_upload.Update(sqe_File_Upload); _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; int intValue; if (datas != null && datas.Count >= 5) { try { model.file_id = datas[0].file_id; 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 (int.TryParse(data.c8, out intValue)) { model.sampling_number = intValue; } } 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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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 { sqe_file_upload sqe_File_Upload = Get_Sqe_file_upload(upload_id); 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_File_Upload.item_no = test.item_no; sqe_File_Upload.item_name = test.item_name; _sqe_file_upload.Update(sqe_File_Upload); _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 { model.file_id = datas[0].file_id; 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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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.Value.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 { sqe_file_upload sqe_File_Upload = Get_Sqe_file_upload(upload_id); 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 || datas[0].c8.CompareTo("良品数") != 0 || datas[0].c9.CompareTo("不良品数") != 0 || datas[0].c10.CompareTo("合格率") != 0 || datas[0].c11.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_File_Upload.item_no = standards[0].item_no; sqe_File_Upload.item_name = standards[0].item_name; _sqe_file_upload.Update(sqe_File_Upload); _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; if (datas != null && datas.Count > 0) { model.file_id = datas[0].file_id; } 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(); model.op_id = test.id; sqe_file_data dataRow = datas[i]; if ((dataRow.c1 == null || dataRow.c1.Length == 0) && (dataRow.c2 == null || dataRow.c2.Length == 0)) { break; } model.supp_no = dataRow.c1; DateTime dt; int dateLength; 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.op_time = DateTime.Parse(dataRow.c2); model.item_no = dataRow.c3; model.item_name = dataRow.c4; model.batch_no = dataRow.c5; model.op_no = dataRow.c6; Object obj = GetFieldValue(dataRow, "c7"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_all = realValuel; } obj = GetFieldValue(dataRow, "c8"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_ok = realValuel; } obj = GetFieldValue(dataRow, "c9"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.qty_error = realValuel; } obj = GetFieldValue(dataRow, "c10"); if (obj != null && decimal.TryParse(obj.ToString(), out realValuel)) { model.percent_ok = realValuel; } obj = GetFieldValue(dataRow, "c11"); 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 = 12; 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 { sqe_file_upload sqe_File_Upload = Get_Sqe_file_upload(upload_id); 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[1].c1.CompareTo("NO") != 0 || datas[1].c2.CompareTo("日期") != 0 || datas[1].c3.CompareTo("物料号") != 0 || datas[1].c4.CompareTo("物料名称") != 0 || datas[1].c5.CompareTo("工序") != 0 || datas[1].c6.CompareTo("投入数") != 0 || datas[1].c7.CompareTo("不良数") != 0 || datas[1].c8.CompareTo("良品率") != 0) { stringBuilder.AppendLine("文件不是【FPY】要求的格式"); 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("文件不是【FPY】要求的格式式"); // 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_File_Upload.item_no = standards[0].item_no; sqe_File_Upload.item_name = standards[0].item_name; _sqe_file_upload.Update(sqe_File_Upload); _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; if (datas != null && datas.Count > 0) { model.file_id = datas[0].file_id; } 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 > 2) { for (int i = 2; 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 { sqe_file_upload sqe_File_Upload = Get_Sqe_file_upload(upload_id); 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_File_Upload.item_no = test.item_no; sqe_File_Upload.item_name = test.item_name; _sqe_file_upload.Update(sqe_File_Upload); _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 { model.file_id = datas[0].file_id; 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 #region Fct /// /// 将字符串插入到数据库 /// /// /// /// /// /// public string Import_Fct_From_Data(String data, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); sqe_fct model = new sqe_fct(); List modelList = new List(); DateTime timeValue; decimal realValuel; try { JObject json = JObject.Parse(data); model.SpID = json["SpID"].ToString(); model.WLID = json["WLID"].ToString(); model.WPID = json["WPID"].ToString(); model.op_side = json["OpSide"].ToString(); model.LineID = json["LineID"].ToString(); model.OpID = json["OpID"].ToString(); model.bar_code = json["BarCode"].ToString(); model.SerialNO = json["SerialNO"].ToString(); model.WONO = json["WONO"].ToString(); model.program = json["Program"].ToString(); model.pro_version = json["ProVersion"].ToString(); model.test_date = DateTime.Parse(json["TestDate"].ToString()); model.test_result = json["testResult"].ToString(); model.msg = json["Msg"].ToString(); model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; JArray array = JArray.Parse(json["testData"].ToString()); //将每一个检测标准的值从记录行中取出来 for (int j = 0; array != null && j < array.Count; j++) { sqe_fct_data data1 = new sqe_fct_data(); data1.name = array[j]["Name"].ToString(); data1.unit = array[j]["Unit"].ToString(); data1.lower = decimal.Parse(array[j]["Lower"].ToString()); data1.upper = decimal.Parse(array[j]["Upper"].ToString()); data1.actual = decimal.Parse(array[j]["Actual"].ToString()); data1.result = array[j]["result"].ToString(); data1.start_time = DateTime.Parse(array[j]["StartTime"].ToString()); data1.end_time = DateTime.Parse(array[j]["endTime"].ToString()); data1.detial = array[j]["Detial"].ToString(); data1.create_by = create_by; data1.create_date = create_date; data1.create_org = create_org; modelList.Add(data1); } } catch (Exception ex) { stringBuilder.Append(ex.ToString()); WLLog.Error("Fct上传数据解析_原始数据转换到对象实体的问题:", ex); } try { _sqe_fct.BeginTransaction(); _sqe_fct.Insert(model); foreach (var item in modelList) { item.fct_id = model.id; } _sqe_fct_data.BeginTransaction(); _sqe_fct_data.Insert(modelList); _sqe_fct_data.CommitTransaction(); _sqe_fct.CommitTransaction(); } catch (Exception ex) { _sqe_fct_data.Rollback(); _sqe_fct.Rollback(); stringBuilder.Append(ex.ToString()); } return stringBuilder.ToString(); } #endregion Fct /// /// 依据上传文件id,生成该文件上传的数据统计 /// /// /// /// /// /// public string Compute_Test(int upload_id, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); //查询原始记录 List tests = _sqe_cto_test.Select(a => a.file_id == upload_id).OrderBy(a => a.id).ToList(); if (tests == null || tests.Count == 0) { stringBuilder.AppendLine("该id对应的上传数据记录不存在!"); return stringBuilder.ToString(); } sqe_cto_test test = tests[0]; List test_standards = _sqe_cto_test_standard.Select(a => a.test_id == test.id).OrderBy(a => a.id).ToList(); if (test_standards == null || test_standards.Count == 0) { stringBuilder.AppendLine("该id对应的检验标准数据记录不存在!"); return stringBuilder.ToString(); } //Compute_Test_id(upload_id, "1号尺寸", create_by, create_date, create_org); Compute_Test_id(upload_id, test_standards[0].standard_no, create_by, create_date, create_org); List test_datas = _sqe_cto_test_data.Select(a => a.test_id == test.id).OrderBy(a => a.id).ToList(); //生成统计信息 List test_avgs = _sqe_cto_test_avg.Select(a => a.cto_test_id == test.id).OrderBy(a => a.id).ToList(); if (test_avgs != null && test_avgs.Count > 0) { stringBuilder.AppendLine("该id的数据统计已经完成!"); return stringBuilder.ToString(); } int sample_count = test.sampling_number; for (int i = 0; i <= test_datas.Count - sample_count; i += sample_count) { } return stringBuilder.ToString(); } /// /// 依据test_id,生成该对象的均值和极差,保存到数据库表sqe_cto_test_avg /// 依据均值和极差,再次生成该数据的统计值对象,并且保存到数据库表sqe_cto_test_statistics /// /// /// /// /// /// /// public string Compute_Test_id(int test_id, string standard_no, string create_by, DateTime create_date, string create_org) { StringBuilder stringBuilder = new StringBuilder(); //查询原始记录 List tests = _sqe_cto_test.Select(a => a.id == test_id).OrderBy(a => a.id).ToList(); if (tests == null || tests.Count == 0) { stringBuilder.AppendLine("该id对应的上传数据记录不存在!"); return stringBuilder.ToString(); } sqe_cto_test test = tests[0]; //查看该CTO的产品特性数据,查询统计信息是否已经生成 List test_avgs = _sqe_cto_test_avg.Select(a => a.cto_test_id == test.id).OrderBy(a => a.id).ToList(); if (test_avgs != null && test_avgs.Count > 0) { stringBuilder.AppendLine("该id的数据统计已经完成!"); return stringBuilder.ToString(); } // 依据ID条件,获取用户上传的CTO产品特性数据 List test_datas = _v_sqe_cto_test_data.Select(a => a.test_id == test.id && a.standard_no == standard_no && a.data_value != null).OrderBy(a => a.id).ToList(); if (test_datas == null || test_datas.Count == 0) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您的查询条件没有查询到数据可能有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } //int sample_count = test_datas != null && test_datas.Count > 0 ? test_datas[0].sampling_count : -1; //if (sample_count == -1) //{ // ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择数据中的采样数有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); // return JsonConvert.SerializeObject(resultError); //} int sample_count = test.sampling_number; double[] data = new double[sample_count]; //所有的检测数据,按照进行采样数进行归一 double[] dataAll = new double[test_datas.Count / sample_count * sample_count]; //极差数据 double[] dataRange = new double[test_datas.Count / sample_count]; for (int i = 0; i <= test_datas.Count - sample_count; i += sample_count) { sqe_cto_test_avg obj = new sqe_cto_test_avg(); for (int j = 0; j < sample_count; j++) { data[j] = (double)test_datas[i + j].data_value.Value; dataAll[i + j] = data[j]; } obj.create_by = create_by; obj.create_date = create_date; obj.create_org = create_org; obj.standard_no = standard_no; obj.sampling_number = sample_count; obj.mean_value = (decimal)data.Average(); obj.range_value = (decimal)(data.Max() - data.Min()); dataRange[i / sample_count] = (double)obj.range_value; obj.cto_test_id = test_id; test_avgs.Add(obj); } decimal a2 = (decimal)GetA2(sample_count); decimal d2 = (decimal)GetD2(sample_count); decimal d3 = (decimal)GetD3(sample_count); decimal d4 = (decimal)GetD4(sample_count); //开始计算统计结果 sqe_cto_test_statistics model = new sqe_cto_test_statistics(); model.create_by = create_by; model.create_date = create_date; model.create_org = create_org; model.cto_test_id = test.id; model.standard_no = standard_no; model.value_count = test_datas.Count; model.standard_min = test_datas[0].standard_min; model.standard_max = test_datas[0].standard_max; model.standard_value = (model.standard_min + model.standard_max) / 2; model.value_sum = (decimal)dataAll.Sum(); model.value_avg = (decimal)dataAll.Average(); model.value_max = (decimal)dataAll.Max(); model.value_min = (decimal)dataAll.Min(); model.value_below = dataAll.Count(x => x < (double)model.standard_min); model.value_above = dataAll.Count(x => x > (double)model.standard_max); model.avg_range = (decimal)dataRange.Average(); model.value_d2 = d2; model.value_cpu = (model.standard_max - model.value_avg) / (3 * model.avg_range / model.value_d2); model.value_cpl = (model.value_avg - model.standard_min) / (3 * model.avg_range / model.value_d2); model.value_cp = (model.standard_max - model.standard_min) / (6 * model.avg_range / model.value_d2); model.value_cpk = model.value_cpu < model.value_cpl ? model.value_cpu : model.value_cpl; model.value_cr = (decimal)1.0 / model.value_cp; model.value_stdev = (decimal)dataAll.StandardDeviation(); model.value_stdevp = (decimal)dataAll.PopulationStandardDeviation(); model.value_var = (decimal)dataAll.Variance(); model.value_varp = (decimal)dataAll.PopulationVariance(); model.value_pp = (model.standard_max - model.standard_min) / (6 * model.value_stdev); model.value_ppu = (model.standard_max - model.value_avg) / (3 * model.value_stdev); model.value_ppl = (model.value_avg - model.standard_min) / (3 * model.value_stdev); model.value_ppk = model.value_ppu < model.value_ppl ? model.value_ppu : model.value_ppl; //更新均值方差数据表信息 foreach (var item in test_avgs) { item.mean_value_all = model.value_avg; item.range_value_all = model.avg_range; item.value_uclx = item.mean_value_all + item.range_value_all * a2; item.value_lclx = item.mean_value_all - item.range_value_all * a2; item.value_uclr = item.range_value_all * d4; item.value_lclr = item.range_value_all * d3; } _sqe_cto_test_avg.Update(test_avgs); _sqe_cto_test_statistics.Update(model); return stringBuilder.ToString(); } #region 计算系数 /// /// 计算A2系数 /// /// /// public double GetA2(int sample_count) { switch (sample_count) { case 1: return 2.659574468; break; case 2: return 1.88; break; case 3: return 1.023; break; case 4: return 0.729; break; case 5: return 0.577; break; } return 1; } /// /// 计算系数D2 /// /// /// public double GetD2(int sample_count) { switch (sample_count) { case 1: return 1.128; break; case 2: return 1.128; break; case 3: return 1.693; break; case 4: return 2.059; break; case 5: return 2.326; break; } return 1; } /// /// 计算系数D4 /// /// /// public double GetD4(int sample_count) { switch (sample_count) { case 1: return 3.267; break; case 2: return 3.267; break; case 3: return 2.574; break; case 4: return 2.282; break; case 5: return 2.114; break; } return 1; } /// /// 计算系数D3 /// /// /// public double GetD3(int sample_count) { return 0; //switch (sample_count) //{ // case 1: // return 1.128; // break; // case 2: // return 1.128; // break; // case 3: // return 1.693; // break; // case 4: // return 2.059; // break; // case 5: // return 2.326; // break; //} //return 1; } #endregion 计算系数 /// /// 通过查询条件,查询统计Chart的数据的标识信息 /// /// /// /// /// /// /// /// /// public string Compute_TestChartData(string startDate, string endDate, string item_no, string item_batch, string org, string standard_no, int sample_count) { try { // 依据查询条件,获取用户上传的CTO产品特性数据 List test_datas = Get_TestData(startDate, endDate, item_no, item_batch, org, standard_no); if (test_datas == null || test_datas.Count == 0) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您的查询条件没有查询到数据可能有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } //所有的检测数据,按照进行采样数进行归一 double[] dataAll = null; //均值数据 double[] dataAvg = null; //极差数据 double[] dataRange = null; //计算均值与极差 Get_TestAvgRange(test_datas, sample_count, out dataAll, out dataAvg, out dataRange); double a2 = GetA2(sample_count); double d2 = GetD2(sample_count); double d3 = GetD3(sample_count); double d4 = GetD4(sample_count); //开始计算统计结果 double UCLx = 0, AveX = 0, LCLx = 0, UCLr = 0, AveR = 0, LCLr = 0; AveX = dataAvg.Average(); AveR = dataRange.Average(); UCLx = AveX + a2 * AveR; LCLx = AveX - a2 * AveR; UCLr = d4 * AveR; LCLr = d3 * AveR; //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; for (int i = 0; i < dataAvg.Length; i++) { model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "均值"; model.type_value = (decimal)AveX; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "极差"; model.type_value = (decimal)AveR; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "UCLx"; model.type_value = (decimal)UCLx; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "LCLx"; model.type_value = (decimal)LCLx; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "UCLr"; model.type_value = (decimal)UCLr; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "sub" + (i + 1).ToString(); model.type_name = "LCLr"; model.type_value = (decimal)LCLr; model.data_time = dateTimeNow; models.Add(model); } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择数据中的采样数有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } } /// /// 依据查询统计条件,生成该时间段内的均值和极差 /// 依据均值和极差,再次生成统计对象 /// /// /// /// /// /// /// /// /// public string Compute_Test(string startDate, string endDate, string item_no, string item_batch, string org, string standard_no, int sample_count) { try { // 依据查询条件,获取用户上传的CTO产品特性数据 List test_datas = Get_TestData(startDate, endDate, item_no, item_batch, org, standard_no); if (test_datas == null || test_datas.Count == 0) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您的查询条件没有查询到数据可能有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } //int sample_count = test_datas != null && test_datas.Count > 0 ? test_datas[0].sampling_count : -1; //if (sample_count == -1) //{ // ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择数据中的采样数有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); // return JsonConvert.SerializeObject(resultError); //} //所有的检测数据,按照进行采样数进行归一 double[] dataAll = null; //均值数据 double[] dataAvg = null; //极差数据 double[] dataRange = null; //计算均值与极差 Get_TestAvgRange(test_datas, sample_count, out dataAll, out dataAvg, out dataRange); decimal a2 = (decimal)GetA2(sample_count); decimal d2 = (decimal)GetD2(sample_count); decimal d3 = (decimal)GetD3(sample_count); decimal d4 = (decimal)GetD4(sample_count); //开始计算统计结果 sqe_cto_test_statistics model = new sqe_cto_test_statistics(); model.standard_no = standard_no; model.value_count = test_datas.Count; model.standard_min = test_datas[0].standard_min; model.standard_max = test_datas[0].standard_max; model.standard_value = (model.standard_min + model.standard_max) / 2; model.value_sum = (decimal)dataAll.Sum(); model.value_avg = (decimal)dataAll.Average(); model.value_max = (decimal)dataAll.Max(); model.value_min = (decimal)dataAll.Min(); model.value_below = dataAll.Count(x => x < (double)model.standard_min); model.value_above = dataAll.Count(x => x > (double)model.standard_max); model.avg_range = (decimal)dataRange.Average(); model.value_d2 = d2; model.value_cpu = (model.standard_max - model.value_avg) / (3 * model.avg_range / model.value_d2); model.value_cpl = (model.value_avg - model.standard_min) / (3 * model.avg_range / model.value_d2); model.value_cp = (model.standard_max - model.standard_min) / (6 * model.avg_range / model.value_d2); model.value_cpk = model.value_cpu < model.value_cpl ? model.value_cpu : model.value_cpl; model.value_cr = (decimal)1.0 / model.value_cp; model.value_stdev = (decimal)dataAll.StandardDeviation(); model.value_stdevp = (decimal)dataAll.PopulationStandardDeviation(); model.value_var = (decimal)dataAll.Variance(); model.value_varp = (decimal)dataAll.PopulationVariance(); model.value_pp = (model.standard_max - model.standard_min) / (6 * model.value_stdev); model.value_ppu = (model.standard_max - model.value_avg) / (3 * model.value_stdev); model.value_ppl = (model.value_avg - model.standard_min) / (3 * model.value_stdev); model.value_ppk = model.value_ppu < model.value_ppl ? model.value_ppu : model.value_ppl; ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, model, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择数据中的采样数有问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } } /// /// 依据查询条件,查询用户上传的CTO产品特性数据 /// /// /// /// /// /// /// /// public List Get_TestData(string startDate, string endDate, string item_no, string item_batch, string org, string standard_no) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); conditions.Add(p => p.data_value != null); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(item_batch)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_batch == item_batch); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(standard_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.standard_no == standard_no); } // 组合条件 var combinedCondition = PredicateBuilder.New(); foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_cto_test_data.GetDbContext().v_sqe_cto_test_data.AsQueryable(); // 应用条件 if (combinedCondition.Body != null) { query = query.Where(combinedCondition); } #endregion 查询条件 // 执行查询 List test_datas = query.DefaultIfEmpty().ToList(); return test_datas; } catch (Exception ex) { return null; } } /// /// 依据CTO产品特性数据,采样数,统计均值与极差 /// /// /// /// /// /// public void Get_TestAvgRange(List datas, int sample_count, out double[] dataAll, out double[] dataAvg, out double[] dataRange) { //所有的检测数据,按照进行采样数进行归一 dataAll = new double[datas.Count / sample_count * sample_count]; //均值数据 dataAvg = new double[datas.Count / sample_count]; //极差数据 dataRange = new double[datas.Count / sample_count]; //计算极差与均值时的临时数据 double[] data = new double[sample_count]; //计算所有的均值与极差 for (int i = 0; i <= datas.Count - sample_count; i += sample_count) { for (int j = 0; j < sample_count; j++) { data[j] = (double)datas[i + j].data_value.Value; dataAll[i + j] = data[j]; } dataRange[i / sample_count] = data.Max() - data.Min(); } } /// /// 依据查询条件,统计工序的不良情况 /// /// /// /// /// /// /// public string Compute_op_query(string startDate, string endDate, string item_no, string item_batch, string org, string op, string bad_type) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(item_batch)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.batch_no == item_batch); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(op)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.op_no == op); } if (!string.IsNullOrEmpty(bad_type)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.bad_type == bad_type); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_op_data_detail.GetDbContext().v_sqe_op_data_detail.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 // 分组统计,此处多个条件进行统计,p.bad_type, p.op_no var groupBy = query.GroupBy(p => new { p.bad_type, p.op_no }) .Select(g => new { bad_type = g.Key.bad_type, op_no = g.Key.op_no, bad_qty = g.Sum(p => p.bad_qty) }); //增加排序条件,此处多个条件,op_no,bad_type var test_datas = groupBy.OrderBy(p => p.op_no).ThenBy(p => p.bad_type).ToList(); ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, test_datas, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } /// /// 工序统计图 /// /// /// /// /// /// /// /// /// public string Compute_OpChartData(string startDate, string endDate, string item_no, string item_batch, string org, string op, string bad_type) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(item_batch)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.batch_no == item_batch); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(op)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.op_no == op); } if (!string.IsNullOrEmpty(bad_type)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.bad_type == bad_type); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_op_data_detail.GetDbContext().v_sqe_op_data_detail.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 // 分组统计,此处多个条件进行统计,p.bad_type, p.op_no var groupBy = query.GroupBy(p => new { p.bad_type, p.op_no }) .Select(g => new { bad_type = g.Key.bad_type, op_no = g.Key.op_no, bad_qty = g.Sum(p => p.bad_qty) }); //增加排序条件,此处多个条件,op_no,bad_type var test_datas = groupBy.OrderBy(p => p.op_no).ThenBy(p => p.bad_type).ToList(); //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; for (int i = 0; i < test_datas.Count; i++) { model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = test_datas[i].bad_type; model.type_name = test_datas[i].op_no; model.type_value = test_datas[i].bad_qty; model.data_time = dateTimeNow; models.Add(model); } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } /// /// 统计工序百分比 /// /// /// /// /// /// /// /// public string Compute_OpChartData_Date(string startDate, string endDate, string item_no, string item_batch, string org, string op) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(item_batch)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.batch_no == item_batch); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(op)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.op_no == op); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_op_data_detail.GetDbContext().v_sqe_op_data_detail.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 // 分组统计,此处多个条件进行统计,p.bad_type, p.op_no var groupBy = query.GroupBy(p => new { p.op_time, p.op_no }) .Select(g => new { op_time = g.Key.op_time, op_no = g.Key.op_no, qty_ok = g.Sum(p => p.qty_ok), qty_all = g.Sum(p => p.qty_all), percent = g.Sum(p => p.qty_ok) / g.Sum(p => p.qty_all) }); //增加排序条件,此处多个条件,op_no,bad_type var test_datas = groupBy.OrderBy(p => p.op_time).ThenBy(p => p.op_no).ToList(); //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; for (int i = 0; i < test_datas.Count; i++) { model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = test_datas[i].op_time.Value.ToString("yyyy-MM-dd"); model.type_name = test_datas[i].op_no; model.type_value = test_datas[i].percent; model.data_time = dateTimeNow; models.Add(model); } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } public string Compute_FpyChartData(string startDate, string endDate, string item_no, string org, string op) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(op)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.op_no == op); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_fpy_data.GetDbContext().v_sqe_fpy_data.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 // 分组统计,此处多个条件进行统计,p.bad_type, p.op_no var groupBy = query.GroupBy(p => new { p.op_no }) .Select(g => new { op_no = g.Key.op_no, qty_error = g.Sum(p => p.qty_error), qty_all = g.Sum(p => p.qty_all), }); //增加排序条件,此处多个条件,op_no,bad_type var test_datas = groupBy.OrderBy(p => p.op_no).ToList(); //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; for (int i = 0; i < test_datas.Count; i++) { model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "期间投入总数"; model.type_name = test_datas[i].op_no; model.type_value = test_datas[i].qty_all; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "期间不良总数"; model.type_name = test_datas[i].op_no; model.type_value = test_datas[i].qty_error; model.data_time = dateTimeNow; models.Add(model); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "良率"; model.type_name = test_datas[i].op_no; model.type_value = (1 - test_datas[i].qty_error / test_datas[i].qty_all); model.data_time = dateTimeNow; models.Add(model); } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } public string Compute_FpyChartData_Date(string startDate, string endDate, string item_no, string org, string op) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_date <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(op)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.op_no == op); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_fpy_data.GetDbContext().v_sqe_fpy_data.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 // 分组统计,此处多个条件进行统计,p.bad_type, p.op_no var groupBy = query.GroupBy(p => new { p.op_time }) .Select(g => new { op_time = g.Key.op_time, qty_error = g.Sum(p => p.qty_error), qty_all = g.Sum(p => p.qty_all) }); //增加排序条件,此处多个条件,op_no,bad_type var test_datas = groupBy.OrderBy(p => p.op_time).ToList(); //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; for (int i = 0; i < test_datas.Count; i++) { model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = test_datas[i].op_time.Value.ToString("MM-dd"); model.type_name = "走势图"; model.type_value = (1 - test_datas[i].qty_error / test_datas[i].qty_all); model.data_time = dateTimeNow; models.Add(model); } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } /// /// 已经查询条件,统计Oqc数据 /// /// /// /// /// /// public string Compute_OqcChartData(string startDate, string endDate, string item_no, string org) { try { //增加排序条件,此处多个条件,op_no,bad_type var test_datas = Get_OqcData(startDate, endDate, item_no, org, null); //生成临时数据,插入数据库 List models = new List(); sqe_chart_data_temp model; DateTime dateTimeNow = DateTime.Now; //生成临时数据,插入数据库 sqe_oqc_statistics modelStatistics; string standard_no = ""; for (int i = 0; i < test_datas.Count;) { standard_no = test_datas[i].standard_no; if (standard_no == null) { i++; continue; } List dataList = new List(); int j = i; for (; j < test_datas.Count; j++) { if (standard_no.CompareTo(test_datas[j].standard_no) == 0) { dataList.Add((double)test_datas[j].data_value); } else { break; } } Double[] datas = dataList.ToArray(); modelStatistics = new sqe_oqc_statistics(); try { modelStatistics.standard_no = standard_no; modelStatistics.value_avg = (decimal)datas.Average(); modelStatistics.value_std_range = (decimal)datas.StandardDeviation(); if (modelStatistics.value_std_range != 0) { modelStatistics.value_pp = (test_datas[i].standard_max - test_datas[i].standard_min) / modelStatistics.value_std_range; if (modelStatistics.value_pp > 100000) { modelStatistics.value_pp = 100000; } } else { i = j; continue; } //=MIN((B10-Q53)/(3*R53),(Q53-B11)/(3*R53)) decimal d1, d2; d1 = (test_datas[i].standard_max - modelStatistics.value_avg) / 3 * modelStatistics.value_std_range; d2 = (modelStatistics.value_avg - test_datas[i].standard_min) / 3 * modelStatistics.value_std_range; modelStatistics.value_ppk = d1 > d2 ? d2 : d1; modelStatistics.value_max = (decimal)datas.Max(); modelStatistics.value_min = (decimal)datas.Min(); modelStatistics.value_range = modelStatistics.value_max - modelStatistics.value_min; } catch (Exception ex) { i = j; continue; } model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "均值"; model.type_name = standard_no; model.type_value = modelStatistics.value_avg; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "西格玛(标准差)"; model.type_name = standard_no; model.type_value = modelStatistics.value_std_range; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "PP"; model.type_name = standard_no; model.type_value = modelStatistics.value_pp; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "PPK"; model.type_name = standard_no; model.type_value = modelStatistics.value_ppk; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "Max"; model.type_name = standard_no; model.type_value = modelStatistics.value_max; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "Min"; model.type_name = standard_no; model.type_value = modelStatistics.value_min; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); model = new sqe_chart_data_temp(); model.data_id = dateTimeNow.Ticks; model.sub_group = "极差(Max-Min)"; model.type_name = standard_no; model.type_value = modelStatistics.value_range; model.data_time = dateTimeNow; models.Add(model); Console.WriteLine(model.type_value); i = j; } _sqe_chart_data_temp.Insert(models); String dataID = ""; if (models.Count > 0) { dataID = dateTimeNow.Ticks.ToString(); } ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dataID, ResultCode.Success, null); return JsonConvert.SerializeObject(result); } catch (Exception ex) { ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null); return JsonConvert.SerializeObject(resultError); } return null; } /// /// 查询Oqc的数据信息 /// /// /// /// /// /// /// public List Get_OqcData(string startDate, string endDate, string item_no, string org, string standard_no) { try { #region 查询条件 // 动态条件 var conditions = new List>>(); if (!string.IsNullOrEmpty(startDate)) { DateTime dateTime; if (DateTime.TryParse(startDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.product_time >= dateTime); } } if (!string.IsNullOrEmpty(endDate)) { DateTime dateTime; if (DateTime.TryParse(endDate, out dateTime)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.product_time <= dateTime); } } if (!string.IsNullOrEmpty(item_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.item_no == item_no); } if (!string.IsNullOrEmpty(org)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.create_org == org); } if (!string.IsNullOrEmpty(standard_no)) { // 添加条件1:Name 包含 "searchTerm" conditions.Add(p => p.standard_no == standard_no); } // 组合条件 var combinedCondition = PredicateBuilder.New(); //此处是所有的条件都and。 foreach (var condition in conditions) { combinedCondition = combinedCondition.And(condition); } var query = _v_sqe_oqc_data.GetDbContext().v_sqe_oqc_data.AsQueryable(); // 应用条件 if (conditions.Count > 0) { query = query.Where(combinedCondition); } #endregion 查询条件 //增加排序条件,此处多个条件,op_no,bad_type var test_datas = query.OrderBy(p => p.standard_no).DefaultIfEmpty().ToList(); return test_datas; } catch (Exception ex) { } return null; } } }