From ebba593e0e0c3b8fb7d6a4253b0f27eb2f40f19a Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Mon, 14 Oct 2024 15:42:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E5=93=81=E7=BC=BA=E9=99=B7=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Analysis/FinalAnalysisController.cs | 40 ++++++++++++++ .../quality/Analysis/Dto/FinalAnalysisDto.cs | 54 +++++++++++++++++++ .../quality/Analysis/FinalAnalysisService.cs | 51 ++++++++++++++++++ .../IService/IFinalAnalysisService.cs | 15 ++++++ 4 files changed, 160 insertions(+) create mode 100644 DOAN.Admin.WebApi/Controllers/MES/quality/Analysis/FinalAnalysisController.cs create mode 100644 DOAN.Model/MES/quality/Analysis/Dto/FinalAnalysisDto.cs create mode 100644 DOAN.Service/MES/quality/Analysis/FinalAnalysisService.cs create mode 100644 DOAN.Service/MES/quality/Analysis/IService/IFinalAnalysisService.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/quality/Analysis/FinalAnalysisController.cs b/DOAN.Admin.WebApi/Controllers/MES/quality/Analysis/FinalAnalysisController.cs new file mode 100644 index 0000000..42eb5aa --- /dev/null +++ b/DOAN.Admin.WebApi/Controllers/MES/quality/Analysis/FinalAnalysisController.cs @@ -0,0 +1,40 @@ +using Microsoft.AspNetCore.Mvc; +using DOAN.Service.MES.quality.Analysis.IService; +using DOAN.Model.MES.quality.Analysis.Dto; +using Xunit.Sdk; +using DOAN.Infrastructure; + +namespace DOAN.WebApi.Controllers.MES.quality.Analysis +{ + [Route("mes/qualityManagement/Analysis/FinalAnalysis")] + public class FinalAnalysisController : BaseController + { + private readonly IFinalAnalysisService finalAnalysisService; + public FinalAnalysisController(IFinalAnalysisService finalAnalysisService) + { + this.finalAnalysisService = finalAnalysisService; + + } + + + + //TODO 成品缺陷统计分析 + [HttpPost("Pie_final_Analysis")] + public IActionResult PieFinalAnalysis([FromBody] FinalAnalysisDto finalAnalysis) + { + if (finalAnalysis == null) { throw new CustomException("finalAnalysis未空"); } + + finalAnalysis.DateRange[0] = ConvertDateTime.ConvertLocalDate(finalAnalysis.DateRange[0]); + finalAnalysis.DateRange[1] = ConvertDateTime.ConvertLocalDate(finalAnalysis.DateRange[1]); + if (finalAnalysis.DateRange[0] == DateTime.MinValue || finalAnalysis.DateRange[1] == DateTime.MinValue) + { + throw new CustomException("时间范围有误"); + } + finalAnalysis.DateRange[1] = finalAnalysis.DateRange[1].AddDays(1); + var response = finalAnalysisService.PieFinalAnalysis(finalAnalysis); + + return SUCCESS(response); + } + + } +} diff --git a/DOAN.Model/MES/quality/Analysis/Dto/FinalAnalysisDto.cs b/DOAN.Model/MES/quality/Analysis/Dto/FinalAnalysisDto.cs new file mode 100644 index 0000000..f471071 --- /dev/null +++ b/DOAN.Model/MES/quality/Analysis/Dto/FinalAnalysisDto.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.MES.quality.Analysis.Dto +{ + public class FinalAnalysisDto + { + + /// + /// 存货编码 + /// + + public string ProductionCode { get; set; } + + /// + /// 产品名称 + /// + + public string ProductionName { get; set; } + + /// + /// 规格型号 + /// + + public string Specification { get; set; } + + /// + /// 日期范围 + /// + public DateTime[] DateRange { get; set; } = new DateTime[2]; + + } + + public class ValueName + { + public string Name { get; set; } + public int Value { get; set; } + + } + + public class PieDataDto + { + public string[] LegendData { get; set; } + + + public List SeriesData { get; set; } + } + + + +} diff --git a/DOAN.Service/MES/quality/Analysis/FinalAnalysisService.cs b/DOAN.Service/MES/quality/Analysis/FinalAnalysisService.cs new file mode 100644 index 0000000..6adbdb3 --- /dev/null +++ b/DOAN.Service/MES/quality/Analysis/FinalAnalysisService.cs @@ -0,0 +1,51 @@ + +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.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) + .GroupBy((p, q) => q.DefectCode) + .Select((p, q) => new ValueName() + { + Name = q.DefectCode, + 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; + + } + + } +} \ No newline at end of file diff --git a/DOAN.Service/MES/quality/Analysis/IService/IFinalAnalysisService.cs b/DOAN.Service/MES/quality/Analysis/IService/IFinalAnalysisService.cs new file mode 100644 index 0000000..8a1cbf4 --- /dev/null +++ b/DOAN.Service/MES/quality/Analysis/IService/IFinalAnalysisService.cs @@ -0,0 +1,15 @@ +using DOAN.Model.MES.quality.Analysis.Dto; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Service.MES.quality.Analysis.IService +{ + public interface IFinalAnalysisService + { + PieDataDto PieFinalAnalysis(FinalAnalysisDto finalAnalysis); + } +}