414 lines
17 KiB
C#
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;
|
|
}
|
|
}
|
|
} |