<%@ 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 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>(); //dataList = JsonConvert.DeserializeObject>(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 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 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; } /// /// 观测值最大值 /// /// 子组观测值 /// 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; } /// /// 观测值最小值 /// /// 子组观测值 /// 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; } /// /// 符合条件的全部数据 /// /// 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; } /// /// 绑定测量名称 /// /// 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; } } }