using System.Linq; using DOAN.Model.MES.andon.Dto; using DOAN.Model.MES.product; using DOAN.Model.MES.quality.Analysis.Dto; using DOAN.Model.MES.quality.FQC; using DOAN.Model.MES.quality.IQC; using DOAN.Repository; using DOAN.Service.MES.quality.Analysis.IService; using Infrastructure.Attribute; namespace DOAN.Service.MES.quality.Analysis { /// /// 缺陷类别Service业务层处理 /// [AppService(ServiceType = typeof(IFinalAnalysisService), ServiceLifetime = LifeTime.Transient)] public class FinalAnalysisService : BaseService, IFinalAnalysisService { public PieDataDto PieFinalAnalysis(FinalAnalysisDto finalAnalysis) { // 查找所需工单 var proWorkorders = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(finalAnalysis.ProductionCode), it => it.ProductionCode.Contains(finalAnalysis.ProductionCode)) .WhereIF(!string.IsNullOrEmpty(finalAnalysis.ProductionName), it => it.ProductionName.Contains(finalAnalysis.ProductionName)) .WhereIF(!string.IsNullOrEmpty(finalAnalysis.Specification), it => it.Specification.Contains(finalAnalysis.Specification)) .Where(it => it.CreatedTime >= finalAnalysis.DateRange[0] && it.CreatedTime <= finalAnalysis.DateRange[1]); List SeriesData = Context.Queryable(proWorkorders) .LeftJoin((p, q) => p.Workorder == q.Workorder) .LeftJoin((p, q, c) => q.DefectCode == c.Code) .GroupBy((p, q, c) => q.DefectCode) .Having((p, q, c) =>q.DefectCode!=null) .Select((p, q, c) => new ValueName() { Name = SqlFunc.AggregateMin(c.Name), Value = SqlFunc.AggregateSum(q.Number ?? 0) }) .ToList(); string[] LegendData = SeriesData.Select(it => it.Name).ToArray(); PieDataDto pieDataDto = new PieDataDto(); pieDataDto.SeriesData = SeriesData; pieDataDto.LegendData = LegendData; return pieDataDto; } } }