693 lines
29 KiB
C#
693 lines
29 KiB
C#
using DOAN.Model.MES.base_;
|
||
using DOAN.Model.MES.BI.Dto;
|
||
using DOAN.Model.mes.echarts;
|
||
using DOAN.Model.MES.exception;
|
||
using DOAN.Model.MES.product;
|
||
using DOAN.Service.MES.BI.IService;
|
||
using Infrastructure.Attribute;
|
||
using Mapster;
|
||
using SqlSugar.SplitTableExtensions;
|
||
using DOAN.Model.MES.group;
|
||
using System.Data;
|
||
|
||
namespace DOAN.Service.MES.BI
|
||
{
|
||
/// <summary>
|
||
/// 生产大屏 2
|
||
/// </summary>
|
||
[AppService(ServiceType = typeof(IProduct2BIService), ServiceLifetime = LifeTime.Transient)]
|
||
public class Product2BIService : BaseService<ProWorkorder>, IProduct2BIService
|
||
{
|
||
public ProductBIMoudle02Dto GetMoudle01()
|
||
{
|
||
ProductBIMoudle02Dto productBI = new ProductBIMoudle02Dto();
|
||
|
||
//今日班组
|
||
productBI.TodayGroupQuantity = Context.Queryable<ProWorkorder>()
|
||
.Where(it => it.WorkorderDate == DateTime.Today)
|
||
.GroupBy(it => it.GroupCode).Select(it => it.GroupCode).ToArray().Length;
|
||
|
||
|
||
//今天产线
|
||
productBI.TodayLineQuantity = Context.Queryable<ProWorkorder>()
|
||
.Where(it => it.WorkorderDate == DateTime.Today)
|
||
.GroupBy(it => it.LineCode).Select(it => it.LineCode).ToArray().Length;
|
||
|
||
|
||
//今日计划产量
|
||
productBI.TodayPlanQuantity = Context.Queryable<ProWorkorder>()
|
||
.Where(it => it.WorkorderDate == DateTime.Today)
|
||
.Sum(it => it.DeliveryNum ?? 0);
|
||
|
||
|
||
//今日实际产量
|
||
productBI.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);
|
||
|
||
|
||
//今日产成品种类
|
||
productBI.TodayProductTypeQuantity = Context.Queryable<ProWorkorder>()
|
||
.Where(it => it.WorkorderDate == DateTime.Today)
|
||
.GroupBy(it => it.ProductionCode)
|
||
.Select(it => it.ProductionCode).ToArray().Length;
|
||
|
||
|
||
// 七日变更计划
|
||
productBI.SevenDaysPriorPlanQuantity = Context.Queryable<ProWorkorderUpdateLog>()
|
||
.Where(it => it.ChangeTime <= DateTime.Today && it.ChangeTime >= DateTime.Today.AddDays(-7))
|
||
.Count();
|
||
return productBI;
|
||
}
|
||
|
||
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 GetMoudle09()
|
||
{
|
||
EchartsOptions echartsOptions = new EchartsOptions();
|
||
echartsOptions.Title = new EchartsTitle("昨天各班组计划完成率统计", "昨天各班组计划完成率统计");
|
||
//x轴
|
||
EchartsXAxis XAxis = new EchartsXAxis();
|
||
|
||
|
||
echartsOptions.XAxis = XAxis;
|
||
//值
|
||
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) / SqlFunc.AggregateSum(r.DispatchNum ?? 0)
|
||
}).ToList();
|
||
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
|
||
|
||
insertData2 = Data2.Select(it => new EchartsSeriesData() { Name = it.Name, Value = Math.Round(it.Value, 2) * 100 }).OrderBy(it => it.Value).ToList();
|
||
|
||
|
||
XAxis.Data = insertData2.Select(it => it.Name).ToList();
|
||
Series2.Data = insertData2;
|
||
|
||
Series2.Name = "报工数/计划数(%)";
|
||
Series2.Type = "bar";
|
||
|
||
List<EchartsSeries> Series = new List<EchartsSeries> { Series2 };
|
||
echartsOptions.Series = Series;
|
||
return echartsOptions;
|
||
}
|
||
|
||
public EchartsOptions GetMoudle10()
|
||
{
|
||
// 获取今天的日期
|
||
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();
|
||
|
||
|
||
echartsOptions.XAxis = XAxis;
|
||
//值
|
||
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) / SqlFunc.AggregateSum(r.DispatchNum ?? 0)
|
||
}).ToList();
|
||
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
|
||
|
||
insertData2 = Data2.Select(it => new EchartsSeriesData() { Name = it.Name, Value = Math.Round(it.Value, 2) * 100 }).OrderBy(it => it.Value).ToList();
|
||
XAxis.Data = insertData2.Select(it => it.Name).ToList();
|
||
Series2.Data = insertData2;
|
||
Series2.Name = "报工数/计划数(%)";
|
||
Series2.Type = "bar";
|
||
List<EchartsSeries> Series = new List<EchartsSeries> { Series2 };
|
||
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;
|
||
}
|
||
|
||
//本月 报工不满原因 top10
|
||
public EchartsOptions GetMoudle77()
|
||
{
|
||
// 获取当前日期
|
||
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 = "本月报工未完成原因TOP10";
|
||
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) => wr.UnfinishedReanson)
|
||
.Select((it, wr) => new EchartsSeriesData()
|
||
{
|
||
Name = wr.UnfinishedReanson,
|
||
Value = SqlFunc.AggregateCount(wr.UnfinishedReanson)
|
||
})
|
||
.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;
|
||
}
|
||
|
||
|
||
public List<BaseGroup> GetAllGrouops()
|
||
{
|
||
return Context.Queryable<GroupSchedule>().LeftJoin<BaseGroup>((sc, g) => sc.GroupCode == g.GroupCode)
|
||
.Where((sc, g) => sc.ScheduleDate == DateTime.Today)
|
||
.Select((sc, g) => g)
|
||
.ToList();
|
||
}
|
||
|
||
|
||
public EchartsOptions AccumulateReportWork(string groupCode)
|
||
{
|
||
EchartsOptions echartsOptions = new EchartsOptions();
|
||
|
||
echartsOptions.Title = new EchartsTitle("今日各组实时累计完工数与计划完工数折线图", "获取今日各组实时累计完工数折线图");
|
||
|
||
//横轴 8:00 20:00 每10分钟累加一次
|
||
// 1.获取这个班组工作时间
|
||
GroupShift Shifts = Context.Queryable<GroupSchedule>().LeftJoin<GroupShift>((sc, sh) => sc.FkShift == sh.Id)
|
||
.Where((sc, sh) => sc.ScheduleDate == DateTime.Today&&sc.GroupCode== groupCode).Select((sc, sh) => sh).First();
|
||
if (Shifts == null)
|
||
{
|
||
return null;
|
||
}
|
||
int intervals = (int)Math.Ceiling((Shifts.EndTime - Shifts.StartTime).Value.TotalMinutes / 10);
|
||
intervals++;
|
||
// 获取今天的日期
|
||
DateTime today = DateTime.Today;
|
||
// 定义一个表示8小时的时间间隔
|
||
TimeSpan eightOClock = new TimeSpan(Shifts.StartTime.Value.Hour, Shifts.StartTime.Value.Minute, Shifts.StartTime.Value.Second);
|
||
// 将今天的日期与8点的时间间隔相加
|
||
DateTime todayAtEight = today + eightOClock;
|
||
DateTime[] dateTimeArray = new DateTime[intervals];
|
||
for (int i = 0; i < intervals; i++)
|
||
{
|
||
TimeSpan spanItem = new TimeSpan(0, 10 * i, 0);// 10分钟间隔
|
||
DateTime TodayItem = todayAtEight + spanItem;
|
||
dateTimeArray[i] = TodayItem;
|
||
}
|
||
EchartsXAxis XAxis = new EchartsXAxis();
|
||
XAxis.Data = dateTimeArray.Select(it => it.ToString("HH:mm")).ToList();
|
||
echartsOptions.XAxis = XAxis;
|
||
//2 系列值-这组 今日实时累计完成数(每10分钟)
|
||
EchartsSeries echartsSeries = new EchartsSeries();
|
||
echartsSeries.Name = groupCode + "组今日实时累计完成数(每10分钟)";
|
||
echartsSeries.Type = "line";
|
||
List<EchartsSeriesData> echartsSeriesDatas = new List<EchartsSeriesData>();
|
||
//UNIX_TIMESTAMP(timestamp) 把 timestamp 转换为自 Unix 纪元以来的秒数。
|
||
//FLOOR(... / 600) 将该时间戳除以600(10分钟的秒数),然后向下取整到最接近的整数。
|
||
//*600 再次乘以600,以获得每个10分钟周期开始的时间戳。
|
||
//FROM_UNIXTIME(...) 将处理后的时间戳转换回日期时间格式,以便在结果集中显示。
|
||
|
||
string year = DateTime.Today.Year.ToString("D4");
|
||
string month = DateTime.Today.Month.ToString("D2");
|
||
string day = "01";
|
||
|
||
string sql = "SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( d.created_time ) / 600 ) * 600 ) AS time_period, COUNT(*) AS count FROM " +
|
||
$"pro_workorder AS r RIGHT JOIN pro_reportwork_detail_{year}{month}{day} AS d ON r.workorder = d.workorder " +
|
||
"WHERE r.workorder_date = CURDATE() AND r.group_code= @groupCode " +
|
||
" GROUP BY FLOOR( UNIX_TIMESTAMP( d.created_time ) / 600 ) ORDER BY time_period";
|
||
|
||
|
||
|
||
DataTable result = Context.Ado.GetDataTable(sql, new { groupCode = groupCode, });
|
||
int sum = 0;
|
||
|
||
|
||
foreach (DataRow row in result.Rows)
|
||
{
|
||
// DateTime value =(DateTime)row["time_period"];
|
||
DateTime value = row["time_period"] != DBNull.Value ? Convert.ToDateTime(row["time_period"]) : DateTime.MinValue;
|
||
int count = Convert.ToInt32(row["count"]);
|
||
|
||
sum = sum+ count;
|
||
EchartsSeriesData echartsSeriesData = new EchartsSeriesData()
|
||
{
|
||
Name = value.ToString("HH:mm"),
|
||
Value = sum
|
||
};
|
||
echartsSeriesDatas.Add(echartsSeriesData);
|
||
}
|
||
int currentNum = Array.IndexOf(XAxis.Data.ToArray(), echartsSeriesDatas.Select(it => it.Name).LastOrDefault());
|
||
for (int i=0;i< currentNum ; i++ )
|
||
{
|
||
int point = 0;
|
||
foreach(var item in echartsSeriesDatas)
|
||
{
|
||
|
||
if ( item.Name == XAxis.Data[i])
|
||
{
|
||
continue;
|
||
}
|
||
point++;
|
||
|
||
}
|
||
|
||
if(point== echartsSeriesDatas.Count())
|
||
{
|
||
// 获取前一个时间段产量
|
||
decimal productNum = 0;
|
||
if (i>=1)
|
||
{
|
||
productNum = echartsSeriesDatas.Where(it => it.Name == XAxis.Data[i - 1]).Select(it => it.Value).FirstOrDefault();
|
||
}
|
||
else
|
||
{
|
||
productNum = 0;
|
||
}
|
||
|
||
|
||
echartsSeriesDatas.Add(new EchartsSeriesData() { Name= XAxis.Data[i] ,Value= productNum });
|
||
}
|
||
}
|
||
echartsSeries.Data = echartsSeriesDatas.OrderBy(it=>it.Name).ToList();
|
||
echartsOptions.Series.Add(echartsSeries);
|
||
|
||
//3 系列值-这组 今日计划累计完成数(每10分钟)
|
||
//获取今天这个组的所有工单
|
||
List<ProWorkorder> ProWorkorderList = Context.Queryable<ProWorkorder>().Where(it => it.GroupCode == groupCode && it.WorkorderDate == DateTime.Today).ToList();
|
||
|
||
//求出总产量需要多少s
|
||
int allSecends = 0;
|
||
foreach (var item in ProWorkorderList)
|
||
{
|
||
int num = (item.DeliveryNum ?? 0) * (item.Beat ?? 0);
|
||
allSecends = num + allSecends;
|
||
}
|
||
|
||
// 将节拍转为每10分钟产量
|
||
int allproduct = ProWorkorderList.Sum(it => it.DeliveryNum ?? 0);
|
||
int productOfeachTenMin = allproduct / (allSecends / (10 * 60));
|
||
|
||
EchartsSeries echartsSeries02 = new EchartsSeries();
|
||
echartsSeries02.Name = groupCode + "组今日计划累计完成数(每10分钟)";
|
||
echartsSeries02.Type = "line";
|
||
List<EchartsSeriesData> echartsSeriesData02s = new List<EchartsSeriesData>();
|
||
int all_plan_product = 0;
|
||
for (int i = 0; i < dateTimeArray.Length; i++)
|
||
{
|
||
|
||
EchartsSeriesData echartsSeriesData = new EchartsSeriesData();
|
||
echartsSeriesData.Name = dateTimeArray[i].ToString("HH:mm");
|
||
echartsSeriesData.Value = all_plan_product;
|
||
echartsSeriesData02s.Add(echartsSeriesData);
|
||
all_plan_product = all_plan_product + productOfeachTenMin;
|
||
}
|
||
echartsSeries02.Data = echartsSeriesData02s;
|
||
echartsOptions.Series.Add(echartsSeries02);
|
||
|
||
return echartsOptions;
|
||
}
|
||
}
|
||
} |