Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/SmartScreen/Quality/QualitySmartService.cs
2025-03-27 20:01:44 +08:00

258 lines
9.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DOAN.Model.MES.order;
using DOAN.Model.MES.product;
using DOAN.Model.MES.quality.FQC;
using DOAN.Model.MES.SmartScreen;
using DOAN.Model.MES.SmartScreen.Quality.Dto;
using DOAN.Service.MES.SmartScreen.Order.IService;
using DOAN.Service.MES.SmartScreen.Quality.IService;
using Infrastructure.Attribute;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Quality
{
/// <summary>
/// 质量大屏Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IQualitySmartService), ServiceLifetime = LifeTime.Transient)]
public class QualitySmartService : BaseService<QcFinishedproductDefectCollection>, IQualitySmartService
{
public QualityScreenHeadDto GetQualityScreenHead()
{
QualityScreenHeadDto qualityScreenHeadDto = new QualityScreenHeadDto();
// 当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 计算本周周一(第一天)
int daysUntilMonday = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7;
DateTime startOfWeek = now.AddDays(-daysUntilMonday);
// 计算本周周日最后一天23:59:59
DateTime endOfWeek = startOfWeek.AddDays(6).Date
.AddHours(23)
.AddMinutes(59)
.AddSeconds(59);
var response = Queryable().ToList();
List<ProWorkorder> proWorkorders = Context.Queryable<ProWorkorder>().ToList();
List<ProWorkorder> proWorkordersMonth = proWorkorders.Where(o=>o.WorkorderDate>= firstDayOfMonth&& o.WorkorderDate<= lastDayOfMonth).ToList();
List<ProWorkorder> proWorkordersWeek = proWorkorders.Where(o => o.WorkorderDate >= startOfWeek && o.WorkorderDate <= endOfWeek).ToList();
qualityScreenHeadDto.MonthFQC = response.Where(o => o.CheckDatetime >= firstDayOfMonth && o.CheckDatetime <= lastDayOfMonth).Sum(o => o.Number);
qualityScreenHeadDto.WeekFQC = response.Where(o => o.CheckDatetime >= startOfWeek && o.CheckDatetime <= endOfWeek).Sum(o => o.Number);
double planSumMonth =Convert.ToDouble(proWorkordersMonth.Sum(o => o.PlanNum));
double numeratorMonth = planSumMonth - (double)qualityScreenHeadDto.MonthFQC;
double ratioMonth = numeratorMonth / (double)planSumMonth;
string percentageMonth = ratioMonth.ToString("P2");
qualityScreenHeadDto.MonthPassRate = percentageMonth;
double planSumWeek = Convert.ToDouble(proWorkordersWeek.Sum(o => o.PlanNum));
double numeratorWeek = planSumWeek - (double)qualityScreenHeadDto.WeekFQC;
double ratioWeek = numeratorWeek / (double)planSumWeek;
string percentageWeek = ratioWeek.ToString("P2");
qualityScreenHeadDto.WeekPassRate= percentageWeek;
return qualityScreenHeadDto;
}
public List<EchartsSeriesData> GetQualitySmartScreenForWeek()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 计算本周周一(第一天)
int daysUntilMonday = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7;
DateTime startOfWeek = now.AddDays(-daysUntilMonday);
// 计算本周周日最后一天23:59:59
DateTime endOfWeek = startOfWeek.AddDays(6).Date
.AddHours(23)
.AddMinutes(59)
.AddSeconds(59);
// 使用 SqlSugar 进行联表查询和分组统计
var result = Context.Queryable<QcFinishedproductDefectCollection>()
.Where(defect => defect.CheckDatetime >= startOfWeek && defect.CheckDatetime <= endOfWeek)
.GroupBy(defect => new { defect.DefectCode })
.Select(defect => new EchartsSeriesData
{
Name = defect.DefectName,
Value = Convert.ToDecimal(SqlFunc.AggregateSum(defect.Number))
})
.ToList();
return result;
}
public List<EchartsSeriesData> GetQualitySmartScreenForMonth()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 使用 SqlSugar 进行联表查询和分组统计
var result = Context.Queryable<QcFinishedproductDefectCollection>()
.Where(defect => defect.CheckDatetime >= firstDayOfMonth && defect.CheckDatetime <= lastDayOfMonth)
.GroupBy(defect => new { defect.DefectCode })
.Select(defect => new EchartsSeriesData
{
Name = defect.DefectName,
Value = Convert.ToDecimal(SqlFunc.AggregateSum(defect.Number))
})
.ToList();
return result;
}
public EchartsOptions GetQualitySmartScreenForBarChart()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 创建字符串集合存储日期
List<DateTime> dateList = new List<DateTime>();
// 遍历从第一天到最后一天的日期
for (DateTime date = firstDayOfMonth; date <= lastDayOfMonth; date = date.AddDays(1))
{
dateList.Add(date); // 使用标准日期格式
}
EchartsOptions echartsOptions = new EchartsOptions();
EchartsXAxis echartsXAxis = new EchartsXAxis();
List<string> dateStringList= new List<string>();
foreach (var date in dateList)
{
dateStringList.Add(date.ToString("MM-dd"));
}
echartsXAxis.Data = dateStringList;
echartsOptions.XAxis = echartsXAxis;
List<EchartsSeries> echartsSeriesList = new List<EchartsSeries>();
// 使用 SqlSugar 进行联表查询和分组统计
List<QcFinishedproductDefectCollection> qcFinishedproductDefectCollections = Context.Queryable<QcFinishedproductDefectCollection>()
.Where(defect => defect.CheckDatetime >= firstDayOfMonth && defect.CheckDatetime <= lastDayOfMonth).ToList();
List<string> classname = qcFinishedproductDefectCollections.Select(o => o.DefectName).Distinct().ToList();
foreach (var classitem in classname)
{
EchartsSeries echartsSeries = new EchartsSeries();
echartsSeries.Name = classitem;
List<EchartsSeriesData> echartsSeriesDatas = new List<EchartsSeriesData>();
foreach (var dateitem in dateList)
{
DateTime startOfDay = dateitem.Date;
DateTime endOfDay = startOfDay.AddDays(1).AddSeconds(-1);
EchartsSeriesData echartsSeriesData = new EchartsSeriesData();
echartsSeriesData.Name = dateitem.ToString("MM-dd");
echartsSeriesData.Value =Convert.ToDecimal(qcFinishedproductDefectCollections.Where(o=>o.DefectName==classitem&&o.CheckDatetime >= startOfDay && o.CheckDatetime<= endOfDay).Sum(o=>o.Number));
echartsSeriesDatas.Add(echartsSeriesData);
}
echartsSeries.Data = echartsSeriesDatas;
echartsSeriesList.Add(echartsSeries);
}
echartsOptions.Series = echartsSeriesList;
return echartsOptions;
}
public EchartsOptions GetQualitySmartScreenForLineChart()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 创建字符串集合存储日期
List<DateTime> dateList = new List<DateTime>();
// 遍历从第一天到最后一天的日期
for (DateTime date = firstDayOfMonth; date <= lastDayOfMonth; date = date.AddDays(1))
{
dateList.Add(date); // 使用标准日期格式
}
List<ProWorkorder> proWorkorders = Context.Queryable<ProWorkorder>().Where(o => o.WorkorderDate >= firstDayOfMonth && o.WorkorderDate <= lastDayOfMonth).ToList();
EchartsOptions echartsOptions = new EchartsOptions();
EchartsXAxis echartsXAxis = new EchartsXAxis();
List<string> dateStringList = new List<string>();
foreach (var date in dateList)
{
dateStringList.Add(date.ToString("MM-dd"));
}
echartsXAxis.Data = dateStringList;
echartsOptions.XAxis = echartsXAxis;
List<EchartsSeries> echartsSeriesList = new List<EchartsSeries>();
// 使用 SqlSugar 进行联表查询和分组统计
List<QcFinishedproductDefectCollection> qcFinishedproductDefectCollections = Context.Queryable<QcFinishedproductDefectCollection>()
.Where(defect => defect.CheckDatetime >= firstDayOfMonth && defect.CheckDatetime <= lastDayOfMonth).ToList();
List<string> classname = qcFinishedproductDefectCollections.Select(o => o.DefectName).Distinct().ToList();
foreach (var classitem in classname)
{
EchartsSeries echartsSeries = new EchartsSeries();
echartsSeries.Name = classitem;
List<EchartsSeriesData> echartsSeriesDatas = new List<EchartsSeriesData>();
foreach (var dateitem in dateList)
{
DateTime startOfDay = dateitem.Date;
DateTime endOfDay = startOfDay.AddDays(1).AddSeconds(-1);
decimal plannum =Convert.ToDecimal(proWorkorders.Where(o => o.WorkorderDate >= startOfDay && o.WorkorderDate <= endOfDay).Sum(o=>o.PlanNum));
decimal nopassnum= Convert.ToDecimal(qcFinishedproductDefectCollections.Where(o => o.DefectName == classitem && o.CheckDatetime >= startOfDay && o.CheckDatetime <= endOfDay).Sum(o => o.Number));
decimal passnum = plannum - nopassnum;
EchartsSeriesData echartsSeriesData = new EchartsSeriesData();
echartsSeriesData.Name = dateitem.ToString("MM-dd");
echartsSeriesData.Value = passnum/ plannum;
echartsSeriesDatas.Add(echartsSeriesData);
}
echartsSeries.Data = echartsSeriesDatas;
echartsSeriesList.Add(echartsSeries);
}
echartsOptions.Series = echartsSeriesList;
return echartsOptions;
}
}
}