成品缺陷统计分析

This commit is contained in:
qianhao.xu 2024-10-14 15:42:02 +08:00
parent d310c43056
commit ebba593e0e
4 changed files with 160 additions and 0 deletions

View File

@ -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);
}
}
}

View File

@ -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
{
/// <summary>
/// 存货编码
/// </summary>
public string ProductionCode { get; set; }
/// <summary>
/// 产品名称
/// </summary>
public string ProductionName { get; set; }
/// <summary>
/// 规格型号
/// </summary>
public string Specification { get; set; }
/// <summary>
/// 日期范围
/// </summary>
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<ValueName> SeriesData { get; set; }
}
}

View File

@ -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
{
/// <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)
.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;
}
}
}

View File

@ -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);
}
}