205 lines
5.8 KiB
Plaintext
205 lines
5.8 KiB
Plaintext
<%@ WebHandler Language="C#" Class="QualityData_SpcEchartsData" %>
|
|
|
|
using System;
|
|
using System.Web;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using MES_SPC;
|
|
using MES_SPC2;
|
|
using Newtonsoft.Json;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Collections.Generic;
|
|
|
|
|
|
public class QualityData_SpcEchartsData : IHttpHandler {
|
|
|
|
public void ProcessRequest (HttpContext context) {
|
|
context.Response.ContentType = "text/plain";
|
|
// context.Request.Form[]
|
|
string type = HttpContext.Current.Request["type"];
|
|
string responseText = "";
|
|
List<double> dataList = null;
|
|
// 读取整个请求体
|
|
using (StreamReader reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
|
|
{
|
|
string body = reader.ReadToEnd();
|
|
dynamic data = JsonConvert.DeserializeObject(body);
|
|
if (data != null) {
|
|
dataList = data.dataList.ToObject<List<double>>();
|
|
//dataList = JsonConvert.DeserializeObject<List<int>>(dataListJson);
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
// 基本趋势图1
|
|
case "GetBaseTrendData2":
|
|
responseText = GetBaseTrendData(dataList);
|
|
break;
|
|
// 基本趋势图2
|
|
case "GetBaseTrendData1":
|
|
responseText = GetMarkLineByConditent(dataList);
|
|
break;
|
|
// 直方图
|
|
// 工序能力分析
|
|
// 排列图
|
|
// 均值图
|
|
// 极差图
|
|
// 标准差图
|
|
}
|
|
|
|
context.Response.Write(responseText);
|
|
}
|
|
public string GetBaseTrendData(List<double> dataList)
|
|
{
|
|
string result = "";
|
|
for (int i = 0; i < dataList.Count; i++)
|
|
{
|
|
result += dataList[i];
|
|
if (i != dataList.Count - 1)
|
|
{
|
|
result += ",";
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
public string GetMarkLineByConditent(List<double> dataList)
|
|
{
|
|
DataTable dt = null;
|
|
|
|
double Usl = 0;
|
|
double Lsl = 0;
|
|
try
|
|
{
|
|
Usl = Convert.ToDouble(HttpContext.Current.Request["Usl"]); // 上限值
|
|
Lsl = Convert.ToDouble(HttpContext.Current.Request["Lsl"]); // 下限值
|
|
}
|
|
catch
|
|
{
|
|
Usl = 0; // 上限值
|
|
Lsl = 0; // 下限值
|
|
}
|
|
|
|
double x;
|
|
double s;
|
|
double QU;
|
|
double QL;
|
|
double cp;
|
|
double cpk;
|
|
double[] sx;
|
|
double[] sy;
|
|
|
|
double[] X;
|
|
if (dataList.Count < 3)
|
|
{
|
|
return "";
|
|
}
|
|
X = new double[dataList.Count];
|
|
for (int i = 0; i < dataList.Count; i++)
|
|
{
|
|
X[i] = Convert.ToDouble(dataList[i]);
|
|
}
|
|
|
|
double ValueUp = Max(X);
|
|
double ValueDown = Min(X);
|
|
//计算SPC参数
|
|
SpcCaculator.SpcValue(X, ref Usl, ref Lsl, out x, out s, out QU, out QL, out cp, out cpk, out sx, out sy);
|
|
|
|
//坐标轴
|
|
double ValueUpX;
|
|
double ValueDownX;
|
|
|
|
ValueDownX = Math.Min(ValueDown, Lsl);
|
|
ValueDownX = Math.Min(ValueDownX, QL);
|
|
|
|
ValueUpX = Math.Max(ValueUp, Usl);
|
|
ValueUpX = Math.Max(ValueUpX, QU);
|
|
|
|
double X1 = (ValueUpX - ValueDownX) / 10;
|
|
double minValue = Math.Round(ValueDownX - X1, 4);
|
|
double maxValue = Math.Round(ValueUpX + X1, 4);
|
|
string Yvalue =minValue.ToString()+",";
|
|
for (int i = 1; i < 5; i++)
|
|
{
|
|
Yvalue += (i * (double)(maxValue - minValue) / 5+minValue).ToString()+",";
|
|
}
|
|
Yvalue += maxValue.ToString();
|
|
string Text = Usl + "," + QU + "," + sx[5].ToString("F4") + "," + QL + "," + Lsl + "," + cpk + "," + cp + "|" + Yvalue;
|
|
return Text;
|
|
}
|
|
/// <summary>
|
|
/// 观测值最大值
|
|
/// </summary>
|
|
/// <param name="Xn">子组观测值</param>
|
|
/// <returns></returns>
|
|
static private double Max(double[] Xn)
|
|
{
|
|
double temp;
|
|
temp = Xn[0];
|
|
for (int i = 0; i < Xn.Length; i++)
|
|
{
|
|
temp = (Xn[i] > temp) ? Xn[i] : temp;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 观测值最小值
|
|
/// </summary>
|
|
/// <param name="Xn">子组观测值</param>
|
|
/// <returns></returns>
|
|
static private double Min(double[] Xn)
|
|
{
|
|
double temp;
|
|
temp = Xn[0];
|
|
for (int i = 0; i < Xn.Length; i++)
|
|
{
|
|
temp = (Xn[i] < temp) ? Xn[i] : temp;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 符合条件的全部数据
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private DataTable GetReport(bool OPNameCheck, string OPName, bool shaftNameCheck, string shaftName, bool itemNameCheck,string itemName, string startTime, string endTime,bool EngineTypeIDCheck,string EngineTypeID,string uuidCheck,string uuid)
|
|
{
|
|
DataTable dt;
|
|
bool EnginIDCheck;
|
|
string EnginID;
|
|
EnginIDCheck = EngineTypeIDCheck;
|
|
EnginID = EngineTypeID;
|
|
QualityData2.SelectGoodDataReport_TrendPictureBasic(EnginIDCheck, EnginID,
|
|
OPNameCheck, OPName,
|
|
shaftNameCheck, shaftName,
|
|
itemNameCheck, itemName,
|
|
startTime, endTime,uuidCheck,uuid, out dt);
|
|
return dt;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 绑定测量名称
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string BindMeasurePart()
|
|
{
|
|
string text = "";
|
|
DataTable dt;
|
|
string opName;
|
|
opName = HttpContext.Current.Request["opName"];
|
|
QualityData.GetShaftName(opName, out dt);
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
text = JsonHelper.DataTableToJson(dt);
|
|
}
|
|
return text;
|
|
}
|
|
|
|
public bool IsReusable {
|
|
get {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
} |