zhuangpei-mesbackend/DOAN.Service/MES/bigScreen/Product2BigScreenService.cs
qianhao.xu 6646ae1a28 达成
2024-11-18 18:01:12 +08:00

287 lines
11 KiB
C#

using DOAN.Model.MES.base_;
using DOAN.Model.MES.bigscreen.Dto;
using DOAN.Model.mes.echarts;
using DOAN.Model.MES.product;
using DOAN.Service.MES.bigScreen.IService;
using Infrastructure.Attribute;
using Mapster;
using SqlSugar.SplitTableExtensions;
namespace DOAN.Service.MES.bigScreen
{
/// <summary>
/// 生产大屏 2
/// </summary>
[AppService(ServiceType = typeof(IProduct2BigScreenService), ServiceLifetime = LifeTime.Transient)]
public class Product2BigScreenService : BaseService<ProWorkorder>, IProduct2BigScreenService
{
public ProductBigScreenMoudle02Dto GetMoudle01()
{
ProductBigScreenMoudle02Dto productBigScreen = new ProductBigScreenMoudle02Dto();
//今日班组
productBigScreen.TodayGroupQuantity = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.GroupBy(it => it.GroupCode).Select(it => it.GroupCode).ToArray().Length;
//今天产线
productBigScreen.TodayLineQuantity = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.GroupBy(it => it.LineCode).Select(it => it.LineCode).ToArray().Length;
//今日计划产量
productBigScreen.TodayPlanQuantity = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.Sum(it => it.DeliveryNum ?? 0);
//今日实际产量
productBigScreen.TodayActionProductionQuantity = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((p, r) => p.Workorder == r.FkWorkorder)
.Where((p, r) => p.WorkorderDate == DateTime.Today)
.Sum((p, r) => r.FinishedNum ?? 0);
//今日产成品种类
productBigScreen.TodayProductTypeQuantity = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.GroupBy(it => it.ProductionCode)
.Select(it => it.ProductionCode).ToArray().Length;
// 七日变更计划
productBigScreen.SevenDaysPriorPlanQuantity = Context.Queryable<ProWorkorderUpdateLog>()
.Where(it => it.ChangeTime <= DateTime.Today && it.ChangeTime >= DateTime.Today.AddDays(-7))
.Count();
return productBigScreen;
}
public List<TodayGroupProductionProgress> GetMoudle02()
{
return Context.Queryable<ProWorkorder>().LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
.Where((w, r) => w.WorkorderDate == DateTime.Today)
.GroupBy((w, r) => w.GroupCode)
.Select((w, r) => new TodayGroupProductionProgress()
{
GroupCode = w.GroupCode,
PlanQuantity = SqlFunc.AggregateSum(w.DeliveryNum ?? 0),
ReportQuantity = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
}).ToList();
}
public EchartsOptions GetMoudle03()
{
EchartsOptions echartsOptions = new EchartsOptions();
echartsOptions.Title = new EchartsTitle("昨天各组报工数和计划数直方图", "昨天各组报工数和计划数直方图");
//x轴
EchartsXAxis XAxis = new EchartsXAxis();
List<string> Data = Context.Queryable<BaseGroup>().OrderBy(it => it.Id).Select(it => it.GroupCode).ToList();
XAxis.Data = Data;
echartsOptions.XAxis = XAxis;
//值
EchartsSeries Series1 = new EchartsSeries();
List<EchartsSeriesData> Data1 = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today.AddDays(-1))
.GroupBy(it => it.GroupCode)
.Select(it => new EchartsSeriesData()
{
Name = it.GroupCode,
Value = SqlFunc.AggregateSum(it.DeliveryNum ?? 0)
}).ToList();
List<EchartsSeriesData> insertData = new List<EchartsSeriesData>();
foreach (var item in Data)
{
insertData.Add(new EchartsSeriesData()
{
Name = item, Value = Data1.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
});
}
Series1.Data = insertData;
Series1.Name = "计划数";
EchartsSeries Series2 = new EchartsSeries();
List<EchartsSeriesData> Data2 = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
.Where((w, r) => w.WorkorderDate == DateTime.Today.AddDays(-1))
.GroupBy((w, r) => w.GroupCode)
.Select((w, r) => new EchartsSeriesData()
{
Name = w.GroupCode,
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
}).ToList();
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
foreach (var item in Data)
{
insertData2.Add(new EchartsSeriesData()
{
Name = item, Value = Data2.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
});
}
Series2.Data = insertData2;
Series2.Name = "报工数";
List<EchartsSeries> Series = new List<EchartsSeries> { Series2, Series1 };
echartsOptions.Series = Series;
return echartsOptions;
}
public EchartsOptions GetMoudle04()
{
// 获取今天的日期
DateTime today = DateTime.Today;
// 计算上周一的日期
DateTime lastMonday = today.AddDays(-(int)today.DayOfWeek - 6);
// 计算上周日的日期
DateTime lastSunday = lastMonday.AddDays(6);
EchartsOptions echartsOptions = new EchartsOptions();
echartsOptions.Title = new EchartsTitle("上周各组报工数和计划数直方图", "上周各组报工数和计划数直方图");
//x轴
EchartsXAxis XAxis = new EchartsXAxis();
List<string> Data = Context.Queryable<BaseGroup>().OrderBy(it => it.Id).Select(it => it.GroupCode).ToList();
XAxis.Data = Data;
echartsOptions.XAxis = XAxis;
//值
EchartsSeries Series1 = new EchartsSeries();
List<EchartsSeriesData> Data1 = Context.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate >= lastMonday && it.WorkorderDate <= lastSunday)
.GroupBy(it => it.GroupCode)
.Select(it => new EchartsSeriesData()
{
Name = it.GroupCode,
Value = SqlFunc.AggregateSum(it.DeliveryNum ?? 0)
}).ToList();
List<EchartsSeriesData> insertData = new List<EchartsSeriesData>();
foreach (var item in Data)
{
insertData.Add(new EchartsSeriesData()
{
Name = item, Value = Data1.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
});
}
Series1.Data = insertData;
Series1.Name = "计划数";
EchartsSeries Series2 = new EchartsSeries();
List<EchartsSeriesData> Data2 = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
.Where((w, r) => w.WorkorderDate >= lastMonday && w.WorkorderDate <= lastSunday)
.GroupBy((w, r) => w.GroupCode)
.Select((w, r) => new EchartsSeriesData()
{
Name = w.GroupCode,
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
}).ToList();
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
foreach (var item in Data)
{
insertData2.Add(new EchartsSeriesData()
{
Name = item, Value = Data2.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
});
}
Series2.Data = insertData2;
Series2.Name = "报工数";
List<EchartsSeries> Series = new List<EchartsSeries> { Series2, Series1 };
echartsOptions.Series = Series;
return echartsOptions;
}
public List<TodayExceptionWorkOrder> GetMoudle05()
{
return Context.Queryable<ProWorkorderUpdateLog>().Where(it => it.ChangeTime == DateTime.Today)
.Select(it => new TodayExceptionWorkOrder()
{
workorder = it.Workorder,
description = it.Log
}).ToList();
}
/// <summary>
/// 本月工单达成率
/// </summary>
/// <returns></returns>
public EchartsOptions GetMoudle06()
{
// 获取当前日期
DateTime today = DateTime.Today;
// 获取当前月的第一天
DateTime firstDayOfMonth = new DateTime(today.Year, today.Month, 1);
// 获取当前月的最后一天
DateTime lastDayOfMonth = new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month));
EchartsOptions echartsOptions = new EchartsOptions();
EchartsTitle Title=new EchartsTitle("本月工单达成率","本月工单达成率");
echartsOptions.Title = Title;
EchartsSeries pieSeries = new EchartsSeries();
pieSeries.Name = "本月工单达成率";
pieSeries.Type = "bar";
//达成
int Reached= Context.Queryable<ProReportwork>()
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth)
.Where(it => it.DispatchNum <= it.FinishedNum).Count();
//不达成
int UnReached= Context.Queryable<ProReportwork>()
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth)
.Where(it => it.DispatchNum > it.FinishedNum).Count();
List<EchartsSeriesData> Data = new List<EchartsSeriesData>()
{
new EchartsSeriesData() { Name = "达成", Value = Reached },
new EchartsSeriesData() { Name = "不达成", Value = UnReached },
};
pieSeries.Data=Data;
echartsOptions.Series = new List<EchartsSeries>() { pieSeries };
return echartsOptions;
}
public EchartsOptions GetMoudle07()
{
return null;
}
public EchartsOptions GetMoudle08()
{
return null;
}
public EchartsOptions GetMoudle09()
{
return null;
}
public EchartsOptions GetMoudle10()
{
return null;
}
}
}