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.

1774 lines
71 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 MaterialTraceability.WebService;
using MaterialTraceability.WebService.MiBatchCompleteSfcAndAdujustQtyServiceService;
using MaterialTraceability.WebService.MiFirstOperationForsfcServiceService;
using MaterialTraceability.WebService.MiSignOffSFCsServiceService;
using MaterialTraceability.WebService.Param;
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;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
namespace MaterialTraceabilityUI
{
/// <summary>
/// CoatingProcess.xaml 的交互逻辑
/// </summary>
public partial class CoatingProcess : UserControl
{
/// <summary>
/// INIFile配置文件
/// </summary>
private IniFileHelper inifile = new IniFileHelper(System.Environment.CurrentDirectory + "/MesConfig/App.InI");
private IMesWebServices MesWebServices = new MesWebServicesImpl();
private EquipBusiness equipBusiness = new EquipBusiness();
private bool[] mesResult = new bool[6];
private List<ProDownRecord> proDownRecords = new List<ProDownRecord>();
private ProShaftInfo proShaftInfo = new ProShaftInfo();
private int eaValue;
private IBaseServices<RecordLogInfo> logInfoServices = new BaseServices<RecordLogInfo>();
private IBaseServices<ProShaftInfo> shftInfoService = new BaseServices<ProShaftInfo>();
private IBaseServices<ProDownRecord> downRecordServices = new BaseServices<ProDownRecord>();
private IBaseServices<ProShaftInfo> shaftInfoServices = new BaseServices<ProShaftInfo>();
private IBaseServices<SysClient> sysClientServices = new BaseServices<SysClient>();
private MesAlarmInfo mesAlarm = new MesAlarmInfo();
private PlcBusiness plcBusiness = new PlcBusiness();
private UpLoadBusiness upLoadBusiness = UpLoadBusiness.Instance;
private AppConfigDto appConfig = AppConfigDto.Instance;
public CoatingProcess()
{
LogHelperBusiness.LogInfo("CoatingProcess初始化调用");
InitializeComponent();
try
{
if (appConfig.processId.Contains("TB"))
{
TBSignalReadBusiness.ViewModelRefreshEvent += ProductionParam;
TBSignalReadBusiness.LogRefreshEvent += LogRefresh;
MainBusiness.LogRefreshEvent += LogRefresh;
TBSignalReadBusiness.GetSFCByMesEvent += GetOrderByMes;
TBSignalReadBusiness.EndProductionEvent += endProduction;
TBSignalReadBusiness.ClearViewRefreshEvent += ClearViewRefresh;
UserControlInit();
refreshThread();
}
}
catch (Exception ex)
{
LogHelperBusiness.LogError("界面异常", ex);
}
}
/// <summary>
/// 卷轴RFID信息刷新
/// </summary>
/// <param name="viewModelDto"></param>
public void ProductionParam(ViewModelDto viewModelDto)
{
Action action;
if (viewModelDto.rfidInfo != null)
{
if (!String.IsNullOrEmpty(viewModelDto.rfidInfo.rfid))
{
if (viewModelDto.rfidInfo.position == 1)
{
action = () =>
{
this.RFID_Position.Text = "RFID:" + viewModelDto.rfidInfo.rfid;
};
RFID_Position.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Position.Text = "EA:";
};
EA_Position.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 2)
{
action = () =>
{
this.RFID_Finish.Text = "RFID:" + viewModelDto.rfidInfo.rfid;
};
RFID_Finish.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Finish.Text = "EA:";
};
EA_Finish.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 3)
{
action = () =>
{
this.RFID_Position1.Text = "RFID:" + viewModelDto.rfidInfo.rfid;
};
RFID_Position1.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Position1.Text = "EA:";
};
EA_Position1.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 4)
{
action = () =>
{
this.RFID_Position2.Text = "RFID:" + viewModelDto.rfidInfo.rfid;
};
RFID_Position2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Position2.Text = "EA:";
};
EA_Position2.Dispatcher.BeginInvoke(action);
}
}
if (!String.IsNullOrEmpty(viewModelDto.rfidInfo.sfc))
{
if (viewModelDto.rfidInfo.position == 1)
{
action = () =>
{
this.SFC_Position.Text = "SFC:" + viewModelDto.rfidInfo.sfc;
};
SFC_Position.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 2)
{
action = () =>
{
this.SFC_Finish.Text = "SFC:" + viewModelDto.rfidInfo.sfc;
};
SFC_Finish.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 3)
{
action = () =>
{
this.SFC_Position1.Text = "SFC:" + viewModelDto.rfidInfo.sfc;
};
SFC_Position1.Dispatcher.BeginInvoke(action);
}
else if (viewModelDto.rfidInfo.position == 4)
{
action = () =>
{
this.SFC_Position2.Text = "SFC:" + viewModelDto.rfidInfo.sfc;
};
SFC_Position2.Dispatcher.BeginInvoke(action);
}
}
}
}
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)
{
equipBusiness.CheckEquipState();
UpdataDeviceStatus();
}
/// <summary>
/// 界面更新设备状态
/// </summary>
private void UpdataDeviceStatus()
{
var info = equipBusiness.Equiplist.FirstOrDefault();
var infos = equipBusiness.Equiplist;
if(infos != null)
{
foreach(var item in infos)
{
App.Current.Dispatcher.Invoke(() =>
{
if (item.equipName.Contains("收卷"))
{
this.TestTC.Text = $"收卷位设备连接{(item.IsConnect ? "" : "")}";
this.TestTC.Foreground = item.IsConnect ? Brushes.Green : Brushes.Red;
string imageUrl = $"pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/{(item.IsConnect ? "" : "-01")}.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.EquipStatusImage.ImageSource = bitmapImage;
}
else
{
this.TestTC2.Text = $"放卷位设备连接{(item.IsConnect ? "" : "")}";
this.TestTC2.Foreground = item.IsConnect ? Brushes.Green : Brushes.Red;
string imageUrl = $"pack://application:,,,/MaterialTraceabilityUI;component/Assets/Images/{(item.IsConnect ? "" : "-01")}.png";
BitmapImage bitmapImage = new BitmapImage(new Uri(imageUrl));
this.EquipStatusImage2.ImageSource = bitmapImage;
}
});
}
}
//Action action;
//if (info != null)
//{
// if (info.IsConnect)
// {
// action = () =>
// {
// this.TestTC.Text = "收卷位设备连接成功";
// 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.EquipStatusImage.ImageSource = bitmapImage;
// };
// EquipStatusImage.Dispatcher.BeginInvoke(action);
// }
// else
// {
// action = () =>
// {
// this.TestTC.Text = "收卷位设备连接失败";
// 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.EquipStatusImage.ImageSource = bitmapImage;
// };
// EquipStatusImage.Dispatcher.BeginInvoke(action);
// }
//}
}
/// <summary>
/// 结束异常初始化按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Init_End(object sender, RoutedEventArgs e)
{
if (StringExtension.IsBlank(this.proShaftInfo.bindRfid))
{
ListBoxItemAdd(this.RfidLog, "下料记录为空,生产过程中未记录到RFID条码信息");
return;
}
if (!this.mesResult[0])
{
if (!SignOffSFCs(this.proShaftInfo))
{
return;
}
}
if (!this.mesResult[1])
{
if (!this.mesResult[0])
{
if (!SignOffSFCs(this.proShaftInfo))
{
return;
}
}
//A面开始调整数量事件
if (BeginAdjustNumberByAFunction(this.eaValue, this.proShaftInfo))
{
Action action;
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Green;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
}
else
{
Action action;
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Red;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
return;
}
}
if (!this.mesResult[2])
{
//A面自动开始
if (AutoBeginA(this.eaValue, this.proShaftInfo))
{
this.BeginAdjustNumberByA.Background = Brushes.Green;
Action action;
action = () =>
{
this.BeginAdjustNumberByAText.Foreground = Brushes.White;
};
BeginAdjustNumberByAText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByATexts.Foreground = Brushes.White;
};
BeginAdjustNumberByATexts.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CollectA.Background = Brushes.Yellow;
};
CollectA.Dispatcher.BeginInvoke(action);
ListBoxItemAdd(this.RfidLog, "A面数据收集与物料消耗收集完成后点击A面收数按钮");
}
else
{
this.BeginAdjustNumberByA.Background = Brushes.Red;
return;
}
}
}
/// <summary>
/// 工单下达接口调用结果
/// </summary>
/// <param name="result"></param>
/// <param name="sfc"></param>
public void GetOrderByMes(bool result, string sfc)
{
Action action;
if (result)
{
action = () =>
{
this.CancelSfc.Background = Brushes.Green;
};
}
else
{
action = () =>
{
this.CancelSfc.Background = Brushes.Red;
};
}
CancelSfc.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CancelSfcText.Foreground = Brushes.White;
};
CancelSfcText.Dispatcher.BeginInvoke(action);
}
/// <summary>
/// 生产结束流程
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
public void endProduction(int ea, ProShaftInfo shaftInfo)
{
//结束流程初始化
ButtonInit();
LogHelperBusiness.LogInfo("进入收卷结束流程" + shaftInfo.bindSfc);
Action action;
action = () =>
{
this.EndSfc.Text = shaftInfo.bindSfc;
};
this.EndSfc.Dispatcher.BeginInvoke(action);
if (shaftInfo.positionId == "1")
{
action = () =>
{
this.EA_Position.Text = "EA: " + ea.ToString();
};
this.EA_Position.Dispatcher.BeginInvoke(action);
}
else
{
action = () =>
{
this.EA_Finish.Text = "EA: " + ea.ToString();
};
this.EA_Finish.Dispatcher.BeginInvoke(action);
}
this.eaValue = ea;
this.proShaftInfo = shaftInfo;
if (StringExtension.IsBlank(shaftInfo.bindRfid))
{
ListBoxItemAdd(this.RfidLog, "下料信息为空,生产过程中未记录到RFID条码信息");
LogHelperBusiness.LogInfo("下料信息为空,生产过程中未记录到RFID条码信息" + shaftInfo.bindSfc);
return;
}
this.UpdateDownRecord(shaftInfo.bindRfid, shaftInfo.bindSfc, 0);
//注销SFC
if (!SignOffSFCs(shaftInfo))
{
return;
}
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Yellow;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
//A面调整数量事件
if (BeginAdjustNumberByAFunction(ea, shaftInfo))
{
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Green;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
//A面入账开始
if (!AutoBeginA(ea, shaftInfo))
{
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Red;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
return;
}
}
else
{
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Red;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
return;
}
action = () =>
{
this.BeginAdjustNumberByAText.Foreground = Brushes.White;
};
BeginAdjustNumberByAText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByATexts.Foreground = Brushes.White;
};
BeginAdjustNumberByATexts.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CollectA.Background = Brushes.Yellow;
};
CollectA.Dispatcher.BeginInvoke(action);
ListBoxItemAdd(this.RfidLog, "A面数据收集与物料消耗收集完成后点击A面收数按钮");
LogHelperBusiness.LogInfo("日志排查进入收卷完工流程打印绑定信息shaftInfo:" + JsonChange.ModeToJson(this.proShaftInfo));
}
/// <summary>
/// 注销SFC接口
/// </summary>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool SignOffSFCs(ProShaftInfo shaftInfo)
{
LogRefresh(LogType.MesLog, "调用MES注销SFC接口");
LogHelperBusiness.LogInfo("调用MES注销SFC接口" + shaftInfo.bindSfc);
MiSignOffSFCsServiceServiceParam miSignOffSFCsServiceServiceParam = new MiSignOffSFCsServiceServiceParam()
{
url = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "url"),
site = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "site"),
user = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "user"),
operation = appConfig.operationByA,
operationRevision = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "operationRevision"),
activityId = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "activityId"),
Resource = appConfig.resource,
amount = inifile.IniReadValue("MiSignOffSFCsServiceServiceParam", "amount"),
sfcDataArray = null,
sfc = shaftInfo.bindSfc,
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("调用MES注销SFC接口请求参数" + JsonChange.ModeToJson(miSignOffSFCsServiceServiceParam));
if (appConfig.isMesFlag == 1)
{
miSignOffSFCsResponse signOffSFCsResponse = MesWebServices.iMiSignOffSFCsServiceService(miSignOffSFCsServiceServiceParam);
LogHelperBusiness.LogInfo("调用MES注销SFC接口返回参数" + JsonChange.ModeToJson(signOffSFCsResponse));
if (signOffSFCsResponse.@return.code > 0)
{
if (signOffSFCsResponse.@return.code == 13900)
{
this.mesResult[0] = true;
return true;
}
else
{
LogRefresh(LogType.MesLog, "注销SFC接口调用失败" + upLoadBusiness.GetMesMessage(signOffSFCsResponse.@return.code, signOffSFCsResponse.@return.message));
LogRefresh(LogType.AlarmLog, "注销SFC接口调用失败" + upLoadBusiness.GetMesMessage(signOffSFCsResponse.@return.code, signOffSFCsResponse.@return.message));
this.mesResult[0] = false;
return false;
}
}
}
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("调用MES注销SFC接口异常" + ex.Message);
LogRefresh(LogType.MesLog, "注销SFC接口调用异常" + ex.Message);
LogRefresh(LogType.AlarmLog, "注销SFC接口调用异常" + ex.Message);
WebServiceLog.saveMiSignOffSFCsServiceService(miSignOffSFCsServiceServiceParam, null, beginTime, ex.Message);
this.mesResult[0] = false;
return false;
}
//更新完工步骤
this.UpdateDownRecord(shaftInfo.bindRfid, shaftInfo.bindSfc, 1);
LogRefresh(LogType.MesLog, String.Format("注销SFC接口调用成功,SFC:{0}", shaftInfo.bindSfc));
this.mesResult[0] = true;
return true;
}
/// <summary>
/// 开始调整A面数量
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool BeginAdjustNumberByAFunction(int ea, ProShaftInfo proShaftInfo)
{
LogHelperBusiness.LogInfo("开始调整A面数量接口");
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam miBatchCompleteSfcAndAdujustQtyServiceServiceParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
url = inifile.IniReadValue("AdujustQtyParam", "url"),
site = inifile.IniReadValue("AdujustQtyParam", "site"),
sfcPre = proShaftInfo.bindSfc,
processLotPre = "",
operation = appConfig.operationByA,
operationRevision = inifile.IniReadValue("AdujustQtyParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("AdujustQtyParam", "user"),
activity = inifile.IniReadValue("AdujustQtyParam", "activity"),
modeProcessSfc = ModeProcessSfc.MODE_NONE,
sfcList = new miBatchCompleteSfcAndAdujustQtySfcEntity[]
{
new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = proShaftInfo.bindRfid,
sfc = "",
qty = ea.ToString(),
unit = "EA"
}
}
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("开始调整A面数量接口请求参数" + JsonChange.ModeToJson(miBatchCompleteSfcAndAdujustQtyServiceServiceParam));
Action action;
if (appConfig.isMesFlag == 1)
{
var requestResult = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam);
LogHelperBusiness.LogInfo("开始调整A面数量接口返回参数" + JsonChange.ModeToJson(requestResult));
if (requestResult == null || requestResult.@return.code > 0)
{
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Red;
};
LogRefresh(LogType.MesLog, "调整A面数量接口调用失败" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
LogRefresh(LogType.AlarmLog, "调整A面数量接口调用失败" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
this.mesResult[1] = false;
return false;
}
}
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.Green;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("开始调整A面数量接口异常" + ex.Message);
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam, null, beginTime, ex.Message);
LogRefresh(LogType.MesLog, "调整A面数量接口异常" + ex.Message);
LogRefresh(LogType.AlarmLog, "调整A面数量接口异常" + ex.Message);
this.mesResult[1] = false;
return false;
}
//更新完工步骤
this.UpdateDownRecord(proShaftInfo.bindRfid, proShaftInfo.bindSfc, 2);
LogRefresh(LogType.MesLog, String.Format("调整A面数量接口调用成功数量调整为", ea));
this.mesResult[1] = true;
return true;
}
/// <summary>
/// A面自动入账
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool AutoBeginA(int ea, ProShaftInfo shaftInfo)
{
LogHelperBusiness.LogInfo("调用A面自动入账接口");
MiFirstOperationForsfcServiceServiceParam miFirstOperationForsfcServiceServiceParam = new MiFirstOperationForsfcServiceServiceParam()
{
url = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "url"),
site = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "site"),
sfc = shaftInfo.bindSfc,
processLot = "",
operation = appConfig.operationByA,
operationRevision = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "user"),
activity = "",
modeProcessSfc = "MODE_START_SFC",
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("调用A面自动入账接口请求参数" + JsonChange.ModeToJson(miFirstOperationForsfcServiceServiceParam));
if (appConfig.isMesFlag == 1)
{
miFirstOperationForsfcResponse firstOperationForsfcResponse = MesWebServices.iMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam);
LogHelperBusiness.LogInfo("调用A面自动入账接口返回参数" + JsonChange.ModeToJson(firstOperationForsfcResponse));
if (firstOperationForsfcResponse.@return.code > 0)
{
ListBoxItemAdd(this.MesLog, "A面自动入账异常" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
ListBoxItemAdd(this.AlarmLog, "A面自动入账异常" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
this.mesResult[2] = false;
return false;
}
}
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("调用A面自动入账接口异常" + ex.Message);
ListBoxItemAdd(this.MesLog, "A面自动入账接口调用异常" + ex.Message);
WebServiceLog.saveMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam, null, beginTime, ex.Message);
this.mesResult[2] = false;
return false;
}
//更新完工步骤
this.UpdateDownRecord(proShaftInfo.bindRfid, proShaftInfo.bindSfc, 3);
ListBoxItemAdd(this.MesLog, "A面自动入账成功");
this.mesResult[2] = true;
return true;
}
/// <summary>
/// A面收数完工
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Click_A(object sender, RoutedEventArgs e)
{
LogHelperBusiness.LogInfo("A面收集数据物料消耗");
if (StringExtension.IsBlank(this.proShaftInfo.bindRfid))
{
LogHelperBusiness.LogInfo("未进入结束流程");
ListBoxItemAdd(this.AlarmLog, "未进入结束流程");
return;
}
Action action;
//A面完工
if (!EndAdjustNumberByAFunction(this.eaValue, this.proShaftInfo))
{
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Red;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
return;
}
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Green;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByBText.Foreground = Brushes.White;
};
BeginAdjustNumberByBText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginBdjustNumberByBText2.Foreground = Brushes.White;
};
BeginBdjustNumberByBText2.Dispatcher.BeginInvoke(action);
//开始调整B面数量
if (!BeginAdjustNumberByBFunction(this.eaValue, this.proShaftInfo))
{
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Red;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
return;
}
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Green;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByBText.Foreground = Brushes.White;
};
BeginAdjustNumberByBText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginBdjustNumberByBText2.Foreground = Brushes.White;
};
BeginBdjustNumberByBText2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CollectB.Background = Brushes.Yellow;
};
CollectB.Dispatcher.BeginInvoke(action);
}
/// <summary>
/// A面调整完成
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool EndAdjustNumberByAFunction(int ea, ProShaftInfo shaftInfo)
{
LogHelperBusiness.LogInfo("调用A面调整完成接口");
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam miBatchCompleteSfcAndAdujustQtyServiceServiceParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
url = inifile.IniReadValue("AdujustQtyParam", "url"),
site = inifile.IniReadValue("AdujustQtyParam", "site"),
sfcPre = "",
processLotPre = shaftInfo.bindRfid,
operation = appConfig.operationByA,
operationRevision = inifile.IniReadValue("AdujustQtyParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("AdujustQtyParam", "user"),
activity = inifile.IniReadValue("AdujustQtyParam", "activity"),
modeProcessSfc = ModeProcessSfc.MODE_COMPLETE_SFC_POST_DC, //冷压MODE_COMPLETE_SFC_POST_DC、模切MODE_COMPLETE_SFC_POST_DC
sfcList = new miBatchCompleteSfcAndAdujustQtySfcEntity[]
{
new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = shaftInfo.bindRfid,
sfc = "",
qty = ea.ToString(),
unit = "EA"
}
}
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("调用A面调整完成接口请求参数" + JsonChange.ModeToJson(miBatchCompleteSfcAndAdujustQtyServiceServiceParam));
Action action;
if (appConfig.isMesFlag == 1)
{
var requestResult = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam);
LogHelperBusiness.LogInfo("调用A面调整完成接口返回参数" + JsonChange.ModeToJson(requestResult));
if (requestResult == null || requestResult.@return.code > 0)
{
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Red;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
LogRefresh(LogType.MesLog, "A面调整完工失败:" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
LogRefresh(LogType.AlarmLog, "A面调整完工失败:" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
this.mesResult[3] = false;
return false;
}
}
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.Green;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("A面调整完工接口异常" + ex.Message);
LogRefresh(LogType.AlarmLog, "A面调整完工接口异常:" + ex.Message);
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam, null, beginTime, ex.Message);
this.mesResult[3] = false;
return false;
}
Action actiona;
actiona = () =>
{
this.CollectA.Background = Brushes.Green;
};
CollectA.Dispatcher.BeginInvoke(actiona);
actiona = () =>
{
this.ADataCollect.Foreground = Brushes.White;
};
ADataCollect.Dispatcher.BeginInvoke(actiona);
actiona = () =>
{
this.ADataCollect2.Foreground = Brushes.White;
};
ADataCollect2.Dispatcher.BeginInvoke(actiona);
//更新完工步骤
this.UpdateDownRecord(proShaftInfo.bindRfid, proShaftInfo.bindSfc, 4);
LogRefresh(LogType.MesLog, "调整A面完工接口调用成功");
this.mesResult[3] = true;
return true;
}
/// <summary>
/// B面开始
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool BeginAdjustNumberByBFunction(int ea, ProShaftInfo shaftInfo)
{
LogHelperBusiness.LogInfo("调用B面开始接口");
MiFirstOperationForsfcServiceServiceParam miFirstOperationForsfcServiceServiceParam = new MiFirstOperationForsfcServiceServiceParam()
{
url = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "url"),
site = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "site"),
sfc = shaftInfo.bindSfc,
processLot = "",
operation = appConfig.operationByB,
operationRevision = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("MiFirstOperationForsfcServiceServiceParam", "user"),
activity = "",
modeProcessSfc = "MODE_START_SFC",
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("调用B面开始接口请求参数" + JsonChange.ModeToJson(miFirstOperationForsfcServiceServiceParam));
if (appConfig.isMesFlag == 1)
{
miFirstOperationForsfcResponse firstOperationForsfcResponse = MesWebServices.iMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam);
LogHelperBusiness.LogInfo("调用B面开始接口返回参数" + JsonChange.ModeToJson(firstOperationForsfcResponse));
WebServiceLog.saveMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam, firstOperationForsfcResponse, beginTime, "");
if (firstOperationForsfcResponse.@return.code > 0)
{
ListBoxItemAdd(this.MesLog, "B面自动入账失败" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
ListBoxItemAdd(this.AlarmLog, "B面自动入账失败" + upLoadBusiness.GetMesMessage(firstOperationForsfcResponse.@return.code, firstOperationForsfcResponse.@return.message));
this.mesResult[4] = false;
return false;
}
}
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("调用B面开始接口异常" + ex.Message);
WebServiceLog.saveMiFirstOperationForsfcServiceService(miFirstOperationForsfcServiceServiceParam, null, beginTime, ex.Message);
ListBoxItemAdd(this.MesLog, "B面自动入账失败" + ex.Message);
ListBoxItemAdd(this.AlarmLog, "B面自动入账失败" + ex.Message);
this.mesResult[4] = false;
return false;
}
//更新完工步骤
this.UpdateDownRecord(proShaftInfo.bindRfid, proShaftInfo.bindSfc, 5);
ListBoxItemAdd(this.MesLog, "B面自动入账完成");
this.mesResult[4] = true;
return true;
}
/// <summary>
/// B面收数完工
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Click_B(object sender, RoutedEventArgs e)
{
LogHelperBusiness.LogInfo("B面收集数据物料消耗");
if (StringExtension.IsBlank(this.proShaftInfo.bindRfid))
{
LogHelperBusiness.LogInfo("未进入结束流程");
ListBoxItemAdd(this.AlarmLog, "未进入结束流程");
return;
}
Action action;
//B面完工
if (!EndAdjustNumberByBFunction(this.eaValue, this.proShaftInfo))
{
action = () =>
{
this.EndAdjustNumberByB.Background = Brushes.Red;
};
EndAdjustNumberByB.Dispatcher.BeginInvoke(action);
return;
}
action = () =>
{
this.EndAdjustNumberByB.Background = Brushes.Green;
};
EndAdjustNumberByB.Dispatcher.BeginInvoke(action);
ListBoxItemAdd(this.RfidLog, "完工流程结束");
//收卷流程完成
DownMaterialEnd();
//流程结束初始化流程状态
ButtonInit();
}
/// <summary>
/// B面调整完成
/// </summary>
/// <param name="ea"></param>
/// <param name="proDownRecord"></param>
/// <returns></returns>
public bool EndAdjustNumberByBFunction(int ea, ProShaftInfo shaftInfo)
{
LogHelperBusiness.LogInfo("开始调用B面调整完成接口");
MiBatchCompleteSfcAndAdujustQtyServiceServiceParam miBatchCompleteSfcAndAdujustQtyServiceServiceParam = new MiBatchCompleteSfcAndAdujustQtyServiceServiceParam()
{
url = inifile.IniReadValue("AdujustQtyParam", "url"),
site = inifile.IniReadValue("AdujustQtyParam", "site"),
sfcPre = "",
processLotPre = shaftInfo.bindRfid,
operation = appConfig.operationByB,
operationRevision = inifile.IniReadValue("AdujustQtyParam", "operationRevision"),
resource = appConfig.resource,
user = inifile.IniReadValue("AdujustQtyParam", "user"),
activity = inifile.IniReadValue("AdujustQtyParam", "activity"),
modeProcessSfc = ModeProcessSfc.MODE_COMPLETE_SFC_POST_DC, //冷压MODE_COMPLETE_SFC_POST_DC、模切MODE_COMPLETE_SFC_POST_DC
sfcList = new miBatchCompleteSfcAndAdujustQtySfcEntity[]
{
new miBatchCompleteSfcAndAdujustQtySfcEntity()
{
processLot = shaftInfo.bindRfid,
sfc = shaftInfo.bindSfc,
qty = ea.ToString(),
unit = "EA"
}
}
};
DateTime beginTime = DateTime.Now;
try
{
LogHelperBusiness.LogInfo("调用B面调整完成接口请求参数:" + JsonChange.ModeToJson(miBatchCompleteSfcAndAdujustQtyServiceServiceParam));
Action action;
if (appConfig.isMesFlag == 1)
{
var requestResult = MesWebServices.iMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam);
LogHelperBusiness.LogInfo("调用B面调整完成接口返回参数:" + JsonChange.ModeToJson(requestResult));
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam, requestResult, beginTime, "");
if (requestResult == null || requestResult.@return.code > 0)
{
action = () =>
{
this.EndAdjustNumberByB.Background = Brushes.Red;
};
EndAdjustNumberByB.Dispatcher.BeginInvoke(action);
LogRefresh(LogType.MesLog, "调整B面完工失败" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
LogRefresh(LogType.AlarmLog, "调整B面完工失败" + upLoadBusiness.GetMesMessage(requestResult.@return.code, requestResult.@return.message));
this.mesResult[5] = false;
return false;
}
}
action = () =>
{
this.EndAdjustNumberByB.Background = Brushes.Green;
};
EndAdjustNumberByB.Dispatcher.BeginInvoke(action);
}
catch (Exception ex)
{
LogHelperBusiness.LogInfo("调用B面调整完成接口返回异常:" + ex.Message);
WebServiceLog.saveMiBatchCompleteSfcAndAdujustQtyServiceService(miBatchCompleteSfcAndAdujustQtyServiceServiceParam, null, beginTime, ex.Message);
LogRefresh(LogType.MesLog, "调整B面完工接口异常" + ex.Message);
LogRefresh(LogType.AlarmLog, "调整B面完工接口异常" + ex.Message);
this.mesResult[5] = false;
return false;
}
//更新完工步骤
this.UpdateDownRecord(proShaftInfo.bindRfid, proShaftInfo.bindSfc, 6);
LogRefresh(LogType.MesLog, "调整B面完工接口调用成功");
this.mesResult[5] = true;
return true;
}
/// <summary>
/// 收卷流程完成后执行
/// </summary>
public async void DownMaterialEnd()
{
try
{
//更新下料信息
Expression<Func<ProDownRecord, bool>> downExp = s1 => true;
downExp = downExp.And(x => x.Rfid == this.proShaftInfo.bindRfid && x.Sfc == this.proShaftInfo.bindSfc);
Expression<Func<ProDownRecord, object>> downOrder = (s) => s.RecordTime;
ProDownRecord downRecord = await downRecordServices.QueryFirst(downExp, downOrder, false);
if (downRecord != null)
{
downRecord.eaValue = this.eaValue;
downRecord.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await downRecordServices.Update(downRecord);
upLoadBusiness.UpdateDownRecord(downRecord);
}
#region 界面刷新
Action action;
if (proShaftInfo.positionId == "1")
{
if ("RFID:" + this.proShaftInfo.bindRfid == this.RFID_Position.Text)
{
action = () =>
{
this.RFID_Position.Text = "RFID:";
};
await this.RFID_Position.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Position.Text = "SFC:";
};
await this.SFC_Position.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Position.Text = "EA:";
};
await this.EA_Position.Dispatcher.BeginInvoke(action);
}
}
else
{
if ("RFID:" + this.proShaftInfo.bindRfid == this.RFID_Finish.Text)
{
action = () =>
{
this.RFID_Finish.Text = "RFID:";
};
await this.RFID_Finish.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Finish.Text = "SFC:";
};
await this.SFC_Finish.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EA_Finish.Text = "EA:";
};
await this.EA_Finish.Dispatcher.BeginInvoke(action);
}
}
#endregion
//获取当前卷轴绑定的RFID、SFC是否和流程内的一致一样则清空不一样则不处理
Expression<Func<ProShaftInfo, bool>> shaftExp = s1 => true;
shaftExp = shaftExp.And(x => x.bindRfid == this.proShaftInfo.bindRfid && x.bindSfc == this.proShaftInfo.bindSfc && x.bindEaValue == this.proShaftInfo.bindEaValue && x.processId == appConfig.processId);
Expression<Func<ProShaftInfo, object>> shaftOrder = x => x.bindTime;
ProShaftInfo shaftInfo = await shaftInfoServices.QueryFirst(shaftExp, shaftOrder, false);
if (shaftInfo != null)
{
LogHelperBusiness.LogInfo("本地绑定RFID" + shaftInfo.bindRfid + "流程内RFID" + this.proShaftInfo.bindRfid);
if (shaftInfo.bindRfid == this.proShaftInfo.bindRfid)
{
LogHelperBusiness.LogInfo("清除收料轴绑定信息");
//清空卷轴绑定的信息
this.proShaftInfo.bindRfid = "";
this.proShaftInfo.bindSfc = "";
this.proShaftInfo.bindEaValue = "";
await shaftInfoServices.Update(this.proShaftInfo);
}
}
LogRefresh(LogType.RfidLog, this.proShaftInfo.shaftName + "收卷结束,下发下料信号");
//下发下料信号
plcBusiness.writePlc(appConfig.TbAddress., 0);
LogHelperBusiness.LogInfo("收卷流程结束下发下料信号D9614");
}
catch (Exception ex)
{
LogRefresh(LogType.RfidLog, "收卷完成清空卷轴状态异常:" + ex.Message);
LogHelperBusiness.LogError("收卷完成清空卷轴状态异常", ex);
}
}
/// <summary>
/// 界面初始化
/// </summary>
public void ButtonInit()
{
try
{
Action action;
action = () =>
{
this.BeginAdjustNumberByA.Background = Brushes.White;
};
BeginAdjustNumberByA.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CollectA.Background = Brushes.White;
};
CollectA.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EndAdjustNumberByA.Background = Brushes.White;
};
EndAdjustNumberByA.Dispatcher.BeginInvoke(action);
action = () =>
{
this.CollectB.Background = Brushes.White;
};
CollectB.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EndAdjustNumberByB.Background = Brushes.White;
};
EndAdjustNumberByB.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginBdjustNumberByBText2.Foreground = Brushes.Gray;
};
BeginBdjustNumberByBText2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByBText.Foreground = Brushes.Gray;
};
BeginAdjustNumberByBText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByAText.Foreground = Brushes.Gray;
};
BeginAdjustNumberByAText.Dispatcher.BeginInvoke(action);
action = () =>
{
this.BeginAdjustNumberByATexts.Foreground = Brushes.Gray;
};
BeginAdjustNumberByATexts.Dispatcher.BeginInvoke(action);
action = () =>
{
this.ADataCollect.Foreground = Brushes.Gray;
};
ADataCollect.Dispatcher.BeginInvoke(action);
action = () =>
{
this.ADataCollect2.Foreground = Brushes.Gray;
};
ADataCollect2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.EndSfc.Text = "";
};
this.EndSfc.Dispatcher.BeginInvoke(action);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void LogRefresh(LogType logType, string massage)
{
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);
upLoadBusiness.SaveLogRecord(0, massage);
}
logInfoServices.Add(new RecordLogInfo()
{
id = System.Guid.NewGuid().ToString("N"),
processId = "TB",
machineId = ConfigurationManager.AppSettings["machineId"].ToString(),
alarmType = logTypeStr,
alarmInfo = info,
isAlarm = isAlarm,
recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
});
}
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)
{
LogHelperBusiness.ViewLog(massage);
if (logInfos != null)
{
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 loginList = logInfos.ToArray();
var strArray = loginList.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);
});
}
//for(int i = 0; i < 40; i++)
//{
// SplitByLen(strArray[i].message, 50).ForEach(x =>
// {
// listBox.Items.Add(x);
// });
//}
}
#region 历史代码
//listBox.Items.Add(String.Format("{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), massage));
//string[] strArray = new string[listBox.Items.Count];
//listBox.Items.CopyTo(strArray, 0);
//listBox.Items.Clear();
//listBox.Items.CopyTo(strArray, 0);
//var strArray = logInfos.OrderByDescending(x => x.recordTime).ToList();
//if (strArray.Count() <= refreshAmount)
//{
// foreach (string str in strArray)
// {
// SplitByLen(str, 40).ForEach(x =>
// {
// listBox.Items.Add(x);
// });
// }
//}
//else
//{
// for(int i = 0; i < refreshAmount; i++)
// {
// SplitByLen(strArray[i], 45).ForEach(x =>
// {
// listBox.Items.Add(x);
// });
// }
//}
#endregion
};
listBox.Dispatcher.BeginInvoke(action);
}
public static List<string> SplitByLen(string str, int separatorCharNum)
{
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;
}
private async void UpdateDownRecord(string rfid, string sfc, int finish)
{
Expression<Func<ProDownRecord, bool>> downExp = s1 => true;
downExp = downExp.And(x => x.Rfid == rfid && x.Sfc == sfc);
Expression<Func<ProDownRecord, object>> downOrder = (s) => s.RecordTime;
ProDownRecord downRecord = await downRecordServices.QueryFirst(downExp, downOrder, false);
if (downRecord != null)
{
downRecord.eaValue = eaValue;
downRecord.IsProduction = finish == 6 ? 2 : 1;
downRecord.isFinish = finish;
downRecord.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await downRecordServices.Update(downRecord);
upLoadBusiness.UpdateDownRecord(downRecord);
}
}
//窗体初始化
private void UserControlInit()
{
//查询前五个小时的数据
DateTime beginTime = DateTime.Now.AddHours(-5);
ListBoxItemAdd(this.RfidLog, "涂布RFID物料追溯系统初始化");
Expression<Func<ProShaftInfo, bool>> exp = s1 => true;
exp = exp.And(x => x.processId == appConfig.processId && Convert.ToDateTime(x.bindTime) > beginTime);
List<ProShaftInfo> shaftInfos = shftInfoService.Query(exp).Result;
if (shaftInfos == null || shaftInfos.Count == 0)
{
ListBoxItemAdd(this.RfidLog, "程序初始化数据为空");
return;
}
shaftInfos.ForEach(x =>
{
Action action;
switch (Convert.ToInt32(x.positionId))
{
case 1:
action = () =>
{
this.RFID_Position.Text = "RFID:" + x.bindRfid;
};
RFID_Position.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Position.Text = "SFC:" + x.bindSfc;
};
SFC_Position.Dispatcher.BeginInvoke(action);
break;
case 2:
action = () =>
{
this.RFID_Finish.Text = "RFID:" + x.bindRfid;
};
RFID_Finish.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Finish.Text = "SFC:" + x.bindSfc;
};
SFC_Finish.Dispatcher.BeginInvoke(action);
break;
default:
break;
}
});
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
UpdataDeviceStatus();
//加载工单预警信息
RefreshShopOrderAmountInfo();
}
private void Border_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
WriteInfo write = new WriteInfo("TB", 1);
write.ShowDialog();
RefreshMaterialInfo("TB", "1");
}
private void StackPanel_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
WriteInfo write = new WriteInfo("TB", 2);
write.ShowDialog();
RefreshMaterialInfo("TB", "2");
}
/// <summary>
/// 刷新界面
/// </summary>
/// <param name="processId"></param>
/// <param name="position"></param>
public void RefreshMaterialInfo(string processId, string position)
{
DateTime beginTime = DateTime.Now.AddHours(-5);
Expression<Func<ProShaftInfo, bool>> exp = s1 => true;
exp = exp.And(x => x.processId == appConfig.processId && Convert.ToDateTime(x.bindTime) > beginTime);
Expression<Func<ProShaftInfo, object>> order = s1 => s1.bindTime;
ProShaftInfo shaftInfo = shaftInfoServices.QueryFirst(exp, order, false).Result;
if (shaftInfo == null)
{
//ListBoxItemAdd(this.RfidLog, "获取卷轴数据为空");
return;
}
Action action;
switch (Convert.ToInt32(shaftInfo.positionId))
{
case 1:
action = () =>
{
this.RFID_Position.Text = "RFID:" + shaftInfo.bindRfid;
};
RFID_Position.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Position.Text = "SFC:" + shaftInfo.bindSfc;
};
SFC_Position.Dispatcher.BeginInvoke(action);
break;
case 2:
action = () =>
{
this.RFID_Finish.Text = "RFID:" + shaftInfo.bindRfid;
};
RFID_Finish.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Finish.Text = "SFC:" + shaftInfo.bindSfc;
};
SFC_Finish.Dispatcher.BeginInvoke(action);
break;
case 3:
action = () =>
{
this.RFID_Position1.Text = "RFID:" + shaftInfo.bindRfid;
};
RFID_Position1.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Position1.Text = "SFC:" + shaftInfo.bindSfc;
};
SFC_Position1.Dispatcher.BeginInvoke(action);
break;
case 4:
action = () =>
{
this.RFID_Position2.Text = "RFID:" + shaftInfo.bindRfid;
};
RFID_Position2.Dispatcher.BeginInvoke(action);
action = () =>
{
this.SFC_Position2.Text = "SFC:" + shaftInfo.bindSfc;
};
SFC_Position2.Dispatcher.BeginInvoke(action);
break;
default:
break;
}
}
private void ClearViewRefresh()
{
try
{
ButtonInit();
this.proShaftInfo.bindRfid = "";
this.proShaftInfo.bindSfc = "";
this.proShaftInfo.bindEaValue = "";
Action action;
action = () =>
{
this.EndSfc.Text = "";
};
this.EndSfc.Dispatcher.BeginInvoke(action);
//this.EndSfc.Text = "";
}
catch (Exception ex)
{
LogHelperBusiness.LogError("界面初始化事件处理异常", ex);
}
}
/// <summary>
/// 保存工单预警设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TextBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
LogHelperBusiness.LogInfo("设置工单预警");
string shopOrderText = "";
string orderAlarmAmount = "35000";
if (StringExtension.IsBlank(this.shopOrderText.Text))
{
MessageBox.Show("请输入需要设置预警的工单编号");
return;
}
else
{
shopOrderText = this.shopOrderText.Text;
}
if (StringExtension.IsNotBlank(this.orderAlarmAmountText.Text))
{
orderAlarmAmount = this.orderAlarmAmountText.Text;
}
if (SetShopOrderAmountInfo(shopOrderText, orderAlarmAmount))
{
MessageBox.Show("工单预警设置成功");
LogHelperBusiness.LogInfo("工单预警设置成功");
this.orderAlarmAmountText.Text = orderAlarmAmount;
}
else
{
MessageBox.Show("工单预警数量设置失败");
}
}
/// <summary>
/// 工单预警信息设置
/// </summary>
/// <param name="shopOrderText">工单编号</param>
/// <param name="orderAlarmAmount">工单预警数量</param>
private bool SetShopOrderAmountInfo(string shopOrderText, string orderAlarmAmount)
{
bool result = false;
//保存工单预警信息 =>保存至SysClient表中
//判断配置中是否存在该项配置orderAlarmAmount
try
{
Expression<Func<SysClient, bool>> exp = s1 => true;
exp = exp.And(x => x.paramType == "ShopOrderAlarm");
List<SysClient> clients = sysClientServices.Query(exp).Result;
if (clients.Count == 0) //添加配置
{
clients = new List<SysClient>();
SysClient ShopOrder = new SysClient()
{
paramKey = "ShopOrder",
paramValue = shopOrderText,
paramType = "ShopOrderAlarm",
processId = appConfig.processId,
remark = "涂布工单预警设置:工单编号"
};
SysClient OrderAlarmAmount = new SysClient()
{
paramKey = "OrderAlarmAmount",
paramValue = orderAlarmAmount,
paramType = "ShopOrderAlarm",
processId = appConfig.processId,
remark = "涂布工单预警设置:工单预警数量"
};
clients.Add(ShopOrder);
clients.Add(OrderAlarmAmount);
LogHelperBusiness.LogInfo("设置工单预警,修改工单预警配置参数:" + JsonChange.ModeToJson(clients));
var info = sysClientServices.Add(clients).Result;
if (info > 0)
{
result = true;
}
}
else //修改参数
{
LogHelperBusiness.LogInfo("设置工单预警,原工单预警配置参数:" + JsonChange.ModeToJson(clients));
foreach (var item in clients)
{
if (item.paramKey == "ShopOrder")
{
item.processId = appConfig.processId;
item.paramValue = shopOrderText;
}
if (item.paramKey == "OrderAlarmAmount")
{
item.processId = appConfig.processId;
item.paramValue = orderAlarmAmount;
}
}
LogHelperBusiness.LogInfo("设置工单预警,修改工单预警配置参数:" + JsonChange.ModeToJson(clients));
var info = sysClientServices.Update(clients).Result;
if (info)
{
result = true;
}
}
}
catch (Exception ex)
{
LogHelperBusiness.LogError("工单预警数量设置异常", ex);
}
return result;
}
/// <summary>
/// 刷新工单预警信息
/// </summary>
private void RefreshShopOrderAmountInfo()
{
Expression<Func<SysClient, bool>> exp = s1 => true;
exp = exp.And(x => x.paramType == "ShopOrderAlarm");
List<SysClient> clients = sysClientServices.Query(exp).Result;
if (clients.Count > 0)
{
foreach (var item in clients)
{
if (item.paramKey == "ShopOrder")
this.shopOrderText.Text = item.paramValue;
if (item.paramKey == "OrderAlarmAmount")
this.orderAlarmAmountText.Text = item.paramValue;
}
}
}
private void FJ_A_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
WriteInfo write = new WriteInfo("TB", 3);
write.ShowDialog();
RefreshMaterialInfo("TB", "3");
}
private void FJ_B_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
WriteInfo write = new WriteInfo("TB", 4);
write.ShowDialog();
RefreshMaterialInfo("TB", "4");
}
}
}