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.

560 lines
22 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 CentralControl.BaseData;
using CommonFunc;
using CommonFunc.Tools;
using HandyControl.Tools.Extension;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using XGL.Data.DBService;
using XGL.Dats.DBServiceFinishProd;
using XGL.Models.Model.OrderPrepare;
using XGL.Thrift;
namespace XGLFinishPro.Views
{
/// <summary>
/// LanJu_Prepare.xaml 的交互逻辑
/// </summary>
public partial class LanJu_Prepare : UserControl
{
FormingMachineService formingMachineService = new FormingMachineService();
Timer timerDeciveState = new Timer();
string deviceCode = Utils.GetAppSetting("DeviceCode");
public LanJu_Prepare()
{
InitializeComponent();
}
List<WorkOrder> modelWareHouse = new List<WorkOrder>();
FinishProdDBService userDbWareHouse = new FinishProdDBService();
WorkOrder list_modelWareHouse = new WorkOrder();
string messageOrderCode = "";
DataTable dt;
List<BaseEquipment> eqment;
/// <summary>
/// <summary>
/// 获取主页显示订单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GetWorkOrder()
{
try
{
List<WetMaterialModel> wetList = new List<WetMaterialModel>();
//modelWareHouse = new List<WorkOrder>();
//userDbWareHouse = new DBService();
string date = this.dateStart.SelectedDate.ToString() == "" ? DateTime.Now.ToString() : this.dateStart.SelectedDate.ToString();
dt = userDbWareHouse.GetWetPlanInfo(deviceCode, date);
//eqment = userDbWareHouse.GeteqmentInfo();
if (dt == null)
{
this.WorkOrder.ItemsSource = null;
return;
}
else
{
this.WorkOrder.ItemsSource = null;
this.WorkOrder.ItemsSource = dt.DefaultView;
}
//foreach (DataRow i in dt.Rows)
//{
// WetMaterialModel wet = new WetMaterialModel();
// wet.id = i["id"].ToString();
// wet.workorder_id = i["workorder_id"].ToString();
// wet.workorder_code = i["workorder_code"].ToString();
// wet.product_name = i["product_name"].ToString();
// wet.material_code = i["material_code"].ToString();
// wet.material_name = i["material_name"].ToString();
// wet.plan_time = Convert.ToDateTime(i["plan_time"].ToString());
// wet.bucket_code = i["bucket_code"].ToString();
// wet.shift_desc = i["shift_desc"].ToString();
// var inneconde= ExtractAndSort(i["prod_line_code"].ToString());
// foreach (var item in inneconde)
// {
// wet.prod_line_code += "[" + eqment.Find(c=>c.EquipmentCode== item).EquipmentName + "],";
// }
// wet.status = i["status"].ToString();
// wet.sync_flag = i["sync_flag"].ToString();
// wet.processid = i["route_code"].ToString();
// wetList.Add(wet);
// // list_modelWareHouse.WorkOrderCode = i["WorkOrderCode"].ToString();
// // list_modelWareHouse.OrderCode = i["OrderCode"].ToString();
// // list_modelWareHouse.ProductName = i["ProductName"].ToString();
// // list_modelWareHouse.ProductSpc = i["ProductSpc"].ToString();
// // list_modelWareHouse.QuantitySplit = i["QuantitySplit"].ToString();
// // list_modelWareHouse.BatchCode = i["BatchCode"].ToString();
// // modelWareHouse.Add(list_modelWareHouse);
// LogHelper.instance.log.Info(wet.prod_line_code);
//}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("获取成品工单准备信息时发生异常:" + ex.Message);
}
}
public List<string> ExtractAndSort(string input)
{
List<string> extractedData = new List<string>();
JArray jsonArray = JArray.Parse(input);
foreach (JArray subArray in jsonArray)
{
if (subArray.Count == 2)
{
string process = subArray[0].Value<string>();
string value = subArray[1].Value<string>();
if (process.StartsWith("GX-") && !process.Equals("GX-01"))
{
extractedData.Add(value);
}
}
}
return extractedData;
}
private T FindParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject parent = VisualTreeHelper.GetParent(child);
if (parent is T)
{
return (T)parent;
}
if (parent != null)
{
return FindParent<T>(parent);
}
return null;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
this.dateStart.SelectedDate = Convert.ToDateTime(LoginUser.WorkDate);//DateTime.Now;
timerDeciveState.Interval = Utils.GetAppSetting("GetDeviceStateInterval") == "" ? 15000 : Convert.ToInt32(Utils.GetAppSetting("GetDeviceStateInterval"));
timerDeciveState.Elapsed += TimerDeciveState_Elapsed;
//timerDeciveState.Start();
GetWorkOrder();
}
private void TimerDeciveState_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
if (Utils.isAnyBodyPerating) return;
List<WetMaterialModel> wetList = new List<WetMaterialModel>();
string date = "";
//使用Dispatcher来在UI线程上更新UI
this.Dispatcher.Invoke(
new Action(() =>
{
date = this.dateStart.SelectedDate.ToString() == "" ? DateTime.Now.ToString() : this.dateStart.SelectedDate.ToString();
}
),
System.Windows.Threading.DispatcherPriority.Render);
dt = userDbWareHouse.GetWetPlanInfo(deviceCode, date);
if (dt == null) return;
if (wetList != null)
{
//使用Dispatcher来在UI线程上更新UI
this.Dispatcher.Invoke(
new Action(() =>
{
this.WorkOrder.ItemsSource = null;
this.WorkOrder.ItemsSource = dt.DefaultView;
}
),
System.Windows.Threading.DispatcherPriority.Render);
}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("获取工单准备信息时发生异常:" + ex.Message);
}
}
private async void btnStartOrders_Click(object sender, RoutedEventArgs e)
{
//陈恒杰在2024-01-07日与榄菊的苏振华确认不需要用户验证
//CheckUserWin checkUserWin = new CheckUserWin();
//checkUserWin.ShowDialog();
//if (!checkUserWin.loginFlag)
//{
// CustomMessageBox.Show("请先校验用户!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
// return;
//}
if (WorkOrder.SelectedItems.Count == 0)
{
CustomMessageBox.Show("请选择要开始的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
string workorderID = (WorkOrder.SelectedItem as DataRowView)["workorder_code"].ToString();
string status = (WorkOrder.SelectedItem as DataRowView)["status"].ToString();
if (!status.Equals("w1"))
{
if (status != "")
{
CustomMessageBox.Show("该工单不符合条件,请选择其他的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
}
var selectedRow = (WorkOrder.SelectedItem as DataRowView);
//获取WMS齐套率湿料计划先不用
//var wmsState = userDbWareHouse.GetWorkOrderQitaoLv(orderID);
//if (wmsState == null || wmsState.Rows[0][0].Equals("0"))
//{
// CustomMessageBox.Show("该工单未准备好,请稍后再试!", CustomMessageBoxIcon.Warning);
// return;
//}
//获取湿料计划指定的成型机
//var cxjDt = userDbWareHouse.GetCXJList(orderID);
//更新工单状态
//var updatestatus = userDbWareHouse.UpdateSycnFlag(workorderID);
if (!UpdateOrderStatus(workorderID))
{
CustomMessageBox.Show("开始工单失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
}
else
{
string materialCode = selectedRow["product_code"].ToString();
string materialDesc = selectedRow["product_name"].ToString();
userDbWareHouse.InsertOperationLog(workorderID, "w2", "", "开始工单", deviceCode, materialCode, materialDesc);
await CallCheckApi("checkTypeSCXJ");
GetWorkOrder();
}
#region MyRegion
//DataTable cxjDt = null;
////根据工单获取成型机
//cxjDt = userDbWareHouse.GetCXJList(workorderID);// 在此处执行数据库查询
//if (cxjDt == null || cxjDt.Rows.Count == 0)
//{
// CustomMessageBox.Show("该工单未指定料罐、成型机,请稍后再试!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
// return;
//}
//List<string> cxjList = new List<string>();
//List<string> bucketList = new List<string>();
////这扯淡的设计,根据湿料计划获取各个工单对应的工序、机台信息,这样式的,[["GX01","C1"],["GX01","C5"],["GX01","C3"],["GX01","C6"],["GX01","C8"],["GX02","H2"],["GX02","H3"],["GX02","H4"],["GX02","H5"],["GX02","H6"],["GX03","X3"],["GX03","X6"]]
//for (int i = 0; i < cxjDt.Rows.Count; i++)
//{
// string jsonStrCXJList = cxjDt.Rows[i][0].ToString();
// string bucketNo = cxjDt.Rows[i][1].ToString();
// bucketList.Add(bucketNo);
// // 解析JSON字符串为嵌套的列表结构
// List<List<string>> data = JsonConvert.DeserializeObject<List<List<string>>>(jsonStrCXJList);
// // 输出嵌套列表的值
// foreach (var innerList in data)
// {
// if (innerList[1].Contains("C"))
// {
// //记录成型机列表
// cxjList.Add(innerList[1]);
// }
// }
//}
//cxjList = cxjList.Distinct().ToList();//去重
//bucketList = bucketList.Distinct().ToList();
////var jsonObject = JsonConvert.DeserializeObject(jsonStrCXJList);
//string apiUrl = Utils.GetAppSetting("WCSMaterialSyncAddress") == "" ? "http://192.168.202.28:9001/api/v1/ReceiveMesMsg/materialPlanSync" : Utils.GetAppSetting("WCSMaterialSyncAddress");
//MaterialPlanModel materialPlanModel = new MaterialPlanModel();
//List<WetMaterialModel> listWetMaterial = Utils.ToDataList<WetMaterialModel>(dt);
//List<skuInfo> skuInfoList = new List<skuInfo>();
//materialPlanModel.reqCode = CommonFunc.Common.GetUUID();
//materialPlanModel.reqTime = DateTime.Now.ToString();
//materialPlanModel.factory = Utils.GetAppSetting("SiteCode");
//materialPlanModel.planNo = workorderID;
//foreach (var item in bucketList)
//{
// skuInfo sku = new skuInfo();
// sku.sku = material;
// sku.loadNo = item;
// List<unloadNoInfo> unloadNoInfoList = new List<unloadNoInfo>();
// foreach (var buckt in cxjList)
// {
// unloadNoInfo unloadNoInfo = new unloadNoInfo();
// unloadNoInfo.unloadNo = buckt;
// unloadNoInfoList.Add(unloadNoInfo);
// }
// sku.unLoadItems = unloadNoInfoList;
// skuInfoList.Add(sku);
//}
//materialPlanModel.data = skuInfoList;
//// 将要发送的数据序列化为JSON格式
//var jsonContent = JsonConvert.SerializeObject(materialPlanModel);
//LogHelper.instance.log.Info("给WCS同步计划>>" + jsonContent);
//RestHelper restClient = new RestHelper();
//var response = await restClient.PostAsync(apiUrl, jsonContent);
//WcsSyncResult result = Utils.DeJson<WcsSyncResult>(response);
////Console.WriteLine(response);
//if (result.message.ToLower().Equals("ok"))
//{
// //更新湿料计划同步状态
// var updatestatus = userDbWareHouse.UpdateSycnFlag(workorderID);
// if (!updatestatus)
// LogHelper.instance.log.Info("更新湿料计划同步状态失败!");
// else
// {
// GetWorkOrder();
// }
//}
//else
//{
// CustomMessageBox.Show("开始工单失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
//}
#endregion
}
private async Task CallCheckApi(string checkType)
{
string workorderCode = (WorkOrder.SelectedItem as DataRowView)["workorder_code"].ToString();
string workorderID = (WorkOrder.SelectedItem as DataRowView)["workorder_id"].ToString();
//string batchCode = (WorkOrder.SelectedItem as DataRowView)["batch_code"].ToString();
//调用首件检验接口
string apiUrl = formingMachineService.GetInterfaceUrl("createCheckProduceTask");
FirstCheckModel firstCheck = new FirstCheckModel();
firstCheck.factoryCode = Utils.GetAppSetting("SiteCode");
if (checkType.Equals("checkTypeSCXJ"))
{
firstCheck.incomeBatchNo = null;
}
else
{
firstCheck.incomeBatchNo = null;//(WorkOrder.SelectedItem as DataRowView)["batch_code"].ToString();
}
firstCheck.orderNo = workorderCode;
firstCheck.materialName = (WorkOrder.SelectedItem as DataRowView)["product_name"].ToString();
firstCheck.materialCode = (WorkOrder.SelectedItem as DataRowView)["product_code"].ToString();
firstCheck.checkType = checkType;//"checkTypeSC";
firstCheck.quality = (WorkOrder.SelectedItem as DataRowView)["quantity_split"].ToString();
firstCheck.unit = (WorkOrder.SelectedItem as DataRowView)["unit"].ToString();
//根据线体编码获取车间编码
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 = (WorkOrder.SelectedItem as DataRowView)["plan_time"].ToString();
firstCheck.checkManName = LoginUser.UserName;
firstCheck.checkManCode = LoginUser.UserCode;
firstCheck.checkLoc = deviceCode;
// 将要发送的数据序列化为JSON格式
var jsonContent = JsonConvert.SerializeObject(firstCheck);
LogHelper.instance.log.Info("开始巡检>>" + jsonContent);
RestHelper restClient = new RestHelper();
//var response =;
Rootobjectresu result = Utils.DeJson<Rootobjectresu>(await restClient.PostAsync(apiUrl, jsonContent));
if (result.code == 200)
{
CustomMessageBox.Show("巡检任务创建成功", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Success);
LogHelper.instance.log.Info("首检检验成功>>" + result.msg);
GetWorkOrder();
}
else
{
LogHelper.instance.log.Info("巡检任务创建失败>>" + result.msg);
CustomMessageBox.Show("调用巡检任务接口失败:" + result.msg, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
}
}
private bool UpdateOrderStatus(string workorderID)
{
string name = LoginUser.UserName + "-" + LoginUser.UserCode;
if (name.IsNullOrEmpty())
{
name = "无-0";
}
//更新工单状态
var updatestatus = userDbWareHouse.UpdateSycnFlag(workorderID, deviceCode, name);
if (!updatestatus)
{
CustomMessageBox.Show("开始工单失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return false;
}
DataTable dtSubOrders = userDbWareHouse.GetSubOrderInfo(workorderID);
if (dtSubOrders != null)
{
// 递归更新子单状态
foreach (DataRow subOrder in dtSubOrders.Rows)
{
UpdateOrderStatus(subOrder["workorder_code"].ToString());
}
}
return true;
}
private void Flow_Click(object sender, RoutedEventArgs e)
{
int index = 0;
Button flowButton = (Button)sender;
DataGridRow row = FindParent<DataGridRow>(flowButton);
if (row != null)
{
// 获取对应行的数据项对象
var rowDataItem = row.Item;
// 获取行号
index = row.GetIndex();
}
var selectedRow = (WorkOrder.Items[index] as DataRowView);//WorkOrder.Items[index] as WetMaterialModel;
var workordercode = selectedRow["workorder_code"].ToString();
dt = userDbWareHouse.GetFlowInfo(workordercode);
FlowInfoWin flowInfoWin = new FlowInfoWin(dt);
flowInfoWin.ShowDialog();
}
private void SOP_Click(object sender, RoutedEventArgs e)
{
int index = 0;
Button sopButton = (Button)sender;
DataGridRow row = FindParent<DataGridRow>(sopButton);
if (row != null)
{
// 获取对应行的数据项对象
var rowDataItem = row.Item;
// 获取行号
index = row.GetIndex();
}
var selectedRow = (WorkOrder.Items[index] as DataRowView);//WorkOrder.Items[index] as WetMaterialModel;
var processid = selectedRow["route_code"].ToString();
dt = userDbWareHouse.GetSOPInfo(processid);
SopInfoWin sopInfoWin = new SopInfoWin(dt);
sopInfoWin.ShowDialog();
}
private void Material_Click(object sender, RoutedEventArgs e)
{
int index = 0;
Button sopButton = (Button)sender;
DataGridRow row = FindParent<DataGridRow>(sopButton);
if (row != null)
{
// 获取对应行的数据项对象
var rowDataItem = row.Item;
// 获取行号
index = row.GetIndex();
}
var selectedRow = (WorkOrder.Items[index] as DataRowView);//WorkOrder.Items[index] as WetMaterialModel;
var processid = selectedRow["workorder_code"].ToString();
dt = userDbWareHouse.GetMaterialInfo(processid);
LanJu_Material sopInfoWin = new LanJu_Material(dt);
sopInfoWin.ShowDialog();
}
private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
GetWorkOrder();
}
/// <summary>
/// 增加序号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void USERLIST_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
private void WorkOrder_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
var selectedRow = (WorkOrder.SelectedItem as DataRowView);//WorkOrder.SelectedItem as WetMaterialModel;
if (selectedRow == null) return;
var processid = selectedRow["workorder_code"].ToString();
DataTable dt = userDbWareHouse.GetQitaolvInfo(processid);
if (dt == null)
{
this.dgMaterialInfo.ItemsSource = null;
}
else
{
this.dgMaterialInfo.ItemsSource = dt.DefaultView;
}
}
catch (Exception ex)
{
CustomMessageBox.Show(ex.Message, CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error);
LogHelper.instance.log.Error("获取工单齐套信息时发生异常:" + ex.Message);
}
}
private void dgMaterialInfo_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
private void Button_MouseEnter(object sender, MouseEventArgs e)
{
}
}
}