2024-11-13 13:18:44 +08:00

57 lines
2.2 KiB
C#

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
{
/// <summary>
/// 缺陷类别Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IFinalAnalysisService), ServiceLifetime = LifeTime.Transient)]
public class FinalAnalysisService : BaseService<QcFinishedproductDefectCollection>, IFinalAnalysisService
{
public PieDataDto PieFinalAnalysis(FinalAnalysisDto finalAnalysis)
{
// 查找所需工单
var proWorkorders = Context.Queryable<ProWorkorder>()
.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<ValueName> SeriesData = Context.Queryable(proWorkorders)
.LeftJoin<QcFinishedproductDefectCollection>((p, q) => p.Workorder == q.Workorder)
.LeftJoin<QcDefectConfig>((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;
}
}
}