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.

423 lines
15 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 Google.Protobuf.WellKnownTypes;
using HandyControl.Tools.Extension;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using System.Windows.Threading;
using XGL.Dats.DBServiceFinishProd;
using XGL.Models;
using XGL.Models.Model.OrderPrepare;
using System.Text.RegularExpressions;
using System.Configuration;
namespace XGLFinishPro.Views
{
/// <summary>
/// weighWindows.xaml 的交互逻辑
/// </summary>
public partial class weighWindows : UserControl
{
Dispatcher dispatcher;
FinishProdDBService userDbWareHouse = new FinishProdDBService();
static SerialPort serialPort;
public CheckTaskModel checkTaskModel = new CheckTaskModel();//当前选择的任务
string CurrentWeighingData;
public weighWindows()
{
InitializeComponent();
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
var dataTable = userDbWareHouse.WeighingTask("");
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
}
else
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
}
}
/// <summary>
/// 重置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
jianyanwuliao.Text = null;
jianyanjiedian.Text = null;
renwubianhao.Text = null;
guizemingcheng.Text = null;
zhongliang.Text = null;
renwubianhao1.Text = null;
jianyanjiedian1.Text = null;
jianyanwuliao1.Text = null;
if (zhongDate.Items.Count != 0)
{
zhongDate.Items.Clear();
zhongDate.ItemsSource = null;
}
Button_Click_2(null, null);
}
/// <summary>
/// 称重
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (jianyanwuliao.Text.IsNullOrEmpty() || jianyanjiedian.Text.IsNullOrEmpty() || renwubianhao.Text.IsNullOrEmpty() || guizemingcheng.Text.IsNullOrEmpty())
{
MessageBox.Show("数据不完整,无法称重!!");
}
else
{
// 获取当前应用程序的Dispatcher
dispatcher = Application.Current.Dispatcher;
// 创建一个新的SerialPort实例
serialPort = new SerialPort();
string portName = ConfigurationManager.AppSettings["weigh"];
if (!string.IsNullOrEmpty(portName))
{
serialPort.PortName = portName;
}
// 设置串口号和波特率
//serialPort.PortName = "COM12"; // 串口号根据实际情况设置
serialPort.BaudRate = 9600; // 波特率根据实际情况设置
// 设置其他串口参数,如数据位、校验位等
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
try
{
serialPort.Open();
Console.WriteLine("串口已打开");
lianjiezhuangtai.Text = "已连接";
serialPort.Write(new byte[] { 0x1B, (byte)Signal.Print }, 0, 2);
Task.Run(() => ReadDataInBackground());
}
catch (Exception ex)
{
Console.WriteLine("打开串口时出错:" + ex.Message);
}
Console.ReadLine(); // 阻塞主线程,保持程序运行
}
void ReadDataInBackground()
{
try
{
while (true)
{
string data = serialPort.ReadExisting();
Thread.Sleep(200);
if (!string.IsNullOrEmpty(data))
{
Match match1 = Regex.Match(data, @"(\d+\.\d+)");
string bb = match1.Groups[1].Value;
upDateDate(bb);
UpdateUI(bb);
break; // 读到数据后跳出循环
}
}
}
catch (Exception ex)
{
Console.WriteLine("读取串口数据时出错:" + ex.Message);
}
finally
{
ClosePort();
}
}
void UpdateUI(string data)
{
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
{
// 更新UI控件
zhongliang.Text = data;
});
}
void ClosePort()
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
Console.WriteLine("串口已关闭");
Dispatcher.Invoke(() =>
{
lianjiezhuangtai.Text = "未连接";
});
}
}
}
/// <summary>
/// 称重更新数据库
/// </summary>
/// <param name="Date"></param>
public void upDateDate(string Date)
{
// 将数据保存
CheckTaskModel newItem = new CheckTaskModel() { material_name = Date };
Dispatcher.Invoke(() =>
{
zhongDate.Items.Add(newItem);
});
if (string.IsNullOrEmpty(checkTaskModel.actual_value))
{
checkTaskModel.actual_value = $"[\"{Date}\"]";
}
else
{
// 去除字符串开头和结尾的方括号
checkTaskModel.actual_value = checkTaskModel.actual_value.Trim(']');
// 在字符串末尾添加逗号和aaa的值
checkTaskModel.actual_value += $", \"{Date}\"]";
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);//保存称重数据
Button_Click_2(null, null);
}
/// <summary>
/// 查询数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click_2(object sender, RoutedEventArgs e)
{
string wher = "";
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
{
// 更新UI控件
if (!renwubianhao1.Text.IsNullOrEmpty())
{
wher += " and qct.check_no LIKE '%" + renwubianhao1.Text + "%'";
}
if (!jianyanjiedian1.Text.IsNullOrEmpty())
{
wher += " and qt.check_name LIKE '%" + jianyanjiedian1.Text + "%'";
}
if (!jianyanwuliao1.Text.IsNullOrEmpty())
{
wher += " and qct.material_name LIKE '%" + jianyanwuliao1.Text + "%'";
}
if (!dateStart.Text.IsNullOrEmpty())
{
wher += " and qct.income_time='" + dateStart.Text + "'";
}
var dataTable = userDbWareHouse.WeighingTask(wher);
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = null;
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
}
else
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
}
});
}
/// <summary>
/// 表格双击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// 获取选中行的索引
int selectedIndex = WeighingTaskDateTable.SelectedIndex;
if (zhongDate.Items.Count != 0)
{
zhongDate.Items.Clear();
zhongDate.ItemsSource = null;
}
// 检查是否选中了行
if (selectedIndex >= 0 && selectedIndex < WeighingTaskDateTable.Items.Count)
{
// 获取选中行的数据项
var selectedRow = WeighingTaskDateTable.Items[selectedIndex] as DataRowView;
// 将选中行的数据项赋给控件
jianyanwuliao.Text = selectedRow["material_name"].ToString();
jianyanjiedian.Text = selectedRow["check_name"].ToString();
renwubianhao.Text = selectedRow["check_no"].ToString();
guizemingcheng.Text = selectedRow["rule_name"].ToString();
checkTaskModel.check_name = selectedRow["check_name"].ToString();
checkTaskModel.material_name = selectedRow["material_name"].ToString();
checkTaskModel.check_no = selectedRow["check_no"].ToString();
checkTaskModel.rule_name = selectedRow["rule_name"].ToString();
checkTaskModel.material_code = selectedRow["material_code"].ToString();
checkTaskModel.record_id = selectedRow["record_id"].ToString();
checkTaskModel.actual_value = selectedRow["actual_value"].ToString();
if (!selectedRow["actual_value"].ToString().IsNullOrEmpty())
{
List<string> stringList = JsonConvert.DeserializeObject<List<string>>(selectedRow["actual_value"].ToString());
if (stringList.Count != 0)
{
//List<CheckTaskModel> materialList = new List<CheckTaskModel>();
foreach (var item in stringList)
{
//materialList.Add(new CheckTaskModel { material_name = item });
zhongDate.Items.Add(new CheckTaskModel { material_name = item });
}
//zhongDate.Items.Add(materialList);
}
}
}
}
/// <summary>
/// 表格删除按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var dataContext = button?.DataContext;
if (dataContext != null && dataContext is CheckTaskModel)
{
var item = (CheckTaskModel)dataContext;
string materialName = item.material_name;
// 从 DataGrid 的 ItemsSource 中移除该项
zhongDate.Items.Remove(item); // 从 actual_value 中移除 materialName
checkTaskModel.actual_value = RemoveMaterialNameFromActualValue(checkTaskModel.actual_value, materialName);
if (checkTaskModel.actual_value=="[]")
{
checkTaskModel.actual_value = null;
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);
Button_Click_2(null, null);
// 从数据源中移除该项
}
}
private string RemoveMaterialNameFromActualValue(string actualValue, string materialName)
{
// 解析 actualValue移除 materialName并返回更新后的值
var list = JsonConvert.DeserializeObject<List<string>>(actualValue);
list.Remove(materialName);
return JsonConvert.SerializeObject(list);
}
private void pickerstart_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
}
}
public class motre
{
public string material_name { get; set; }
}
public class CheckTaskModel
{
/// <summary>
/// 检验节点名称
/// </summary>
public string check_name { get; set; }
//public string CheckType { get; set; }
/// <summary>
/// 检验任务号
/// </summary>
public string check_no { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string material_code { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string material_name { get; set; }
/// <summary>
/// 检验日期
/// </summary>
public DateTime income_time { get; set; }
/// <summary>
/// 序号
/// </summary>
public string RowNumber { get; set; }
/// <summary>
/// 检测项ID
/// </summary>
public string record_id { get; set; }
/// <summary>
/// 检测项称量结果
/// </summary>
public string actual_value { get; set; }
/// <summary>
/// 检测项名称
/// </summary>
public string rule_name { get; set; }
}
public enum Signal
{
/// <summary>
/// 打印
/// </summary>
Print = 0x70,
/// <summary>
/// 校准
/// </summary>
Calibration = 0x71,
/// <summary>
/// 计数
/// </summary>
Count = 0x72,
/// <summary>
/// 单位转换
/// </summary>
UnitConvert = 0x73,
/// <summary>
/// 去皮重
/// </summary>
Tare = 0x74
}
}