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.

685 lines
26 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 MaterialTraceability.Business;
using MaterialTraceability.Business.Impl;
using MaterialTraceability.Entity.DAO;
using MaterialTraceability.Entity.DTO;
using MaterialTraceability.Entity.Enum;
using MaterialTraceability.SqlSugar;
using MaterialTraceability.SqlSugar.ServiceImpl;
using MaterialTraceabilityUI.Common;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace MaterialTraceabilityUI
{
/// <summary>
/// firstPage.xaml 的交互逻辑
/// </summary>
public partial class firstPage : UserControl
{
private EquipBusiness equipBusiness = new EquipBusiness();
private IBaseServices<RecordLogInfo> logInfoServices = new BaseServices<RecordLogInfo>();
private IBaseServices<ProShaftInfo> shftInfoService = new BaseServices<ProShaftInfo>();
private UpLoadBusiness loadBusiness = UpLoadBusiness.Instance;
private AppConfigDto appConfig = AppConfigDto.Instance;
public firstPage()
{
InitializeComponent();
try
{
if (appConfig.processId.Contains("LY"))
{
MainBusiness.LogRefreshEvent += LogRefresh;
LYSignalReadBusiness.LogRefreshEvent += LogRefresh;
LYSignalReadBusiness.ViewModelRefreshEvent += ProductionParam;
UserControlInit();
refreshThread();
}
}
catch(Exception ex)
{
LogHelperBusiness.LogError("界面异常",ex);
}
}
public void ProductionParam(ViewModelDto viewModelDto)
{
if (viewModelDto.rfidInfo != null)
{
Action action;
switch (viewModelDto.rfidInfo.position)
{
case 0 :
action = () =>
{
this.upMaterial_SFC.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
upMaterial_SFC.Dispatcher.BeginInvoke(action);
action = () =>
{
this.upMaterial_RFID.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
upMaterial_RFID.Dispatcher.BeginInvoke(action);
action = () =>
{
this.upMaterial_EA.Text = "EA"+viewModelDto.rfidInfo.ea;
};
upMaterial_EA.Dispatcher.BeginInvoke(action);
break;
case 1:
action = () =>
{
this.Down_SFC_1.Text = "SFC" + viewModelDto.rfidInfo.sfc;
};
Down_SFC_1.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_1.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_1.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_1.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_1.Dispatcher.BeginInvoke(action);
break;
case 2:
action = () =>
{
this.Down_SFC_2.Text = "SFC" + viewModelDto.rfidInfo.sfc;
};
Down_SFC_2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_2.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_2.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_2.Dispatcher.BeginInvoke(action);
break;
case 5:
action = () =>
{
this.Down_SFC_3.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_3.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_3.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_3.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_3.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_3.Dispatcher.BeginInvoke(action);
break;
case 6:
action = () =>
{
this.Down_SFC_4.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_4.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_4.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_4.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_4.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_4.Dispatcher.BeginInvoke(action);
break;
case 4:
action = () =>
{
this.Down_SFC_5.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_5.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_5.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_5.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_5.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_5.Dispatcher.BeginInvoke(action);
break;
case 3:
action = () =>
{
this.Down_SFC_6.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_6.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_6.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_6.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_6.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_6.Dispatcher.BeginInvoke(action);
break;
case 8:
action = () =>
{
this.Down_SFC_7.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_7.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_7.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_7.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_7.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_7.Dispatcher.BeginInvoke(action);
break;
case 7:
action = () =>
{
this.Down_SFC_8.Text = "SFC"+viewModelDto.rfidInfo.sfc;
};
Down_SFC_8.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_RFID_8.Text = "RFID"+viewModelDto.rfidInfo.rfid;
};
Down_RFID_8.Dispatcher.BeginInvoke(action);
action = () =>
{
this.Down_EA_8.Text = "EA"+viewModelDto.rfidInfo.ea;
};
Down_EA_8.Dispatcher.BeginInvoke(action);
break;
default:
break;
}
}
}
private void refreshThread()
{
System.Timers.Timer timer = new System.Timers.Timer(1000 * 30);
timer.Elapsed += new System.Timers.ElapsedEventHandler(refreshEquipStatus);
timer.AutoReset = true;
timer.Enabled = true;
timer.Start();
}
private void refreshEquipStatus(object source, System.Timers.ElapsedEventArgs e)
{
try
{
equipBusiness.CheckEquipState();
UpdateDeviceStatus();
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面refreshEquipStatus异常",ex);
}
}
private void UpdateDeviceStatus()
{
Action action;
try
{
var equipInfo = equipBusiness.Equiplist.Where(x => x.positionId == 0).FirstOrDefault();
if (equipInfo != null)
{
if (equipInfo.IsConnect)
{
action = () =>
{
this.TestTB.Foreground = Brushes.Green;
};
TestTB.Dispatcher.BeginInvoke(action);
action = () =>
{
string imageUrl = "pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/正常.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.TestBImage.ImageSource = bitmapImage;
};
TestBImage.Dispatcher.BeginInvoke(action);
}
else
{
action = () =>
{
this.TestTB.Foreground = Brushes.Red;
};
TestTB.Dispatcher.BeginInvoke(action);
action = () =>
{
string imageUrl = "pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/失败-01.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.TestBImage.ImageSource = bitmapImage;
};
TestBImage.Dispatcher.BeginInvoke(action);
}
}
var equipInfo2 = equipBusiness.Equiplist.Where(x => x.positionId == 1).FirstOrDefault();
if (equipInfo2 != null)
{
if (equipInfo2.IsConnect)
{
action = () =>
{
this.TestTC.Foreground = Brushes.Green;
};
TestTC.Dispatcher.BeginInvoke(action);
action = () =>
{
string imageUrl = "pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/正常.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.TestCImage.ImageSource = bitmapImage;
};
TestCImage.Dispatcher.BeginInvoke(action);
}
else
{
action = () =>
{
this.TestTC.Foreground = Brushes.Red;
};
TestTC.Dispatcher.BeginInvoke(action);
action = () =>
{
string imageUrl = "pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/失败-01.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.TestCImage.ImageSource = bitmapImage;
};
TestCImage.Dispatcher.BeginInvoke(action);
}
}
}
catch (Exception ex)
{
LogHelperBusiness.LogError("设备状态刷新异常", ex);
}
}
public void UserControlInit()
{
//List<int> downNumberItem = new List<int>() { 3, 6, 9 };
//this.downNumber.ItemsSource = downNumberItem;
//this.downNumber.SelectedItem = Convert.ToInt32(ConfigHelper.GetConfig("downNumber"));
//查询前五个小时的数据
//DateTime beginTime = DateTime.Now.AddHours(-5);
//&& Convert.ToDateTime(x.bindTime) > beginTime
try
{
LogRefresh(LogType.RfidLog, "冷压RFID物料追溯系统初始化");
Expression<Func<ProShaftInfo, bool>> exp = s1 => true;
exp = exp.And(x => x.processId == appConfig.processId);
List<ProShaftInfo> shaftInfos = shftInfoService.Query(exp).Result;
if (shaftInfos == null || shaftInfos.Count == 0)
{
LogRefresh(LogType.RfidLog, "程序初始化数据为空");
return;
}
shaftInfos.ForEach(x =>
{
ProductionParam(new ViewModelDto()
{
rfidInfo = new RfidInfoDto()
{
rfid = x.bindRfid,
sfc = x.bindSfc,
ea = x.bindEaValue,
position = Convert.ToInt32(x.positionId)
},
plcStatus = true,
});
});
}catch(Exception ex)
{
LogHelperBusiness.LogError("冷压界面异常UserControlInit",ex);
}
}
public void LogRefresh(LogType logType, string massage)
{
try
{
string info = massage;
string logTypeStr = "";
int isAlarm = 0;
if (logType == LogType.MesLog)
{
logTypeStr = "MES";
ListBoxItemAdd(this.MesLog, massage);
}
if (logType == LogType.PlcLog)
{
logTypeStr = "PLC";
ListBoxItemAdd(this.PlcLog, massage);
}
if (logType == LogType.RfidLog)
{
logTypeStr = "RFID";
ListBoxItemAdd(this.RfidLog, massage);
}
if (logType == LogType.AlarmLog)
{
logTypeStr = "Alarm";
isAlarm = 1;
ListBoxItemAdd(this.AlarmLog, massage);
loadBusiness.SaveLogRecord(0, massage);
}
logInfoServices.Add(new RecordLogInfo()
{
id = System.Guid.NewGuid().ToString("N"),
processId = "LY_A",
machineId = ConfigurationManager.AppSettings["machineId"].ToString(),
alarmType = logTypeStr,
alarmInfo = info,
isAlarm = isAlarm,
recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
});
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面LogRefresh异常",ex);
}
}
private List<LogInfoItem> logInfos = new List<LogInfoItem>();
/// <summary>
/// ListBox刷新
/// </summary>
/// <param name="listBox"></param>
/// <param name="massage"></param>
private void ListBoxItemAdd(ListBox listBox, string massage)
{
try
{
LogHelperBusiness.ViewLog(massage);
logInfos.Add(new LogInfoItem()
{
listBox = listBox,
recordTime = DateTime.Now,
message = String.Format("{0} {1}", DateTime.Now.ToString("MM-dd HH:mm:ss"), massage)
});
while(logInfos.Count > 120)
{
logInfos.RemoveAt(0);
}
Action action;
action = () =>
{
listBox.Items.Clear();
var infoList = logInfos.ToArray();
var strArray = infoList.Where(x => x.listBox == listBox).OrderByDescending(x => x.recordTime).ToList();
if (strArray != null)
{
foreach (var str in strArray)
{
SplitByLen(str.message, 50).ForEach(x =>
{
listBox.Items.Add(x);
});
}
}
};
listBox.Dispatcher.BeginInvoke(action);
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面ListBoxItemAdd异常", ex);
}
}
public static List<string> SplitByLen(string str, int separatorCharNum)
{
try
{
string tempStr = str;
List<string> strList = new List<string>();
if (string.IsNullOrEmpty(str) || str.Length <= separatorCharNum)
{
strList.Add(str);
return strList;
}
int iMax = Convert.ToInt32(Math.Ceiling(str.Length / (separatorCharNum * 1.0)));
for (int i = 0; i < iMax; i++)
{
string currMsg = tempStr.Substring(0, tempStr.Length > separatorCharNum ? separatorCharNum : tempStr.Length);
strList.Add(currMsg);
if (tempStr.Length > separatorCharNum)
{
tempStr = tempStr.Substring(separatorCharNum, tempStr.Length - separatorCharNum);
}
}
return strList;
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面SplitByLen异常", ex);
return null;
}
}
private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
UpdateDeviceStatus();
}
/// <summary>
/// 放卷位
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void upMaterial_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
try
{
WriteInfo write = new WriteInfo(appConfig.processId, 0);
write.ShowDialog();
refreshMaterialInfo(appConfig.processId, "0");
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面upMaterial_MouseDown异常", ex);
}
}
/// <summary>
/// 收卷1轴内侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_1_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 1);
//write.ShowDialog();
}
/// <summary>
/// 收卷1轴外侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_2_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 2);
//write.ShowDialog();
}
/// <summary>
/// 收卷1B轴外侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_6_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 3);
//write.ShowDialog();
}
/// <summary>
/// 收卷1B轴内侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_5_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 4);
//write.ShowDialog();
}
/// <summary>
/// 收卷2A轴内侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_3_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 5);
//write.ShowDialog();
}
/// <summary>
/// 收卷2A轴外侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_4_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 6);
//write.ShowDialog();
}
/// <summary>
/// 收卷2B轴外侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_8_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 7);
//write.ShowDialog();
}
/// <summary>
/// 收卷2B轴内侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void down_7_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//WriteInfo write = new WriteInfo(appConfig.processId, 8);
//write.ShowDialog();
}
public void refreshMaterialInfo(string processId, string position)
{
//DateTime beginTime = DateTime.Now.AddHours(-5);
try
{
Expression<Func<ProShaftInfo, bool>> exp = s1 => true;
exp = exp.And(x => x.processId == appConfig.processId);
Expression<Func<ProShaftInfo, object>> order = s1 => s1.bindTime;
ProShaftInfo shaftInfo = shftInfoService.QueryFirst(exp, order, false).Result;
if (shaftInfo == null)
{
//ListBoxItemAdd(this.RfidLog, "获取卷轴数据为空");
return;
}
Action action;
switch (Convert.ToInt32(shaftInfo.positionId))
{
case 0:
action = () =>
{
this.upMaterial_RFID.Text = "RFID:" + shaftInfo.bindRfid;
};
upMaterial_RFID.Dispatcher.BeginInvoke(action);
action = () =>
{
this.upMaterial_SFC.Text = "SFC:" + shaftInfo.bindSfc;
};
upMaterial_SFC.Dispatcher.BeginInvoke(action);
action = () =>
{
this.upMaterial_EA.Text = "EA:" + shaftInfo.bindEaValue;
};
upMaterial_EA.Dispatcher.BeginInvoke(action);
break;
default:
break;
}
}catch(Exception ex)
{
LogHelperBusiness.LogError("界面refreshMaterialInfo异常", ex);
}
}
/// <summary>
/// 设置拆分数量
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addDownNumber_Click(object sender, System.Windows.RoutedEventArgs e)
{
try
{
//string downNumberItem = this.downNumber.SelectedItem.ToString();
//ConfigHelper.UpdateAppConfig("downNumber", downNumberItem);
//string info = ConfigHelper.GetConfig("downNumber");
//if(downNumberItem == info)
//{
// LogHelperBusiness.LogInfo("设置拆分数量成功,设置为:" + downNumberItem + "卷");
// ListBoxItemAdd(this.RfidLog, "设置拆分数量成功,设置为:" + downNumberItem + "卷");
//}
}
catch(Exception ex)
{
LogHelperBusiness.LogError("设置拆分数量异常", ex);
}
}
}
}