|
|
@@ -1,22 +1,26 @@
|
|
|
-using System;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.Data;
|
|
|
-using System.Linq;
|
|
|
-using System.Linq.Expressions;
|
|
|
-using System.Reflection;
|
|
|
-using System.Text;
|
|
|
-using Business.EntityFrameworkCore.SqlRepositories;
|
|
|
+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
|
|
|
{
|
|
|
@@ -27,6 +31,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
LoggerHelper WLLog;
|
|
|
|
|
|
+ private readonly ISqeRepository<sqe_chart_data_temp> _sqe_chart_data_temp;
|
|
|
private readonly ISqeRepository<sqe_cto_process> _sqe_cto_process;
|
|
|
private readonly ISqeRepository<sqe_cto_process_data> _sqe_cto_process_data;
|
|
|
private readonly ISqeRepository<sqe_cto_process_standard> _sqe_cto_process_standard;
|
|
|
@@ -35,24 +40,30 @@ namespace Business.VSM
|
|
|
private readonly ISqeRepository<sqe_cto_test_data> _sqe_cto_test_data;
|
|
|
private readonly ISqeRepository<sqe_cto_test_standard> _sqe_cto_test_standard;
|
|
|
private readonly ISqeRepository<sqe_cto_test_statistics> _sqe_cto_test_statistics;
|
|
|
+ private readonly ISqeRepository<sqe_fct> _sqe_fct;
|
|
|
+ private readonly ISqeRepository<sqe_fct_data> _sqe_fct_data;
|
|
|
private readonly ISqeRepository<sqe_file_data> _sqe_file_data;
|
|
|
private readonly ISqeRepository<sqe_file_upload> _sqe_file_upload;
|
|
|
- private readonly ISqeRepository<sqe_oqc> _sqe_oqc;
|
|
|
- private readonly ISqeRepository<sqe_oqc_data> _sqe_oqc_data;
|
|
|
- private readonly ISqeRepository<sqe_oqc_standard> _sqe_oqc_standard;
|
|
|
private readonly ISqeRepository<sqe_fpy> _sqe_fpy;
|
|
|
private readonly ISqeRepository<sqe_fpy_data> _sqe_fpy_data;
|
|
|
private readonly ISqeRepository<sqe_op> _sqe_op;
|
|
|
private readonly ISqeRepository<sqe_op_data> _sqe_op_data;
|
|
|
private readonly ISqeRepository<sqe_op_data_detail> _sqe_op_data_detail;
|
|
|
- private readonly ISqeRepository<sqe_fct> _sqe_fct;
|
|
|
- private readonly ISqeRepository<sqe_fct_data> _sqe_fct_data;
|
|
|
+ private readonly ISqeRepository<sqe_oqc> _sqe_oqc;
|
|
|
+ private readonly ISqeRepository<sqe_oqc_data> _sqe_oqc_data;
|
|
|
+ private readonly ISqeRepository<sqe_oqc_standard> _sqe_oqc_standard;
|
|
|
+ private readonly ISqeRepository<sqe_oqc_statistics> _sqe_oqc_statistics;
|
|
|
+
|
|
|
+ private readonly ISqeRepository<v_sqe_cto_process_data> _v_sqe_cto_process_data;
|
|
|
+ private readonly ISqeRepository<v_sqe_cto_test_avg> _v_sqe_cto_test_avg;
|
|
|
private readonly ISqeRepository<v_sqe_cto_test_data> _v_sqe_cto_test_data;
|
|
|
+ private readonly ISqeRepository<v_sqe_fpy_data> _v_sqe_fpy_data;
|
|
|
private readonly ISqeRepository<v_sqe_op_data_detail> _v_sqe_op_data_detail;
|
|
|
-
|
|
|
+ private readonly ISqeRepository<v_sqe_oqc_data> _v_sqe_oqc_data;
|
|
|
|
|
|
|
|
|
public SqeExcelService(
|
|
|
+ ISqeRepository<sqe_chart_data_temp> sqe_chart_data_temp,
|
|
|
ISqeRepository<sqe_cto_process> sqe_cto_process,
|
|
|
ISqeRepository<sqe_cto_process_data> sqe_cto_process_data,
|
|
|
ISqeRepository<sqe_cto_process_standard> sqe_cto_process_standard,
|
|
|
@@ -61,23 +72,29 @@ namespace Business.VSM
|
|
|
ISqeRepository<sqe_cto_test_data> sqe_cto_test_data,
|
|
|
ISqeRepository<sqe_cto_test_standard> sqe_cto_test_standard,
|
|
|
ISqeRepository<sqe_cto_test_statistics> sqe_cto_test_statistics,
|
|
|
+ ISqeRepository<sqe_fct> sqe_fct,
|
|
|
+ ISqeRepository<sqe_fct_data> sqe_fct_data,
|
|
|
ISqeRepository<sqe_file_data> sqe_file_data,
|
|
|
ISqeRepository<sqe_file_upload> sqe_file_upload,
|
|
|
- ISqeRepository<sqe_oqc> sqe_oqc,
|
|
|
- ISqeRepository<sqe_oqc_data> sqe_oqc_data,
|
|
|
- ISqeRepository<sqe_oqc_standard> sqe_oqc_standard,
|
|
|
ISqeRepository<sqe_fpy> sqe_fpy,
|
|
|
ISqeRepository<sqe_fpy_data> sqe_fpy_data,
|
|
|
ISqeRepository<sqe_op> sqe_op,
|
|
|
ISqeRepository<sqe_op_data> sqe_op_data,
|
|
|
ISqeRepository<sqe_op_data_detail> sqe_op_data_detail,
|
|
|
- ISqeRepository<sqe_fct> sqe_fct,
|
|
|
- ISqeRepository<sqe_fct_data> sqe_fct_data,
|
|
|
+ ISqeRepository<sqe_oqc> sqe_oqc,
|
|
|
+ ISqeRepository<sqe_oqc_data> sqe_oqc_data,
|
|
|
+ ISqeRepository<sqe_oqc_standard> sqe_oqc_standard,
|
|
|
+ ISqeRepository<sqe_oqc_statistics> sqe_oqc_statistics,
|
|
|
+ ISqeRepository<v_sqe_cto_process_data> v_sqe_cto_process_data,
|
|
|
+ ISqeRepository<v_sqe_cto_test_avg> v_sqe_cto_test_avg,
|
|
|
ISqeRepository<v_sqe_cto_test_data> v_sqe_cto_test_data,
|
|
|
- ISqeRepository<v_sqe_op_data_detail> v_sqe_op_data_detail
|
|
|
+ ISqeRepository<v_sqe_fpy_data> v_sqe_fpy_data,
|
|
|
+ ISqeRepository<v_sqe_op_data_detail> v_sqe_op_data_detail,
|
|
|
+ ISqeRepository<v_sqe_oqc_data> 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;
|
|
|
@@ -86,21 +103,27 @@ namespace Business.VSM
|
|
|
_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_oqc = sqe_oqc;
|
|
|
- _sqe_oqc_data = sqe_oqc_data;
|
|
|
- _sqe_oqc_standard = sqe_oqc_standard;
|
|
|
_sqe_fpy = sqe_fpy;
|
|
|
_sqe_fpy_data = sqe_fpy_data;
|
|
|
_sqe_op = sqe_op;
|
|
|
_sqe_op_data = sqe_op_data;
|
|
|
_sqe_op_data_detail = sqe_op_data_detail;
|
|
|
- _sqe_fct = sqe_fct;
|
|
|
- _sqe_fct_data = sqe_fct_data;
|
|
|
+ _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;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
///// <summary>
|
|
|
@@ -1248,7 +1271,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1271,7 +1294,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1294,7 +1317,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1317,7 +1340,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1340,7 +1363,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1363,7 +1386,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1386,7 +1409,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1409,7 +1432,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -1432,7 +1455,7 @@ namespace Business.VSM
|
|
|
{
|
|
|
String s = dataRow.c2.ToString();
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2111,7 +2134,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2136,7 +2159,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2161,7 +2184,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2186,7 +2209,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2211,7 +2234,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2236,7 +2259,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2261,7 +2284,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2286,7 +2309,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2311,7 +2334,7 @@ namespace Business.VSM
|
|
|
s = s.Substring(s.Length - 9);
|
|
|
}
|
|
|
DateTime date;
|
|
|
- if (DateTime.TryParse(test.product_time.ToString("yyyy-MM-dd ") + s, out 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");
|
|
|
}
|
|
|
@@ -2497,6 +2520,7 @@ namespace Business.VSM
|
|
|
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))
|
|
|
{
|
|
|
@@ -3259,9 +3283,11 @@ namespace Business.VSM
|
|
|
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;
|
|
|
@@ -3366,6 +3392,16 @@ namespace Business.VSM
|
|
|
return stringBuilder.ToString();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 依据test_id,生成该对象的均值和极差,保存到数据库表sqe_cto_test_avg
|
|
|
+ /// 依据均值和极差,再次生成该数据的统计值对象,并且保存到数据库表sqe_cto_test_statistics
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="test_id"></param>
|
|
|
+ /// <param name="standard_no"></param>
|
|
|
+ /// <param name="create_by"></param>
|
|
|
+ /// <param name="create_date"></param>
|
|
|
+ /// <param name="create_org"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public string Compute_Test_id(int test_id, string standard_no, string create_by, DateTime create_date, string create_org)
|
|
|
{
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
@@ -3378,11 +3414,7 @@ namespace Business.VSM
|
|
|
return stringBuilder.ToString();
|
|
|
}
|
|
|
sqe_cto_test test = tests[0];
|
|
|
-
|
|
|
- List<v_sqe_cto_test_data> 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();
|
|
|
- //List<v_sqe_cto_test_data> test_datas = _v_sqe_cto_test_data.Select(a => a.standard_no == standard_no && a.data_value != null).OrderBy(a => a.id).ToList();
|
|
|
-
|
|
|
- //生成统计信息
|
|
|
+ //查看该CTO的产品特性数据,查询统计信息是否已经生成
|
|
|
List<sqe_cto_test_avg> 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)
|
|
|
{
|
|
|
@@ -3390,9 +3422,26 @@ namespace Business.VSM
|
|
|
return stringBuilder.ToString();
|
|
|
}
|
|
|
|
|
|
+ // 依据ID条件,获取用户上传的CTO产品特性数据
|
|
|
+ List<v_sqe_cto_test_data> 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)
|
|
|
{
|
|
|
@@ -3467,6 +3516,7 @@ namespace Business.VSM
|
|
|
return stringBuilder.ToString();
|
|
|
}
|
|
|
|
|
|
+ #region 计算系数
|
|
|
/// <summary>
|
|
|
/// 计算A2系数
|
|
|
/// </summary>
|
|
|
@@ -3495,6 +3545,11 @@ namespace Business.VSM
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 计算系数D2
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public double GetD2(int sample_count)
|
|
|
{
|
|
|
switch (sample_count)
|
|
|
@@ -3518,6 +3573,11 @@ namespace Business.VSM
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 计算系数D4
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public double GetD4(int sample_count)
|
|
|
{
|
|
|
switch (sample_count)
|
|
|
@@ -3541,6 +3601,11 @@ namespace Business.VSM
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 计算系数D3
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public double GetD3(int sample_count)
|
|
|
{
|
|
|
return 0;
|
|
|
@@ -3565,72 +3630,147 @@ namespace Business.VSM
|
|
|
//return 1;
|
|
|
}
|
|
|
|
|
|
+ #endregion 计算系数
|
|
|
|
|
|
- public string Compute_Test(string startDate, string endDate, string item_no, string item_batch, string org, string standard_no, int sample_count)
|
|
|
+ /// <summary>
|
|
|
+ /// 通过查询条件,查询统计Chart的数据的标识信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="item_batch"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <param name="standard_no"></param>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string Compute_TestChartData(string startDate, string endDate, string item_no, string item_batch, string org, string standard_no, int sample_count)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- #region 查询条件
|
|
|
- // 动态条件
|
|
|
- var conditions = new List<Expression<Func<v_sqe_cto_test_data, bool>>>();
|
|
|
- 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))
|
|
|
+ // 依据查询条件,获取用户上传的CTO产品特性数据
|
|
|
+ List<v_sqe_cto_test_data> test_datas = Get_TestData(startDate, endDate, item_no, item_batch, org, standard_no);
|
|
|
+ if (test_datas == null || test_datas.Count == 0)
|
|
|
{
|
|
|
- // 添加条件1:Name 包含 "searchTerm"
|
|
|
- conditions.Add(p => p.standard_no == standard_no);
|
|
|
+ ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您的查询条件没有查询到数据可能有问题,请核对之后再进行操作!", ResultCode.BusinessError, null);
|
|
|
+ return JsonConvert.SerializeObject(resultError);
|
|
|
}
|
|
|
|
|
|
- // 组合条件
|
|
|
- var combinedCondition = PredicateBuilder.New<v_sqe_cto_test_data>();
|
|
|
- foreach (var condition in conditions)
|
|
|
- {
|
|
|
- combinedCondition = combinedCondition.And(condition);
|
|
|
- }
|
|
|
- var query = _v_sqe_cto_test_data.GetDbContext().v_sqe_cto_test_data.AsQueryable();
|
|
|
+ //所有的检测数据,按照进行采样数进行归一
|
|
|
+ double[] dataAll = null;
|
|
|
+ //均值数据
|
|
|
+ double[] dataAvg = null;
|
|
|
+ //极差数据
|
|
|
+ double[] dataRange = null;
|
|
|
+ //计算均值与极差
|
|
|
+ Get_TestAvgRange(test_datas, sample_count, out dataAll, out dataAvg, out dataRange);
|
|
|
|
|
|
- // 应用条件
|
|
|
- if (combinedCondition.Body != null)
|
|
|
+ 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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ sqe_chart_data_temp model;
|
|
|
+ DateTime dateTimeNow = DateTime.Now;
|
|
|
+ for (int i = 0; i < dataAvg.Length; i++)
|
|
|
{
|
|
|
- query = query.Where(combinedCondition);
|
|
|
+ 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);
|
|
|
+
|
|
|
}
|
|
|
- #endregion 查询条件
|
|
|
|
|
|
- // 执行查询
|
|
|
- List<v_sqe_cto_test_data> test_datas = query.ToList();
|
|
|
+ _sqe_chart_data_temp.Insert(models);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), ResultCode.Success, null);
|
|
|
+ return JsonConvert.SerializeObject(result);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择数据中的采样数有问题,请核对之后再进行操作!", ResultCode.BusinessError, null);
|
|
|
+ return JsonConvert.SerializeObject(resultError);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 依据查询统计条件,生成该时间段内的均值和极差
|
|
|
+ /// 依据均值和极差,再次生成统计对象
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="item_batch"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <param name="standard_no"></param>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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<v_sqe_cto_test_data> 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)
|
|
|
//{
|
|
|
@@ -3638,18 +3778,17 @@ namespace Business.VSM
|
|
|
// return JsonConvert.SerializeObject(resultError);
|
|
|
//}
|
|
|
|
|
|
- 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)
|
|
|
- {
|
|
|
- for (int j = 0; j < sample_count; j++)
|
|
|
- {
|
|
|
- data[j] = (double)test_datas[i + j].data_value.Value;
|
|
|
- dataAll[i + j] = data[j];
|
|
|
- }
|
|
|
- dataRange[i / sample_count] = data.Max() - data.Min();
|
|
|
- }
|
|
|
+ //所有的检测数据,按照进行采样数进行归一
|
|
|
+ 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);
|
|
|
@@ -3696,21 +3835,25 @@ namespace Business.VSM
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 依据查询条件,统计工序的不良情况
|
|
|
+ /// 依据查询条件,查询用户上传的CTO产品特性数据
|
|
|
/// </summary>
|
|
|
/// <param name="startDate"></param>
|
|
|
/// <param name="endDate"></param>
|
|
|
/// <param name="item_no"></param>
|
|
|
/// <param name="item_batch"></param>
|
|
|
/// <param name="org"></param>
|
|
|
+ /// <param name="standard_no"></param>
|
|
|
/// <returns></returns>
|
|
|
- public string Compute_op_query(string startDate, string endDate, string item_no, string item_batch, string org)
|
|
|
+ public List<v_sqe_cto_test_data> Get_TestData(string startDate, string endDate,
|
|
|
+ string item_no, string item_batch,
|
|
|
+ string org, string standard_no)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
#region 查询条件
|
|
|
// 动态条件
|
|
|
- var conditions = new List<Expression<Func<v_sqe_op_data_detail, bool>>>();
|
|
|
+ var conditions = new List<Expression<Func<v_sqe_cto_test_data, bool>>>();
|
|
|
+ conditions.Add(p => p.data_value != null);
|
|
|
if (!string.IsNullOrEmpty(startDate))
|
|
|
{
|
|
|
DateTime dateTime;
|
|
|
@@ -3737,49 +3880,850 @@ namespace Business.VSM
|
|
|
if (!string.IsNullOrEmpty(item_batch))
|
|
|
{
|
|
|
// 添加条件1:Name 包含 "searchTerm"
|
|
|
- conditions.Add(p => p.batch_no == item_batch);
|
|
|
+ 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<v_sqe_op_data_detail>();
|
|
|
- //此处是所有的条件都and。
|
|
|
+ var combinedCondition = PredicateBuilder.New<v_sqe_cto_test_data>();
|
|
|
foreach (var condition in conditions)
|
|
|
{
|
|
|
combinedCondition = combinedCondition.And(condition);
|
|
|
}
|
|
|
- var query = _v_sqe_op_data_detail.GetDbContext().v_sqe_op_data_detail.AsQueryable();
|
|
|
+
|
|
|
+ var query = _v_sqe_cto_test_data.GetDbContext().v_sqe_cto_test_data.AsQueryable();
|
|
|
|
|
|
// 应用条件
|
|
|
- if (conditions.Count > 0)
|
|
|
+ if (combinedCondition.Body != null)
|
|
|
{
|
|
|
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)
|
|
|
- });
|
|
|
+ // 执行查询
|
|
|
+ List<v_sqe_cto_test_data> test_datas = query.DefaultIfEmpty().ToList();
|
|
|
+ return test_datas;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //增加排序条件,此处多个条件,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);
|
|
|
+ /// <summary>
|
|
|
+ /// 依据CTO产品特性数据,采样数,统计均值与极差
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="datas"></param>
|
|
|
+ /// <param name="sample_count"></param>
|
|
|
+ /// <param name="dataAll"></param>
|
|
|
+ /// <param name="dataAvg"></param>
|
|
|
+ /// <param name="dataRange"></param>
|
|
|
+ public void Get_TestAvgRange(List<v_sqe_cto_test_data> 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();
|
|
|
}
|
|
|
- catch (Exception ex)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 依据查询条件,统计工序的不良情况
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="item_batch"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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<Expression<Func<v_sqe_op_data_detail, bool>>>();
|
|
|
+ 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<v_sqe_op_data_detail>();
|
|
|
+ //此处是所有的条件都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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工序统计图
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="item_batch"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <param name="op"></param>
|
|
|
+ /// <param name="bad_type"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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<Expression<Func<v_sqe_op_data_detail, bool>>>();
|
|
|
+ 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<v_sqe_op_data_detail>();
|
|
|
+ //此处是所有的条件都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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ 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);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 统计工序百分比
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="item_batch"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <param name="op"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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<Expression<Func<v_sqe_op_data_detail, bool>>>();
|
|
|
+ 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<v_sqe_op_data_detail>();
|
|
|
+ //此处是所有的条件都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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ 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);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), 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<Expression<Func<v_sqe_fpy_data, bool>>>();
|
|
|
+ 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<v_sqe_fpy_data>();
|
|
|
+ //此处是所有的条件都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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ 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);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), 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<Expression<Func<v_sqe_fpy_data, bool>>>();
|
|
|
+ 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<v_sqe_fpy_data>();
|
|
|
+ //此处是所有的条件都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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ 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);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 已经查询条件,统计Oqc数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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<sqe_chart_data_temp> models = new List<sqe_chart_data_temp>();
|
|
|
+ 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<Double> dataList = new List<double>();
|
|
|
+ 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);
|
|
|
+ ResultViewModel result = ResultHelper.CreateResult(ResultCode.Success, dateTimeNow.Ticks.ToString(), 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询Oqc的数据信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="startDate"></param>
|
|
|
+ /// <param name="endDate"></param>
|
|
|
+ /// <param name="item_no"></param>
|
|
|
+ /// <param name="org"></param>
|
|
|
+ /// <param name="standard_no"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public List<v_sqe_oqc_data> Get_OqcData(string startDate, string endDate, string item_no, string org, string standard_no)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ #region 查询条件
|
|
|
+ // 动态条件
|
|
|
+ var conditions = new List<Expression<Func<v_sqe_oqc_data, bool>>>();
|
|
|
+ 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<v_sqe_oqc_data>();
|
|
|
+ //此处是所有的条件都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)
|
|
|
{
|
|
|
- ResultViewModel resultError = ResultHelper.CreateResult(ResultCode.BusinessError, "您选择的数据在统计中出现问题,请核对之后再进行操作!", ResultCode.BusinessError, null);
|
|
|
- return JsonConvert.SerializeObject(resultError);
|
|
|
}
|
|
|
return null;
|
|
|
}
|