zhuangpei-mesbackend/DOAN.Service/MES/bigScreen/ProductBigScreenService.cs
2024-11-11 14:13:55 +08:00

257 lines
8.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}