using System.Linq; using Infrastructure.Attribute; using DOAN.Model.MES.base_; using DOAN.Model.MES.bigscreen.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.bigScreen.IService; namespace DOAN.Service.MES.bigScreen { /// /// 质量大屏 /// [AppService(ServiceType = typeof(IQualityBigScreenService), ServiceLifetime = LifeTime.Transient)] public class QualityBigScreenService : BaseService, IQualityBigScreenService { public QualityBigScreenDto GetMoudle00() { //本周第一天 到最后一天 DateTime Weekstart = GetWeekStartDayMon(DateTime.Now); DateTime Weekend = GetWeekEndDaySun(DateTime.Now); //本月第一天 到最后一天 DateTime Monthstart = GetFirstDayOfMonth(DateTime.Now); DateTime MonthEnd = GetLastDayOfMonth(DateTime.Now); QualityBigScreenDto result = new QualityBigScreenDto(); result.WeekIQCquantity=Context.Queryable().Where(it=>it.Type==1) .Where(it=>it.DateTime>=Weekstart&&it.DateTime<=Weekend.AddDays(1)) .Sum(it=>it.Quantity); result.MonthIQCquantity=Context.Queryable().Where(it=>it.Type==1) .Where(it=>it.DateTime>=Monthstart&&it.DateTime<=MonthEnd.AddDays(1)) .Sum(it=>it.Quantity); result.WeekIPQCquantity=Context.Queryable().Where(it=>it.Type==2) .Where(it=>it.DateTime>=Weekstart&&it.DateTime<=Weekend.AddDays(1)) .Sum(it=>it.Quantity); result.MonthIPQCquantity=Context.Queryable().Where(it=>it.Type==2) .Where(it=>it.DateTime>=Monthstart&&it.DateTime<=MonthEnd.AddDays(1)) .Sum(it=>it.Quantity); result.WeekFQCquantity=Context.Queryable().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().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 GetMoudle10() { return Context.Queryable().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 DefectBigScreenDto() { LineCode = it.LineCode, DefectDesciption = it.DefectDescription, DefectQuantity = it.Quantity }).ToList(); } public List GetMoudle11() { return Context.Queryable().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 DefectBigScreenDto() { LineCode = it.LineCode, DefectDesciption = it.DefectDescription, DefectQuantity = it.Quantity }).ToList(); } public List GetMoudle12() { return Context.Queryable() .LeftJoin((q,p)=>q.Workorder==p.Workorder) .LeftJoin((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 DefectBigScreenDto() { 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 Series=new List(); EchartsSeries SeriesData = new EchartsSeries(); var EchartsSeriesDataList= Context.Queryable() .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(){SeriesData}; return LineEchart; } public EchartsOptions GetMoudle02() { var LineEchart = new EchartsOptions(); LineEchart.Title = new EchartsTitle("昨天IPQC缺陷分布占比", "昨天IPQC缺陷分布占比"); // List Series=new List(); EchartsSeries SeriesData = new EchartsSeries(); var EchartsSeriesDataList= Context.Queryable() .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(){SeriesData}; return LineEchart; } public EchartsOptions GetMoudle03() { var LineEchart = new EchartsOptions(); LineEchart.Title = new EchartsTitle("昨天FQC缺陷分布占比", "昨天FQC缺陷分布占比"); // List Series=new List(); EchartsSeries SeriesData = new EchartsSeries(); var EchartsSeriesDataList = Context.Queryable() .LeftJoin((f, w) => f.Workorder == w.Workorder) .LeftJoin((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(){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() .Where(it=>it.Type==1) .Where(it=>it.DateTime>monthFirst&&it.DateTimeit.DateTime) .Select(it=> new EchartsSeriesData { Name =it.DateTime.Value.ToString("yyyy-MM-dd"), Value = SqlFunc.AggregateSum(it.Quantity) }).ToList(); List result = new List(); 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(){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() .Where(it=>it.Type==2) .Where(it=>it.DateTime>monthFirst&&it.DateTimeit.DateTime) .Select(it=> new EchartsSeriesData { Name =it.DateTime.Value.ToString("yyyy-MM-dd"), Value = SqlFunc.AggregateSum(it.Quantity) }).ToList(); List result = new List(); 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(){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() .LeftJoin((p, f) => p.Workorder == f.Workorder) .LeftJoin((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 QcDefectConfigList= Context.Queryable().ToList(); var list = new List(); foreach (var item in QcDefectConfigList) { EchartsSeries QcSeries = new EchartsSeries(); QcSeries.Name = item.Name; List 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 QcSeriesReuslt = new List(); 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); } } }