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;
}
}
}