using CommonFunc; using CommonFunc.Tools; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Timers; using System.Windows; using System.Windows.Controls; using XGL.Data.DBService; using XGL.Dats.DBServiceFinishProd; using XGL.Models.Model.FoamingMac; using XGL.Models.Model.OrderPrepare; namespace XGLFinishPro.Views { /// /// LanJu_Operator.xaml 的交互逻辑 /// public partial class LanJu_Operator : UserControl { FormingMachineService formingMachineService = new FormingMachineService(); FinishProdDBService userDbWareHouse = new FinishProdDBService(); public static LanJu_Operator lanJu_Operator; Frame frame = new Frame() { Content = new Views.LanJu_InOut() }; string deviceCode = Utils.GetAppSetting("DeviceCode"); Timer timerDeciveState = new Timer(); string _workOrderCode = ""; public enum WindowID { frame } public LanJu_Operator() { InitializeComponent(); WindowChange(WindowID.frame); } public void WindowChange(WindowID windowID) { Window1.Content = frame; } List sfcList = null; private void InOut_Click(object sender, RoutedEventArgs e) { LanJu_InOut lanJu_InOut = new LanJu_InOut(_workOrderCode, deviceCode); // 在主界面中的某个位置订阅事件 lanJu_InOut.ValueSelected += (sender1, args) => { // 在这里处理从子窗口传回的值 sfcList = lanJu_InOut.SFCCodeList; // 执行需要的操作 }; Window1.Content = new Frame { Content = lanJu_InOut }; } private void Complete_Click(object sender, RoutedEventArgs e) { LanJu_Complete lanJu_Complete = new LanJu_Complete(); Window1.Content = new Frame { Content = lanJu_Complete }; } private void DeviceItems_Click(object sender, RoutedEventArgs e) { LanJu_DeviceItems lanJu_DeviceItems = new LanJu_DeviceItems(); Window1.Content = new Frame { Content = lanJu_DeviceItems }; } private void Paused_Click(object sender, RoutedEventArgs e) { LanJu_Paused lanJu_Paused = new LanJu_Paused(); Window1.Content = new Frame { Content = lanJu_Paused }; } private void UCOperator_Loaded(object sender, RoutedEventArgs e) { timerDeciveState.Interval = Utils.GetAppSetting("GetDeviceStateInterval") == "" ? 15000 : Convert.ToInt32(Utils.GetAppSetting("GetDeviceStateInterval")); timerDeciveState.Elapsed += TimerDeciveState_Elapsed; timerDeciveState.Start(); GetWorkOrderInfo(); } string isbaiye; string plantime; private void TimerDeciveState_Elapsed(object sender, ElapsedEventArgs e) { if (Utils.isAnyBodyPerating) return; try { List orderList = new List(); int currHour = DateTime.Now.Hour; int currMinute = DateTime.Now.Minute; //modelWareHouse = new List(); //userDbWareHouse = new DBService(); int shiftId = 0; DataTable shiftlist = formingMachineService.GetShiftList(); string endTimeRecord = ""; string startTimeRecord = ""; foreach (DataRow shift in shiftlist.Rows) { string[] timeStart = shift["Shift_Start_Time"].ToString().Split(':'); string[] timeEnd = shift["Shift_End_Time"].ToString().Split(':'); // 创建两个不带日期的时间点 TimeSpan currTime = new TimeSpan(currHour, currMinute, 0); // 获取当前小时+分钟数 TimeSpan startTime = new TimeSpan(Convert.ToInt32(timeStart[0]), Convert.ToInt32(timeStart[1]), 0); // 表示9小时45分钟0秒 TimeSpan endTime = new TimeSpan(Convert.ToInt32(timeEnd[0]), Convert.ToInt32(timeEnd[1]), 0); // 比较当前时间点和班次开始的时间点 int comparisonResultStart = TimeSpan.Compare(currTime, startTime); // 比较当前时间点和班次结束的时间点 int comparisonResultEnd = TimeSpan.Compare(currTime, endTime); //if (comparisonResultStart > 0) { Console.WriteLine("time1 大于 time2"); } if (comparisonResultStart >= 0 && comparisonResultEnd < 0) { endTimeRecord = shift["Shift_Start_Time"].ToString(); startTimeRecord = shift["Shift_End_Time"].ToString(); shiftId = Convert.ToInt32(shift["shift_id"].ToString()); break; } else if (comparisonResultStart >= 0 || comparisonResultEnd < 0) { endTimeRecord = shift["Shift_Start_Time"].ToString(); startTimeRecord = shift["Shift_End_Time"].ToString(); shiftId = Convert.ToInt32(shift["shift_id"].ToString()); break; } //if (Convert.ToInt32(timeStart[0]) <= currHourWithDecimal && currHourWithDecimal < Convert.ToInt32(timeEnd[0])) //{ // shiftId = shift.shiftId; // break; //} //else if (currHourWithDecimal >= Convert.ToInt32(timeStart[0]) || currHourWithDecimal < Convert.ToInt32(timeEnd[0])) //{ // shiftId = shift.shiftId; // break; //} } string[] endTimeReally = endTimeRecord.Split(':'); string[] startTimeReally = startTimeRecord.Split(':'); DateTime currShiftDate = DateTime.Now.Date; TimeSpan currTimeNew = new TimeSpan(currHour, currMinute, 0); // 获取当前小时+分钟数 TimeSpan startTimeNew = new TimeSpan(Convert.ToInt32(startTimeReally[0]), Convert.ToInt32(startTimeReally[1]), 0); // 表示9小时45分钟0秒 TimeSpan endTimeNew = new TimeSpan(Convert.ToInt32(endTimeReally[0]), Convert.ToInt32(endTimeReally[1]), 0); // 表示9小时45分钟0秒 //计算白夜班工作日期用 int resultstart = TimeSpan.Compare(currTimeNew, startTimeNew); // 比较当前时间点和班次结束的时间点 int resultEnd = TimeSpan.Compare(currTimeNew, endTimeNew); //夜班、 if (resultstart < 0 && resultEnd < 0) { currShiftDate = DateTime.Now.Date.AddDays(-1); } //modelWareHouse = new List(); DataTable dt = userDbWareHouse.GetWetPlanInfo(deviceCode, currShiftDate.ToString());//formingMachineService.GetFormingMachineInfo(deviceCode, currShiftDate.ToString()); if (dt == null) return; if (orderList != null) { //使用Dispatcher来在UI线程上更新UI this.Dispatcher.Invoke( new Action(() => { this.dgWorkOrderInfo.ItemsSource = null; this.dgWorkOrderInfo.ItemsSource = dt.DefaultView; dgWorkOrderInfo.SelectedIndex = 0; } ), System.Windows.Threading.DispatcherPriority.Render); } } catch (Exception ex) { LogHelper.instance.log.Error("获取工单准备信息时发生异常:" + ex.Message); } } private void GetWorkOrderInfo() { try { List orderList = new List(); int currHour = DateTime.Now.Hour; int currMinute = DateTime.Now.Minute; //modelWareHouse = new List(); //userDbWareHouse = new DBService(); int shiftId = 0; DataTable shiftlist = formingMachineService.GetShiftList(); string endTimeRecord = ""; string startTimeRecord = ""; foreach (DataRow shift in shiftlist.Rows) { string[] timeStart = shift["Shift_Start_Time"].ToString().Split(':'); string[] timeEnd = shift["Shift_End_Time"].ToString().Split(':'); // 创建两个不带日期的时间点 TimeSpan currTime = new TimeSpan(currHour, currMinute, 0); // 获取当前小时+分钟数 TimeSpan startTime = new TimeSpan(Convert.ToInt32(timeStart[0]), Convert.ToInt32(timeStart[1]), 0); // 表示9小时45分钟0秒 TimeSpan endTime = new TimeSpan(Convert.ToInt32(timeEnd[0]), Convert.ToInt32(timeEnd[1]), 0); // 比较当前时间点和班次开始的时间点 int comparisonResultStart = TimeSpan.Compare(currTime, startTime); // 比较当前时间点和班次结束的时间点 int comparisonResultEnd = TimeSpan.Compare(currTime, endTime); //if (comparisonResultStart > 0) { Console.WriteLine("time1 大于 time2"); } if (comparisonResultStart >= 0 && comparisonResultEnd < 0) { endTimeRecord = shift["Shift_Start_Time"].ToString(); startTimeRecord = shift["Shift_End_Time"].ToString(); shiftId = Convert.ToInt32(shift["shift_id"].ToString()); break; } else if (comparisonResultStart >= 0 || comparisonResultEnd < 0) { endTimeRecord = shift["Shift_Start_Time"].ToString(); startTimeRecord = shift["Shift_End_Time"].ToString(); shiftId = Convert.ToInt32(shift["shift_id"].ToString()); break; } //if (Convert.ToInt32(timeStart[0]) <= currHourWithDecimal && currHourWithDecimal < Convert.ToInt32(timeEnd[0])) //{ // shiftId = shift.shiftId; // break; //} //else if (currHourWithDecimal >= Convert.ToInt32(timeStart[0]) || currHourWithDecimal < Convert.ToInt32(timeEnd[0])) //{ // shiftId = shift.shiftId; // break; //} } string[] endTimeReally = endTimeRecord.Split(':'); string[] startTimeReally = startTimeRecord.Split(':'); DateTime currShiftDate = DateTime.Now.Date; TimeSpan currTimeNew = new TimeSpan(currHour, currMinute, 0); // 获取当前小时+分钟数 TimeSpan startTimeNew = new TimeSpan(Convert.ToInt32(startTimeReally[0]), Convert.ToInt32(startTimeReally[1]), 0); // 表示9小时45分钟0秒 TimeSpan endTimeNew = new TimeSpan(Convert.ToInt32(endTimeReally[0]), Convert.ToInt32(endTimeReally[1]), 0); // 表示9小时45分钟0秒 //计算白夜班工作日期用 int resultstart = TimeSpan.Compare(currTimeNew, startTimeNew); // 比较当前时间点和班次结束的时间点 int resultEnd = TimeSpan.Compare(currTimeNew, endTimeNew); //夜班、 if (resultstart < 0 && resultEnd < 0) { currShiftDate = DateTime.Now.Date.AddDays(-1); } //modelWareHouse = new List(); DataTable dt = userDbWareHouse.GetWetPlanInfo(deviceCode, currShiftDate.ToString()); if (dt == null) return; this.dgWorkOrderInfo.ItemsSource = null; this.dgWorkOrderInfo.ItemsSource = dt.DefaultView; } catch (Exception ex) { LogHelper.instance.log.Error("操作界面:获取成品工单准备信息时发生异常:" + ex.Message); } } private void dgWorkOrderInfo_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.Header = (e.Row.GetIndex() + 1).ToString(); } private void btnPause_Click(object sender, RoutedEventArgs e) { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); //var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) { MessageBox.Show("请选择你要暂停的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var workordercode = selectedRow["workorder_code"].ToString();//.workorder_code; string currStatus = selectedRow["status"].ToString();//.status; if (currStatus != "w2") { MessageBox.Show("只有活动中的工单才支持暂停!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } PauseOrderWin pauseOrderWin = new PauseOrderWin(); if (pauseOrderWin.ShowDialog() == true) { formingMachineService.UpdateWorkOrder(workordercode, "w4", pauseOrderWin.remark, pauseOrderWin.type, deviceCode); GetWorkOrderInfo(); } //MessageBoxResult result = MessageBox.Show("你确定要暂停该工单吗?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Information); //if (result == MessageBoxResult.No) // return; } private void btnRecover_Click(object sender, RoutedEventArgs e) { //var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel; var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); if (selectedRow == null) { MessageBox.Show("请选择你要恢复的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var workordercode = selectedRow["workorder_code"].ToString();//.workorder_code; string currStatus = selectedRow["status"].ToString();//.status; if (currStatus != "w4") { MessageBox.Show("只有暂停中的工单才支持恢复!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } //MessageBoxResult result = MessageBox.Show("你确定要恢复该工单吗?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Information); //if (result == MessageBoxResult.No) // return; PauseOrderWin pauseOrderWin = new PauseOrderWin(); if (pauseOrderWin.ShowDialog() == true) { formingMachineService.UpdateWorkOrder(workordercode, "w2", pauseOrderWin.remark, pauseOrderWin.type, deviceCode); GetWorkOrderInfo(); } } /// /// 查看工艺 /// /// /// private void Flow_Click(object sender, RoutedEventArgs e) { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView);//dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) return; var workordercode = selectedRow["workorder_code"].ToString();//.workorder_code; DataTable dt = userDbWareHouse.GetFlowInfo(workordercode); FlowInfoWin flowInfoWin = new FlowInfoWin(dt); flowInfoWin.ShowDialog(); } /// /// 查看物料 /// /// /// private void Material_Click(object sender, RoutedEventArgs e) { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); //dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) return; var processid = selectedRow["workorder_code"].ToString();//.workorder_code; DataTable dt = userDbWareHouse.GetMaterialInfo(processid); LanJu_Material sopInfoWin = new LanJu_Material(dt); sopInfoWin.ShowDialog(); } /// /// 查看SOP /// /// /// private void Button_Click(object sender, RoutedEventArgs e) { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); //dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) return; var workordercode = selectedRow["route_code"].ToString();//.workorder_code; DataTable dt = userDbWareHouse.GetSOPInfo(workordercode); SopInfoWin sopInfoWin = new SopInfoWin(dt); sopInfoWin.ShowDialog(); } private void btnRefresh_Click(object sender, RoutedEventArgs e) { GetWorkOrderInfo(); LanJu_InOut lanJu_In = new LanJu_InOut(_workOrderCode, deviceCode); lanJu_In.GetInOutRecordInfo(); } private async void btnComplete_Click(object sender, RoutedEventArgs e) { try { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); //dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) { MessageBox.Show("请选择你要报工的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (!selectedRow["status"].ToString().Equals("w2")) { MessageBox.Show("你选择的工单不能报工!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } string newReportCode = ""; DataTable dtNewReportCode = formingMachineService.GetReportCode(); if (dtNewReportCode == null || dtNewReportCode.Rows.Count == 0) { newReportCode = (Convert.ToInt64(dtNewReportCode.Rows[0]["report_code"].ToString()) + 1).ToString(); } ExecReportWorkWin execReport = new ExecReportWorkWin(selectedRow["workorder_code"].ToString(), selectedRow["quantity_split"].ToString()); if (execReport.ShowDialog() == true) { string workTime = execReport._workTime; string costCenter = execReport._costCenter; string userCount = execReport._useMan; bool issucc = formingMachineService.ExecuteReportWork(selectedRow, newReportCode, workTime, userCount, costCenter, deviceCode); if (issucc) { //调用报工接口 string apiUrl = formingMachineService.InterfaceUrl("reportWork"); ReportWork reportWork = new ReportWork(); reportWork.factoryCode = Utils.GetAppSetting("SiteCode"); reportWork.reportCode = newReportCode; // 将要发送的数据序列化为JSON格式 var jsonContent = JsonConvert.SerializeObject(reportWork); LogHelper.instance.log.Info("开始报工>>" + jsonContent); RestHelper restClient = new RestHelper(); //var response =; Rootobjectresu result = Utils.DeJson(await restClient.PostAsync(apiUrl, jsonContent)); if (result.code == 200) { GetWorkOrderInfo(); } else { CustomMessageBox.Show("调用报工接口失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); } } else { CustomMessageBox.Show("报工失败", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error); } } } catch (Exception ex) { } } private void btnCheckLog_Click(object sender, RoutedEventArgs e) { ViewLogWin viewLogWin = new ViewLogWin(); viewLogWin.ShowDialog(); } private void btnViewPlcvalue_Click(object sender, RoutedEventArgs e) { ViewPlcInfoWin viewPlcWin = new ViewPlcInfoWin(); viewPlcWin.ShowDialog(); } private void dgWorkOrderInfo_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (dgWorkOrderInfo.SelectedItems.Count == 0) { return; } var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); _workOrderCode = selectedRow["workorder_code"].ToString(); //InOut_Click(null,null); //Complete_Click(null,null); } private void HFPlcvalue_Click(object sender, RoutedEventArgs e) { HBLogWin HFPlcWin = new HBLogWin(); HFPlcWin.ShowDialog(); } } public class ReportWork { public string factoryCode { get; set; } public string reportCode { get; set; } } }