feat - 添加生成标签,清除记录,前后端打通,前端界面微调

read_card
SoulStar 5 days ago
parent 6eef9f7760
commit 3a37b46a1d

@ -11,11 +11,6 @@ namespace SlnMesnac.Repository
///</summary>
public partial class real_readdata
{
public real_readdata()
{
}
/// <summary>
/// Desc:
/// Default:

@ -1,4 +1,4 @@
<UserControl x:Class="SlnMesnac.WPF.Page.IndexPage.HistorySearch"
<Window x:Class="SlnMesnac.WPF.Page.IndexPage.HistorySearch"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@ -7,8 +7,8 @@
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.IndexPage"
xmlns:cvt2="clr-namespace:SlnMesnac.WPF.Converter.Generate"
mc:Ignorable="d"
d:DesignHeight="900" d:DesignWidth="1620" Background="Transparent">
<UserControl.Resources>
d:DesignHeight="900" d:DesignWidth="1620" Title="历史记录">
<Window.Resources>
<!--<converters:IsCheckedConverter x:Key="IsCheckedConverter"/>-->
<!-- 定义样式 -->
<Style x:Key="CustomDatePicker" TargetType="DatePicker">
@ -97,7 +97,7 @@
</Style.Triggers>
</Style>
</UserControl.Resources>
</Window.Resources>
<Border Grid.Row="1" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="2" CornerRadius="5" Background="Transparent" Margin="5">
@ -232,4 +232,4 @@
</Border>
</UserControl>
</Window>

@ -22,7 +22,7 @@ namespace SlnMesnac.WPF.Page.IndexPage
/// ChangeType.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class HistorySearch : UserControl
public partial class HistorySearch : Window
{
HistorySearchViewModel HistorySearchView;
public HistorySearch()

@ -209,13 +209,13 @@ Content="查询" Width="200" Visibility="Hidden" FontSize="20" Command="{Binding
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding WriteCount,Mode=TwoWay}" Width="100" Height="30" FontSize="15" Foreground="Black" Margin="0,0,0,0" />
<Button Content="生成编码" Width="100" Height="30" FontSize="15" Command="{Binding GenerateCodeCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
<Button Content="清除数据" Width="100" Height="30" FontSize="15" Command="{Binding ListClearCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
<Button Content="清除数据" Width="100" Height="30" FontSize="15" Command="{Binding AutoWriteCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
<Button Content="自动写入" Width="100" Height="30" FontSize="15" Command="{Binding AutoWriteCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
</WrapPanel>
</Grid>
<!-- 数据表格绑定ViewModel中的历史记录 -->
<Grid Grid.Row="1">
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="0">
<DataGrid x:Name="PrePareWriteDataGrid" Grid.Row="0" ItemsSource="{Binding PrepareedWriteList}" Background="#00000000"
<DataGrid x:Name="PrePareWriteDataGrid" Grid.Row="0" ItemsSource="{Binding PreparedWriteList}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="15"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
@ -228,13 +228,13 @@ Content="查询" Width="200" Visibility="Hidden" FontSize="20" Command="{Binding
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding LineNumber}" Header="编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding RFIDCode}" Header="RFID编码" Width="6*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding IsWrite}" Header="状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding serialno}" Header="编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding rfidascii}" Header="RFID编码" Width="6*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding writestatus}" Header="状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="写入" Height="40" Width="100" Command="{Binding DataContext.WriteCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
<Button Content="写入" Height="40" Width="100" Command="{Binding DataContext.RFIDWriteCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

@ -1,287 +0,0 @@
using Autofac.Core;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Models;
using Nancy;
using Nancy.Json;
using Serilog;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.Rfid;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Forms;
using TouchSocket.Sockets;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
[RegisterAsSingletonAttribute]
public partial class ChangeTypeViewModel : ObservableObject
{
private AppConfig appConfig;
private ISqlSugarClient? sqlSugarClient;
string lineno = string.Empty;
private readonly SerilogHelper _logger;
public List<RfidAbsractFactory> rfidList;
public ObservableCollection<string> Items { get; set; }
public ChangeTypeViewModel()
{
_logger = App.ServiceProvider.GetService<SerilogHelper>();
appConfig = App.ServiceProvider.GetService<AppConfig>();
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
UpdateCommand = new RelayCommand<object>(t => Update(t));
StopReadingCommand = new RelayCommand<object>(t => StopRead(t));
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
rfidList = App.ServiceProvider.GetRequiredService<List<RfidAbsractFactory>>();
Items = new ObservableCollection<string>();
foreach (var rfid in rfidList)
{
Items.Add(rfid.FilterData);
}
}
private string _QueryIsCheck = "";
public string QueryIsCheck
{
get { return _QueryIsCheck; }
set
{
_QueryIsCheck = value;
if (_QueryIsCheck != value)
{
SetProperty(ref _QueryIsCheck, value);
}
}
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
public RelayCommand<object> StopReadingCommand { get; set; }
private void Update(object parameter)
{
if (parameter == null)
{
return;
}
// 假设你的行模型叫 DictModel
var model = parameter as MesOrderInfo;
var label = model.OrderNo;
var ProductCode = model.ProductCode;
var ProductName = model.ProductName;
var ProductType = model.ProductType;
var PlanQty = model.PlanQty;
var NextProductNo = model.NextProductNo;
List<DeviceInfoConfig> DeviceInfos = appConfig.deviceInfoConfig.Where(x => x.Collectid == appConfig.StationCode && x.Name == QueryIsCheck.ToString().Trim() && x.Deleteflag == 0).ToList();
string mesOrderNo = MesOrderNo;
string rfidCount = RfidCount;
Real_DataInfo real_Data = new Real_DataInfo()
{
OrderNo = model.OrderNo,
Deviceid = DeviceInfos[0].Deviceid,
LineName = QueryIsCheck.ToString().Trim(),
LineNo = DeviceInfos[0].Addr,
ProductType = model.ProductType,
RfidCount = model.PlanQty.ToString(),
NextProductNo = model.NextProductNo.ToString("D3")
};
WeakReferenceMessenger.Default.Send(real_Data);
MessageBox.Show("MES订单切换成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
Log.Information($"{mesOrderNo}MES订单切换成功{JsonSerializer.Serialize(real_Data)}");
MainWindowViewModel.ReturnHomeAction?.Invoke();
}
/// <summary>
/// 停止读取RFID数据
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[RelayCommand]
private async Task StopRead(object parameter)
{
//获取设备编号
if (string.IsNullOrEmpty(QueryIsCheck.ToString().Trim()))
{
MessageBox.Show("请选择产线!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
List<DeviceInfoConfig> DeviceInfos = appConfig.deviceInfoConfig.Where(x => x.Collectid == appConfig.StationCode && x.Name == QueryIsCheck.ToString().Trim() && x.Deleteflag == 0).ToList();
var res = rfidList.FirstOrDefault(x => x.deviceid == DeviceInfos[0].Deviceid).Set_StopIdentify().GetAwaiter().GetResult();
if (res)
{
MessageBox.Show("停止盘点成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("停止盘点失败!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 从MES获取订单信息
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[RelayCommand]
private async Task RefreshData(object parameter)
{
//获取设备编号
if (string.IsNullOrEmpty(QueryIsCheck.ToString().Trim()))
{
MessageBox.Show("请选择产线!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else
{
List<DeviceInfoConfig> DeviceInfos = appConfig.deviceInfoConfig.Where(x => x.Collectid == appConfig.StationCode && x.Name == QueryIsCheck.ToString().Trim() && x.Deleteflag == 0).ToList();
lineno = DeviceInfos[0].Addr;
}
Console.WriteLine("调用MES获取订单接口");
//调用MES接口获取生产订单信息
//MessageBox.Show("MES订单获取成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
List<MesOrderInfo> mesOrderInfos = new List<MesOrderInfo>();
string response = "{\"code\":200,\"msg\":\"success\",\"data\":[{\"OrderNo\":\"SS075\",\"ProductCode\":\"4030502500100006\",\"ProductType\":\"钢丝带-ST-井下阻燃钢丝带\",\"ProductName\":\"输送带-井下阻燃钢丝带-ST\",\"ProductSpec\":\"1400mmST/S2500*18+8MT/MTD7.2P15N89\",\"PlanQty\":130.00,\"NextProductNo\":1}]}\r\n";
Console.WriteLine("接收MES接口返回:"+ response);
// 反序列化
try
{
var responsejson = JsonSerializer.Deserialize<MesApiResponse<MesOrderInfo>>(response, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
if (responsejson?.Data != null)
{
if (responsejson.Code != 200)
{
MessageBox.Show("MES订单获取失败!" + responsejson.Code + responsejson.Msg, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
Log.Information($"MES订单获取失败{JsonSerializer.Serialize(responsejson)}");
return;
}
//Console.WriteLine("序列化:" + responsejson.Code);
if (response != null)
{
ChangeTypePanel.Clear();
foreach (var item in responsejson.Data)
{
ChangeTypePanel.Add(item);
}
}
}
}
catch (Exception ex)
{
Log.Information($"JSON解析失败: {ex.Message}");
Log.Information($"原始内容: {response}");
MessageBox.Show("MES订单获取失败");
}
}
private DateTime _BeginDate;
public DateTime BeginDate
{
get { return _BeginDate; }
set
{
if (_BeginDate != value)
{
_BeginDate = value;
if (_BeginDate != value)
{
SetProperty(ref _BeginDate, value);
}
}
}
}
private string _MesOrderNo = "";
public string MesOrderNo
{
get { return _MesOrderNo; }
set
{
if (_MesOrderNo != value)
{
SetProperty(ref _MesOrderNo, value);
}
}
}
private string _RfidCount = "";
public string RfidCount
{
get { return _RfidCount; }
set
{
if (_RfidCount != value)
{
SetProperty(ref _RfidCount, value);
}
}
}
/// <summary>
///
/// </summary>
public RelayCommand<object> UpdateCommand { get; set; }
public RelayCommand<object> UpdateCommand1 { get; set; }
private string _ProductType;
public string ProductType
{
get => _ProductType;
set
{
if (_ProductType != value)
{
SetProperty(ref _ProductType, value);
}
}
}
private string _KTProductType;
public string KTProductType
{
get => _KTProductType;
set
{
if (_KTProductType != value)
{
SetProperty(ref _KTProductType, value);
}
}
}
private ObservableCollection<MesOrderInfo> _ChangeTypePanel = new ObservableCollection<MesOrderInfo>();
public ObservableCollection<MesOrderInfo> ChangeTypePanel
{
get => _ChangeTypePanel;
set => SetProperty(ref _ChangeTypePanel, value);
}
}
}

@ -1,6 +1,7 @@
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using GalaSoft.MvvmLight;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Common;
@ -15,6 +16,7 @@ using SlnMesnac.Rfid.Enum;
using SlnMesnac.Serilog;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using SlnMesnac.WPF.Page.IndexPage;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -36,7 +38,7 @@ using Task = System.Threading.Tasks.Task;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
[RegisterAsSingletonAttribute]
public class ProductionLineViewModel : ViewModelBase
public class ProductionLineViewModel : ObservableObject
{
private static StringChange _StringChange;
private String SerialNo = "";
@ -49,36 +51,51 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
#region 关联属性
/// <summary>
/// 历史遗留的达芬
/// </summary>
private ObservableCollection<Real_DataInfo> _Deviceinfo = new ObservableCollection<Real_DataInfo>();
public ObservableCollection<Real_DataInfo> Deviceinfo
{
get { return _Deviceinfo; }
set
{
_Deviceinfo = value;
RaisePropertyChanged(() => Deviceinfo);
if (_Deviceinfo != value)
{
SetProperty(ref _Deviceinfo, value);
}
}
}
/// <summary>
/// 准备写入的列表
/// </summary>
private ObservableCollection<real_readdata> _preparedWriteList = new ObservableCollection<real_readdata>();
public ObservableCollection<real_readdata> PreparedWriteList
{
get { return _preparedWriteList; }
set
{
_preparedWriteList = value;
RaisePropertyChanged(() => PreparedWriteList);
if (_preparedWriteList != value)
{
SetProperty(ref _preparedWriteList, value);
}
}
}
/// <summary>
/// 写入记录
/// </summary>
private ObservableCollection<real_readdata> _tempRecordList = new ObservableCollection<real_readdata>();
public ObservableCollection<real_readdata> TempRecordList
{
get { return _tempRecordList; }
set
{
_tempRecordList = value;
RaisePropertyChanged(() => TempRecordList);
if (_tempRecordList != value)
{
SetProperty(ref _tempRecordList, value);
}
}
}
@ -93,8 +110,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_currentDateTime != value)
{
_currentDateTime = value;
RaisePropertyChanged(() => CurrentDateTime);
SetProperty(ref _currentDateTime, value);
}
}
}
@ -110,8 +126,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_lastWriteState != value)
{
_lastWriteState = value;
RaisePropertyChanged(() => LastWriteState);
SetProperty(ref _lastWriteState, value);
}
}
}
@ -127,8 +142,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_rfidConnectState != value)
{
_rfidConnectState = value;
RaisePropertyChanged(() => RFIDConnectState);
SetProperty(ref _rfidConnectState, value);
}
}
}
@ -144,8 +158,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_orderNo != value)
{
_orderNo = value;
RaisePropertyChanged(() => OrderNo);
SetProperty(ref _orderNo, value);
}
}
}
@ -161,8 +174,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_lineNo != value)
{
_lineNo = value;
RaisePropertyChanged(() => LineNo);
SetProperty(ref _lineNo, value);
}
}
}
@ -178,8 +190,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_bindNo != value)
{
_bindNo = value;
RaisePropertyChanged(() => BindNo);
SetProperty(ref _bindNo, value);
}
}
}
@ -195,8 +206,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
if (_writeCount != value)
{
_writeCount = value;
RaisePropertyChanged(() => WriteCount);
SetProperty(ref _writeCount, value);
}
}
}
@ -258,9 +268,10 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
return;
}
for(int i = 1; i <= count; i++)
{
string writeString = OrderNo + LineNo + DateTime.Now.ToString("yy") + BindNo + i.ToString("D2");
PreparedWriteList.Add(new real_readdata()
{
objid = Guid.NewGuid().ToString(),
@ -268,7 +279,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
lineno = LineNo,
bindno = BindNo,
serialno = i.ToString("D2"),
rfidascii = writeString,
writestatus = "等待"
});
}
}
@ -279,7 +291,10 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
/// <param name="obj"></param>
private void ListClear(object obj)
{
if(MessageBox.Show("确认", "确定要清除已生成的数据吗?(该操作不可还原)", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
PreparedWriteList.Clear();
}
}
/// <summary>
@ -288,7 +303,10 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
/// <param name="obj"></param>
private void HistoryClear(object obj)
{
if (MessageBox.Show("确认", "确定要清除本次写入的数据吗?(可在查看历史中查询以往写入的标签)", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
TempRecordList.Clear();
}
}
/// <summary>
@ -297,7 +315,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
/// <param name="obj"></param>
private void HistoryPage(object obj)
{
HistorySearch window = new HistorySearch();
window.Show();
}
/// <summary>
@ -310,12 +329,22 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
/// <summary>
/// 动写入
/// 动写入
/// </summary>
/// <param name="obj"></param>
private void RFIDWrite(object obj)
{
real_readdata? data;
if (obj is real_readdata)
{
data = obj as real_readdata;
}
else
{
return;
}
//rfidList.FirstOrDefault(x => x.deviceid == iCombineId)
}
/// <summary>
@ -334,7 +363,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
return;
}
//读到停止连续盘点
//bool stopflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_StopIdentify();
bool stopflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_StopIdentify();
//查询数据库是否已存在记录
bool iflag = false;
string epcascii = Encoding.ASCII.GetString(tagInfos[0].EPC);
@ -433,17 +462,17 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
App.Current.Dispatcher.Invoke(() =>
{
RFIDHistoryRecords.Insert(0, new RFIDRecord
{
OrderNumber = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo,
LineNumber = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).LineNo,
ProductType = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ProductType,
OriginalEPC = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidEPC,
RFIDCode = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidASCII,
ReadTime = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime,
WriteTime = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime,
WriteStatus = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteStatus // 模拟1条失败数据
});
//RFIDHistoryRecords.Insert(0, new RFIDRecord
//{
// OrderNumber = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo,
// LineNumber = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).LineNo,
// ProductType = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ProductType,
// OriginalEPC = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidEPC,
// RFIDCode = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidASCII,
// ReadTime = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime,
// WriteTime = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime,
// WriteStatus = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteStatus // 模拟1条失败数据
//});
//RFIDHistoryRecords.OrderByDescending(x => x.ReadTime).ToList();
});
}
@ -520,6 +549,10 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
await Reconnect(device);
RFIDConnectState = "已连接";
}
else
{
RFIDConnectState = "已连接";
}
}
else
{

Loading…
Cancel
Save