155 lines
8.3 KiB
C#
155 lines
8.3 KiB
C#
using Aliyun.OSS;
|
|
using Infrastructure.Attribute;
|
|
using Infrastructure.Extensions;
|
|
using Mapster.Utils;
|
|
using SqlSugar;
|
|
using SqlSugar.Extensions;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Security.AccessControl;
|
|
using ZR.Model;
|
|
using ZR.Model.Business;
|
|
using ZR.Model.MES.DTO;
|
|
using ZR.Model.MES.qc;
|
|
using ZR.Model.MES.wms;
|
|
using ZR.Repository;
|
|
using ZR.Service.mes.IService;
|
|
|
|
namespace ZR.Service.mes.qc
|
|
{
|
|
[AppService(ServiceType = typeof(IQualificationRateReportService), ServiceLifetime = LifeTime.Transient)]
|
|
public class QualificationRateReportService : BaseService<WmMaterial>, IQualificationRateReportService
|
|
{
|
|
// 获取合格率报告
|
|
public PagedInfo<QualificationRateReportDTO> GetQualificationRateReport(QualificationRateReportQueryDTO parms)
|
|
{
|
|
// 获取物料清单
|
|
var materialPage = Context.Queryable<WmMaterial>()
|
|
.WhereIF(!string.IsNullOrEmpty(parms.PartNumber), m => m.Partnumber.Contains(parms.PartNumber))
|
|
.Select(m => new QualificationRateReportDTO
|
|
{
|
|
Id = m.Id,
|
|
PartNumber = m.Partnumber,
|
|
Description = m.Description,
|
|
Specification = m.Specification,
|
|
Color = m.Color,
|
|
FirstQualifiedRate = "",
|
|
FirstRequireNumber = 0,
|
|
FirstQualifiedNumber = 0,
|
|
GP12QualifiedRate = "",
|
|
GP12RequireNumber = 0,
|
|
GP12QualifiedNumber = 0,
|
|
PolishQualifiedRate = "",
|
|
PolishRequireNumber = 0,
|
|
PolishQualifiedNumber = 0,
|
|
QualifiedRate = "",
|
|
AllRequireNumber = 0,
|
|
AllQualifiedNumber = 0
|
|
})
|
|
.ToPage(parms);
|
|
|
|
// 遍历每个零件,计算各环节+总合格率
|
|
foreach (var item in materialPage.Result)
|
|
{
|
|
// 计算各环节合格率,并返回合格数、投入数
|
|
var firstData = GetFirstRateAndData(item.PartNumber, parms);
|
|
var gp12Data = GetGP12RateAndData(item.PartNumber, parms);
|
|
var polishData = GetPolishRateAndData(item.PartNumber, parms);
|
|
|
|
// 赋值各环节合格率
|
|
item.FirstQualifiedRate = firstData[2].ToString();
|
|
item.FirstQualifiedNumber = firstData[0].ParseToInt();
|
|
item.FirstRequireNumber = (int)firstData[1];
|
|
item.GP12QualifiedRate = gp12Data[2].ToString();
|
|
item.GP12QualifiedNumber = (int)gp12Data[0];
|
|
item.GP12RequireNumber = (int)gp12Data[1];
|
|
item.PolishQualifiedRate = polishData[2].ToString();
|
|
item.PolishQualifiedNumber = (int)polishData[0];
|
|
item.PolishRequireNumber = (int)polishData[1];
|
|
|
|
// 汇总计算总合格率
|
|
int totalQualified = (int)firstData[0] + (int)gp12Data[0] + (int)polishData[0];
|
|
int totalRequire = (int)firstData[1] + (int)gp12Data[1] + (int)polishData[1];
|
|
item.QualifiedRate = CalculateSingleRate(totalQualified, totalRequire);
|
|
item.AllQualifiedNumber = totalQualified;
|
|
item.AllRequireNumber = totalRequire;
|
|
}
|
|
return materialPage;
|
|
}
|
|
|
|
// 成品入库
|
|
private object[] GetFirstRateAndData(string Partnumber, QualificationRateReportQueryDTO parms)
|
|
{
|
|
var stats = Context.Queryable<QcQualityStatisticsFirst>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime>=parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.FinishedPartNumber == Partnumber && m.Remark == "抛光")
|
|
.Select(m => new
|
|
{
|
|
Req = SqlFunc.AggregateSum(m.RequireNumber) ?? 0,
|
|
Qua = SqlFunc.AggregateSum(m.QualifiedNumber) ?? 0
|
|
})
|
|
.ToList();
|
|
var statsList = stats.FirstOrDefault() ?? new { Req = 0, Qua = 0 };
|
|
return new object[] { statsList.Qua, statsList.Req, CalculateSingleRate(statsList.Qua, statsList.Req) };
|
|
}
|
|
|
|
// GP12
|
|
private object[] GetGP12RateAndData(string Partnumber, QualificationRateReportQueryDTO parms)
|
|
{
|
|
var sumReq = Context.Queryable<WmGp12QualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.Partnumber == Partnumber)
|
|
.Sum(m => m.RequireNumber) ?? 0
|
|
+ Context.Queryable<QcGp12ServiceStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.PartNumber == Partnumber && m.GroupSort == 1)
|
|
.Sum(m => m.RequireNumber) ?? 0;
|
|
|
|
var sumQua = Context.Queryable<WmGp12QualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.Partnumber == Partnumber)
|
|
.Sum(m => m.QualifiedNumber) ?? 0
|
|
+ Context.Queryable<QcGp12ServiceStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.PartNumber == Partnumber && m.GroupSort == 1)
|
|
.Sum(m => m.QualifiedNumber) ?? 0;
|
|
return new object[] { sumQua, sumReq, CalculateSingleRate(sumQua, sumReq) };
|
|
}
|
|
|
|
// 后道检验
|
|
private object[] GetPolishRateAndData(string Partnumber, QualificationRateReportQueryDTO parms)
|
|
{
|
|
var sumReq = Context.Queryable<WmPolishQualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.Partnumber == Partnumber)
|
|
.Sum(m => m.RequireNumber) ?? 0
|
|
+ Context.Queryable<WmPolishWorkQualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime)
|
|
.Where(m => m.Partnumber == Partnumber).Sum(m => m.RequireNumber) ?? 0;
|
|
|
|
var sumQua = Context.Queryable<WmPolishQualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime).Where(m => m.Partnumber == Partnumber)
|
|
.Sum(m => m.QualifiedNumber) ?? 0
|
|
+ Context.Queryable<WmPolishWorkQualityStatistics>()
|
|
.WhereIF(parms.StartTime > DateTime.MinValue, m => m.StartTime >= parms.StartTime)
|
|
.WhereIF(parms.EndTime > DateTime.MinValue, m => m.EndTime <= parms.EndTime).Where(m => m.Partnumber == Partnumber).Sum(m => m.QualifiedNumber) ?? 0;
|
|
|
|
return new object[] { sumQua, sumReq, CalculateSingleRate(sumQua, sumReq) };
|
|
}
|
|
|
|
// 通用计算方法
|
|
private string CalculateSingleRate(int qualified, int require)
|
|
{
|
|
if (require == 0 || qualified == 0) return "0%";
|
|
return $"{Math.Round((double)qualified / require * 100, 2)}%";
|
|
}
|
|
}
|
|
} |