diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs index e5af3a8a..d9b3bf7b 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/SpcData.cs @@ -107,4 +107,34 @@ namespace Tnb.QcMgr.Entities public float? clmr { get; set; } public float? lclmr { get; set; } } + public class Pchart + { + public float? p { get; set; } + public float? n { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class Uchart + { + public float? u { get; set; } + public float? n { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class NPchart + { + public float? np { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } + public class Cchart + { + public float? c { get; set; } + public float? ucl { get; set; } + public float? cl { get; set; } + public float? lcl { get; set; } + } } diff --git a/QcMgr/Tnb.QcMgr/QcSpcService.cs b/QcMgr/Tnb.QcMgr/QcSpcService.cs index 297b6ca7..36753845 100644 --- a/QcMgr/Tnb.QcMgr/QcSpcService.cs +++ b/QcMgr/Tnb.QcMgr/QcSpcService.cs @@ -11,6 +11,7 @@ using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using Microsoft.AspNetCore.Mvc; +using Spire.Xls.Core; using SqlSugar; using Tnb.QcMgr.Entities; using Tnb.QcMgr.Entities.Entity; @@ -255,6 +256,84 @@ namespace Tnb.QcMgr }); return XMRchart; } + if (QcSpcH.graphtype == "P图") + { + List pcharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Pchart pchart = new Pchart(); + pchart.p = QcSpcD.defectivenum / QcSpcD.checknum; + pchart.n = QcSpcD.checknum; + + pcharts.Add(pchart); + } + var pAverage = (pcharts.Select(p => p.n * p.p).Sum()) / (pcharts.Select(p => p.n).Sum()); + var nAverage = pcharts.Select(p => p.n).Average(); + pcharts.ForEach(p => + { + p.cl = pAverage; + p.ucl = pAverage + (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)); + p.lcl = pAverage - (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)) < 0 ? 0 : pAverage - (float)(3 * Math.Sqrt((double)(pAverage * (1 - pAverage))!) / Math.Sqrt((double)nAverage!)); + }); + return pcharts; + } + if (QcSpcH.graphtype == "U图") + { + List ucharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Uchart uchart = new Uchart(); + uchart.u = QcSpcD.defectivenum / QcSpcD.checknum; + uchart.n = QcSpcD.checknum; + ucharts.Add(uchart); + } + var uAverage = (ucharts.Select(p => p.u).Sum()) / (ucharts.Count()); + var nAverage = ucharts.Select(p => p.n).Average(); + ucharts.ForEach(p => + { + p.cl = uAverage; + p.ucl = uAverage + (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)); + p.lcl = uAverage - (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)) < 0 ? 0 : uAverage - (float)(3 * Math.Sqrt((double)(uAverage / nAverage)!)); + }); + return ucharts; + } + if (QcSpcH.graphtype == "nP图") + { + List npcharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + NPchart npchart = new NPchart(); + npchart.np = QcSpcD.defectivenum; + npcharts.Add(npchart); + } + var npAverage = (npcharts.Select(p => p.np).Sum()) / (npcharts.Count()); + var pAverage = npcharts.Select(p => p.np).Sum() / (npcharts.Count() * QcSpcH.subcapacity); + npcharts.ForEach(p => + { + p.cl = npAverage; + p.ucl = npAverage + (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)); + p.lcl = npAverage - (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)) < 0 ? 0 : npAverage - (float)(3 * Math.Sqrt((double)(npAverage * (1 - pAverage))!)); + }); + return npcharts; + } + if (QcSpcH.graphtype == "C图") + { + List ccharts = new List(); + foreach (var QcSpcD in QcSpcDs) + { + Cchart cchart = new Cchart(); + cchart.c = QcSpcD.defectivenum; + ccharts.Add(cchart); + } + var cAverage = (ccharts.Select(p => p.c).Sum()) / (ccharts.Count()); + ccharts.ForEach(p => + { + p.cl = cAverage; + p.ucl = cAverage + (float)(3 * Math.Sqrt((double)cAverage!)); + p.lcl = cAverage - (float)(3 * Math.Sqrt((double)cAverage!)) < 0 ? 0 : cAverage - (float)(3 * Math.Sqrt((double)cAverage!)); + }); + return ccharts; + } return null; } //标准差计算