322 lines
14 KiB
C#
322 lines
14 KiB
C#
using DOAN.Model.MES.product;
|
|
using DOAN.Service.MES.product.IService;
|
|
using Infrastructure.Attribute;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using DOAN.Service.MES.SmartScreen.Product.IService;
|
|
using DOAN.Model.MES.SmartScreen.Product;
|
|
using DOAN.Model.MES.SmartScreen;
|
|
using Microsoft.Data.SqlClient;
|
|
using DOAN.Model.MES.base_;
|
|
using MathNet.Numerics;
|
|
|
|
namespace DOAN.Service.MES.SmartScreen.Product
|
|
{
|
|
/// <summary>
|
|
/// 生产智慧屏
|
|
/// </summary>
|
|
[AppService(ServiceType = typeof(IProductSmartScreenService), ServiceLifetime = LifeTime.Transient)]
|
|
public class ProductSmartScreenService : BaseService<ProWorkorder>, IProductSmartScreenService
|
|
{
|
|
/// <summary>
|
|
/// 数字翻牌器
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public DigitalTurntableModel DigitalTurntable()
|
|
{
|
|
DigitalTurntableModel digital=new DigitalTurntableModel();
|
|
digital.WorkorderQuantity = Context.Queryable<ProWorkorder>().Where(it=>it.WorkorderDate==DateTime.Today).Count();
|
|
|
|
digital.FinishedWorkorderQuantity=Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
|
|
.Where(it=>it.Status==2)
|
|
.Count();
|
|
|
|
digital.UnFinishedWorkorderQuantity = Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
|
|
.Where(it => it.Status <2)
|
|
.Count();
|
|
|
|
digital.ProductionPlanQuantity = Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today).Sum(it=>it.PlanNum??0);
|
|
|
|
|
|
digital.ProductionFinishQuantity = Context.Queryable<ProReportwork01>().Where(it => it.JobDateTime >= DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1))
|
|
.Where(it => it.ProcessId == 90).Sum(it => it.FinishNum??0);
|
|
|
|
|
|
digital.GroupQuantity=Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today).GroupBy(it=>it.GroupCode).Count();
|
|
|
|
|
|
return digital;
|
|
}
|
|
|
|
|
|
public EchartsOptions BarProcessProductStatistic()
|
|
{
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
echartsOptions.Title = new EchartsTitle("今日各工序产量统计", "今日各工序产量统计");
|
|
EchartsXAxis xAxis = new EchartsXAxis();
|
|
|
|
xAxis.Data = Context.Queryable<BaseRelWorkRouteProcesses>().LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
|
|
.Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32)
|
|
.OrderBy((r, p) => p.Id)
|
|
.Select((r, p) => p.Name)
|
|
.ToList();
|
|
echartsOptions.XAxis=xAxis;
|
|
//获取各个工序今日累计报工值
|
|
EchartsSeries echartsSeries = new EchartsSeries();
|
|
echartsSeries.Name = "今日各个工序累计报工数";
|
|
List<EchartsSeriesData> Data = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it,w)=>it.ProcessId==w.Id)
|
|
.Where((it, w) =>w.Status==1&& it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1))
|
|
.GroupBy((it, w) => new {it.ProcessId,w.Name})
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value=SqlFunc.AggregateSum(it.FinishNum??0)
|
|
}).ToList();
|
|
echartsSeries.Data = Data;
|
|
echartsOptions.Series.Add(echartsSeries);
|
|
//获取各个工序今日累计计划值
|
|
EchartsSeries echartsSeries2 = new EchartsSeries();
|
|
echartsSeries2.Name = "今日各个工序累计计划数";
|
|
List<EchartsSeriesData> Data2 = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
|
|
.Where((it, w) => w.Status == 1 && it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1))
|
|
.GroupBy((it, w) => new { it.ProcessId, w.Name })
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0)
|
|
}).ToList();
|
|
echartsSeries2.Data = Data2;
|
|
echartsOptions.Series.Add(echartsSeries2);
|
|
|
|
|
|
|
|
return echartsOptions;
|
|
}
|
|
public EchartsOptions BarProcessProductStatisticWeek()
|
|
{
|
|
// 获取当前时间
|
|
DateTime now = DateTime.Now;
|
|
|
|
// 计算到本周一需要减去的天数
|
|
int daysToSubtract = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7;
|
|
|
|
// 获取本周一的日期
|
|
DateTime mondayMorning = now.AddDays(-daysToSubtract).Date; // .Date将时间设置为00:00:00
|
|
|
|
// 获取本周日午夜(实际上是下周一开始时间)
|
|
DateTime sundayMidnight = mondayMorning.AddDays(7);
|
|
|
|
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
echartsOptions.Title = new EchartsTitle("本周各工序产量统计", "本周各工序产量统计");
|
|
EchartsXAxis xAxis = new EchartsXAxis();
|
|
|
|
xAxis.Data = Context.Queryable<BaseRelWorkRouteProcesses>().LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
|
|
.Where((r, p) => r.FkWorkRoute == 32)
|
|
.OrderBy((r, p) => p.Id)
|
|
.Select((r, p) => p.Name)
|
|
.ToList();
|
|
echartsOptions.XAxis = xAxis;
|
|
//获取各个工序今日累计报工值
|
|
EchartsSeries echartsSeries = new EchartsSeries();
|
|
echartsSeries.Name = "本周各个工序累计报工数";
|
|
List<EchartsSeriesData> Data = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
|
|
.Where((it, w) => it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight)
|
|
.GroupBy((it, w) => new { it.ProcessId, w.Name })
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0)
|
|
}).ToList();
|
|
echartsSeries.Data = Data;
|
|
echartsOptions.Series.Add(echartsSeries);
|
|
//获取各个工序今日累计计划值
|
|
EchartsSeries echartsSeries2 = new EchartsSeries();
|
|
echartsSeries2.Name = "本周各个工序累计计划数";
|
|
List<EchartsSeriesData> Data2 = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
|
|
.Where((it, w) => w.Status == 1 && it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight)
|
|
.GroupBy((it, w) => new { it.ProcessId, w.Name })
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0)
|
|
}).ToList();
|
|
echartsSeries2.Data = Data2;
|
|
echartsOptions.Series.Add(echartsSeries2);
|
|
|
|
|
|
|
|
return echartsOptions;
|
|
}
|
|
public EchartsOptions BarProcessProductStatisticMonth()
|
|
{
|
|
// 获取当前日期时间
|
|
DateTime now = DateTime.Now;
|
|
|
|
// 获取本月第一天的日期时间(凌晨)
|
|
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1, 0, 0, 0);
|
|
|
|
// 获取本月最后一天的日期时间(午夜)
|
|
int daysInMonth = DateTime.DaysInMonth(now.Year, now.Month);
|
|
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, daysInMonth, 23, 59, 59);
|
|
|
|
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
echartsOptions.Title = new EchartsTitle("本月各工序产量统计", "本月各工序产量统计");
|
|
EchartsXAxis xAxis = new EchartsXAxis();
|
|
|
|
xAxis.Data = Context.Queryable<BaseRelWorkRouteProcesses>().LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
|
|
.Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32)
|
|
.OrderBy((r, p) => p.Id)
|
|
.Select((r, p) => p.Name)
|
|
.ToList();
|
|
echartsOptions.XAxis = xAxis;
|
|
//获取各个工序今日累计报工值
|
|
EchartsSeries echartsSeries = new EchartsSeries();
|
|
echartsSeries.Name = "本月各个工序今日累计报工数";
|
|
List<EchartsSeriesData> Data = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
|
|
.Where((it, w) => w.Status == 1 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth)
|
|
.GroupBy((it, w) => new { it.ProcessId, w.Name })
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0)
|
|
}).ToList();
|
|
echartsSeries.Data = Data;
|
|
echartsOptions.Series.Add(echartsSeries);
|
|
//获取各个工序今日累计计划值
|
|
EchartsSeries echartsSeries2 = new EchartsSeries();
|
|
echartsSeries2.Name = "本月各个工序今日累计计划数";
|
|
List<EchartsSeriesData> Data2 = Context.Queryable<ProReportwork01>()
|
|
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
|
|
.Where((it, w) => w.Status == 1 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth)
|
|
.GroupBy((it, w) => new { it.ProcessId, w.Name })
|
|
.Select((it, w) => new EchartsSeriesData()
|
|
{
|
|
Name = w.Name,
|
|
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0)
|
|
}).ToList();
|
|
echartsSeries2.Data = Data2;
|
|
echartsOptions.Series.Add(echartsSeries2);
|
|
|
|
|
|
|
|
return echartsOptions;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 本月每天产量
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public EchartsOptions OutputOfCurrentmonth()
|
|
{ // 获取当前日期
|
|
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("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<ProReportwork01>((w, r) => w.Workorder == r.Workorder)
|
|
.Where((w, r) => w.Status == 1 && w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth)
|
|
.GroupBy((w, r) => w.WorkorderDate)
|
|
.Select((w, r) => new EchartsSeriesData()
|
|
{
|
|
Name = w.WorkorderDate.Value.ToString("MM-dd"),
|
|
Value = SqlFunc.AggregateSum(r.FinishNum ?? 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<ProReportwork01>((w, r) => w.Workorder == r.Workorder)
|
|
.Where((w, r) => groupArray.Contains(w.GroupCode))
|
|
.Where((w, r) => w.Status == 1 && 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("MM-dd"),
|
|
Value = SqlFunc.AggregateSum(r.FinishNum ?? 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;
|
|
|
|
}
|
|
}
|
|
}
|