257 lines
8.3 KiB
C#
257 lines
8.3 KiB
C#
using DOAN.Model.MES.bigscreen.Dto;
|
||
using DOAN.Model.MES.dev;
|
||
using DOAN.Model.mes.echarts;
|
||
using DOAN.Model.MES.product;
|
||
using DOAN.Service.MES.bigScreen.IService;
|
||
using Infrastructure;
|
||
using Infrastructure.Attribute;
|
||
using Mapster;
|
||
|
||
namespace DOAN.Service.MES.bigScreen;
|
||
|
||
/// <summary>
|
||
/// 生产大屏
|
||
/// </summary>
|
||
[AppService(ServiceType = typeof(IProductBigScreenService), ServiceLifetime = LifeTime.Transient)]
|
||
public class ProductBigScreenService : BaseService<ProWorkorder>, IProductBigScreenService
|
||
{
|
||
private IProductBigScreenService _productBigScreenServiceImplementation;
|
||
|
||
/// <summary>
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public ProductBigScreenMoudle01Dto GetMoudle01()
|
||
{
|
||
var now = DateTime.Now.ToLocalTime().Date;
|
||
var startOfWeek = GetStartOfWeek(now);
|
||
var endOfWeek = startOfWeek.AddDays(6);
|
||
var moudle01 = new ProductBigScreenMoudle01Dto();
|
||
|
||
moudle01.TodayOutputQuantity = Context.Queryable<ProWorkorder>().LeftJoin<ProReportwork>((w, r) =>
|
||
w.Workorder == r.FkWorkorder && w.WorkorderDate == now)
|
||
.Sum((w, r) => r.FinishedNum ?? 0);
|
||
|
||
moudle01.TodayWorkOrderQuantity =
|
||
Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == now).Count();
|
||
|
||
|
||
moudle01.WeekWorkOrderQuantity = Context.Queryable<ProWorkorder>()
|
||
.Where(it => it.WorkorderDate >= startOfWeek && it.WorkorderDate <= endOfWeek)
|
||
.Count();
|
||
|
||
|
||
moudle01.WeekOutputQuantity = Context.Queryable<ProWorkorder>().LeftJoin<ProReportwork>((w, r) =>
|
||
w.Workorder == r.FkWorkorder && w.WorkorderDate >= startOfWeek && w.WorkorderDate <= endOfWeek)
|
||
.Sum((w, r) => r.FinishedNum ?? 0);
|
||
|
||
moudle01.TodayExceptionWorkOrderQuantity = Context.Queryable<ProWorkorderUpdateLog>()
|
||
.Where(it => it.ChangeTime > now && it.ChangeTime < now.AddDays(1)).Count();
|
||
moudle01.WeekExceptionWorkOrderQuantity = Context.Queryable<ProWorkorderUpdateLog>()
|
||
.Where(it => it.ChangeTime > now && it.ChangeTime < now.AddDays(1)).Count();
|
||
|
||
|
||
return moudle01;
|
||
}
|
||
|
||
|
||
public EchartsOptions GetMoudle02()
|
||
{
|
||
var LineEchart = new EchartsOptions();
|
||
|
||
|
||
var Title = new EchartsTitle();
|
||
Title.Text = "7日产量趋势图";
|
||
Title.SubText = "7日产量趋势图";
|
||
LineEchart.Title = Title;
|
||
|
||
var XAxis = new EchartsXAxis();
|
||
|
||
// 获取今天的日期
|
||
var today = DateTime.Today;
|
||
|
||
// 创建一个数组来存储七天的日期
|
||
var dates = new DateTime[7];
|
||
|
||
// 填充数组
|
||
for (var i = 0; i < 7; i++) dates[i] = today.AddDays(-i);
|
||
|
||
// 反转数组,使得日期从最早的开始
|
||
Array.Reverse(dates);
|
||
XAxis.Data = dates.Select(it => it.ToString("yyyy-MM-dd")).ToList();
|
||
LineEchart.XAxis = XAxis;
|
||
|
||
|
||
var Series = new EchartsSeries();
|
||
|
||
|
||
var SeriesData = Context.Queryable<ProWorkorder>()
|
||
.LeftJoin<ProReportwork>((w, r) =>
|
||
w.Workorder == r.FkWorkorder && w.WorkorderDate > today.AddDays(1) && w.WorkorderDate < today.AddDays(-6))
|
||
.Select((w, r) => new EchartsSeriesData
|
||
{
|
||
Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"),
|
||
Value = r.FinishedNum ?? 0
|
||
}).ToList();
|
||
|
||
|
||
Series.Data = SeriesData;
|
||
Series.Type = "line";
|
||
|
||
LineEchart.Series = new List<EchartsSeries>(){Series};
|
||
|
||
return LineEchart;
|
||
}
|
||
|
||
|
||
public EchartsOptions GetMoudle03()
|
||
{
|
||
var LineEchart = new EchartsOptions();
|
||
|
||
|
||
var Title = new EchartsTitle();
|
||
Title.Text = "7日工单趋势图";
|
||
Title.SubText = "7日工单趋势图";
|
||
LineEchart.Title = Title;
|
||
|
||
var XAxis = new EchartsXAxis();
|
||
|
||
// 获取今天的日期
|
||
var today = DateTime.Today;
|
||
|
||
// 创建一个数组来存储七天的日期
|
||
var dates = new DateTime[7];
|
||
|
||
// 填充数组
|
||
for (var i = 0; i < 7; i++) dates[i] = today.AddDays(-i);
|
||
|
||
// 反转数组,使得日期从最早的开始
|
||
Array.Reverse(dates);
|
||
XAxis.Data = dates.Select(it => it.ToString("yyyy-MM-dd")).ToList();
|
||
LineEchart.XAxis = XAxis;
|
||
|
||
|
||
var Series = new EchartsSeries();
|
||
|
||
|
||
var SeriesData = Context.Queryable<ProWorkorder>()
|
||
.Where(w=>w.WorkorderDate > today && w.WorkorderDate < today.AddDays(-7))
|
||
.Select(w => new EchartsSeriesData
|
||
{
|
||
Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"),
|
||
Value = w.DeliveryNum ?? 0
|
||
}).ToList();
|
||
|
||
|
||
Series.Data = SeriesData;
|
||
|
||
LineEchart.Series = new List<EchartsSeries>(){Series};
|
||
|
||
return LineEchart;
|
||
}
|
||
|
||
public EchartsOptions GetMoudle04()
|
||
{
|
||
var LineEchart = new EchartsOptions();
|
||
|
||
LineEchart.Title = new EchartsTitle("今日超时工单占比", "今日超时工单占比");
|
||
|
||
// List<EchartsSeries> Series=new List<EchartsSeries>();
|
||
EchartsSeries SeriesData = new EchartsSeries();
|
||
|
||
|
||
int OverTimeWorkorder= Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
|
||
.Where(it => it.Status == 3)
|
||
.Where(it => (it.EndTime.Value - it.StartTime.Value).TotalSeconds > (it.Beat ?? 1 * it.DeliveryNum ?? 1))
|
||
.Count();
|
||
|
||
EchartsSeriesData Series = new EchartsSeriesData();
|
||
Series.Name = "超时工单数";
|
||
Series.Value = OverTimeWorkorder;
|
||
|
||
int StandrandWorkorder= Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
|
||
.Where(it => it.Status == 3)
|
||
.Where(it => (it.EndTime.Value - it.StartTime.Value).TotalSeconds <= (it.Beat ?? 1 * it.DeliveryNum ?? 1))
|
||
.Count();
|
||
EchartsSeriesData Series2 = new EchartsSeriesData();
|
||
Series2.Name = "不超时工单数";
|
||
Series2.Value = StandrandWorkorder;
|
||
|
||
SeriesData.Data = new List<EchartsSeriesData>() { Series, Series2 };
|
||
SeriesData.Type = "pie";
|
||
LineEchart.Series= new List<EchartsSeries>(){SeriesData};
|
||
|
||
|
||
|
||
return LineEchart;
|
||
|
||
}
|
||
|
||
|
||
public EchartsOptions GetMoudle05()
|
||
{
|
||
var LineEchart = new EchartsOptions();
|
||
|
||
LineEchart.Title = new EchartsTitle("前七日工单异常分布占比", "前七日工单异常分布占比");
|
||
|
||
// List<EchartsSeries> Series=new List<EchartsSeries>();
|
||
EchartsSeries SeriesData = new EchartsSeries();
|
||
|
||
var EchartsSeriesDataList= Context.Queryable<ProWorkorder>().LeftJoin<ProWorkorderUpdateLog>((w, l) =>
|
||
w.Workorder == l.Workorder && w.WorkorderDate < DateTime.Today.AddDays(1) &&
|
||
w.WorkorderDate < DateTime.Today.AddDays(-6))
|
||
.GroupBy((w, r) => r.Log)
|
||
.Select((w, r) => new EchartsSeriesData
|
||
{
|
||
Name = r.Log,
|
||
Value = SqlFunc.AggregateCount(r)
|
||
|
||
}).ToList();
|
||
|
||
|
||
|
||
|
||
|
||
|
||
SeriesData.Type = "pie";
|
||
SeriesData.Data = EchartsSeriesDataList;
|
||
LineEchart.Series= new List<EchartsSeries>(){SeriesData};
|
||
|
||
|
||
|
||
return LineEchart;
|
||
|
||
|
||
}
|
||
|
||
|
||
public List<WorkOrderBigScreenDto> GetMoudle06()
|
||
{
|
||
|
||
return Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
|
||
.ToList().Adapt<List<WorkOrderBigScreenDto>>();
|
||
}
|
||
|
||
public List<ProWorkorderUpdateLog> GetMoudle07()
|
||
{
|
||
return Context.Queryable<ProWorkorder>()
|
||
.LeftJoin<ProWorkorderUpdateLog>((w, l) => w.Workorder == l.Workorder && w.WorkorderDate == DateTime.Today)
|
||
.Select((w, l) => l)
|
||
.ToList();
|
||
}
|
||
|
||
public List<WorkOrderBigScreenDto> GetMoudle08()
|
||
{
|
||
|
||
return Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today.AddDays(1))
|
||
.ToList().Adapt<List<WorkOrderBigScreenDto>>();
|
||
}
|
||
|
||
|
||
private static DateTime GetStartOfWeek(DateTime dt)
|
||
{
|
||
// 获取本周周一的日期时间,时间为00:00:00
|
||
var daysOffset = dt.DayOfWeek - DayOfWeek.Monday;
|
||
if (daysOffset < 0) daysOffset += 7; // 如果今天是周日,那么偏移量应该是6而不是-1
|
||
return dt.AddDays(-daysOffset).Date;
|
||
}
|
||
} |