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.

573 lines
23 KiB
C#

using CentralControl.DBDAO;
using CommonFunc;
using CommonFunc.Tools;
using COSMO.IM.LanJu.Index;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using XGL.Data.DBService;
using XGL.Models.Model.FoamingMac;
namespace XGL.Views
{
/// <summary>
/// LanJu_Operator.xaml 的交互逻辑
/// </summary>
public partial class LanJu_Operator : UserControl
{
FormingMachineService formingMachineService = new FormingMachineService();
DBService userDbWareHouse = new DBService();
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<string> 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)
{
try
{
if (Utils.isAnyBodyPerating) return;
List<FoamingMacModel> orderList = new List<FoamingMacModel>();
int currHour = DateTime.Now.Hour;
int currMinute = DateTime.Now.Minute;
//modelWareHouse = new List<WorkOrder>();
//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<WorkOrder>();
userDbWareHouse = new DBService();
DataTable dt = formingMachineService.GetFormingMachineInfo(deviceCode, currShiftDate.ToString());
if (dt == null) return;
foreach (DataRow i in dt.Rows)
{
FoamingMacModel order = new FoamingMacModel();
order.workorder_id = i["workorder_id"].ToString();
order.workorder_code = i["workorder_code"].ToString();
order.product_name = i["product_name"].ToString();
order.product_code = i["product_code"].ToString();
order.car_num = Convert.ToInt32(i["car_num"].ToString());
order.plan_time = Convert.ToDateTime(i["plan_time"].ToString());
plantime=order.plan_time.ToString();
order.status = i["status"].ToString();
order.process_id = i["route_code"].ToString();
order.attr1 = i["attr1"].ToString();
order.shift_id = i["Shift_Desc"].ToString();
order.totalCount = i["totalCount"].ToString();
//if (isbaiye=="5")
//{
// order.isbai = "白班";
//}
//else if (isbaiye=="2")
//{
// order.isbai = "夜班";
//}
orderList.Add(order);
}
//foreach (var item in orderList)
//{
// string bumb = formingMachineService.getnumber(deviceCode, plantime, isbaiye);
// LogHelper.instance.log.Info($@"当前查询到当前机台{deviceCode}工作数量为{bumb}");
// item.totalCount = bumb;
//}
if (orderList != null)
{
//使用Dispatcher来在UI线程上更新UI
this.Dispatcher.Invoke(
new Action(() =>
{
this.dgWorkOrderInfo.ItemsSource = null;
this.dgWorkOrderInfo.ItemsSource = orderList;//dt.DefaultView;
dgWorkOrderInfo.SelectedIndex = 0;
}
),
System.Windows.Threading.DispatcherPriority.Render);
}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("获取工单准备信息时发生异常:" + ex.Message);
}
}
private void GetWorkOrderInfo()
{
try
{
List<FoamingMacModel> orderList = new List<FoamingMacModel>();
int currHour = DateTime.Now.Hour;
int currMinute = DateTime.Now.Minute;
//modelWareHouse = new List<WorkOrder>();
//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<WorkOrder>();
userDbWareHouse = new DBService();
DataTable dt = formingMachineService.GetFormingMachineInfo(deviceCode,currShiftDate.ToString());
if (dt == null) return;
foreach (DataRow i in dt.Rows)
{
FoamingMacModel order = new FoamingMacModel();
order.workorder_id = i["workorder_id"].ToString();
order.workorder_code = i["workorder_code"].ToString();
order.product_name = i["product_name"].ToString();
order.product_code = i["product_code"].ToString();
order.car_num = Convert.ToInt32(i["car_num"].ToString());
order.plan_time = Convert.ToDateTime(i["plan_time"].ToString());
order.status = i["status"].ToString();
order.process_id = i["route_code"].ToString();
order.attr1 = i["attr1"].ToString();
order.totalCount = i["totalCount"].ToString();
order.shift_id = i["Shift_Desc"].ToString();
orderList.Add(order);
}
this.dgWorkOrderInfo.ItemsSource = null;
this.dgWorkOrderInfo.ItemsSource = orderList;//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 FoamingMacModel;
if (selectedRow == null)
{
MessageBox.Show("请选择你要暂停的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
MessageBoxResult result = MessageBox.Show("你确定要暂停该工单吗?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (result == MessageBoxResult.No)
return;
var workordercode = selectedRow.workorder_code;
string currStatus = selectedRow.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();
}
}
private void btnRecover_Click(object sender, RoutedEventArgs e)
{
var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel;
if (selectedRow == null)
{
MessageBox.Show("请选择你要恢复的工单!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var workordercode = selectedRow.workorder_code;
string currStatus = selectedRow.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();
}
}
/// <summary>
/// 查看工艺
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Flow_Click(object sender, RoutedEventArgs e)
{
var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel;
if (selectedRow == null) return;
var workordercode = selectedRow.workorder_code;
DataTable dt = userDbWareHouse.GetFlowInfo(workordercode);
FlowInfoWin flowInfoWin = new FlowInfoWin(dt);
flowInfoWin.ShowDialog();
}
/// <summary>
/// 查看物料
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Material_Click(object sender, RoutedEventArgs e)
{
var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel;
if (selectedRow == null) return;
var processid = selectedRow.workorder_code;
DataTable dt = userDbWareHouse.GetMaterialInfo(processid);
LanJu_Material sopInfoWin = new LanJu_Material(dt);
sopInfoWin.ShowDialog();
}
/// <summary>
/// 查看SOP
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel;
if (selectedRow == null) return;
var workordercode = selectedRow.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 void btnComplete_Click(object sender, RoutedEventArgs e)
{
//if (dgWorkOrderInfo.SelectedItems.Count == 0)
//{
// CustomMessageBox.Show("请选择要完成的数据", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
// return;
//}
//string str = sfcList[0].ToString();
//var selectedRow = dgWorkOrderInfo.SelectedItem as FoamingMacModel;
//ShouPeiWin shouPeiWin = new ShouPeiWin(selectedRow);
//shouPeiWin.ShowDialog();
//先获取当前机台解绑的条码
DBService userDbWareHouse = new DBService();
DataTable dt = formingMachineService.GetRfidInfo(deviceCode);
foreach (DataRow item in dt.Rows)
{
string newRfid = "";
DataTable dtNewRFID = formingMachineService.GetNewRFID();
if (dtNewRFID == null || dtNewRFID.Rows.Count == 0)
{
newRfid = "B" + DateTime.Now.ToString("yyyyMMdd") + "0001";
}
else
{
if (string.IsNullOrEmpty(dtNewRFID.Rows[0]["report_code"].ToString()))
{
newRfid = "B" + DateTime.Now.ToString("yyyyMMdd") + "0001";
}
else
{
newRfid = "B" + (Convert.ToInt64(dtNewRFID.Rows[0]["rfid"].ToString().TrimStart('B')) + 1).ToString();
}
}
string sqlInsertMesResult = $@"INSERT INTO [mes_material_transfer_result] (
[id],
[begin],
[beout],
[equipmentCode],
[OrderCode],
[sku],
[planID],
[rfid],
[now_process_id],
[status],
[create_time],
[rfid_status],
[taskcode],
[state],
[update_time],
[work_date],
[shift_id]
)
VALUES
(
'{CommonFunc.Common.GetUUID()}',
GetDate(),
GetDate(),
'{deviceCode}',
'{item["workorder_code"]}',
'{item["product_code"]}',
NULL,
'B{DateTime.Now.ToString("yyyyMMdd")}0001',
'af69d35181624b00848958c93c875818',
NULL,
GetDate(),
'2',
'0',
NULL,
GetDate(),
NULL,
NULL
);
";
}
}
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;
}
_workOrderCode = (dgWorkOrderInfo.SelectedItem as FoamingMacModel).workorder_code;
InOut_Click(null,null);
}
private void HFPlcvalue_Click(object sender, RoutedEventArgs e)
{
//HBLogWin HFPlcWin = new HBLogWin();
//HFPlcWin.ShowDialog();
HFstatus hFstatus = new HFstatus();
hFstatus.ShowDialog();
}
}
}