From 68b3bc6faefc5233cef7b09002fa9217b6472180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AD=A3=E6=98=93?= Date: Tue, 15 Oct 2024 12:12:29 +0800 Subject: [PATCH] echarts --- ZR.Model/MES/echarts/EchartsDto.cs | 7 +- ZR.Service/mes/echarts/FQCEchartsService.cs | 200 +++++++++++++++++- .../wms/WmPolishQualityStatisticsService.cs | 4 +- 3 files changed, 207 insertions(+), 4 deletions(-) diff --git a/ZR.Model/MES/echarts/EchartsDto.cs b/ZR.Model/MES/echarts/EchartsDto.cs index 269c70c8..73c387f3 100644 --- a/ZR.Model/MES/echarts/EchartsDto.cs +++ b/ZR.Model/MES/echarts/EchartsDto.cs @@ -13,7 +13,7 @@ namespace ZR.Model.mes.echarts public int ReportType { get; set; } /// - /// 报表类别 0-工单统计 1-工单统计 2-Top3缺陷数 3-Top10零件合格数 + /// 报表类别 /// public int ChartType { get; set; } @@ -68,6 +68,8 @@ namespace ZR.Model.mes.echarts // value 数值轴,适用于连续数据 category 类目轴,适用于离散的类目数据 time 时间轴,适用于连续的时序数据 log 对数轴。适用于对数数据 public string Type { get; set; } = "category"; + public string Max { get; set; } + public string Min { get; set; } } /// @@ -79,6 +81,9 @@ namespace ZR.Model.mes.echarts // value 数值轴,适用于连续数据 category 类目轴,适用于离散的类目数据 time 时间轴,适用于连续的时序数据 log 对数轴。适用于对数数据 public string Type { get; set; } = "category"; + public string Max { get; set; } + public string Min { get; set; } + } /// diff --git a/ZR.Service/mes/echarts/FQCEchartsService.cs b/ZR.Service/mes/echarts/FQCEchartsService.cs index 1e06080a..dd7946e7 100644 --- a/ZR.Service/mes/echarts/FQCEchartsService.cs +++ b/ZR.Service/mes/echarts/FQCEchartsService.cs @@ -2,13 +2,17 @@ using System.Collections.Generic; using System.Data; using System.Linq; +using System.Linq.Expressions; +using System.Reflection; using Infrastructure.Attribute; using Infrastructure.Extensions; +using Mapster.Utils; using SqlSugar; using ZR.Model.mes.echarts; using ZR.Model.MES.pro; using ZR.Model.MES.qc; using ZR.Service.MES.echarts.IService; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace ZR.Service.MES.md { @@ -31,12 +35,53 @@ namespace ZR.Service.MES.md }; echartsOptions.Series.Add(series); } + if (query.ChartType == 1) + { + List datas = GetRejectRateSeriesData(query); + EchartsXAxis xAxis = + new() + { + Type = "value", + Min = "0", + Max = "100", + Data = GenerateXAxisList(datas) + }; + echartsOptions.XAxis = xAxis; + EchartsYAxis yAxis = + new() { Type = "category", Data = GenerateXAxisList(datas) }; + echartsOptions.YAxis = yAxis; + EchartsSeries series = + new() + { + Name = "近一周废品率top3", + Type = "bar", + Data = datas + }; + echartsOptions.Series.Add(series); + } if (query.ChartType == 2) + { + List datas = GetDefectCategorySeriesData(query); + EchartsXAxis xAxis = new() { Type = "value", Data = GenerateXAxisList(datas) }; + echartsOptions.XAxis = xAxis; + EchartsYAxis yAxis = + new() { Type = "category", Data = GenerateXAxisList(datas) }; + echartsOptions.YAxis = yAxis; + EchartsSeries series = + new() + { + Name = "近一周缺陷类别Top3", + Type = "bar", + Data = datas + }; + echartsOptions.Series.Add(series); + } + if (query.ChartType == 3) { EchartsSeries series = new() { - Name = "缺陷数", + Name = "近一周缺陷最多零件top3", Type = "pie", Data = GetDefectTotalSeriesData(query) }; @@ -139,6 +184,19 @@ namespace ZR.Service.MES.md return list; } + /// 通用,提取X轴数据 + public static List GenerateXAxisList(List data) + { + try + { + return data.Select(item => item.Name).ToList(); + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + /// ======================================= 报表结果 ============================= /// @@ -209,5 +267,145 @@ namespace ZR.Service.MES.md return seriesDataList; } + + /// + /// 获取废品率Top3柱状图 + /// + /// + /// + public List GetRejectRateSeriesData(FQCQualityQuery query) + { + List seriesDataList = new(); + List dateTimes = GetDateTimeList(query); + if (query.ReportType == 1) + { + var predicate = Expressionable + .Create() + .And(it => it.StartTime.Value >= dateTimes[0]) + .And(it => it.StartTime.Value <= dateTimes[1]) + .And(it => it.Remark2 == 2) + .ToExpression(); + seriesDataList = Context + .Queryable() + .Where(predicate) + .GroupBy(it => it.FinishedPartNumber + " " + it.ProductDescription) + .Select(it => new EchartsSeriesData + { + Name = it.FinishedPartNumber + " " + it.ProductDescription, + Value = + (decimal) + SqlFunc.AggregateSumNoNull( + it.PaoguangTotal + it.DamoTotal + it.BaofeiTotal + ) + / SqlFunc.AggregateSumNoNull(it.RequireNumber) + * 100 + ?? 0 + }) + .OrderBy(it => it.Value, OrderByType.Desc) + .Take(3) + .ToList(); + } + + return seriesDataList; + } + + /// + /// 获取缺陷类别Top3柱状图 + /// + /// + /// + public List GetDefectCategorySeriesData(FQCQualityQuery query) + { + string[] detailDict = + { + "缩孔", + "针孔", + "失光", + "色差", + "点子", + "其他", + "水斑", + "脏点", + "变形", + "油珠", + "脱落", + "撞伤", + "其他", + "毛刺", + "缩印", + "擦伤", + "砂印", + "流痕", + "开裂", + "流挂", + "色漆缺漆", + "清漆缺漆", + "桔皮", + "其他", + "下件擦伤", + "清漆漆块", + "色漆漆块", + "发花", + "亮斑", + "喷漏", + }; + string[] detailColDict = + { + "PaintSuokong", + "PaintZhengkong", + "PaintShiguang", + "PaintSecha", + "PaintDianzi", + "PaintOther", + "DeviceShuibian", + "DeviceZandian", + "DeviceBianxing", + "DeviceYouzhu", + "DeviceTuoluo", + "DeviceZhuangshang", + "DeviceOther", + "BlankMaoci", + "BlankSuoyin", + "BlankCanshuang", + "BlankShaying", + "BlankZangdian", + "BlankDamo", + "ProgramLiuguang", + "ProgramSeqiqueqi", + "ProgramQingqiqueqi", + "ProgramOther", + "TeamTuoluocanshuang", + "TeamQingqiqikuai", + "TeamSeqiqikuai", + "TeamFahua", + "TeamLiangbang", + "TeamPenglou", + }; + List seriesDataList = new(); + List dateTimes = GetDateTimeList(query); + if (query.ReportType == 1) + { + var predicate = Expressionable + .Create() + .And(it => it.StartTime.Value >= dateTimes[0]) + .And(it => it.StartTime.Value <= dateTimes[1]) + .ToExpression(); + for (int index = 0; index < detailColDict.Length; index++) + { + // 在此lambda上应用Sum函数 + decimal total = (decimal) + Context + .Queryable() + .Where(predicate) + .Sum(it => it.PaintSuokong); + + seriesDataList.Add( + new EchartsSeriesData() { Name = detailDict[index], Value = total, } + ); + } + } + + return seriesDataList.OrderByDescending(s => s.Value).Take(3).ToList(); + } } } diff --git a/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs b/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs index af1b68ae..21a1b6f7 100644 --- a/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs +++ b/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs @@ -10,7 +10,7 @@ using ZR.Service.mes.wms.IService; namespace ZR.Service.mes.wms { /// - /// 抛光管理-质量统计Service业务层处理 + /// 抛光管理后道检验-质量统计Service业务层处理 /// [AppService( ServiceType = typeof(IWmPolishQualityStatisticsService), @@ -144,7 +144,7 @@ namespace ZR.Service.mes.wms { Partnumber = model.Partnumber, Type = model.IsReturnWorkpiece ? 2 : 1, - Quantity = model.PaoguangTotal, + Quantity = model.QualifiedNumber, CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark =