258 lines
9.8 KiB
C#
258 lines
9.8 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|