using CommonFunc; using CommonFunc.Tools; using HandyControl.Tools.Extension; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Timers; using System.Windows; using System.Windows.Controls; using Xceed.Wpf.Toolkit.Primitives; using XGL.Data; using XGL.Data.DBService; using XGL.Dats.DBServiceFinishProd; using XGL.Models.Model; using XGL.Models.Model.FoamingMac; using XGL.Models.Model.OrderPrepare; using XGL.Thrift; using static System.Windows.Forms.VisualStyles.VisualStyleElement; 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 = ""; userDB usdb = new userDB(); 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 Button_Click_2(object sender, RoutedEventArgs e) { firstInspection lanJu_Paused = new firstInspection(); Window1.Content = new Frame { Content = lanJu_Paused }; } private void Button_Click_1(object sender, RoutedEventArgs e) { firstInspection firstInspection = new firstInspection(); Window1.Content = new Frame { Content = firstInspection }; } private void UCOperator_Loaded(object sender, RoutedEventArgs e) { timerDeciveState.Interval = Utils.GetAppSetting("GetDeviceStateInterval") == "" ? 10000 : Convert.ToInt32(Utils.GetAppSetting("GetDeviceStateInterval")); timerDeciveState.Elapsed += TimerDeciveState_Elapsed; timerDeciveState.Start(); Complete_Click(null, null); 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, LoginUser.WorkDate);//formingMachineService.GetFormingMachineInfo(deviceCode, currShiftDate.ToString()); if (dt == null) return; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { // 如果还有其他情况需要处理,可以继续添加 elseif 分支 row["workorder_code_sap"] = row["workorder_code_sap"].ToString().TrimStart('0'); // 更新当前行的值 dt.AcceptChanges(); } } 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, DateTime.Parse(LoginUser.WorkDate).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { // 如果还有其他情况需要处理,可以继续添加 elseif 分支 row["workorder_code_sap"] = row["workorder_code_sap"].ToString().TrimStart('0'); // 更新当前行的值 dt.AcceptChanges(); } } this.dgWorkOrderInfo.ItemsSource = null; if (dt != null && dt.Rows.Count > 0) 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) { CustomMessageBox.Show("请选择你要暂停的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } var workordercode = selectedRow["workorder_code"].ToString();//.workorder_code; string currStatus = selectedRow["status"].ToString();//.status; if (currStatus != "w2") { CustomMessageBox.Show("只有活动中的工单才支持暂停!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } PauseOrderWin pauseOrderWin = new PauseOrderWin(); if (pauseOrderWin.ShowDialog() == true) { PauseRecoverOrderS(workordercode, "w4", pauseOrderWin); GetWorkOrderInfo(); } //MessageBoxResult result = MessageBox.Show("你确定要暂停该工单吗?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Information); //if (result == MessageBoxResult.No) // return; } private bool PauseRecoverOrderS(string workordercode, string status, PauseOrderWin pauseOrderWin) { bool updatestatus = formingMachineService.UpdateWorkOrder(workordercode, status, pauseOrderWin.remark, pauseOrderWin.type, deviceCode); if (!updatestatus) { CustomMessageBox.Show("操作失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); } DataTable dtSubOrders = userDbWareHouse.GetSubOrderInfo(workordercode); if (dtSubOrders != null) { // 递归更新子单状态 foreach (DataRow subOrder in dtSubOrders.Rows) { UpdateOrderStatus(subOrder["workorder_code"].ToString()); } } return true; } private void btnRecover_Click(object sender, RoutedEventArgs e) { //var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel; var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); if (selectedRow == null) { CustomMessageBox.Show("请选择你要恢复的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } int orderCount = GetActivedOrdersCount(this.deviceCode, LoginUser.WorkDate); if (orderCount >= 1) { CustomMessageBox.Show("已有活动中的工单,请先报工再开始下一个工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } var workordercode = selectedRow["workorder_code"].ToString();//.workorder_code; string currStatus = selectedRow["status"].ToString();//.status; if (currStatus != "w4") { CustomMessageBox.Show("只有暂停中的工单才支持恢复!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } //MessageBoxResult result = MessageBox.Show("你确定要恢复该工单吗?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Information); //if (result == MessageBoxResult.No) // return; PauseOrderWin pauseOrderWin = new PauseOrderWin(); if (pauseOrderWin.ShowDialog() == true) { PauseRecoverOrderS(workordercode, "w2", pauseOrderWin); //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); CustomMessageBox.Show("请选择你要报工的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } if (!selectedRow["status"].ToString().Equals("w2") && !selectedRow["status"].ToString().Equals("w4")) { LogHelper.instance.log.Info("当前选择的工单" + (dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"].ToString() + "状态为:" + selectedRow["status"].ToString()); string status = selectedRow["status"].ToString(); string st = status.Equals("w1") ? "已派发" : status.Equals("w3") ? "已报工" : status.Equals("w0") ? "未派发" : "已暂停"; CustomMessageBox.Show("你选择的工单不能报工,请检查工单状态,当前工单状态为:" + st, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } //20240424预报工功能,不能限制批次报工次数, //if (selectedRow["batchStatus"].ToString().Equals("0")) //{ // CustomMessageBox.Show("你选择的该批次不能报工!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); // return; //} #region 添加验证 string workorderId = selectedRow["workorder_id"].ToString(); if (!formingMachineService.GetProOrderWorkOrder(workorderId)) { CustomMessageBox.Show("该工单已经被删除,请重新选择!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); GetWorkOrderInfo(); return; } #endregion ExecReportWorkWin execReport = new ExecReportWorkWin(selectedRow, deviceCode, Utils.GetAppSetting("SiteCode")); if (execReport.ShowDialog() == true) { string materialCode = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_code"].ToString(); string materialDesc = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString(); userDbWareHouse.InsertOperationLog((dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"].ToString(), "w3", "", "工单报工", deviceCode, materialCode, materialDesc); ////获取报工编码 //string newReportCode = ""; //DataTable dtNewReportCode = formingMachineService.GetReportCode(); //if (dtNewReportCode == null || dtNewReportCode.Rows.Count == 0) //{ // newReportCode = DateTime.Now.ToString("yyyyMMdd") + "0001"; //} //else //{ // if (string.IsNullOrEmpty(dtNewReportCode.Rows[0]["report_code"].ToString())) // { // newReportCode = DateTime.Now.ToString("yyyyMMdd") + "0001"; // } // else // { // newReportCode = (Convert.ToInt64(dtNewReportCode.Rows[0]["report_code"].ToString()) + 1).ToString(); // } //} //string workTime = execReport._workTime; //string costCenter = execReport._costCenter; //string userCount = execReport._useMan; //string workCount = execReport._workQuntity; //string batchCode = execReport.batchCode; //string isEndReport = execReport._isEndReport == true ? "1" : "0"; //bool issucc = formingMachineService.ExecuteReportWork(selectedRow, workCount, newReportCode, workTime, userCount, costCenter, batchCode, isEndReport, 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); //} GetWorkOrderInfo(); } } catch (Exception ex) { LogHelper.instance.log.Error("报工失败11>>" + ex.Message); CustomMessageBox.Show("报工失败:" + ex.Message, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error); } } 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(); } private async void btnPause1_Click(object sender, RoutedEventArgs e) { try { //陈恒杰在2024-01-07日与榄菊的苏振华确认,不需要用户验证 //CheckUserWin checkUserWin = new CheckUserWin(); //checkUserWin.ShowDialog(); //if (!checkUserWin.loginFlag) //{ // CustomMessageBox.Show("请先校验用户!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); // return; //} if (dgWorkOrderInfo.SelectedItems.Count == 0) { CustomMessageBox.Show("请选择要开始的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } // 创建JsonSerializerSettings实例,并配置其属性来忽略自引用循环 var settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, Formatting = Formatting.Indented }; if (dgWorkOrderInfo.SelectedItem is DataRowView selectedRow) { string rowContent = string.Join(", ", selectedRow.Row.ItemArray); LogHelper.instance.log.Info("开始工单选择的行内容: " + rowContent); } else { LogHelper.instance.log.Info("未选择任何行或选择的项不是 DataRowView 类型"); } string workorderID = (dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"].ToString(); string status = (dgWorkOrderInfo.SelectedItem as DataRowView)["status"].ToString(); LogHelper.instance.log.Info("记录开始工单状态:" + status + ", 开始工单号为:" + workorderID); if (!status.Equals("w1")) { if (status != "") { if (status.Equals("w2")) { CustomMessageBox.Show("该工单已经活动中,请勿再次开始工单!!!"); return; } string st = status.Equals("w1") ? "未派发" : status.Equals("w3") ? "已报工" : status.Equals("w0") ? "未派发" : "已暂停"; LogHelper.instance.log.Info("该工单不符合条件,请检查工单状态,当前工单状态为:" + st); CustomMessageBox.Show("该工单不符合条件,请检查工单状态,当前工单状态为:" + st, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } } CustomMessageBoxResult result = CustomMessageBox.Show("你确定要开始工单么?", CustomMessageBoxButton.OKCancel, CustomMessageBoxIcon.Warning); if (result == CustomMessageBoxResult.Cancel) return; //2024-04-23赵啸林要求添加一条产线同一天只能有一个活动状态下的工单,如果有未报工的则不允许开始新的工单 int orderCount = GetActivedOrdersCount(this.deviceCode, LoginUser.WorkDate); if (orderCount >= 1) { CustomMessageBox.Show("已有活动中的工单,请先报工再开始下一个工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); LogHelper.instance.log.Info("开始工单:已有活动中的工单,请先报工再开始下一个工单!"); return; } LogHelper.instance.log.Info("查询到当前正在活动的工单数量为" + orderCount); //更新工单状态 if (!UpdateOrderStatus(workorderID)) { LogHelper.instance.log.Info("开始工单返回失败"); CustomMessageBox.Show("开始工单失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); } else { //巡检 string materialCode = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_code"].ToString(); string materialDesc = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString(); userDbWareHouse.InsertOperationLog(workorderID, "w2", "", "开始工单", deviceCode, materialCode, materialDesc); // await CallCheckApi("checkTypeSCXJ");20240403赵啸林因为切线方案调整,要求取消上位机生成巡检任务的功能; GetWorkOrderInfo(); } } catch (Exception ex) { LogHelper.instance.log.Error("开始工单异常:" + ex.Message); } } private int GetActivedOrdersCount(string deviceCode, string workDate) { DataTable dtActivedOrdersQty = userDbWareHouse.GetActivedOrdersQty(deviceCode, workDate); if (dtActivedOrdersQty == null) return 0; int count = Convert.ToInt32(dtActivedOrdersQty.Rows[0][0]); return count; } private bool UpdateOrderStatus(string workorderID) { try { string name = LoginUser.UserName + "-" + LoginUser.UserId; if (name.IsNullOrEmpty()) { name = "无-0"; } //更新工单状态 var updatestatus = userDbWareHouse.UpdateSycnFlag(workorderID, deviceCode, name); if (!updatestatus) { CustomMessageBox.Show("开始工单失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); LogHelper.instance.log.Info("开始工单失败"); return false; } else { LogHelper.instance.log.Info("开始工单正常"); } DataTable dtSubOrders = userDbWareHouse.GetSubOrderInfo(workorderID); if (dtSubOrders != null) { // 递归更新子单状态 foreach (DataRow subOrder in dtSubOrders.Rows) { UpdateOrderStatus(subOrder["workorder_code"].ToString()); } } } catch (Exception ex) { LogHelper.instance.log.Info("开始工单异常" + ex.Message); } return true; } private void DatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e) { if (sender is DatePicker datePicker) { DateTime selectedDate = datePicker.SelectedDate ?? DateTime.MinValue; } } private void GetQitaolv_Click(object sender, RoutedEventArgs e) { QitaoLvUC lanJu_QitaoLv = new QitaoLvUC(_workOrderCode); Window1.Content = new Frame { Content = lanJu_QitaoLv }; } private void btnCallMaterial_Click(object sender, RoutedEventArgs e) { string workorderID = (dgWorkOrderInfo.SelectedItem as DataRowView)["parent_order"].ToString(); if (!workorderID.Equals("0")) { CustomMessageBox.Show("请对母单使用叫料功能!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } } private async void btnFirstCheck_Click(object sender, RoutedEventArgs e) { if (dgWorkOrderInfo.SelectedItems.Count == 0) { CustomMessageBox.Show("请选择要首件检验的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } try { string status1 = (dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"].ToString(); string status = (dgWorkOrderInfo.SelectedItem as DataRowView)["status"].ToString(); if (!status.Equals("w2")) { if (status != "") { string st = status.Equals("w1") ? "未派发" : status.Equals("w3") ? "已报工" : status.Equals("w0") ? "未派发" : "已暂停"; CustomMessageBox.Show("该工单不符合条件,请检查工单状态,当前工单状态为:" + st, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } } string batchCode = (dgWorkOrderInfo.SelectedItem as DataRowView)["batch_code"].ToString(); CustomMessageBoxResult result = CustomMessageBox.Show($"你确定要为批次号:{batchCode}进行首检么?", CustomMessageBoxButton.OKCancel, CustomMessageBoxIcon.Warning); if (result == CustomMessageBoxResult.Cancel) return; LogHelper.instance.log.Info($"首检检验按钮被点击工单号为:{(dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"]},批次号为:{batchCode}"); //2024-04-16添加不限制首检确认的功能; //string qcStatus = (dgWorkOrderInfo.SelectedItem as DataRowView)["qc_status"].ToString(); //if (qcStatus.Equals("1") || qcStatus.Equals("2")) //{ // if (qcStatus != "") // { // CustomMessageBox.Show("该工单已完成质检,请不要重复创建质检任务!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); // return; // } //} //首件检验 await CallCheckApi("checkTypeSC", batchCode); } catch (Exception ex) { LogHelper.instance.log.Error("首检检验发生异常>>" + ex.Message); CustomMessageBox.Show("首检检验发生异常:" + ex.Message, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error); } } /// /// 首检/巡检 /// /// /// private async Task CallCheckApi(string checkType, string batchCode) { try { string workorderCode = (dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_code"].ToString(); string workorderID = (dgWorkOrderInfo.SelectedItem as DataRowView)["workorder_id"].ToString(); string productCode = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_code"].ToString(); string productName = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString(); string quality = (dgWorkOrderInfo.SelectedItem as DataRowView)["quantity_split"].ToString(); string unit = (dgWorkOrderInfo.SelectedItem as DataRowView)["unit"].ToString(); string plan_time = (dgWorkOrderInfo.SelectedItem as DataRowView)["plan_time"].ToString(); //调用首件检验接口 string apiUrl = formingMachineService.GetInterfaceUrl("createCheckProduceTask"); FirstCheckModel firstCheck = new FirstCheckModel(); firstCheck.factoryCode = Utils.GetAppSetting("SiteCode"); string taskName = ""; if (checkType.Equals("checkTypeSCXJ")) { taskName = "巡检任务"; LogHelper.instance.log.Info($"准备触发巡检任务{workorderCode}>>批次号为:{batchCode}"); firstCheck.incomeBatchNo = null; } else { taskName = "首件检验任务"; LogHelper.instance.log.Info($"准备触发首件检验任务{workorderCode}>>批次号为:{batchCode}"); firstCheck.incomeBatchNo = batchCode; } firstCheck.orderNo = workorderCode; firstCheck.materialName = productName; firstCheck.materialCode = productCode; firstCheck.checkType = checkType;//"checkTypeSC"; firstCheck.quality = quality; firstCheck.unit = unit; //根据线体编码获取车间编码 DataTable dtCar = userDbWareHouse.GetCarInfo(deviceCode); string carCode = dtCar.Rows[0][0].ToString(); string carName = dtCar.Rows[0][1].ToString(); firstCheck.carName = carName; firstCheck.carCode = carCode; firstCheck.produceDate = plan_time; firstCheck.checkManName = LoginUser.UserName; firstCheck.checkManCode = LoginUser.UserCode; firstCheck.checkLoc = deviceCode; // 将要发送的数据序列化为JSON格式 var jsonContent = JsonConvert.SerializeObject(firstCheck); LogHelper.instance.log.Info($"开始{taskName}>>" + jsonContent); RestHelper restClient = new RestHelper(); //var response =; Rootobjectresu result = Utils.DeJson(await restClient.PostAsync(apiUrl, jsonContent)); if (result.code == 200) { //巡检 if (checkType.Equals("checkTypeSCXJ")) { CustomMessageBox.Show($"{taskName}创建成功", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Success); LogHelper.instance.log.Info($"{taskName}创建成功>>" + result.msg); GetWorkOrderInfo(); } else { //调用首件检验 bool isSuccess = formingMachineService.UpdateFirstCheckTask(workorderID, batchCode); if (isSuccess) { CustomMessageBox.Show($"{taskName}创建成功", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Success); LogHelper.instance.log.Info($"{taskName}创建成功>>" + result.msg); GetWorkOrderInfo(); } else { CustomMessageBox.Show($"更新{taskName}状态失败", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); LogHelper.instance.log.Info($"更新{taskName}状态失败>>" + result.msg); } } } else { LogHelper.instance.log.Info($"{taskName}失败>>" + result.msg); CustomMessageBox.Show($"调用{taskName}接口失败:" + result.msg, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); } } catch (Exception ex) { LogHelper.instance.log.Error("首检检验接口发生异常>>" + ex.Message); CustomMessageBox.Show("首检检验接口发生异常:" + ex.Message, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error); } } private void btnMachineRepair_Click(object sender, RoutedEventArgs e) { var selefuel = formingMachineService.ConvertToFaultModelList(); //调用首件检验接口 string apiUrl = formingMachineService.GetInterfaceUrl("machineRepair"); var eqment = formingMachineService.GetReportCodeeqment(Utils.GetAppSetting("DeviceCode")); MachineRepairWin machineRepairWin = new MachineRepairWin(apiUrl, selefuel, eqment); machineRepairWin.ShowDialog(); } private void btnSalaryCal_Click(object sender, RoutedEventArgs e) { var selectedRow = (dgWorkOrderInfo.SelectedItem as DataRowView); //dgWorkOrderInfo.SelectedItem as FoamingMacModel; if (selectedRow == null) { //MessageBox.Show("请选择你要报工的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning); CustomMessageBox.Show("请选择你要操作的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } //if (!selectedRow["status"].ToString().Equals("w2")) //{ // CustomMessageBox.Show("你选择的工单不符合条件!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); // return; //} if (selectedRow["salary_flag"].ToString().Equals("1")) { CustomMessageBox.Show("你选择的工单已录入计件薪酬信息,不允许重复录入!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } string prodCode = selectedRow["product_code"].ToString(); string prodName = selectedRow["product_name"].ToString(); string workOrderCode = selectedRow["workorder_code"].ToString(); string sapWorkOrderCode = selectedRow["workorder_code_sap"].ToString(); PieceSalaryCalWin pieceSalaryCalWin = new PieceSalaryCalWin(prodCode, prodName, deviceCode, workOrderCode, sapWorkOrderCode); pieceSalaryCalWin.ShowDialog(); } private void weigh_Click(object sender, RoutedEventArgs e) { punchCard punchCard = new punchCard(); punchCard.ShowDialog(); } private void report_Click(object sender, RoutedEventArgs e) { new ReportPageSelect().ShowDialog(); } private void auxiliary_personnel(object sender, RoutedEventArgs e) { //先判断是否为管理人员 var sys_users = usdb.GetUserList(LoginUser.UserId); if (sys_users.Count == 0 || sys_users[0].user_m_type == null || sys_users[0].user_m_type.ToUpper() != "g") { CustomMessageBox.Show("你不是管理人员,无权操作!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); return; } new PersonView().ShowDialog(); } } public class ReportWorkModel { public string factoryCode { get; set; } public string reportCode { get; set; } } public class FirstCheckModel { /// /// 工厂编码 /// public string factoryCode { get; set; } /// /// 批次号 /// public string incomeBatchNo { get; set; } /// /// orderNo:订单号 /// public string orderNo { get; set; } /// /// 物料名称 /// public string materialName { get; set; } /// /// 物料编码 /// public string materialCode { get; set; } /// /// 检测类型固定 checkTypeSC首次检验 checkTypeHF烘房检验 /// public string checkType { get; set; } /// /// 收货数量 /// public string quality { get; set; } /// /// 单位 /// public string unit { get; set; } /// /// 车间名称 /// public string carName { get; set; } /// /// 车间编码 /// public string carCode { get; set; } /// /// 生产时间 格式yyyy-MM-dd HH:mm:ss /// public string produceDate { get; set; } /// /// 检测人姓名 /// public string checkManName { get; set; } /// /// 检测人工号 /// public string checkManCode { get; set; } /// /// 检测地点 /// public string checkLoc { get; set; } } }