zhuangpei-mesbackend/DOAN.Service/MES/bigScreen/Product2BigScreenService.cs
2024-11-19 17:15:34 +08:00

414 lines
17 KiB
C#

using DOAN.Model.MES.base_;
using DOAN.Model.MES.bigscreen.Dto;
using DOAN.Model.mes.echarts;
using DOAN.Model.MES.exception;
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)
.LeftJoin<BaseGroup>((w, r, g)=>w.GroupCode==g.GroupCode)
.Where((w, r,g) => w.WorkorderDate == DateTime.Today&&g.Status==1)
.GroupBy((w, r,g) => w.GroupCode)
.OrderBy((w,r,g)=>g.Id)
.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>().Where(it=>it.Status==1).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>().Where(it=>it.Status==1).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&&it.ChangeTime<=DateTime.Today.AddDays(1))
.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 = "pie";
//达成
int Reached = Context.Queryable<ProReportwork>()
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth.AddDays(1))
.Where(it => it.DispatchNum <= it.FinishedNum).Count();
//不达成
int UnReached = Context.Queryable<ProReportwork>()
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth.AddDays(1))
.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;
}
//本月 生产产品 top10
public EchartsOptions GetMoudle07()
{
// 获取当前日期
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("本月生产产品TOP10", "本月生产产品TOP10");
echartsOptions.Title = Title;
EchartsSeries LineSeries = new EchartsSeries();
LineSeries.Name = "不同产品的本月生产的数量";
LineSeries.Type = "bar";
LineSeries.Data = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((it, wr) => it.Workorder == wr.FkWorkorder)
.Where((it, wr) => it.WorkorderDate >= firstDayOfMonth && it.WorkorderDate <= lastDayOfMonth.AddDays(1))
.GroupBy((it, wr) => it.ProductionCode)
.Select((it, wr) => new EchartsSeriesData()
{
Name = it.ProductionCode,
Value = SqlFunc.AggregateSum(wr.FinishedNum ?? 0)
})
.MergeTable()
.OrderByDescending(it => it.Value)
.Take(10).ToList();
;
echartsOptions.Series = new List<EchartsSeries>() { LineSeries };
EchartsYAxis YAxis = new EchartsYAxis();
YAxis.Data = LineSeries.Data.Select(it => it.Name).ToList();
echartsOptions.YAxis = YAxis;
return echartsOptions;
}
public EchartsOptions GetMoudle08()
{
// 获取当前日期
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;
// 横坐标
EchartsXAxis xAxis = new EchartsXAxis();
List<string> xData = new List<string>();
DateTime index = firstDayOfMonth;
do
{
xData.Add(index.ToString("yyyy-MM-dd"));
index = index.AddDays(1);
} while (index < lastDayOfMonth.AddDays(1));
xAxis.Data = xData;
echartsOptions.XAxis = xAxis;
//折线系列
EchartsSeries LineSeries = new EchartsSeries();
LineSeries.Name = "本月每天产量";
LineSeries.Type = "line";
var result = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
.Where((w, r) => w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth)
.GroupBy((w, r) => w.WorkorderDate)
.Select((w, r) => new EchartsSeriesData()
{
Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"),
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
}).ToList();
List<EchartsSeriesData> LineSeriesData = new List<EchartsSeriesData>();
foreach (var item in xData)
{
LineSeriesData.Add(new EchartsSeriesData()
{
Name = item,
Value = result.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault(),
});
}
LineSeries.Data = LineSeriesData;
echartsOptions.Series = new List<EchartsSeries>() { LineSeries };
// 各个组的产量系列
string[] groupArray = Context.Queryable<BaseGroup>().Where(it=>it.Status==1).OrderBy(it => it.Id).Select(it => it.GroupCode)
.ToArray();
if (groupArray.Length > 0)
{
var GroupresultList = Context.Queryable<ProWorkorder>()
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
.Where((w, r) => groupArray.Contains(w.GroupCode))
.Where((w, r) => w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth)
.GroupBy((w, r) => new { w.GroupCode, w.WorkorderDate })
.Select((w, r) => new
{
groupCode = w.GroupCode,
Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"),
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
}).ToList();
foreach (var group in groupArray)
{
EchartsSeries groupSeries = new EchartsSeries();
groupSeries.Name = group + "组";
groupSeries.Type = "bar";
List<EchartsSeriesData> LineSeriesData01 = new List<EchartsSeriesData>();
foreach (var item in xData)
{
LineSeriesData01.Add(new EchartsSeriesData()
{
Name = item,
Value = GroupresultList.Where(it => it.Name == item).Where(it=>it.groupCode==group).Select(it => it.Value).FirstOrDefault(),
});
}
groupSeries.Data = LineSeriesData01;
echartsOptions.Series.Add(groupSeries);
}
}
return echartsOptions;
}
}
}