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 ) ;
}
}
2024-12-23 17:09:35 +08:00
return echartsOptions ;
}
public EchartsOptions AccumulatedReport ( )
{
EchartsOptions echartsOptions = new EchartsOptions ( ) ;
2026-01-16 11:52:08 +08:00
echartsOptions . Title = new EchartsTitle (
"昨日-今日各工序实时累计完工数折线图" ,
"昨日-今日各工序实时累计完工数折线图"
) ;
2024-12-23 17:09:35 +08:00
//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 + + )
2024-12-23 17:09:35 +08:00
{
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
2024-12-23 17:09:35 +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 ;
2024-12-23 17:09:35 +08:00
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 ] ,
}
) ;
2024-12-23 17:09:35 +08:00
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 ;
2024-12-23 17:09:35 +08:00
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 ,
2024-12-23 17:09:35 +08:00
} ;
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 ( )
) ;
2024-12-23 18:02:55 +08:00
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 ) ;
2024-12-23 17:09:35 +08:00
}
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
}
}