Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/SmartScreen/Product/ProductSmartScreenService.cs

701 lines
29 KiB
C#
Raw Normal View History

2026-01-16 11:52:08 +08:00
using System;
2024-12-19 19:44:47 +08:00
using System.Collections.Generic;
2026-01-16 11:52:08 +08:00
using System.Data;
2024-12-19 19:44:47 +08:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
2024-12-22 15:12:10 +08:00
using DOAN.Model.MES.base_;
2026-01-16 11:52:08 +08:00
using DOAN.Model.MES.product;
using DOAN.Model.MES.SmartScreen;
using DOAN.Model.MES.SmartScreen.Product;
using DOAN.Service.MES.product.IService;
using DOAN.Service.MES.SmartScreen.Product.IService;
using Infrastructure.Attribute;
2024-12-23 15:55:39 +08:00
using MathNet.Numerics;
2026-01-16 11:52:08 +08:00
using Microsoft.Data.SqlClient;
2024-12-23 17:39:55 +08:00
using NPOI.SS.Formula.Atp;
2024-12-19 19:44:47 +08:00
namespace DOAN.Service.MES.SmartScreen.Product
{
/// <summary>
/// 生产智慧屏
/// </summary>
2026-01-16 11:52:08 +08:00
[AppService(
ServiceType = typeof(IProductSmartScreenService),
ServiceLifetime = LifeTime.Transient
)]
2024-12-19 19:44:47 +08:00
public class ProductSmartScreenService : BaseService<ProWorkorder>, IProductSmartScreenService
{
/// <summary>
/// 数字翻牌器
/// </summary>
/// <returns></returns>
public DigitalTurntableModel DigitalTurntable()
{
2025-01-15 13:00:13 +08:00
DigitalTurntableModel digital = new DigitalTurntableModel();
2026-01-16 11:52:08 +08:00
digital.WorkorderQuantity = Context
.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.Count();
2024-12-19 19:44:47 +08:00
2024-12-27 09:21:26 +08:00
//digital.FinishedWorkorderQuantity=Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
// .Where(it=>it.Status==2)
// .Count();
2024-12-19 19:44:47 +08:00
2024-12-27 09:21:26 +08:00
//digital.UnFinishedWorkorderQuantity = Context.Queryable<ProWorkorder>().Where(it => it.WorkorderDate == DateTime.Today)
// .Where(it => it.Status <2)
// .Count();
2024-12-19 19:44:47 +08:00
2026-01-16 11:52:08 +08:00
digital.ProductionPlanQuantity = Context
.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.Sum(it => it.PlanNum ?? 0);
2024-12-19 19:44:47 +08:00
2024-12-27 09:21:26 +08:00
//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);
2025-01-15 11:22:18 +08:00
// 今日物料领用
2026-01-16 11:52:08 +08:00
digital.MaterialRequisitionQuantity = Context
.Queryable<ProReportwork01>()
.Where(it =>
it.ProcessId == 10
&& it.JobDateTime >= DateTime.Today
&& it.JobDateTime < DateTime.Today.AddDays(1)
)
.Sum(it => it.FinishNum ?? 0);
digital.ShipmentQuantity = Context
.Queryable<ProReportwork01>()
.Where(it =>
it.ProcessId == 90
&& it.JobDateTime >= DateTime.Today
&& it.JobDateTime < DateTime.Today.AddDays(1)
)
.Sum(it => it.FinishNum ?? 0);
digital.GroupQuantity = Context
.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == DateTime.Today)
.Select(it => it.GroupCode)
.Distinct()
.Count();
2025-01-15 13:00:13 +08:00
2024-12-19 19:44:47 +08:00
return digital;
}
2024-12-22 15:12:10 +08:00
public EchartsOptions BarProcessProductStatistic()
{
EchartsOptions echartsOptions = new EchartsOptions();
echartsOptions.Title = new EchartsTitle("今日各工序产量统计", "今日各工序产量统计");
EchartsXAxis xAxis = new EchartsXAxis();
2025-01-15 13:00:13 +08:00
2026-01-16 11:52:08 +08:00
xAxis.Data = Context
.Queryable<BaseRelWorkRouteProcesses>()
.LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
2024-12-23 16:00:57 +08:00
.Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32)
2024-12-22 15:12:10 +08:00
.OrderBy((r, p) => p.Id)
.Select((r, p) => p.Name)
.ToList();
2025-01-15 13:00:13 +08:00
echartsOptions.XAxis = xAxis;
2024-12-22 15:12:10 +08:00
//获取各个工序今日累计报工值
EchartsSeries echartsSeries = new EchartsSeries();
2024-12-23 15:55:39 +08:00
echartsSeries.Name = "今日各个工序累计报工数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data = Context
.Queryable<ProReportwork01>()
2025-01-15 13:00:13 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= DateTime.Today
&& it.JobDateTime <= DateTime.Today.AddDays(1)
)
2025-01-15 13:00:13 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0),
}
)
.ToList();
2025-01-15 11:22:18 +08:00
List<EchartsSeriesData> NewData = new List<EchartsSeriesData>();
foreach (var item in xAxis.Data)
{
2026-01-16 11:52:08 +08:00
decimal value = Data.Where(it => it.Name == item)
.Select(it => it.Value)
.FirstOrDefault();
2025-01-15 13:00:13 +08:00
if (value == 0)
2025-01-15 11:22:18 +08:00
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 });
}
else
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = value });
}
}
echartsSeries.Data = NewData;
2024-12-22 15:12:10 +08:00
echartsOptions.Series.Add(echartsSeries);
//获取各个工序今日累计计划值
EchartsSeries echartsSeries2 = new EchartsSeries();
2024-12-23 15:55:39 +08:00
echartsSeries2.Name = "今日各个工序累计计划数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data2 = Context
.Queryable<ProReportwork01>()
2024-12-22 15:12:10 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= DateTime.Today
&& it.JobDateTime <= DateTime.Today.AddDays(1)
)
2024-12-22 15:12:10 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0),
}
)
.ToList();
2025-01-15 13:00:13 +08:00
// echartsSeries2.Data = Data2;
// echartsOptions.Series.Add(echartsSeries2);
2024-12-22 15:12:10 +08:00
2024-12-23 15:55:39 +08:00
return echartsOptions;
}
2026-01-16 11:52:08 +08:00
2024-12-23 15:55:39 +08:00
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();
2026-01-16 11:52:08 +08:00
xAxis.Data = Context
.Queryable<BaseRelWorkRouteProcesses>()
.LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
2025-01-15 13:00:13 +08:00
.Where((r, p) => r.FkWorkRoute == 32 && p.Status == 1)
2024-12-23 15:55:39 +08:00
.OrderBy((r, p) => p.Id)
.Select((r, p) => p.Name)
.ToList();
echartsOptions.XAxis = xAxis;
//获取各个工序今日累计报工值
EchartsSeries echartsSeries = new EchartsSeries();
echartsSeries.Name = "本周各个工序累计报工数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data = Context
.Queryable<ProReportwork01>()
2024-12-23 15:55:39 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= mondayMorning
&& it.JobDateTime <= sundayMidnight
)
2024-12-23 15:55:39 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0),
}
)
.ToList();
2025-01-15 11:22:18 +08:00
List<EchartsSeriesData> NewData = new List<EchartsSeriesData>();
foreach (var item in xAxis.Data)
{
2026-01-16 11:52:08 +08:00
decimal value = Data.Where(it => it.Name == item)
.Select(it => it.Value)
.FirstOrDefault();
2025-01-15 11:22:18 +08:00
if (value == 0)
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 });
}
else
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = value });
}
}
echartsSeries.Data = NewData;
2024-12-23 15:55:39 +08:00
echartsOptions.Series.Add(echartsSeries);
//获取各个工序今日累计计划值
EchartsSeries echartsSeries2 = new EchartsSeries();
echartsSeries2.Name = "本周各个工序累计计划数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data2 = Context
.Queryable<ProReportwork01>()
2024-12-23 15:55:39 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= mondayMorning
&& it.JobDateTime <= sundayMidnight
)
2024-12-23 15:55:39 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0),
}
)
.ToList();
2025-01-15 13:00:13 +08:00
// echartsSeries2.Data = Data2;
2025-01-15 11:22:18 +08:00
//echartsOptions.Series.Add(echartsSeries2);
2024-12-23 15:55:39 +08:00
return echartsOptions;
}
2026-01-16 11:52:08 +08:00
2024-12-23 15:55:39 +08:00
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();
2026-01-16 11:52:08 +08:00
xAxis.Data = Context
.Queryable<BaseRelWorkRouteProcesses>()
.LeftJoin<BaseWorkProcesses>((r, p) => r.FkWorkProcesses == p.Id)
2024-12-23 16:00:57 +08:00
.Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32)
2024-12-23 15:55:39 +08:00
.OrderBy((r, p) => p.Id)
.Select((r, p) => p.Name)
.ToList();
echartsOptions.XAxis = xAxis;
//获取各个工序今日累计报工值
EchartsSeries echartsSeries = new EchartsSeries();
echartsSeries.Name = "本月各个工序今日累计报工数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data = Context
.Queryable<ProReportwork01>()
2024-12-23 15:55:39 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= firstDayOfMonth
&& it.JobDateTime <= lastDayOfMonth
)
2024-12-23 15:55:39 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0),
}
)
.ToList();
2025-01-15 11:22:18 +08:00
List<EchartsSeriesData> NewData = new List<EchartsSeriesData>();
foreach (var item in xAxis.Data)
{
2026-01-16 11:52:08 +08:00
decimal value = Data.Where(it => it.Name == item)
.Select(it => it.Value)
.FirstOrDefault();
2025-01-15 11:22:18 +08:00
if (value == 0)
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 });
}
else
{
NewData.Add(new EchartsSeriesData() { Name = item, Value = value });
}
}
echartsSeries.Data = NewData;
2024-12-23 15:55:39 +08:00
echartsOptions.Series.Add(echartsSeries);
//获取各个工序今日累计计划值
EchartsSeries echartsSeries2 = new EchartsSeries();
echartsSeries2.Name = "本月各个工序今日累计计划数";
2026-01-16 11:52:08 +08:00
List<EchartsSeriesData> Data2 = Context
.Queryable<ProReportwork01>()
2024-12-23 15:55:39 +08:00
.LeftJoin<BaseWorkProcesses>((it, w) => it.ProcessId == w.Id)
2026-01-16 11:52:08 +08:00
.Where(
(it, w) =>
w.Status == 1
&& it.JobDateTime >= firstDayOfMonth
&& it.JobDateTime <= lastDayOfMonth
)
2024-12-23 15:55:39 +08:00
.GroupBy((it, w) => new { it.ProcessId, w.Name })
2026-01-16 11:52:08 +08:00
.Select(
(it, w) =>
new EchartsSeriesData()
{
Name = w.Name,
Value = SqlFunc.AggregateSum(it.PlanNum ?? 0),
}
)
.ToList();
2025-01-15 13:00:13 +08:00
// echartsSeries2.Data = Data2;
// echartsOptions.Series.Add(echartsSeries2);
2024-12-23 15:55:39 +08:00
2024-12-22 15:12:10 +08:00
return echartsOptions;
}
/// <summary>
/// 本月每天产量
/// </summary>
/// <returns></returns>
public EchartsOptions OutputOfCurrentmonth()
2026-01-16 11:52:08 +08:00
{ // 获取当前日期
2024-12-22 15:12:10 +08:00
DateTime today = DateTime.Today;
// 获取当前月的第一天
DateTime firstDayOfMonth = new DateTime(today.Year, today.Month, 1);
// 获取当前月的最后一天
2026-01-16 11:52:08 +08:00
DateTime lastDayOfMonth = new DateTime(
today.Year,
today.Month,
DateTime.DaysInMonth(today.Year, today.Month)
);
2024-12-22 15:12:10 +08:00
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
{
2025-01-15 13:00:13 +08:00
xData.Add(index.ToString("dd"));
2024-12-22 15:12:10 +08:00
index = index.AddDays(1);
} while (index < lastDayOfMonth.AddDays(1));
xAxis.Data = xData;
echartsOptions.XAxis = xAxis;
//折线系列
EchartsSeries LineSeries = new EchartsSeries();
LineSeries.Name = "本月每天产量";
LineSeries.Type = "line";
2025-01-15 13:00:13 +08:00
//var result = Context.Queryable<ProWorkorder>()
// .LeftJoin<ProReportwork01>((w, r) => w.Workorder == r.Workorder)
// .Where((w, r) =>r.ProcessId==70&&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();
//var result = Context.Queryable<ProReportwork01>()
// .Where(it=>it.ProcessId == 20 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth.AddDays(1))
// .GroupBy(it => SqlFunc.DateDiff(DateType.Day, it.JobDateTime ?? DateTime.MinValue, DateTime.Now)) // 按天分组
// .Select(it => new
// {
// Name = it.JobDateTime.Value.ToString("MM-dd"),// 获取日期部分
// Value = SqlFunc.AggregateSum(it.FinishNum ?? 0) // 聚合求和
// }).ToList();
2026-01-16 11:52:08 +08:00
var result = Context
.Queryable<ProReportwork01>()
.Where(it =>
it.ProcessId == 20
&& it.JobDateTime >= firstDayOfMonth
&& it.JobDateTime <= lastDayOfMonth.AddDays(1)
)
.GroupBy(it => SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day)) // 按天分组
.Select(it => new
{
Name = SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day), // 获取日期部分
Value = SqlFunc.AggregateSum(it.FinishNum ?? 0), // 聚合求和
})
.ToList();
2024-12-22 15:12:10 +08:00
List<EchartsSeriesData> LineSeriesData = new List<EchartsSeriesData>();
foreach (var item in xData)
{
2026-01-16 11:52:08 +08:00
LineSeriesData.Add(
new EchartsSeriesData()
{
Name = item,
Value = result
.Where(it => it.Name == int.Parse(item))
.Select(it => it.Value)
.FirstOrDefault(),
}
);
2024-12-22 15:12:10 +08:00
}
LineSeries.Data = LineSeriesData;
echartsOptions.Series = new List<EchartsSeries>() { LineSeries };
// 各个组的产量系列
2026-01-16 11:52:08 +08:00
string[] groupArray = Context
.Queryable<BaseGroup>()
.Where(it => it.Status == 1)
.OrderBy(it => it.Id)
.Select(it => it.GroupCode)
2024-12-22 15:12:10 +08:00
.ToArray();
if (groupArray.Length > 0)
{
2025-01-15 13:00:13 +08:00
//var GroupresultList = Context.Queryable<ProWorkorder>()
// .RightJoin<ProReportwork01>((w, r) => w.Workorder == r.Workorder)
// .Where((w, r) => groupArray.Contains(w.GroupCode))
// .Where((w, r) => r.ProcessId == 70 && w.Status == 1 && r.JobDateTime >= firstDayOfMonth && r.JobDateTime <= 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();
2026-01-16 11:52:08 +08:00
var GroupresultList = Context
.Queryable<ProReportwork01>()
.LeftJoin<ProWorkorder>((r, w) => r.Workorder == w.Workorder)
2025-01-15 13:00:13 +08:00
.Where((r, w) => groupArray.Contains(w.GroupCode))
2026-01-16 11:52:08 +08:00
.Where(
(r, w) =>
r.ProcessId == 20
&& r.JobDateTime >= firstDayOfMonth
&& r.JobDateTime <= lastDayOfMonth.AddDays(1)
)
.GroupBy(
(r, w) =>
new
{
w.GroupCode,
Day = SqlFunc.DateValue(
r.JobDateTime ?? DateTime.MinValue,
DateType.Day
),
}
) // 按天分组
.Select(
(r, w) =>
new
{
groupCode = w.GroupCode,
Name = SqlFunc.DateValue(
r.JobDateTime ?? DateTime.MinValue,
DateType.Day
), // 获取日期部分
Value = SqlFunc.AggregateSum(r.FinishNum ?? 0), // 聚合求和
}
)
.ToList();
2025-01-15 13:00:13 +08:00
2024-12-22 15:12:10 +08:00
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)
{
2026-01-16 11:52:08 +08:00
LineSeriesData01.Add(
new EchartsSeriesData()
{
Name = item,
Value = GroupresultList
.Where(it => it.Name == int.Parse(item))
.Where(it => it.groupCode == group)
.Select(it => it.Value)
.FirstOrDefault(),
}
);
2024-12-22 15:12:10 +08:00
}
groupSeries.Data = LineSeriesData01;
echartsOptions.Series.Add(groupSeries);
}
}
return echartsOptions;
}
public EchartsOptions AccumulatedReport()
{
EchartsOptions echartsOptions = new EchartsOptions();
2026-01-16 11:52:08 +08:00
echartsOptions.Title = new EchartsTitle(
"昨日-今日各工序实时累计完工数折线图",
"昨日-今日各工序实时累计完工数折线图"
);
//1.查询各个工序
2026-01-16 11:52:08 +08:00
int[] processArray = Context
.Queryable<ProReportwork01>()
.Where(it =>
it.JobDateTime > DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1)
)
.OrderBy(it => it.ProcessId)
.Select(it => it.ProcessId)
.Distinct()
.ToArray();
2024-12-23 17:39:55 +08:00
//1 X轴
2025-01-15 13:00:13 +08:00
List<DateTime> DateTimeArray = new List<DateTime>();
2024-12-27 09:21:26 +08:00
2024-12-23 17:39:55 +08:00
// 定义起始时间和结束时间
2025-01-15 11:22:18 +08:00
// 获取当前日期和时间
DateTime now = DateTime.Now;
// 获取昨天的日期
DateTime yesterday = now.AddDays(-1);
// 设置时间为 20:00
2026-01-16 11:52:08 +08:00
DateTime startTime = new DateTime(
yesterday.Year,
yesterday.Month,
yesterday.Day,
20,
0,
0
);
2025-01-15 11:22:18 +08:00
//DateTime startTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day., 8, 0, 0);
// DateTime startTime = DateTime.Today;
2026-01-16 11:52:08 +08:00
DateTime endTime = new DateTime(
DateTime.Today.Year,
DateTime.Today.Month,
DateTime.Today.Day,
20,
0,
0
); // 8 AM + 12 hours = 8 PM
2024-12-23 17:39:55 +08:00
2025-01-15 11:22:18 +08:00
// 使用循环生成每30分钟的时间戳
2026-01-16 11:52:08 +08:00
for (
DateTime currentTime = startTime;
currentTime <= endTime;
currentTime = currentTime.AddMinutes(30)
)
2024-12-23 17:39:55 +08:00
{
DateTimeArray.Add(currentTime);
}
2026-01-16 11:52:08 +08:00
List<string> DateTimeArrayString = DateTimeArray
.Select(it => it.ToString("dd-HH:mm"))
.ToList();
2024-12-23 17:39:55 +08:00
echartsOptions.XAxis = new EchartsXAxis() { Data = DateTimeArrayString };
2025-01-15 11:22:18 +08:00
//2 系列值-这组 今日实时累计完成数每30分钟
2025-01-15 13:00:13 +08:00
for (int i = 0; i < processArray.Length; i++)
{
2026-01-16 11:52:08 +08:00
string ProcessName = Context
.Queryable<BaseWorkProcesses>()
.Where(it => it.Id == processArray[i])
.Select(it => it.Name)
.First();
2025-01-15 13:00:13 +08:00
EchartsSeries echartsSeries = new EchartsSeries();
2024-12-23 18:16:33 +08:00
//echartsSeries.Name = ProcessName + "工序今日实时累计完成数每10分钟";
2025-01-15 13:00:13 +08:00
echartsSeries.Name = ProcessName;
echartsSeries.Type = "line";
List<EchartsSeriesData> echartsSeriesDatas = new List<EchartsSeriesData>();
2025-01-15 13:00:13 +08:00
2026-01-16 11:52:08 +08:00
string sql =
"SELECT"
+ " FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP(job_datetime) / 600 ) * 600 ) AS time_period,"
+ " SUM( finish_num ) AS count "
+ " FROM"
+ " pro_reportwork "
+ " WHERE"
+ " DATE(job_datetime) = CURDATE() AND @process_id=process_id "
+ " GROUP BY"
+ " FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 )"
+ " ORDER BY"
+ " time_period";
string sql2 =
"SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 ) * 600 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE DATE(job_datetime) = CURDATE() AND @process_id=process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period";
string sql3 =
"SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 1800 ) * 1800 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE job_datetime>=@SearchDateTime01 AND job_datetime<=@SearchDateTime02 AND process_id=@process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period";
DataTable result = Context.Ado.GetDataTable(
sql3,
new
{
SearchDateTime01 = startTime,
SearchDateTime02 = endTime,
process_id = processArray[i],
}
);
int sum = 0;
foreach (DataRow row in result.Rows)
{
// DateTime value =(DateTime)row["time_period"];
2026-01-16 11:52:08 +08:00
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()
{
2025-01-15 11:22:18 +08:00
Name = value.ToString("dd-HH:mm"),
2026-01-16 11:52:08 +08:00
Value = sum,
};
echartsSeriesDatas.Add(echartsSeriesData);
}
2024-12-23 17:39:55 +08:00
// 和X轴一 一对应
2026-01-16 11:52:08 +08:00
int currentNum = Array.IndexOf(
DateTimeArrayString.ToArray(),
echartsSeriesDatas.Select(it => it.Name).LastOrDefault()
);
for (int j = 0; j < currentNum; j++)
2024-12-23 17:39:55 +08:00
{
int point = 0;
foreach (var item in echartsSeriesDatas)
{
if (item.Name == DateTimeArrayString[j])
{
continue;
}
point++;
}
if (point == echartsSeriesDatas.Count())
{
// 获取前一个时间段产量
decimal productNum = 0;
if (j >= 1)
{
2026-01-16 11:52:08 +08:00
productNum = echartsSeriesDatas
.Where(it => it.Name == DateTimeArrayString[j - 1])
.Select(it => it.Value)
.FirstOrDefault();
2024-12-23 17:39:55 +08:00
}
else
{
productNum = 0;
}
2026-01-16 11:52:08 +08:00
echartsSeriesDatas.Add(
new EchartsSeriesData()
{
Name = DateTimeArrayString[j],
Value = productNum,
}
);
2024-12-23 17:39:55 +08:00
}
}
2025-01-15 13:00:13 +08:00
echartsSeries.Data = echartsSeriesDatas.OrderBy(it => it.Name).ToList();
echartsOptions.Series.Add(echartsSeries);
}
2025-01-15 13:00:13 +08:00
2024-12-22 15:12:10 +08:00
return echartsOptions;
}
2024-12-19 19:44:47 +08:00
}
}