Files
43-VPSA-MES_Manage/submit/QualityData_SpcEchartsData.ashx
2026-06-08 17:14:28 +08:00

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