437 lines
16 KiB
C#
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|