zhuangpei-mesbackend/DOAN.Service/MES/BI/QualityBigScreenService.cs
qianhao.xu f49d402894 提交
2025-02-25 13:52:50 +08:00

437 lines
16 KiB
C#

using System.Linq;
using Infrastructure.Attribute;
using DOAN.Model.MES.base_;
using DOAN.Model.MES.BI.Dto;
using DOAN.Model.MES.dev;
using DOAN.Model.mes.echarts;
using DOAN.Model.MES.mm;
using DOAN.Model.MES.product;
using DOAN.Model.MES.quality.FQC;
using DOAN.Model.MES.quality.IPQC;
using DOAN.Model.MES.quality.IQC;
using DOAN.Service.MES.BI.IService;
namespace DOAN.Service.MES.BI
{
/// <summary>
/// 质量大屏
/// </summary>
[AppService(ServiceType = typeof(IQualityBIService), ServiceLifetime = LifeTime.Transient)]
public class QualityBIService : BaseService<DeviceAccount>, IQualityBIService
{
public QualityBIDto GetMoudle00()
{
//本周第一天 到最后一天
DateTime Weekstart = GetWeekStartDayMon(DateTime.Now);
DateTime Weekend = GetWeekEndDaySun(DateTime.Now);
//本月第一天 到最后一天
DateTime Monthstart = GetFirstDayOfMonth(DateTime.Now);
DateTime MonthEnd = GetLastDayOfMonth(DateTime.Now);
QualityBIDto result = new QualityBIDto();
result.WeekIQCquantity=Context.Queryable<QcDefectCollection>().Where(it=>it.Type==1)
.Where(it=>it.DateTime>=Weekstart&&it.DateTime<=Weekend.AddDays(1))
.Sum(it=>it.Quantity);
result.MonthIQCquantity=Context.Queryable<QcDefectCollection>().Where(it=>it.Type==1)
.Where(it=>it.DateTime>=Monthstart&&it.DateTime<=MonthEnd.AddDays(1))
.Sum(it=>it.Quantity);
result.WeekIPQCquantity=Context.Queryable<QcDefectCollection>().Where(it=>it.Type==2)
.Where(it=>it.DateTime>=Weekstart&&it.DateTime<=Weekend.AddDays(1))
.Sum(it=>it.Quantity);
result.MonthIPQCquantity=Context.Queryable<QcDefectCollection>().Where(it=>it.Type==2)
.Where(it=>it.DateTime>=Monthstart&&it.DateTime<=MonthEnd.AddDays(1))
.Sum(it=>it.Quantity);
result.WeekFQCquantity=Context.Queryable<QcFinishedproductDefectCollection>().Where(it=>it.CreatedTime>=Weekstart&&it.CreatedTime<=Weekend.AddDays(1))
.Where(it=>it.CreatedTime>=Weekstart&&it.CreatedTime<=Weekend.AddDays(1))
.Sum(it=>it.Number??0);
result.MonthFQCquantity=Context.Queryable<QcFinishedproductDefectCollection>().Where(it=>it.CreatedTime>=Monthstart&&it.CreatedTime<=MonthEnd.AddDays(1))
.Where(it=>it.CreatedTime>=Monthstart&&it.CreatedTime<=MonthEnd.AddDays(1))
.Sum(it=>it.Number??0);
return result;
}
public List<DefectBIDto> GetMoudle10()
{
return Context.Queryable<QcDefectCollection>().Where(it => it.DateTime == DateTime.Today.AddDays(-1))
.Where(it=>it.Type==1)
.Where(it => it.Quantity > 0)
.OrderBy(it=>it.LineCode)
.Select(it => new DefectBIDto()
{
LineCode = it.LineCode,
DefectDesciption = it.DefectDescription,
DefectQuantity = it.Quantity
}).ToList();
}
public List<DefectBIDto> GetMoudle11()
{
return Context.Queryable<QcDefectCollection>().Where(it => it.DateTime == DateTime.Today.AddDays(-1))
.Where(it=>it.Type==2)
.Where(it => it.Quantity > 0)
.OrderBy(it=>it.LineCode)
.Select(it => new DefectBIDto()
{
LineCode = it.LineCode,
DefectDesciption = it.DefectDescription,
DefectQuantity = it.Quantity
}).ToList();
}
public List<DefectBIDto> GetMoudle12()
{
return Context.Queryable<QcFinishedproductDefectCollection>()
.LeftJoin<ProWorkorder>((q,p)=>q.Workorder==p.Workorder)
.LeftJoin<QcDefectConfig>((q,p,c)=>q.DefectCode==c.Code)
.Where((q,p,c) => q.CreatedTime <=DateTime.Today&&q.CreatedTime>=DateTime.Today.AddDays(-2))
.Where((q,p,c) => q.Number > 0)
.OrderBy((q,p,c)=>p.LineCode)
.Select((q,p,c) => new DefectBIDto()
{
LineCode = p.LineCode,
DefectDesciption =c.Name,
DefectQuantity = q.Number??0
}).ToList();
}
public EchartsOptions GetMoudle01()
{
var LineEchart = new EchartsOptions();
LineEchart.Title = new EchartsTitle("昨天天IQC缺陷分布占比", "昨天天IQC缺陷分布占比");
// List<EchartsSeries> Series=new List<EchartsSeries>();
EchartsSeries SeriesData = new EchartsSeries();
var EchartsSeriesDataList= Context.Queryable<QcDefectCollection>()
.Where(it=>it.DateTime==DateTime.Today.AddDays(-1))
.Where(it=>it.Type==1)
.GroupBy(it=>it.DefectDescription)
.Select(it => new EchartsSeriesData
{
Name = it.DefectDescription,
Value = SqlFunc.AggregateSum(it.Quantity)
}).ToList();
SeriesData.Type = "pie";
SeriesData.Data = EchartsSeriesDataList;
SeriesData.Name = "缺陷数";
LineEchart.Series= new List<EchartsSeries>(){SeriesData};
return LineEchart;
}
public EchartsOptions GetMoudle02()
{
var LineEchart = new EchartsOptions();
LineEchart.Title = new EchartsTitle("昨天IPQC缺陷分布占比", "昨天IPQC缺陷分布占比");
// List<EchartsSeries> Series=new List<EchartsSeries>();
EchartsSeries SeriesData = new EchartsSeries();
var EchartsSeriesDataList= Context.Queryable<QcDefectCollection>()
.Where(it=>it.DateTime==DateTime.Today.AddDays(-1))
.Where(it=>it.Type==2)
.GroupBy(it=>it.DefectDescription)
.Select(it => new EchartsSeriesData
{
Name = it.DefectDescription,
Value = SqlFunc.AggregateSum(it.Quantity)
}).ToList();
SeriesData.Type = "pie";
SeriesData.Data = EchartsSeriesDataList;
SeriesData.Name = "缺陷数";
LineEchart.Series= new List<EchartsSeries>(){SeriesData};
return LineEchart;
}
public EchartsOptions GetMoudle03()
{
var LineEchart = new EchartsOptions();
LineEchart.Title = new EchartsTitle("昨天FQC缺陷分布占比", "昨天FQC缺陷分布占比");
// List<EchartsSeries> Series=new List<EchartsSeries>();
EchartsSeries SeriesData = new EchartsSeries();
var EchartsSeriesDataList = Context.Queryable<QcFinishedproductDefectCollection>()
.LeftJoin<ProWorkorder>((f, w) => f.Workorder == w.Workorder)
.LeftJoin<QcDefectConfig>((f,w,c) => f.DefectCode == c.Code)
.Where((f,w,c) => w.WorkorderDate == DateTime.Today.AddDays(-1))
.GroupBy((f,w,c) => new { f.DefectCode, c.Name })
.Select((f,w,c) => new EchartsSeriesData()
{
Name = c.Name,
Value = SqlFunc.AggregateSum(f.Number ?? 0)
}).ToList();
SeriesData.Type = "pie";
SeriesData.Data = EchartsSeriesDataList;
SeriesData.Name = "缺陷数";
LineEchart.Series= new List<EchartsSeries>(){SeriesData};
return LineEchart;
}
public EchartsOptions GetMoudle04()
{
var LineEchart = new EchartsOptions();
var Title = new EchartsTitle();
Title.Text = "本月IQC缺陷数量折线图";
Title.SubText = "本月IQC缺陷数量折线图";
LineEchart.Title = Title;
var XAxis = new EchartsXAxis();
// 获取本月第一天
var monthFirst =GetFirstDayOfMonth(DateTime.Today) ;
var monthLast = GetLastDayOfMonth(DateTime.Today);
// 创建一个数组来存储31天的日期
var dates = new DateTime[(monthLast-monthFirst).Days+1];
// 填充数组
int i = 0;
while (monthFirst.AddDays(i)<=monthLast)
{
dates[i] = monthFirst.AddDays(i);
i++;
}
XAxis.Data = dates.Select(it => it.ToString("yyyy-MM-dd")).ToList();
LineEchart.XAxis = XAxis;
var Series = new EchartsSeries();
var SeriesData =Context.Queryable<QcDefectCollection>()
.Where(it=>it.Type==1)
.Where(it=>it.DateTime>monthFirst&&it.DateTime<monthLast.AddDays(1))
.GroupBy(it=>it.DateTime)
.Select(it=> new EchartsSeriesData
{
Name =it.DateTime.Value.ToString("yyyy-MM-dd"),
Value = SqlFunc.AggregateSum(it.Quantity)
}).ToList();
List<EchartsSeriesData> result = new List<EchartsSeriesData>();
foreach (var item in dates)
{
result.Add(new EchartsSeriesData(){
Name=item.ToString("yyyy-MM-dd"),
Value =SeriesData.Where(it=>it.Name==item.ToString("yyyy-MM-dd")).Select(it=>it.Value).FirstOrDefault()
});
}
Series.Data = result;
Series.Type = "line";
Series.Name = "缺陷数";
LineEchart.Series = new List<EchartsSeries>(){Series};
return LineEchart;
}
public EchartsOptions GetMoudle05()
{
var LineEchart = new EchartsOptions();
var Title = new EchartsTitle();
Title.Text = "本月IPQC缺陷数量折线图";
Title.SubText = "本月IPQC缺陷数量折线图";
LineEchart.Title = Title;
var XAxis = new EchartsXAxis();
// 获取本月第一天
var monthFirst =GetFirstDayOfMonth(DateTime.Today) ;
var monthLast = GetLastDayOfMonth(DateTime.Today);
// 创建一个数组来存储31天的日期
var dates = new DateTime[(monthLast-monthFirst).Days+1];
// 填充数组
int i = 0;
while (monthFirst.AddDays(i)<=monthLast)
{
dates[i] = monthFirst.AddDays(i);
i++;
}
XAxis.Data = dates.Select(it => it.ToString("yyyy-MM-dd")).ToList();
LineEchart.XAxis = XAxis;
var Series = new EchartsSeries();
var SeriesData =Context.Queryable<QcDefectCollection>()
.Where(it=>it.Type==2)
.Where(it=>it.DateTime>monthFirst&&it.DateTime<monthLast.AddDays(1))
.GroupBy(it=>it.DateTime)
.Select(it=> new EchartsSeriesData
{
Name =it.DateTime.Value.ToString("yyyy-MM-dd"),
Value = SqlFunc.AggregateSum(it.Quantity)
}).ToList();
List<EchartsSeriesData> result = new List<EchartsSeriesData>();
foreach (var item in dates)
{
result.Add(new EchartsSeriesData(){
Name=item.ToString("yyyy-MM-dd"),
Value =SeriesData.Where(it=>it.Name==item.ToString("yyyy-MM-dd")).Select(it=>it.Value).FirstOrDefault()
});
}
Series.Data = result;
Series.Type = "line";
Series.Name = "缺陷数";
LineEchart.Series = new List<EchartsSeries>(){Series};
return LineEchart;
}
public EchartsOptions GetMoudle06()
{
var LineEchart = new EchartsOptions();
var Title = new EchartsTitle();
Title.Text = "本月FQC缺陷数量柱状图";
Title.SubText = "本月FQC缺陷数量柱状图";
LineEchart.Title = Title;
var XAxis = new EchartsXAxis();
// 获取本月第一天
var monthFirst =GetFirstDayOfMonth(DateTime.Today) ;
var monthLast = GetLastDayOfMonth(DateTime.Today);
// 创建一个数组来存储31天的日期
var dates = new DateTime[(monthLast-monthFirst).Days+1];
// 填充数组
int i = 0;
while (monthFirst.AddDays(i)<=monthLast)
{
dates[i] = monthFirst.AddDays(i);
i++;
}
XAxis.Data = dates.Select(it => it.ToString("yyyy-MM-dd")).ToList();
LineEchart.XAxis = XAxis;
var Series = new EchartsSeries();
var result =Context.Queryable<ProWorkorder>()
.LeftJoin<QcFinishedproductDefectCollection>((p, f) => p.Workorder == f.Workorder)
.LeftJoin<QcDefectConfig>((p, f, d) => f.DefectCode == d.Code)
.Where((p, f, d) => p.WorkorderDate>=monthFirst&&p.WorkorderDate<=monthLast)
.GroupBy((p, f, d) => new { p.WorkorderDate ,f.DefectCode,d.Name})
.Select((p, f, d) => new
{
WorkorderDate=p.WorkorderDate,
DefectCode=f.DefectCode,
Name = d.Name,
Value = SqlFunc.AggregateSum(f.Number ?? 0)
})
.MergeTable()
.Where(it=>it.Value>0)
.ToList();
List<QcDefectConfig> QcDefectConfigList= Context.Queryable<QcDefectConfig>().ToList();
var list = new List<EchartsSeries>();
foreach (var item in QcDefectConfigList)
{
EchartsSeries QcSeries = new EchartsSeries();
QcSeries.Name = item.Name;
List<EchartsSeriesData> Data = result.Where(it => it.DefectCode == item.Code)
.Select(it => new EchartsSeriesData()
{
Name = it.WorkorderDate.Value.ToString("yyyy-MM-dd"),
Value = it.Value
}).ToList();
List<EchartsSeriesData> QcSeriesReuslt = new List<EchartsSeriesData>();
foreach (var item2 in dates)
{
QcSeriesReuslt.Add(new EchartsSeriesData(){
Name=item2.ToString("yyyy-MM-dd"),
Value =Data.Where(it=>it.Name==item2.ToString("yyyy-MM-dd")).Select(it=>it.Value).FirstOrDefault()
});
}
QcSeries.Data = QcSeriesReuslt;
list.Add(QcSeries);
}
LineEchart.Series = list;
return LineEchart;
}
public static DateTime GetWeekStartDayMon(DateTime date)
{
DayOfWeek day = date.DayOfWeek;
if (day == DayOfWeek.Monday)
return date;
else
return date.AddDays(-((int)day + 6) % 7);
}
public static DateTime GetWeekEndDaySun(DateTime date)
{
DayOfWeek day = date.DayOfWeek;
if (day == DayOfWeek.Sunday)
return date;
else
return date.AddDays(6 - ((int)day + 6) % 7);
}
public static DateTime GetFirstDayOfMonth(DateTime date)
{
return new DateTime(date.Year, date.Month, 1);
}
public static DateTime GetLastDayOfMonth(DateTime date)
{
DateTime firstDayNextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1);
return firstDayNextMonth.AddDays(-1);
}
}
}