Merge branch 'main' of https://gitee.com/doan-tech/shanghaigangxiangtuzhuangMES
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ZR.Model.mes.echarts;
|
||||
using ZR.Model.MES.DTO;
|
||||
using ZR.Service.mes.IService;
|
||||
using ZR.Service.mes.qc;
|
||||
using ZR.Service.mes.qc.IService.qualificationRateReport;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers.mes.qc.FQC.qualificationRateReport
|
||||
{
|
||||
[Route("mes/qc/FQC/QualificationRateEcharts")]
|
||||
public class QualificationRateEchartsController : BaseController
|
||||
{
|
||||
private readonly IQualificationRateEchartsService qualificationRateEchartsService;
|
||||
|
||||
public QualificationRateEchartsController(
|
||||
IQualificationRateEchartsService qualificationRateEchartsService
|
||||
)
|
||||
{
|
||||
this.qualificationRateEchartsService = qualificationRateEchartsService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取合格率Echarts数据
|
||||
/// </summary>
|
||||
/// <param name="query">查询值</param>
|
||||
/// <returns>QcCommonFqcBoardDto 看板数据</returns>
|
||||
[HttpPost("GetQualificationRateEcharts")]
|
||||
public IActionResult GetQualificationRateEcharts(
|
||||
[FromBody] FQCQualityQuery query
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = qualificationRateEchartsService.GetQualificationRateEcharts(query);
|
||||
if (result == null)
|
||||
{
|
||||
return ToResponse(new ApiResult(500, "获取数据列表异常-01:返回值为空", result));
|
||||
}
|
||||
return ToResponse(new ApiResult(200, "ok", result));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ToResponse(new ApiResult(500, ex.Message, ex.Message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,8 +23,8 @@ namespace ZR.Admin.WebApi.Controllers.mes.qu
|
||||
/// </summary>
|
||||
/// <param name="query">查询值</param>
|
||||
/// <returns>QcCommonFqcBoardDto 看板数据</returns>
|
||||
[HttpPost("getWorkOrderFqcTableData")]
|
||||
public IActionResult GetWorkOrderFqcTableData(
|
||||
[HttpPost("GetQualificationRateReport")]
|
||||
public IActionResult GetQualificationRateReport(
|
||||
[FromBody] QualificationRateReportQueryDTO query
|
||||
)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ZR.Model.MES.qc.DTO.qualificationRateReport
|
||||
{
|
||||
public class QualificationRateEchartsDTO
|
||||
{
|
||||
/// <summary>
|
||||
/// 序号
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 零件号
|
||||
/// </summary>
|
||||
public string PartNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 零件描述
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 总投入数
|
||||
/// </summary>
|
||||
public int? AllRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 总合格数
|
||||
/// </summary>
|
||||
public int? AllQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 总合格率
|
||||
/// </summary>
|
||||
public decimal QualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下线投入数
|
||||
/// </summary>
|
||||
public int? FirstRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下线合格数
|
||||
/// </summary>
|
||||
public int? FirstQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下线合格率
|
||||
/// </summary>
|
||||
public decimal FirstQualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GP12投入数
|
||||
/// </summary>
|
||||
public int? GP12RequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GP12合格数
|
||||
/// </summary>
|
||||
public int? GP12QualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GP12合格率
|
||||
/// </summary>
|
||||
public decimal GP12QualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道投入数
|
||||
/// </summary>
|
||||
public int? PolishRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道合格数
|
||||
/// </summary>
|
||||
public int? PolishQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道合格率
|
||||
/// </summary>
|
||||
public decimal PolishQualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "start_time")]
|
||||
public DateTime? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "end_time")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
namespace ZR.Model.MES.DTO
|
||||
{
|
||||
using ZR.Model.MES.wms;
|
||||
|
||||
public class QualificationRateReportQueryDTO
|
||||
namespace ZR.Model.MES.DTO
|
||||
{
|
||||
/// <summary>
|
||||
/// 质量统计查询条件
|
||||
///</summary>
|
||||
public class QualificationRateReportQueryDTO : PagerInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 零件号
|
||||
@@ -21,7 +25,7 @@
|
||||
public DateTime? EndTime { get; set; }
|
||||
}
|
||||
|
||||
public class QualificationRateReportDTO
|
||||
public class QualificationRateReportDTO : PagerInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 序号
|
||||
@@ -29,11 +33,6 @@
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 工单号
|
||||
/// </summary>
|
||||
public string WorkOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 零件号
|
||||
/// </summary>
|
||||
@@ -55,115 +54,77 @@
|
||||
public string Color { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 班组
|
||||
/// 总投入数
|
||||
/// </summary>
|
||||
public string Team { get; set; }
|
||||
public int? AllRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 站点号
|
||||
/// 总合格数
|
||||
/// </summary>
|
||||
public string SiteNo { get; set; }
|
||||
public int? AllQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 串口号
|
||||
/// 总合格率
|
||||
/// </summary>
|
||||
public string ComNo { get; set; }
|
||||
public string QualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否一次合格
|
||||
/// 下线投入数
|
||||
/// </summary>
|
||||
public int? IsOnetime { get; set; }
|
||||
public int? FirstRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否返工件
|
||||
/// 下线合格数
|
||||
/// </summary>
|
||||
public int? IsBack { get; set; }
|
||||
public int? FirstQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否抛光件
|
||||
/// 下线合格率
|
||||
/// </summary>
|
||||
public int? IsPolish { get; set; }
|
||||
public string FirstQualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否外部件
|
||||
/// GP12投入数
|
||||
/// </summary>
|
||||
public int? IsOut { get; set; }
|
||||
public int? GP12RequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GP12合格数
|
||||
/// </summary>
|
||||
public int? GP12QualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GP12合格率
|
||||
/// </summary>
|
||||
public string GP12QualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道投入数
|
||||
/// </summary>
|
||||
public int? PolishRequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道合格数
|
||||
/// </summary>
|
||||
public int? PolishQualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 后道合格率
|
||||
/// </summary>
|
||||
public string PolishQualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "start_time")]
|
||||
public DateTime? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "end_time")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 箱标签记录
|
||||
/// </summary>
|
||||
public string Label { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 投入数
|
||||
/// </summary>
|
||||
public int? RequireNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合格数
|
||||
/// </summary>
|
||||
public int? QualifiedNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合格率
|
||||
/// </summary>
|
||||
public string QualifiedRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 抛光数
|
||||
/// </summary>
|
||||
public int? PolishNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 打磨数
|
||||
/// </summary>
|
||||
public int? DamoNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 报废数
|
||||
/// </summary>
|
||||
public int? BaofeiNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 同组标识
|
||||
/// </summary>
|
||||
public string GroupCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 同组顺序
|
||||
/// </summary>
|
||||
public int? GroupSort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 同组缺陷记录
|
||||
/// </summary>
|
||||
public string GroupDefectJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 系统类别
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 系统状态
|
||||
/// </summary>
|
||||
public string Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 系统备注
|
||||
/// </summary>
|
||||
public string Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Model;
|
||||
using ZR.Model.mes.echarts;
|
||||
using ZR.Model.MES.DTO;
|
||||
using ZR.Model.MES.wms;
|
||||
|
||||
namespace ZR.Service.mes.qc.IService.qualificationRateReport
|
||||
{
|
||||
public interface IQualificationRateEchartsService
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取Echarts图表
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <returns></returns>
|
||||
EchartsOptions GetQualificationRateEcharts(FQCQualityQuery query);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
|
||||
using ZR.Model;
|
||||
using ZR.Model.MES.DTO;
|
||||
using ZR.Model.MES.wms;
|
||||
|
||||
namespace ZR.Service.mes.IService
|
||||
{
|
||||
public interface IQualificationRateReportService
|
||||
public interface IQualificationRateReportService : IBaseService<WmMaterial>
|
||||
{
|
||||
/// <summary>
|
||||
/// 分页获取合格率报表
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Model.mes.echarts;
|
||||
using ZR.Model.MES.qc;
|
||||
using ZR.Model.MES.qc.DTO.qualificationRateReport;
|
||||
using ZR.Model.MES.wms;
|
||||
using ZR.Service.mes.qc.IService.qualificationRateReport;
|
||||
|
||||
namespace ZR.Service.mes.qc.qualificationRateReport
|
||||
{
|
||||
[AppService(ServiceType = typeof(IQualificationRateEchartsService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class QualificationRateEchartsService : BaseService<EchartsOptions>, IQualificationRateEchartsService
|
||||
{
|
||||
public EchartsOptions GetQualificationRateEcharts(FQCQualityQuery query)
|
||||
{
|
||||
try
|
||||
{
|
||||
EchartsOptions echartsOptions = new()
|
||||
{
|
||||
Title = new EchartsTitle
|
||||
{
|
||||
Text = "零件合格率表",
|
||||
SubText = $"时间范围:{query.StartTime:yyyy-MM-dd} 至 {query.EndTime:yyyy-MM-dd}"
|
||||
},
|
||||
XAxis = new EchartsXAxis // 初始化X轴
|
||||
{
|
||||
Type = "category", // 类目轴(零件名称)
|
||||
Data = new List<string>()
|
||||
},
|
||||
YAxis = new EchartsYAxis // 初始化Y轴(数值轴,显示百分比)
|
||||
{
|
||||
Type = "value",
|
||||
Min = "0",
|
||||
Max = "100",
|
||||
},
|
||||
Series = new List<EchartsSeries>()
|
||||
};
|
||||
|
||||
// 获取零件列表和对应的合格率数据
|
||||
var materialList = GetPartRateList(query);
|
||||
|
||||
// 填充X轴数据(零件描述,与Series数据对应)
|
||||
echartsOptions.XAxis.Data = materialList.Select(m => m.Description).ToList();
|
||||
|
||||
// 填充数据系列
|
||||
EchartsSeries series = new()
|
||||
{
|
||||
Name = "零件合格率",
|
||||
Type = "bar",
|
||||
Data = GetQualificationRateSeriesData(query)
|
||||
};
|
||||
|
||||
echartsOptions.Series.Add(series);
|
||||
return echartsOptions;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new Exception(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// ======================================= 嵌入方法 =============================
|
||||
|
||||
/// <summary>
|
||||
/// 获取Echarts图表数据
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <returns></returns>
|
||||
public List<EchartsSeriesData> GetQualificationRateSeriesData(FQCQualityQuery query)
|
||||
{
|
||||
List<EchartsSeriesData> seriesDataList = new();
|
||||
var materialList = GetPartRateList(query);
|
||||
foreach (var material in materialList)
|
||||
{
|
||||
seriesDataList.Add(new EchartsSeriesData
|
||||
{
|
||||
Name = material.Description,
|
||||
Value = material.QualifiedRate
|
||||
});
|
||||
}
|
||||
return seriesDataList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取零件合格率
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <returns></returns>
|
||||
public List<QualificationRateEchartsDTO> GetPartRateList(FQCQualityQuery query)
|
||||
{
|
||||
// 获取零件列表
|
||||
var materialList = Context.Queryable<WmMaterial>()
|
||||
.WhereIF(!string.IsNullOrEmpty(query.Partnumber), m => m.Partnumber.Contains(query.Partnumber))
|
||||
.Select(m => new QualificationRateEchartsDTO
|
||||
{
|
||||
Id = m.Id,
|
||||
PartNumber = m.Partnumber,
|
||||
Description = m.Description,
|
||||
FirstQualifiedRate = 0,
|
||||
FirstRequireNumber = 0,
|
||||
FirstQualifiedNumber = 0,
|
||||
GP12QualifiedRate = 0,
|
||||
GP12RequireNumber = 0,
|
||||
GP12QualifiedNumber = 0,
|
||||
PolishQualifiedRate = 0,
|
||||
PolishRequireNumber = 0,
|
||||
PolishQualifiedNumber = 0,
|
||||
QualifiedRate = 0,
|
||||
AllRequireNumber = 0,
|
||||
AllQualifiedNumber = 0
|
||||
})
|
||||
.ToList();
|
||||
// 计算每个零件合格率
|
||||
var partRateList = GetPartRateData(materialList, query);
|
||||
return partRateList;
|
||||
}
|
||||
|
||||
// 计算每个零件合格率
|
||||
public List<QualificationRateEchartsDTO> GetPartRateData(List<QualificationRateEchartsDTO> materialList, FQCQualityQuery query)
|
||||
{
|
||||
// 遍历零件,计算合格率
|
||||
for (int i = 0; i < materialList.Count; i++)
|
||||
{
|
||||
// 计算各环节合格率,并返回合格数、投入数
|
||||
var item = materialList[i];
|
||||
var firstData = GetFirstRateAndData(item.PartNumber, query);
|
||||
var gp12Data = GetGP12RateAndData(item.PartNumber, query);
|
||||
var polishData = GetPolishRateAndData(item.PartNumber, query);
|
||||
|
||||
// 赋值各环节合格率
|
||||
item.FirstQualifiedRate = (decimal)firstData[2];
|
||||
item.FirstQualifiedNumber = firstData[0].ParseToInt();
|
||||
item.FirstRequireNumber = (int)firstData[1];
|
||||
item.GP12QualifiedRate = (decimal)gp12Data[2];
|
||||
item.GP12QualifiedNumber = (int)gp12Data[0];
|
||||
item.GP12RequireNumber = (int)gp12Data[1];
|
||||
item.PolishQualifiedRate = (decimal)polishData[2];
|
||||
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 materialList;
|
||||
}
|
||||
|
||||
// 成品入库
|
||||
private object[] GetFirstRateAndData(string Partnumber, FQCQualityQuery query)
|
||||
{
|
||||
var stats = Context.Queryable<QcQualityStatisticsFirst>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.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, FQCQualityQuery query)
|
||||
{
|
||||
var sumReq = Context.Queryable<WmGp12QualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber)
|
||||
.Sum(m => m.RequireNumber) ?? 0
|
||||
+ Context.Queryable<QcGp12ServiceStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.PartNumber == Partnumber && m.GroupSort == 1)
|
||||
.Sum(m => m.RequireNumber) ?? 0;
|
||||
|
||||
var sumQua = Context.Queryable<WmGp12QualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber)
|
||||
.Sum(m => m.QualifiedNumber) ?? 0
|
||||
+ Context.Queryable<QcGp12ServiceStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.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, FQCQualityQuery query)
|
||||
{
|
||||
var sumReq = Context.Queryable<WmPolishQualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber)
|
||||
.Sum(m => m.RequireNumber) ?? 0
|
||||
+ Context.Queryable<WmPolishWorkQualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber).Sum(m => m.RequireNumber) ?? 0;
|
||||
|
||||
var sumQua = Context.Queryable<WmPolishQualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber)
|
||||
.Sum(m => m.QualifiedNumber) ?? 0
|
||||
+ Context.Queryable<WmPolishWorkQualityStatistics>()
|
||||
.WhereIF(query.StartTime > DateTime.MinValue, m => m.StartTime >= query.StartTime)
|
||||
.WhereIF(query.EndTime > DateTime.MinValue, m => m.EndTime <= query.EndTime)
|
||||
.Where(m => m.Partnumber == Partnumber).Sum(m => m.QualifiedNumber) ?? 0;
|
||||
|
||||
return new object[] { sumQua, sumReq, CalculateSingleRate(sumQua, sumReq) };
|
||||
}
|
||||
|
||||
// 通用计算方法
|
||||
private decimal CalculateSingleRate(int qualified, int require)
|
||||
{
|
||||
if (require == 0 || qualified == 0) return 0;
|
||||
return Math.Round((decimal)qualified / require * 100, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,155 @@
|
||||
using Infrastructure.Attribute;
|
||||
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.qu;
|
||||
using ZR.Model.MES.wms;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.mes.IService;
|
||||
using ZR.Service.mes.qc.IService;
|
||||
|
||||
namespace ZR.Service.mes.qc
|
||||
{
|
||||
[AppService(ServiceType = typeof(IQualificationRateReportService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class QualificationRateReportService : BaseService<QcQualityStatisticsFirst>, IQualificationRateReportService
|
||||
public class QualificationRateReportService : BaseService<WmMaterial>, IQualificationRateReportService
|
||||
{
|
||||
// 获取合格率报告
|
||||
public PagedInfo<QualificationRateReportDTO> GetQualificationRateReport(QualificationRateReportQueryDTO parms)
|
||||
{
|
||||
throw new global::System.NotImplementedException();
|
||||
// 获取物料清单
|
||||
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)}%";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user