You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
12 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using HighWayIot.Log4net;
using HighWayIot.Repository.domain;
using HighWayIot.Repository.service;
using HighWayIot.Winform.Business;
using HighWayIot.Winform.UserControlPages.MonitorMainPages;
using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Timer = System.Threading.Timer;
namespace HighWayIot.Winform.UserControlPages
{
public partial class MonitorMainPage : UserControl
{
LogHelper logHelper = LogHelper.Instance;
/// <summary>
/// 班次服务类
/// </summary>
private SysShiftTimeService _shiftTimeService = SysShiftTimeService.Instance;
/// <summary>
/// 报表服务类
/// </summary>
private ZxDailyReportService _zxDailyReportService = ZxDailyReportService.Instance;
/// <summary>
/// datagridview 数据源
/// 必须使用BindingList 如果使用LIST无法实现更改添加、删除数据源自动更新datagridview
/// </summary>
//private BindingList<MonitorDataSource> _monitorDataSources = new BindingList<MonitorDataSource>();
private List<MonitorDataSource> _monitorDataSources = new List<MonitorDataSource>();
/// <summary>
/// 白班开始时间
/// </summary>
private DateTime DayStartTime;
/// <summary>
/// 白班结束时间
/// </summary>
private DateTime DayEndTine;
/// <summary>
/// 夜班开始时间
/// </summary>
private DateTime NightStartTime;
/// <summary>
/// 夜班结束时间
/// </summary>
private DateTime NightEndTime;
/// <summary>
/// 上次白班开始时间
/// </summary>
private DateTime LastDayStartTime;
/// <summary>
/// 上次夜班结束时间
/// </summary>
private DateTime LastNightEndTime;
public static Action MonitorRefreshAction;
/// <summary>
/// 前端刷新锁
/// </summary>
private static readonly object GridRefreshLocker = new object();
public MonitorMainPage()
{
InitializeComponent();
MonitorDataGridView.AutoGenerateColumns = false;
DateTimeRefresh();
MonitorRefreshAction += BindData;
MonitorRefreshAction.Invoke();
}
/// <summary>
/// TImer事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataRefresh_Tick(object sender, EventArgs e)
{
if (DateTime.Now.Second == 0)
{
DateTimeRefresh();
}
}
/// <summary>
/// 白夜班时间,现在时间控件刷新
/// </summary>
private void DateTimeRefresh()
{
var timeList = _shiftTimeService.GetShiftInfos();
var morningShift = timeList.Where(x => x.ShiftName == "早").FirstOrDefault();
var midShift = timeList.Where(x => x.ShiftName == "中").FirstOrDefault();
var nightShift = timeList.Where(x => x.ShiftName == "夜").FirstOrDefault();
if (morningShift == null || midShift == null || nightShift == null)
{
logHelper.Error("检查班次数据库是否早中夜班配置齐全!");
return;
}
DateTime Today = DateTime.Now.Date;
var startArray = morningShift.ShiftStartTime.Split(':');
var endArray = midShift.ShiftEndTime.Split(':');
if (startArray.Length != 3 || endArray.Length != 3)
{
return;
}
TimeSpan StartTime = new TimeSpan(Convert.ToInt32(startArray[0]), Convert.ToInt32(startArray[1]), Convert.ToInt32(startArray[2]));
TimeSpan EndTime = new TimeSpan(Convert.ToInt32(endArray[0]), Convert.ToInt32(endArray[1]), Convert.ToInt32(endArray[2]));
if (DateTime.Now.TimeOfDay > StartTime && DateTime.Now.TimeOfDay < EndTime)
{//白班
DayStartTime = DateTime.Now.Date + StartTime;
DayEndTine = DateTime.Now.Date + EndTime;
NightStartTime = DateTime.Now.Date - TimeSpan.FromDays(1) + EndTime;
NightEndTime = DateTime.Now.Date + StartTime;
LastDayStartTime = DateTime.Today - TimeSpan.FromDays(1) + StartTime;
LastNightEndTime = DateTime.Today + StartTime;
DayProductNumTextBox.BackColor = Color.LightGreen;
NightProductNumTextBox.BackColor = Color.LightGray;
}
else
{//夜班
DayProductNumTextBox.BackColor = Color.LightGray;
NightProductNumTextBox.BackColor = Color.LightGreen;
if (DateTime.Now.TimeOfDay < StartTime) //前半夜
{
DayStartTime = DateTime.Now.Date + StartTime;
DayEndTine = DateTime.Now.Date + EndTime;
NightStartTime = DateTime.Now.Date + EndTime;
NightEndTime = DateTime.Now + TimeSpan.FromDays(1) + StartTime;
LastDayStartTime = DateTime.Today - TimeSpan.FromDays(1) + StartTime;
LastNightEndTime = DateTime.Today + StartTime;
}
else if (DateTime.Now.TimeOfDay > EndTime) //后半夜
{
DayStartTime = DateTime.Now.Date - TimeSpan.FromDays(1) + StartTime;
DayEndTine = DateTime.Now.Date - TimeSpan.FromDays(1) + EndTime;
NightStartTime = DateTime.Now.Date - TimeSpan.FromDays(1) + EndTime;
NightEndTime = DateTime.Now + StartTime;
LastDayStartTime = DateTime.Today - TimeSpan.FromDays(2) + StartTime;
LastNightEndTime = DateTime.Today - TimeSpan.FromDays(1) + StartTime;
}
}
string dayString = morningShift.ShiftStartTime.Substring(0, 5) + "-" + midShift.ShiftEndTime.Substring(0, 5);
string nightString = nightShift.ShiftStartTime.Substring(0, 5) + "-" + nightShift.ShiftEndTime.Substring(0, 5);
DayTimeLabel.Text = dayString;
NightTimeLabel.Text = nightString;
NowDateProductNumLabel.Text = (DateTime.Now - TimeSpan.FromDays(1)).ToString("MM 月 dd 日 产量");
}
/// <summary>
/// 数据刷新
/// </summary>
private void BindData()
{
lock (GridRefreshLocker)
{
//取出近两日的报表数据
List<ZxDailyReportEntity> dailyEntity = _zxDailyReportService.GetDailyReportInfos();
_monitorDataSources.Clear();
if (dailyEntity == null)
{
return;
}
int showCount = 0;
if (dailyEntity.Count >= 50)
{
showCount = 50;
}
else
{
showCount = dailyEntity.Count;
}
for (int i = 0; i < showCount; i++)
{
_monitorDataSources.Add(new MonitorDataSource()
{
No = i + 1,
VulcanizationNo = dailyEntity[i].VulcanizationNo,
StartTime = dailyEntity[i].StartTime.ToString("HH:mm:ss"),
RecipeName = dailyEntity[i].RecipeName,
RecipeCode = dailyEntity[i].RecipeCode,
SpecCode = dailyEntity[i].SpecCode,
DeviceNo = dailyEntity[i].DeviceNo.ToString(),
StandardWeight = dailyEntity[i].StandardWeight ?? 0,
RawTireWeight = dailyEntity[i].RawTireWeight ?? 0,
BaseRubTimeSpan = GeneralUtils.DateTimeToString(dailyEntity[i].StartTime, dailyEntity[i].BaseEndTime),
MidRubTimeSpan = GeneralUtils.DateTimeToString(dailyEntity[i].StartTime, dailyEntity[i].MidEndTime),
FaceRubTimeSpan = GeneralUtils.DateTimeToString(dailyEntity[i].StartTime, dailyEntity[i].FaceEndTime),
RepeatWeight = dailyEntity[i].RepeatWeight ?? 0,
IsDone = dailyEntity[i].IsDone == 1 ? "已完成" : "未完成"
});
}
MonitorDataGridView.DataSource = null;
MonitorDataGridView.DataSource = _monitorDataSources;
MonitorDataGridView.CellFormatting += MonitorDataGridView_CellFormatting;
int daycount = dailyEntity.Count(x => x.StartTime >= DayStartTime && x.StartTime <= DayEndTine && x.IsDone == 1);
DayProductNumTextBox.Text = daycount.ToString();
int nightcount = dailyEntity.Count(x => x.StartTime >= NightStartTime && x.StartTime <= NightEndTime && x.IsDone == 1);
NightProductNumTextBox.Text = nightcount.ToString();
NowDateProductNumTextBox.Text = dailyEntity.Count(x => x.StartTime >= LastDayStartTime && x.StartTime <= LastNightEndTime).ToString();
ZxDailyReportEntity first = dailyEntity.FirstOrDefault();
if (first == null)
{
return;
}
RecipeCodeLabel.Text = first.RecipeCode;
SpecCodeLabel.Text = first.SpecCode;
RecipeNameLabel.Text = first.RecipeName;
ZxRecipeEntity recipeEntity = ZxRecipeService.Instance.GetRecipeInfosByRecipeCode(first.RecipeCode).FirstOrDefault();
if (recipeEntity != null)
{
//SpecNameLabel.Text = recipeEntity.RecipeName;
ZxRecipeParaEntity paraEntity = ZxRecipeParaService.Instance.GetRecipeParaInfoByRecipeCode(recipeEntity.RecipeCode).FirstOrDefault();
if (paraEntity != null)
{
RawTireWeightLabel.Text = paraEntity.TireWeight.ToString();
}
}
RgvNoLabel.Text = first.DeviceNo.ToString();
}
}
/// <summary>
/// 单元格格式回调方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MonitorDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// 确保是针对 "IsDone" 列的操作
if (MonitorDataGridView.Columns[e.ColumnIndex].Name == "IsDone" && e.RowIndex >= 0)
{
var cell = MonitorDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];
string status = cell.Value?.ToString();
if (status == "已完成")
{
cell.Style.BackColor = Color.LightGreen; // 绿色
}
else if (status == "未完成")
{
cell.Style.BackColor = Color.Yellow; // 黄色
}
}
}
/// <summary>
/// 滚动文本框双击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MoveText_DoubleClick(object sender, EventArgs e)
{
ScrollTextSetForm form = new ScrollTextSetForm();
if (form.ShowDialog() == DialogResult.OK)
{
MoveText.Text = form.OutValue;
}
}
}
}