新增mes接口调用

read_card
CaesarBao 2 months ago
parent f9a255508e
commit cd8493e5a1

@ -50,7 +50,7 @@ namespace SlnMesnac.Extensions
};
public static TcpServer _TcpServer;
private static StringChange _StringChange;
private static List<Base_sensor_info> sensor_Infos;
public static void AddRfidFactorySetup(this IServiceCollection services)
@ -62,7 +62,7 @@ namespace SlnMesnac.Extensions
_StringChange = x.GetService<StringChange>();
_TcpServer = x.GetService<TcpServer>();
List<Base_device_info> baseRfidInfos = sqlSugarClient.Queryable<Base_device_info>().Where(x=>x.Collectid == appConfig.StationCode).ToList();
sensor_Infos = sqlSugarClient.Queryable<Base_sensor_info>().Where(x => x.Deleteflag == 0).ToList();
//sensor_Infos = sqlSugarClient.Queryable<Base_sensor_info>().Where(x => x.Deleteflag == 0).ToList();
List<RfidAbsractFactory> absractFactories = new List<RfidAbsractFactory>();
try
@ -92,8 +92,8 @@ namespace SlnMesnac.Extensions
_rfid.deviceid = item.Deviceid;
_rfid.ip = IP;
_rfid.port = int.Parse(Port);
_rfid.ConfigKey = sensor_Infos.Find(x => x.Deviceid == item.Deviceid).Combineid;
_rfid.FilterData = sensor_Infos.Find(x => x.Deviceid == item.Deviceid).Mapid;
_rfid.ConfigKey = item.Deviceid;
//_rfid.FilterData = sensor_Infos.Find(x => x.Deviceid == item.Deviceid).Mapid;
//bool connectResult = _rfid.Connect(IP, int.Parse(Port));
//_rfid._Action += RecvIdentifyData_Instance;
bool connectResult = false;
@ -171,12 +171,12 @@ namespace SlnMesnac.Extensions
private static ushort GetMESCallback(int id)
{
var sensorInfo = sensor_Infos.Find((x) => { return x.Combineid == id.ToString(); });
var sensorInfo = "1";
if (sensorInfo == null)
{
return 1;
}
return (ushort)_StringChange.ParseToInt(sensorInfo.Mesid);
return (ushort)_StringChange.ParseToInt("1");
}

@ -1,158 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Models
{
/// <summary>
///
///</summary>
[SugarTable("base_sensor_info")]
public class Base_sensor_info
{
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="sensorid" ,IsPrimaryKey = true) ]
public string Sensorid { get; set; } = null!;
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="combineid" ) ]
public string Combineid { get; set; } = null!;
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="name" ) ]
public string? Name { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="sensorser" ) ]
public decimal? Sensorser { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="sensortypeid" ) ]
public decimal? Sensortypeid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deviceid" ) ]
public string? Deviceid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="readinterval" ) ]
public decimal? Readinterval { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="multdata" ) ]
public decimal? Multdata { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="timedout" ) ]
public decimal? Timedout { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="returnimm" ) ]
public decimal? Returnimm { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="mapid" ) ]
public string? Mapid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="recordtime" ) ]
public DateTime? Recordtime { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deleteflag" ) ]
public int? Deleteflag { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="recordperson" ) ]
public int? Recordperson { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="objid" ,IsIdentity = true) ]
public int Objid { get; set; }
/// <summary>
/// 备 注:是否调用适配器 1是 2否
/// 默认值:
///</summary>
[SugarColumn(ColumnName="CallAdapter" ) ]
public decimal? CallAdapter { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="CallCombineID" ) ]
public string? CallCombineID { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="mesid" ) ]
public string? Mesid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="DelayTime" ) ]
public string? DelayTime { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="ReadCounts" ) ]
public string? ReadCounts { get; set; }
}
}

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.domain
{
public class MesOrderInfo
{
public MesOrderInfo() { }
public string ProductSpec { get; set; }
public string OrderNo { get; set; }
public string ProductCode { get; set; }
public string ProductType { get; set; }
public string ProductName { get; set; }
public decimal PlanQty { get; set; }
}
}

@ -0,0 +1,98 @@
using System;
using System.Linq;
using System.Text;
using SqlSugar;
namespace SlnMesnac.Repository
{
///<summary>
///
///</summary>
[SugarTable("real_readdata")]
public partial class real_readdata
{
public real_readdata(){
}
/// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,IsIdentity=true,ColumnName="objid")]
public int objid {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="orderno")]
public string orderno {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="lineno")]
public string lineno {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="producttype")]
public string producttype {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="rfidepc")]
public string rfidepc {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="rfidascii")]
public string rfidascii {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="readtime")]
public DateTime? readtime {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="writetime")]
public DateTime? writetime {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="writestatus")]
public string writestatus {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "serialno")]
public string serialno { get; set; }
}
}

@ -50,7 +50,7 @@ namespace SlnMesnac.TouchSocket
{
private readonly SerilogHelper _logger;
private List<RfidAbsractFactory> rfidAbsractFactory;
private List<Base_sensor_info> base_Sensor_Infos;
public static Action<string> _RefreshLogMessageAction;
public static Action<string, string> RefreshStateEvent;
private IReal_mesdataService _real_MesdataService;

@ -85,6 +85,37 @@ namespace SlnMesnac.TouchSocket
return ResponseEntity;
}
public async Task<ApiResponse<MesOrderInfo>> GetMesOrderInfo(string lineCode, string datetime)
{
try
{
var invokeOption_30s = new InvokeOption(30 * 1000)
{
FeedbackType = FeedbackType.WaitInvoke
};
if (MESHttpClient == null)
{
return null;
}
var request = new WebApiRequest();
request.Method = HttpMethodType.Get;
request.Querys = new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("lineCode", lineCode), new KeyValuePair<string, string>("planDate", datetime) };
var responseValue = await MESHttpClient.InvokeTAsync<int>("/api/plan/get", invokeOption_30s, request);
//JToken responseValue = await MESHttpClient.InvokeTAsync<JToken>("Get:/api/plan", null, requestValue);
return JTokenToEntity<ApiResponse<MesOrderInfo>>(responseValue);
}
catch (Exception ex)
{
_logger.Info("ERROR: " + ex.Message);
return new ApiResponse<MesOrderInfo>();
}
}
/// <summary>
/// 主动上报
/// </summary>

@ -44,9 +44,9 @@ namespace SlnMesnac.TouchSocket
_apiServer.Init();
var _server = service.GetService<TcpServer>();
_server.Init(5656);
//var _httpclient = service.GetService<MeshttpClient>();
var _httpclient = service.GetService<MeshttpClient>();
//_server.Init(6001);
//await _httpclient.CreateWebApiClientAsync("172.16.0.106:9880");
await _httpclient.CreateWebApiClientAsync("10.20.8.51:8005");
//_httpclient.CreateWebApiClient("127.0.0.1:9880");
}

@ -405,7 +405,7 @@ namespace SlnMesnac.WPF
.AddClasses(classes => classes.WithAttribute<RegisterAsTransientAttribute>())
.AsSelf()
.WithTransientLifetime());
services.AddSingleton<Action<Real_DataInfo>>();
//services.AddSingleton<Action<Real_DataInfo>>();
// 注册ORM
services.AddSqlSugarSetup();

@ -49,10 +49,12 @@
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal">
<Button Content="首 页" x:Name="Index" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=Index}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="10,0,10,0"/>
<Button Content="键 盘" Command="{Binding OpenSystemKeyboardCommand}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="最小化" x:Name="Minimized" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" x:Name="Exit" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>
<Button Content="历史数据查询" x:Name="ChangeType" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=ChangeType}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<!--<Button Content="键 盘" Visibility="Hidden" Command="{Binding OpenSystemKeyboardCommand}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="最小化" Visibility="Hidden" x:Name="Minimized" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" Visibility="Hidden" x:Name="Exit" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>-->
<Button Content="订单导入" x:Name="ChangeType" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=ChangeType}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="数据查询" x:Name="HistorySearch" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=HistorySearch}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="报警记录" x:Name="AlarmRecord" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=AlarmRecord}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="代码生成" Visibility="Hidden" x:Name="Generate" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Generate}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
</StackPanel>

@ -10,17 +10,100 @@ namespace SlnMesnac.WPF.Model
{
public class Real_DataInfo : INotifyPropertyChanged
{
public string LineNo { get; set; }
private string _LineName = "";
public string LineName
{
get { return _LineName; }
set
{
if (_LineName != value)
{
_LineName = value;
OnPropertyChanged(nameof(LineName));
}
}
}
public string OrderNo { get; set; }
private string _LineNo = "";
public string LineNo
{
get { return _LineNo; }
set
{
if (_LineNo != value)
{
_LineNo = value;
OnPropertyChanged(nameof(LineNo));
}
}
}
private string _OrderNo = "";
public string ProductType { get; set; } = "整芯带";
public string OrderNo
{
get { return _OrderNo; }
set
{
if (_OrderNo != value)
{
_OrderNo = value;
OnPropertyChanged(nameof(OrderNo));
}
}
}
public string RfidCount { get; set; } = "20";
public string WriteCount { get; set; } = "0";
public string ProductStatus { get; set; } = "生产中";
private string _ProductType = "";
public string ProductType
{
get { return _ProductType; }
set
{
if (_ProductType != value)
{
_ProductType = value;
OnPropertyChanged(nameof(ProductType));
}
}
}
private string _RfidCount = "";
public string RfidCount
{
get { return _RfidCount; }
set
{
if (_RfidCount != value)
{
_RfidCount = value;
OnPropertyChanged(nameof(RfidCount));
}
}
}
private string _WriteCount = "";
public string WriteCount
{
get { return _WriteCount; }
set
{
if (_WriteCount != value)
{
_WriteCount = value;
OnPropertyChanged(nameof(WriteCount));
}
}
}
private string _ProductStatus = "";
public string ProductStatus
{
get { return _ProductStatus; }
set
{
if (_ProductStatus != value)
{
_ProductStatus = value;
OnPropertyChanged(nameof(ProductStatus));
}
}
}
private string _RfidASCII = "";
public string RfidASCII
@ -66,6 +149,19 @@ namespace SlnMesnac.WPF.Model
}
}
private string _SerialNo = "";
public string SerialNo
{
get { return _SerialNo; }
set
{
if (_SerialNo != value)
{
_SerialNo = value;
OnPropertyChanged(nameof(SerialNo));
}
}
}
/// <summary>

@ -0,0 +1,235 @@
<UserControl x:Class="SlnMesnac.WPF.Page.IndexPage.AlarmRecord"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
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>
<!--<converters:IsCheckedConverter x:Key="IsCheckedConverter"/>-->
<!-- 定义样式 -->
<Style x:Key="CustomDatePicker" TargetType="DatePicker">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="LightBlue"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="DarkBlue"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="14"></Setter>
<!-- 设置前景色(文本颜色) -->
<Setter Property="Foreground" Value="Black"></Setter>
</Style>
<!-- 定义日历的样式 -->
<Style x:Key="CustomCalendarStyle" TargetType="Calendar">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="White"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="Blue"></Setter>
<Setter Property="Width" Value="250"></Setter>
<Setter Property="Height" Value="250"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="12"></Setter>
</Style>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="18"/>
</Style>
<Style TargetType="DataGrid">
<!--网格线颜色-->
<Setter Property="CanUserResizeColumns" Value="false"/>
<Setter Property="Background" Value="#1152AC" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#4285DE"/>
</Setter.Value>
</Setter>
<Setter Property="VerticalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#1152AC"/>
</Setter.Value>
</Setter>
</Style>
<!--列头标题栏样式-->
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="BorderBrush" Value="#dddddd" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<!--单元格样式-->
<Style TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="#dddddd"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Border Grid.Row="1" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="2" CornerRadius="5" Background="Transparent" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" >
<TextBlock Text="报警记录" FontSize="25" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<Border Grid.Row="1" BorderBrush="Green" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,5,5">
<Grid Margin="10,5">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<Label Content="MES订单号:" FontSize="20" Foreground="Black"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="250" FontSize="20" Foreground="Black" Margin="0 0 30 0" />
<Label Content="写入状态" FontSize="20" Foreground="Black"/>
<ComboBox Width="70" Height="30" FontSize="20" SelectedItem="{Binding QueryIsCheck,Mode=TwoWay}" Margin="10,0,30,0" Foreground="Black">
<ComboBoxItem Content="成功" Background="White" Foreground="#4285DE"/>
<ComboBoxItem Content="失败" Foreground="#4285DE"/>
<ComboBoxItem Content="" Foreground="#4285DE"/>
</ComboBox>
<TextBlock Text="开始时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="BeginTime" FontSize="20"
Width="170" Margin="10 0" BorderBrush="Black"
materialDesign:CalendarAssist.IsHeaderVisible="False">
<DatePicker.SelectedDate >
<Binding
Path="BeginDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<TextBlock Text="结束时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="EndTime" Margin="10 0"
Width="170" BorderBrush="Black" FontSize="20"
materialDesign:CalendarAssist.IsHeaderVisible="False">
<DatePicker.SelectedDate>
<Binding
Path="EndDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<Button
Content="查询" Width="200" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="#009999" Margin="0 0 100 0"/>
</StackPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding realreaddata}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="Black" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding objid}" Header="ID" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding orderno}" Header="订单号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding lineno}" Header="产线号" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding producttype}" Header="产品类型" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding rfidepc}" Header="原始EPC" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding rfidascii}" Header="RFID编码" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding readtime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="读取时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding writetime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="写入时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding writestatus}" Header="写入状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTemplateColumn Header="写入状态" Width="1*">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}"
BorderThickness="0"
Padding="5">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- 成功:绿色文字 -->
<DataTrigger Binding="{Binding writestatus}" Value="成功">
<Setter Property="Foreground" Value="#FF008000"/>
</DataTrigger>
<!-- 失败:红色文字 -->
<DataTrigger Binding="{Binding writestatus}" Value="失败">
<Setter Property="Foreground" Value="#FFFF0000"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding writestatus}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UniformGrid>
</Grid>
</Border>
</Grid>
</Border>
</UserControl>

@ -0,0 +1,34 @@
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel.IndexPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Page.IndexPage
{
[RegisterAsSingletonAttribute]
/// <summary>
/// AlarmRecord.xaml 的交互逻辑
/// </summary>
public partial class AlarmRecord : UserControl
{
AlarmRecordViewModel alarmRecordViewModel;
public AlarmRecord()
{
InitializeComponent();
alarmRecordViewModel = new AlarmRecordViewModel();
this.DataContext = alarmRecordViewModel;
}
}
}

@ -4,12 +4,25 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.IndexPage"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="900" d:DesignWidth="1620" Background="#FF031B3D">
d:DesignHeight="900" d:DesignWidth="1620" Background="Transparent">
<UserControl.Resources>
<!--<converters:IsCheckedConverter x:Key="IsCheckedConverter"/>-->
<Style x:Key="CustomDatePicker" TargetType="DatePicker">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="LightBlue"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="DarkBlue"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="14"></Setter>
<!-- 设置前景色(文本颜色) -->
<Setter Property="Foreground" Value="Black"></Setter>
</Style>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
@ -85,17 +98,40 @@
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="4*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<Label Content="MES订单号:" FontSize="20" Foreground="White"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="250" FontSize="20" Foreground="White" Margin="0 0 30 0" />
<Label Content="RFID数量:" FontSize="20" Foreground="White"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding RfidCount,Mode=TwoWay}" Width="250" FontSize="20" Foreground="White" Margin="0 0 30 0" />
<!--<Label Content="产线编号:" FontSize="20" Foreground="Black"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="250" FontSize="20" Foreground="Black" Margin="0 0 30 0" />-->
<!--<Label Content="RFID数量:" FontSize="20" Foreground="Black"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding RfidCount,Mode=TwoWay}" Width="250" FontSize="20" Foreground="Black" Margin="0 0 30 0" />-->
<Label Content="产线编号:" FontSize="20" Foreground="Black"/>
<ComboBox Width="200" Height="30" FontSize="20" SelectedItem="{Binding QueryIsCheck,Mode=TwoWay}" Margin="10,0,30,0" Foreground="Black">
<ComboBoxItem Content="2#硫化线" Background="White" Foreground="#4285DE"/>
<ComboBoxItem Content="3#硫化线" Foreground="#4285DE"/>
<ComboBoxItem Content="6#硫化线上" Foreground="#4285DE"/>
<ComboBoxItem Content="6#硫化线下" Foreground="#4285DE"/>
<ComboBoxItem Content="7#硫化线" Foreground="#4285DE"/>
<ComboBoxItem Content="" Foreground="#4285DE"/>
</ComboBox>
<TextBlock Text="开始时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="BeginTime" FontSize="20"
Width="170" Margin="10 0" BorderBrush="Black"
materialDesign:CalendarAssist.IsHeaderVisible="False">
<DatePicker.SelectedDate >
<Binding
Path="BeginDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<Button
Content="从MES获取订单信息" Width="200" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="Green" Margin="0 0 100 0"/>
Content="从MES获取订单信息" VerticalAlignment="Center" Width="200" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="#009999" Margin="0 0 100 0"/>
</StackPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding ChangeTypePanel}" Background="#00000000"
@ -103,38 +139,18 @@
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="White" >
Foreground="Black" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding dictValue}" Header="组件型号编号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding dictLabel}" Header="组件型号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding OrderNo}" Header="订单编号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductCode}" Header="物料编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ProductName}" Header="物料名称" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ProductType}" Header="物料类型" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding PlanQty}" Header="计划数量" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="1.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="切换" Height="40" Width="100" Command="{Binding DataContext.UpdateCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding dictLabel}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UniformGrid>
<UniformGrid Grid.Row="2">
<DataGrid x:Name="listDataGrid1" Grid.Row="0" ItemsSource="{Binding ChangeTypePanel2}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="White" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding dictValue}" Header="壳体型号编号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding dictLabel}" Header="壳体型号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="1.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="切换" Height="40" Width="100" Command="{Binding DataContext.UpdateCommand1, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding dictLabel}"/>
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

@ -0,0 +1,235 @@
<UserControl 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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
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>
<!--<converters:IsCheckedConverter x:Key="IsCheckedConverter"/>-->
<!-- 定义样式 -->
<Style x:Key="CustomDatePicker" TargetType="DatePicker">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="LightBlue"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="DarkBlue"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="14"></Setter>
<!-- 设置前景色(文本颜色) -->
<Setter Property="Foreground" Value="Black"></Setter>
</Style>
<!-- 定义日历的样式 -->
<Style x:Key="CustomCalendarStyle" TargetType="Calendar">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="White"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="Blue"></Setter>
<Setter Property="Width" Value="250"></Setter>
<Setter Property="Height" Value="250"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="12"></Setter>
</Style>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="18"/>
</Style>
<Style TargetType="DataGrid">
<!--网格线颜色-->
<Setter Property="CanUserResizeColumns" Value="false"/>
<Setter Property="Background" Value="#1152AC" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#4285DE"/>
</Setter.Value>
</Setter>
<Setter Property="VerticalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#1152AC"/>
</Setter.Value>
</Setter>
</Style>
<!--列头标题栏样式-->
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="BorderBrush" Value="#dddddd" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<!--单元格样式-->
<Style TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="#dddddd"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Border Grid.Row="1" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="2" CornerRadius="5" Background="Transparent" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" >
<TextBlock Text="历史记录" FontSize="25" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<Border Grid.Row="1" BorderBrush="Green" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,5,5">
<Grid Margin="10,5">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<Label Content="MES订单号:" FontSize="20" Foreground="Black"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="250" FontSize="20" Foreground="Black" Margin="0 0 30 0" />
<Label Content="写入状态" FontSize="20" Foreground="Black"/>
<ComboBox Width="70" Height="30" FontSize="20" SelectedItem="{Binding QueryIsCheck,Mode=TwoWay}" Margin="10,0,30,0" Foreground="Black">
<ComboBoxItem Content="成功" Background="White" Foreground="#4285DE"/>
<ComboBoxItem Content="失败" Foreground="#4285DE"/>
<ComboBoxItem Content="" Foreground="#4285DE"/>
</ComboBox>
<TextBlock Text="开始时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="BeginTime" FontSize="20"
Width="170" Margin="10 0" BorderBrush="Black"
materialDesign:CalendarAssist.IsHeaderVisible="False">
<DatePicker.SelectedDate >
<Binding
Path="BeginDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<TextBlock Text="结束时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="EndTime" Margin="10 0"
Width="170" BorderBrush="Black" FontSize="20"
materialDesign:CalendarAssist.IsHeaderVisible="False">
<DatePicker.SelectedDate>
<Binding
Path="EndDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<Button
Content="查询" Width="200" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="#009999" Margin="0 0 100 0"/>
</StackPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding realreaddata}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="Black" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding objid}" Header="ID" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding orderno}" Header="订单号" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding lineno}" Header="产线号" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding producttype}" Header="产品类型" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding rfidepc}" Header="原始EPC" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding rfidascii}" Header="RFID编码" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding readtime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="读取时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding writetime,StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Header="写入时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<!--<DataGridTextColumn Binding="{Binding writestatus}" Header="写入状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTemplateColumn Header="写入状态" Width="1*">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}"
BorderThickness="0"
Padding="5">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- 成功:绿色文字 -->
<DataTrigger Binding="{Binding writestatus}" Value="成功">
<Setter Property="Foreground" Value="#FF008000"/>
</DataTrigger>
<!-- 失败:红色文字 -->
<DataTrigger Binding="{Binding writestatus}" Value="失败">
<Setter Property="Foreground" Value="#FFFF0000"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding writestatus}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UniformGrid>
</Grid>
</Border>
</Grid>
</Border>
</UserControl>

@ -0,0 +1,37 @@
using ATC_MaterialBind.Entity;
using SlnMesnac.Repository;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel.IndexPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Page.IndexPage
{
/// <summary>
/// ChangeType.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class HistorySearch : UserControl
{
HistorySearchViewModel HistorySearchView;
public HistorySearch()
{
InitializeComponent();
HistorySearchView = new HistorySearchViewModel();
this.DataContext = HistorySearchView;
}
}
}

@ -1,220 +0,0 @@
<UserControl x:Class="SlnMesnac.WPF.Page.IndexPage.MiddleWare"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.IndexPage" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:converters="clr-namespace:SlnMesnac.WPF.Converter.Generate"
mc:Ignorable="d"
d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" Loaded="UserControl_Loaded">
<UserControl.Resources>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="18"/>
</Style>
<Style TargetType="DataGrid">
<!--网格线颜色-->
<Setter Property="CanUserResizeColumns" Value="false"/>
<Setter Property="Background" Value="#1152AC" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#4285DE"/>
</Setter.Value>
</Setter>
<Setter Property="VerticalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#1152AC"/>
</Setter.Value>
</Setter>
</Style>
<!--列头标题栏样式-->
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="BorderBrush" Value="#dddddd" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<!--单元格样式-->
<Style TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="#dddddd"/>
</Trigger>
</Style.Triggers>
</Style>
<converters:ConfigToDynamicGridViewConverter x:Key="ConfigToDynamicGridViewConverter"/>
<DataTemplate x:Key="LogMsgTemplate">
<TextBlock Text="{Binding}" FontSize="20" Foreground="Black" TextWrapping="Wrap" MaxWidth="800"/>
</DataTemplate>
<DataTemplate x:Key="FlightTemplate">
<StackPanel Margin="10,0,0,0">
<Button Content="{Binding StationName}" Foreground="Black"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid Margin="1 5 1 0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" BorderBrush="#0288d1" BorderThickness="1" CornerRadius="5" Background="Transparent" Margin="3,1,5,5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,3,5" >
<TextBlock Text="日志信息" FontSize="20" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold"/>
</Border>
<!--扫描信息-->
<Border Grid.Row="1" BorderBrush="#0288d1" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,3,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border BorderThickness="0" Background="Transparent" CornerRadius="5" Margin="10,10,0,0" Grid.ColumnSpan="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<!--<TextBlock Grid.Row="0" Text="日志信息" FontSize="18" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center"/>-->
<ScrollViewer Grid.Row="0" Foreground="Black" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Auto">
<ItemsControl Foreground="Black" ItemsSource="{Binding LogMessages}" ItemTemplate="{StaticResource LogMsgTemplate}" />
</ScrollViewer>
</Grid>
</Border>
</Grid>
</Border>
</Grid>
</Border>
<Border Grid.Row="1" Grid.ColumnSpan="2" BorderBrush="#0288d1" BorderThickness="1" CornerRadius="5" Background="Transparent" Margin="3,1,3,5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="Transparent" Margin="1,1,5,5" >
<TextBlock Text="传感器信息" FontSize="20" FontWeight="Bold" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
<Border Grid.Row="1" BorderBrush="#0288d1" BorderThickness="1" CornerRadius="10" Background="Transparent" Margin="5,1,5,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="stackpanel1">
<DataGrid x:Name="senorlistDataGrid" Grid.Row="0" ItemsSource="{Binding Senorinfo}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" MaxHeight="400" VerticalScrollBarVisibility="Auto"
Foreground="Black" >
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<!-- 右键按下事件(最常用,右键点击立即触发) -->
<EventSetter Event="MouseRightButtonDown"
Handler="DataGridRow_MouseRightButtonDown"/>
<!-- 可选:右键释放事件(右键松开时触发) -->
<!-- <EventSetter Event="MouseRightButtonUp" Handler="DataGridRow_MouseRightButtonUp"/> -->
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Combineid}" Header="编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding Name}" Header="名称" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<!--<DataGridTextColumn Binding="{Binding Sensorser}" Header="序号" Width="0.2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Sensortypeid}" Header="类型" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTextColumn Binding="{Binding Deviceid}" Header="设备编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Readinterval}" Header="时间间隔" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Readdata}" Header="数据" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Readtime}" Header="时间" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Border>
<!--日志信息-->
<Border Grid.Row="0" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="1" CornerRadius="5" Background="Transparent" Margin="3,1,3,5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="Transparent" Margin="1,1,1,5" >
<Grid>
<TextBlock Text="设备信息" FontSize="20" FontWeight="Bold" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Border>
<Border Grid.Row="1" BorderBrush="#0288d1" BorderThickness="1" CornerRadius="10" Background="Transparent" Margin="5,1,5,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="stackpanel2">
<DataGrid Grid.Row="0" ItemsSource="{Binding Deviceinfo}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" IsReadOnly="True" SelectionMode="Extended" MaxHeight="400" VerticalScrollBarVisibility="Auto"
Foreground="Black" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Deviceid}" Header="编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding Name}" Header="名称" Width="2.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Connectstr}" Header="连接串" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<!--<DataGridTextColumn Binding="{Binding Connectmode}" Header="连接方式" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTextColumn Binding="{Binding Devicetype}" Header="设备类型" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding Collectid}" Header="所属汇集" Width="0.7*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding IsOnline}" Header="连接状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Border>
</Grid>
</UserControl>

@ -1,130 +0,0 @@
using ATC_MaterialBind.Entity;
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Model.Enum;
using SlnMesnac.Plc;
using SlnMesnac.Rfid;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using SlnMesnac.WPF.ViewModel.IndexPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Automation.Peers;
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;
namespace SlnMesnac.WPF.Page.IndexPage
{
/// <summary>
/// MaterialBind.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class MiddleWare : UserControl
{
public List<RfidAbsractFactory> rfidList;
MiddleWareViewModel indexContentViewModel;
public static TcpServer _TcpServer;
public static Action<string, string> RefreshStateEvent;
public MiddleWare()
{
//_TcpServer = App.ServiceProvider.GetRequiredService<TcpServer>();
InitializeComponent();
indexContentViewModel = new MiddleWareViewModel();
//indexContentViewModel._Action += RefreshStationQuallity;
this.DataContext = indexContentViewModel;
}
private void DataGridRow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// 1. 标记事件已处理,避免冒泡到父控件(可选,防止重复触发)
e.Handled = true;
// 2. 获取当前右键的行对象
if (sender is not DataGridRow row || row.DataContext is not SenorInfo selectedEmp) return;
// 2. 创建右键菜单(动态/静态均可)
var contextMenu = new ContextMenu();
var menuItem1 = new MenuItem { Header = $"修改" };
//var menuItem2 = new MenuItem { Header = $"读取" };
menuItem1.Click += (s, args) =>
{
SetPower setPowerContent = new SetPower(selectedEmp.Combineid);
setPowerContent.ShowDialog();
};
//menuItem2.Click += async (s, args) =>
//{
// List<TagInfo> rfid = await rfidList.Find(x=>x.ConfigKey == selectedEmp.Combineid).GetRFIDAsync();
// if (rfid != null && rfid.Count > 0)
// {
// rfid = rfid.Where((x, i) => rfid.FindIndex(z => z.EPCstring == x.EPCstring) == i).ToList();
// RefreshStateEvent?.Invoke(selectedEmp.Combineid, string.Join(",", rfid.Select(item => item.EPCstring)));
// }
//};
contextMenu.Items.Add(menuItem1);
//contextMenu.Items.Add(menuItem2);
// 3. 绑定菜单到当前行并显示
row.ContextMenu = contextMenu;
contextMenu.PlacementTarget = row;
contextMenu.IsOpen = true;
}
private void RefreshStationQuallity(List<StationQualityInfo> stationQualityInfos)
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
stackpanel1.Children.Clear();
if (stationQualityInfos != null && stationQualityInfos.Count > 0)
{
List<UIElement> buttons = new List<UIElement>();
foreach (var item in stationQualityInfos)
{
buttons.Add(new Button { FontSize = 20, Background = item.State == "1" ? Brushes.Lime : Brushes.Red, Height = 50, Content = item.StationName });
}
foreach (UIElement button in buttons)
{
stackpanel1.Children.Add(button);
}
}
else {
stackpanel1.Children.Remove(this);
}
}));
}
//在载入行的时候在行表头添加编号
private void dgv_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
}
}
}

@ -121,10 +121,18 @@
FontSize="24"
FontWeight="Bold"
Foreground="White"/>
</StackPanel>
<StackPanel Grid.Column="1" >
<Button
Content="查询" Width="200" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="#009999" Margin="0 0 100 0"/>
</StackPanel>
<!-- 当前时间 -->
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="当前时间:"
Foreground="White"
FontSize="15"
@ -159,7 +167,7 @@
</TabControl.ItemContainerStyle>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding LineNo}" Padding="5 2"/>
<TextBlock Text="{Binding LineName}" Padding="5 2"/>
</DataTemplate>
</TabControl.ItemTemplate>
<!-- 6号线标签页 -->
@ -183,6 +191,8 @@
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<!-- 面板标题 -->
@ -190,65 +200,82 @@
<TextBlock Text="当前生产订单信息" FontWeight="Bold" FontSize="15"/>
</StackPanel>
<!-- 订单编号 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="订单编号:" />
<TextBlock Text="{Binding OrderNo,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="订单编号:" FontSize="15"/>
<TextBlock Text="{Binding OrderNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产线编号 -->
<!-- 产线名称 -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线编号:" />
<TextBlock Text="{Binding LineNo,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="产线名称:" FontSize="15"/>
<TextBlock Text="{Binding LineName,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产线编号 -->
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线编号:" FontSize="15"/>
<TextBlock Text="{Binding LineNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产品类型 -->
<Grid Grid.Row="3">
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产品类型:" />
<TextBlock Text="{Binding ProductType,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="产品类型:" FontSize="15"/>
<TextBlock Text="{Binding ProductType,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- RFID总数量 -->
<Grid Grid.Row="4">
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID总数量:" Grid.ColumnSpan="1"/>
<TextBlock Text="{Binding RfidCount,Mode=TwoWay}" Grid.Column="1" Grid.ColumnSpan="2"/>
<TextBlock Text="生产数量" Grid.ColumnSpan="1" FontSize="15"/>
<TextBlock Text="{Binding RfidCount,Mode=TwoWay}" FontSize="15" Grid.Column="1" Grid.ColumnSpan="2"/>
</Grid>
<!-- 已写入数量 -->
<Grid Grid.Row="5">
<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="已写入数量:" />
<TextBlock Text="{Binding WriteCount,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="已写入数量:" FontSize="15"/>
<TextBlock Text="{Binding WriteCount,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<Grid Grid.Row="7">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="下一序列号:" FontSize="15"/>
<TextBlock Text="{Binding SerialNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 生产状态 -->
<Grid Grid.Row="6">
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="生产状态:" />
<TextBlock Text="{Binding ProductStatus,Mode=TwoWay}" Style="{StaticResource ProducingTextStyle}" Grid.Column="1"/>
<TextBlock Text="生产状态:" FontSize="15"/>
<TextBlock Text="{Binding ProductStatus,Mode=TwoWay}" FontSize="15" Style="{StaticResource ProducingTextStyle}" Grid.Column="1"/>
</Grid>
</Grid>
</Border>
@ -258,8 +285,8 @@
CornerRadius="4" Margin="5,0,0,0">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="305*"/>
<ColumnDefinition Width="48*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
@ -278,60 +305,60 @@
<!-- 设备状态 -->
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="设备状态:" />
<TextBlock Text="{Binding IsOnline,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="设备状态:" FontSize="15"/>
<TextBlock Text="{Binding IsOnline,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- RFID编码 -->
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID编码:" />
<TextBlock Text="{Binding RfidASCII,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="RFID编码:" FontSize="15"/>
<TextBlock Text="{Binding RfidASCII,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 原始EPC -->
<Grid Grid.Row="3" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="原始EPC:" />
<TextBlock Text="{Binding RfidEPC,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="原始EPC:" FontSize="15"/>
<TextBlock Text="{Binding RfidEPC,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 读取时间 -->
<Grid Grid.Row="4" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="读取时间:" />
<TextBlock Text="{Binding ReadTime,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="读取时间:" FontSize="15"/>
<TextBlock Text="{Binding ReadTime,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 写入时间 -->
<Grid Grid.Row="5" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入时间:" />
<TextBlock Text="{Binding WriteTime,Mode=TwoWay}" Grid.Column="1"/>
<TextBlock Text="写入时间:" FontSize="15"/>
<TextBlock Text="{Binding WriteTime,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 写入状态 -->
<Grid Grid.Row="6" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入状态:" />
<TextBlock Text="{Binding WriteStatus,Mode=TwoWay}" Style="{StaticResource SuccessTextStyle}" Grid.Column="1"/>
<TextBlock Text="写入状态:" FontSize="15"/>
<TextBlock Text="{Binding WriteStatus,Mode=TwoWay}" FontSize="15" Style="{StaticResource SuccessTextStyle}" Grid.Column="1"/>
</Grid>
</Grid>
@ -370,7 +397,7 @@
--><!-- 订单编号 --><!--
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="订单编号:" />
@ -380,7 +407,7 @@
--><!-- 产线编号 --><!--
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线编号:" />
@ -390,7 +417,7 @@
--><!-- 产品类型 --><!--
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产品类型:" />
@ -400,7 +427,7 @@
--><!-- RFID总数量 --><!--
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
@ -411,7 +438,7 @@
--><!-- 已写入数量 --><!--
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="已写入数量:" />
@ -421,7 +448,7 @@
--><!-- 生产状态 --><!--
<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="生产状态:" />
@ -455,7 +482,7 @@
--><!-- RFID编码 --><!--
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID编码:" />
@ -465,7 +492,7 @@
--><!-- 原始EPC --><!--
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="原始EPC:" />
@ -475,7 +502,7 @@
--><!-- 读取时间 --><!--
<Grid Grid.Row="3" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="读取时间:" />
@ -485,7 +512,7 @@
--><!-- 写入时间 --><!--
<Grid Grid.Row="4" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入时间:" />
@ -495,7 +522,7 @@
--><!-- 写入状态 --><!--
<Grid Grid.Row="5" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入状态:" />
@ -540,7 +567,47 @@
<DataGridTextColumn Binding="{Binding RFIDCode}" Header="RFID编码" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ReadTime}" Header="读取时间" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding WriteTime}" Header="写入时间" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding WriteStatus}" Header="写入状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<!--<DataGridTextColumn Binding="{Binding WriteStatus}" Header="写入状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTemplateColumn Header="写入状态" Width="1*">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}"
BorderThickness="0"
Padding="5">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- 成功:绿色文字 -->
<DataTrigger Binding="{Binding WriteStatus}" Value="成功">
<Setter Property="Foreground" Value="#FF008000"/>
</DataTrigger>
<!-- 失败:红色文字 -->
<DataTrigger Binding="{Binding WriteStatus}" Value="失败">
<Setter Property="Foreground" Value="#FFFF0000"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding WriteStatus}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

@ -51,6 +51,7 @@
<ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Include="Lierda.WPFHelper" Version="1.0.3" />
<PackageReference Include="MaterialDesignThemes" Version="4.8.0" />
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
<PackageReference Include="NVelocity" Version="1.2.0" />
<PackageReference Include="Rougamo.Fody" Version="5.0.2" />

@ -119,9 +119,16 @@ namespace SlnMesnac.WPF.ViewModel.Generate
var db = App.ServiceProvider.GetService<ISqlSugarClient>();
var scope = db.AsTenant().GetConnectionScope(configId);
List<DbTableInfo> tables = scope.DbMaintenance.GetTableInfoList(false);
if(tables != null)
List<DbTableInfo> tables;
if (!string.IsNullOrEmpty(search))
{
tables = scope.DbMaintenance.GetTableInfoList(false).FindAll(x=>x.Name == search);
}
else
{
tables = scope.DbMaintenance.GetTableInfoList(false);
}
if (tables != null)
{
TablesDataGrid = new ObservableCollection<DbTableInfo>();
tables.ForEach(t => { TablesDataGrid.Add(t); });

@ -0,0 +1,190 @@
using ATC_MaterialBind.Entity;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Models;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
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.Linq.Expressions;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Forms;
using TouchSocket.Sockets;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
[RegisterAsSingletonAttribute]
public partial class AlarmRecordViewModel : ObservableObject
{
private ILogger<HistorySearchViewModel> _logger;
private Isys_dict_dataService _dataService;
private AppsettingsConfig _appSettings = new AppsettingsConfig();
public Action<Real_DataInfo> Action;
public delegate void RefreshDataInfo(Real_DataInfo real_Data);
private ISqlSugarClient? sqlSugarClient;
public event RefreshDataInfo? RefreshDataInfoEvent;
public AlarmRecordViewModel()
{
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
EndDate = DateTime.Now.Date.AddDays(2).AddSeconds(-1); // 当天的 23:59:59
RefreshHistoryData();
}
private async Task RefreshHistoryData()
{
try
{
await RefreshData(null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
/// <summary>
/// 从MES获取订单信息
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[RelayCommand]
private async Task RefreshData(object? parameter)
{
string mesOrderNo = MesOrderNo;
string rfidCount = RfidCount;
DateTime dateTime = BeginDate;
DateTime dateTime1 = EndDate;
Expression<Func<real_readdata, bool>> exp = (real_readdata s1) => true;
if (!string.IsNullOrEmpty(MesOrderNo.Trim()))
{
exp = exp.And(x => x.orderno == mesOrderNo);
}
if (!string.IsNullOrEmpty(QueryIsCheck.Content.ToString().Trim()))
{
exp = exp.And(x => x.writestatus == QueryIsCheck.Content.ToString());
}
//查询记录
List<real_readdata> real_readdataInfos = sqlSugarClient.Queryable<real_readdata>().Where(exp
).ToList();
if (real_readdataInfos.Count > 0)
{
App.Current.Dispatcher.Invoke(() =>
{
realreaddata.Clear();
foreach (var item in real_readdataInfos)
{
realreaddata.Add(item);
}
});
}
else
{
realreaddata.Clear();
}
}
private ComboBoxItem _QueryIsCheck = new ComboBoxItem() { Content = "" };
public ComboBoxItem QueryIsCheck
{
get { return _QueryIsCheck; }
set
{
_QueryIsCheck = value;
if (_QueryIsCheck != value)
{
SetProperty(ref _QueryIsCheck, value);
}
}
}
private DateTime _BeginDate;
public DateTime BeginDate
{
get { return _BeginDate; }
set
{
if (_BeginDate != value)
{
_BeginDate = value;
if (_BeginDate != value)
{
SetProperty(ref _BeginDate, value);
}
}
}
}
private DateTime _EndDate;
public DateTime EndDate
{
get { return _EndDate; }
set
{
_EndDate = value;
if (_EndDate != value)
{
SetProperty(ref _EndDate, 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);
}
}
}
private ObservableCollection<real_readdata> _realreaddata = new ObservableCollection<real_readdata>();
public ObservableCollection<real_readdata> realreaddata
{
get => _realreaddata;
set => SetProperty(ref _realreaddata, value);
}
}
}

@ -1,19 +1,28 @@
using ATC_MaterialBind.Entity;
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 SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
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.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Forms;
using TouchSocket.Sockets;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
@ -22,62 +31,65 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
private ILogger<ChangeTypeViewModel> _logger;
private Isys_dict_dataService _dataService;
private AppsettingsConfig _appSettings = new AppsettingsConfig();
public Action<Real_DataInfo> Action;
private AppConfig appConfig;
private ISqlSugarClient? sqlSugarClient;
string lineno = string.Empty;
private MeshttpClient _httpclient;
public ChangeTypeViewModel()
{
_httpclient = App.ServiceProvider.GetService<MeshttpClient>();
appConfig = App.ServiceProvider.GetService<AppConfig>();
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
UpdateCommand = new RelayCommand<object>(t => Update(t));
UpdateCommand1 = new RelayCommand<object>(t => Update1(t));
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
_dataService = App.ServiceProvider.GetService<Isys_dict_dataService>();
ProductType = _appSettings.ReadAppSettings("ChangeTypeConfig:ProductType");
try
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
}
private ComboBoxItem _QueryIsCheck = new ComboBoxItem() { Content = "" };
public ComboBoxItem QueryIsCheck
{
get { return _QueryIsCheck; }
set
{
string KT = _appSettings.ReadAppSettings("ChangeTypeConfig:KTProductType");
if (!string.IsNullOrEmpty(KT))
_QueryIsCheck = value;
if (_QueryIsCheck != value)
{
KTProductType = KT;
}
}
catch (Exception ex)
{
}
LoadDataAsync();
}
private void Update(object parameter)
{
string materialType = parameter as string;
ProductType = materialType;
_appSettings.WriteAppSettings("ChangeTypeConfig", "ProductType", ProductType);
}
private void Update1(object parameter)
{
string materialType = parameter as string;
KTProductType = materialType;
_appSettings.WriteAppSettings("ChangeTypeConfig", "KTProductType", KTProductType);
}
private async void LoadDataAsync()
{
List<sys_dict_data> sys_Dict_Datas = await _dataService.GetProductType();
if (sys_Dict_Datas != null && sys_Dict_Datas.Count > 0)
{
ChangeTypePanel.Clear();
ChangeTypePanel2.Clear();
foreach (var item in sys_Dict_Datas)
{
ChangeTypePanel.Add(item);
ChangeTypePanel2.Add(item);
SetProperty(ref _QueryIsCheck, value);
}
}
}
public RelayCommand<object> GetOrderInfoCommand { 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;
List<Base_device_info> DeviceInfos = sqlSugarClient.Queryable<Base_device_info>().Where(expression: x => x.Collectid == appConfig.StationCode && x.Name == QueryIsCheck.Content.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.Content.ToString().Trim(),
LineNo = lineno,
ProductType = model.ProductType,
RfidCount = model.PlanQty.ToString(),
};
WeakReferenceMessenger.Default.Send(real_Data);
}
/// <summary>
/// 从MES获取订单信息
/// </summary>
@ -86,21 +98,90 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
[RelayCommand]
private async Task RefreshData(object parameter)
{
string mesOrderNo = MesOrderNo;
string rfidCount = RfidCount;
//调用MES接口
Real_DataInfo real_Data = new Real_DataInfo()
//获取设备编号
if (string.IsNullOrEmpty(QueryIsCheck.Content.ToString().Trim()))
{
OrderNo = mesOrderNo,
Deviceid = "10001",
LineNo = "6",
ProductType = "整芯带",
RfidCount = rfidCount,
MessageBox.Show("请选择产线!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else
{
if (QueryIsCheck.Content.ToString().Trim() == "2#硫化线")
{
lineno = "VM002";
}
else if (QueryIsCheck.Content.ToString().Trim() == "3#硫化线")
{
lineno = "VM003";
}
else if (QueryIsCheck.Content.ToString().Trim() == "6#硫化线上")
{
lineno = "VM006";
}
else if (QueryIsCheck.Content.ToString().Trim() == "6#硫化线下")
{
lineno = "VM006";
}
else if (QueryIsCheck.Content.ToString().Trim() == "7#硫化线")
{
lineno = "VM007";
}
}
//调用MES接口获取生产订单信息
//MessageBox.Show("MES订单获取成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
List<MesOrderInfo> mesOrderInfos = new List<MesOrderInfo>();
//_httpclient.GetMesOrderInfo(lineno, BeginDate.ToString("yyyy-MM-dd"));
Random random = new Random();
MesOrderInfo mesOrderInfo = new MesOrderInfo()
{
OrderNo = "MesOrder" + random.Next(10, 99).ToString(),
PlanQty = 0,
ProductCode = "物料编号" + random.Next(10, 99).ToString(),
ProductName = "物料名称" + random.Next(10, 99).ToString(),
ProductType = "挤出 PVC输送带" + random.Next(10, 99).ToString(),
};
Console.WriteLine(Action.GetHashCode);
Action?.Invoke(real_Data);
MesOrderInfo mesOrderInfo1 = new MesOrderInfo()
{
OrderNo = "MesOrder" + random.Next(10, 99).ToString(),
PlanQty = 0,
ProductCode = "物料编号" + random.Next(10, 99).ToString(),
ProductName = "物料名称" + random.Next(10, 99).ToString(),
ProductType = "PVC输送带" + random.Next(10, 99).ToString(),
};
mesOrderInfos.Add(mesOrderInfo);
mesOrderInfos.Add(mesOrderInfo1);
ChangeTypePanel.Clear();
foreach (var item in mesOrderInfos)
{
ChangeTypePanel.Add(item);
}
}
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
@ -158,18 +239,13 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
}
private ObservableCollection<sys_dict_data> _ChangeTypePanel = new ObservableCollection<sys_dict_data>();
public ObservableCollection<sys_dict_data> ChangeTypePanel
private ObservableCollection<MesOrderInfo> _ChangeTypePanel = new ObservableCollection<MesOrderInfo>();
public ObservableCollection<MesOrderInfo> ChangeTypePanel
{
get => _ChangeTypePanel;
set => SetProperty(ref _ChangeTypePanel, value);
}
private ObservableCollection<sys_dict_data> _ChangeTypePanel2 = new ObservableCollection<sys_dict_data>();
public ObservableCollection<sys_dict_data> ChangeTypePanel2
{
get => _ChangeTypePanel2;
set => SetProperty(ref _ChangeTypePanel2, value);
}
}
}

@ -0,0 +1,190 @@
using ATC_MaterialBind.Entity;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Models;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
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.Linq.Expressions;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Forms;
using TouchSocket.Sockets;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
[RegisterAsSingletonAttribute]
public partial class HistorySearchViewModel : ObservableObject
{
private ILogger<HistorySearchViewModel> _logger;
private Isys_dict_dataService _dataService;
private AppsettingsConfig _appSettings = new AppsettingsConfig();
public Action<Real_DataInfo> Action;
public delegate void RefreshDataInfo(Real_DataInfo real_Data);
private ISqlSugarClient? sqlSugarClient;
public event RefreshDataInfo? RefreshDataInfoEvent;
public HistorySearchViewModel()
{
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
EndDate = DateTime.Now.Date.AddDays(2).AddSeconds(-1); // 当天的 23:59:59
RefreshHistoryData();
}
private async Task RefreshHistoryData()
{
try
{
await RefreshData(null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
/// <summary>
/// 从MES获取订单信息
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[RelayCommand]
private async Task RefreshData(object? parameter)
{
string mesOrderNo = MesOrderNo;
string rfidCount = RfidCount;
DateTime dateTime = BeginDate;
DateTime dateTime1 = EndDate;
Expression<Func<real_readdata, bool>> exp = (real_readdata s1) => true;
if (!string.IsNullOrEmpty(MesOrderNo.Trim()))
{
exp = exp.And(x => x.orderno == mesOrderNo);
}
if (!string.IsNullOrEmpty(QueryIsCheck.Content.ToString().Trim()))
{
exp = exp.And(x => x.writestatus == QueryIsCheck.Content.ToString());
}
//查询记录
List<real_readdata> real_readdataInfos = sqlSugarClient.Queryable<real_readdata>().Where(exp
).ToList();
if (real_readdataInfos.Count > 0)
{
App.Current.Dispatcher.Invoke(() =>
{
realreaddata.Clear();
foreach (var item in real_readdataInfos)
{
realreaddata.Add(item);
}
});
}
else
{
realreaddata.Clear();
}
}
private ComboBoxItem _QueryIsCheck = new ComboBoxItem() { Content = "" };
public ComboBoxItem QueryIsCheck
{
get { return _QueryIsCheck; }
set
{
_QueryIsCheck = value;
if (_QueryIsCheck != value)
{
SetProperty(ref _QueryIsCheck, value);
}
}
}
private DateTime _BeginDate;
public DateTime BeginDate
{
get { return _BeginDate; }
set
{
if (_BeginDate != value)
{
_BeginDate = value;
if (_BeginDate != value)
{
SetProperty(ref _BeginDate, value);
}
}
}
}
private DateTime _EndDate;
public DateTime EndDate
{
get { return _EndDate; }
set
{
_EndDate = value;
if (_EndDate != value)
{
SetProperty(ref _EndDate, 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);
}
}
}
private ObservableCollection<real_readdata> _realreaddata = new ObservableCollection<real_readdata>();
public ObservableCollection<real_readdata> realreaddata
{
get => _realreaddata;
set => SetProperty(ref _realreaddata, value);
}
}
}

@ -1,435 +0,0 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using GalaSoft.MvvmLight;
using HslCommunication.Enthernet;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Models;
using NVelocity.Util.Introspection;
using Serilog.Debugging;
using SlnMesnac.Config;
using SlnMesnac.Extensions;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Model.Enum;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.Repository.service.Impl;
using SlnMesnac.Rfid;
using SlnMesnac.Rfid.Factory;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using SlnMesnac.WPF.Page.IndexPage;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using Task = System.Threading.Tasks.Task;
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
[RegisterAsSingletonAttribute]
public partial class MiddleWareViewModel : ViewModelBase
{
//private ILogger<MiddleWareViewModel> _logger;
private SerilogHelper _logger;
private ISqlSugarClient? sqlSugarClient;
//容器里面的读写器集合
public List<RfidAbsractFactory> rfidList;
private AppConfig appConfig;
private ApiServer apiServer;
private MeshttpClient meshttpClient;
public TcpServer _TcpServer;
private IReal_workdataService _real_WorkdataService;
public MiddleWareViewModel()
{
_logger = App.ServiceProvider.GetService<SerilogHelper>();
appConfig = App.ServiceProvider.GetService<AppConfig>();
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
_TcpServer = App.ServiceProvider.GetRequiredService<TcpServer>();
rfidList = App.ServiceProvider.GetRequiredService<List<RfidAbsractFactory>>();
rfidList.ForEach(rfid => {
rfid._Action += RecvIdentifyData_Instance;
rfid._RefreshLogMessageAction += RefreshLogMessage;
});
_real_WorkdataService = App.ServiceProvider.GetRequiredService<Real_workdataServiceImpl>();
apiServer = App.ServiceProvider.GetService<ApiServer>();
meshttpClient = App.ServiceProvider.GetService<MeshttpClient>();
MiddleWare.RefreshStateEvent += RefreshEventArgs;
MeshttpClient.RefreshStateEvent += RefreshEventArgs;
MeshttpClient._RefreshLogMessageAction += RefreshLogMessage;
ApiServer.RefreshStateEvent += RefreshEventArgs;
ApiServer._RefreshLogMessageAction += RefreshLogMessage;
RefreshLogMessage("初始化");
LoadDeviceInfo();
LoadSenorInfo();
StartCheckStatus();
CollectState();
}
/// <summary>
/// 日志信息
/// </summary>
private ObservableCollection<string> _logMessages = new ObservableCollection<string>();
public ObservableCollection<string> LogMessages
{
get { return _logMessages; }
set
{
_logMessages = value;
RaisePropertyChanged(() => LogMessages);
}
}
/// <summary>
/// 刷新日志
/// </summary>
/// <param name="msg"></param>
public void RefreshLogMessage(string msg)
{
try
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
LogMessages.Add($"{DateTime.Now}: {msg}");
while (LogMessages.Count > 100)
{
LogMessages.Clear();
}
var orderedList = LogMessages.OrderByDescending(x => x); // 排序后转为 List
LogMessages = new ObservableCollection<string>(orderedList);
}));
}
catch (Exception ex)
{
_logger.Error($"异常:{ex.Message}");
}
}
public void RefreshEventArgs(string combineID, string rfid)
{
try
{
//combineID = "C031040702";
Senorinfo.FirstOrDefault(x => x.Combineid == combineID).Readtime = DateTime.Now.ToString("yy-MM-dd HH:mm:ss");
if (string.IsNullOrEmpty(rfid))
{
rfid = "Nodata";
}
Senorinfo.FirstOrDefault(x => x.Combineid == combineID).Readdata = rfid;
}
catch (Exception ex)
{
_logger.Error($"异常:{ex.Message}");
}
}
private ObservableCollection<RfidInfo> _Deviceinfo = new ObservableCollection<RfidInfo>();
public ObservableCollection<RfidInfo> Deviceinfo
{
get { return _Deviceinfo; }
set
{
_Deviceinfo = value;
RaisePropertyChanged(() => Deviceinfo);
}
}
private ObservableCollection<SenorInfo> _Senorinfo = new ObservableCollection<SenorInfo>();
public ObservableCollection<SenorInfo> Senorinfo
{
get { return _Senorinfo; }
set
{
_Senorinfo = value;
RaisePropertyChanged(() => Senorinfo);
}
}
private void LoadDeviceInfo()
{
List<Base_device_info> DeviceInfos = sqlSugarClient.Queryable<Base_device_info>().Where(expression: x =>x.Collectid == appConfig.StationCode && x.Deleteflag == 0).ToList();
App.Current.Dispatcher.Invoke(() =>
{
Deviceinfo.Clear();
foreach (var item in DeviceInfos)
{
RfidInfo rfid = new RfidInfo()
{
Name = item.Name,
Deviceid = item.Deviceid,
Collectid = item.Collectid,
Connectmode = item.Connectmode,
Connectstr = item.Connectstr,
Devicetype = item.Devicetype,
};
Deviceinfo.Add(rfid);
}
});
}
private void LoadSenorInfo()
{
List<Base_sensor_info> SenorInfos = sqlSugarClient.Queryable<Base_sensor_info>().Where(x=>x.Deleteflag == 0).ToList();
Senorinfo.Clear();
foreach (var item in Deviceinfo)
{
Base_sensor_info base_Sensor_Info = SenorInfos.Find(x => x.Deviceid == item.Deviceid);
App.Current.Dispatcher.Invoke(() =>
{
SenorInfo senorInfo = new SenorInfo()
{
Combineid = base_Sensor_Info.Combineid,
Name = base_Sensor_Info.Name,
Sensorid = base_Sensor_Info.Sensorid,
Sensortypeid = base_Sensor_Info.Sensortypeid,
Deviceid =base_Sensor_Info.Deviceid,
Readinterval = base_Sensor_Info.Readinterval,
};
Senorinfo.Add(senorInfo);
});
}
}
private void RecvIdentifyData_Instance(string iCombineId, List<TagInfo> tagInfos)
{
byte[] dataInfo; string info = "";
try
{
SoftMessagePack pSendMessagePackInfo = new SoftMessagePack();
//iCombineId = "4013";
byte[] array2 = new byte[0];
if (tagInfos != null && tagInfos.Count > 0)
{
dataInfo = tagInfos[0].EPC;
info = tagInfos[0].EPCstring;
pSendMessagePackInfo.iLen = (ushort)(dataInfo.Length + 4 + 1); //+4为合并编号的长度 +1为长度占的一个字节
pSendMessagePackInfo.pMessage = new byte[pSendMessagePackInfo.iLen];
Array.Copy(dataInfo, 0, pSendMessagePackInfo.pMessage, 5, dataInfo.Length);
pSendMessagePackInfo.pMessage[4] = (byte)dataInfo.Length;
}
else
{
dataInfo = new byte[0];
info = "NoData";
pSendMessagePackInfo.iLen = 0 + 4;
pSendMessagePackInfo.pMessage = new byte[pSendMessagePackInfo.iLen];
}
byte[] u32byte = new byte[4];
pSendMessagePackInfo.iStationId = 01;
pSendMessagePackInfo.iMsta = 0XF0 + 1;
pSendMessagePackInfo.iMessageType = (byte)MessageType.AutoReport_Type;
u32byte = BitConverter.GetBytes(uint.Parse(iCombineId));
Array.Copy(u32byte, 0, pSendMessagePackInfo.pMessage, 0, 4); //合并编号
_TcpServer.SendMessage(pSendMessagePackInfo);
//存库
Real_workdata real_Workdata = new Real_workdata()
{
Combineid = iCombineId,
Data = info,
Tm = DateTime.Now,
Deleteflag = 0,
Edittime = DateTime.Now,
Reportmode = 1,
};
_real_WorkdataService.AddAsync(real_Workdata);
}
catch (Exception e)
{
_logger.Error($"RecvIdentifyData_Instance异常{e.Message}");
}
finally
{
//刷新界面
RefreshEventArgs(iCombineId, info);
}
}
private List<List<RfidAbsractFactory>> SplitListIntoBatches(List<RfidAbsractFactory> sourceList, int batchSize)
{
var batches = new List<List<RfidAbsractFactory>>();
for (int i = 0; i < sourceList.Count; i += batchSize)
{
// 截取每批的设备最后一批可能不足10个
var batch = sourceList.Skip(i).Take(batchSize).ToList();
batches.Add(batch);
}
return batches;
}
private async Task DetectDeviceBatchAsync(List<RfidAbsractFactory> batch)
{
// 并行检测当前批次的设备(可选,根据接口性能调整)
var detectionTasks = batch.Select(device => DetectSingleDeviceAsync(device));
// 等待当前批次所有设备检测完成
await Task.WhenAll(detectionTasks);
}
private async Task DetectSingleDeviceAsync(RfidAbsractFactory device)
{
try
{
bool iflag = await device.ConnectAsync(device.ip, device.port, device.ConfigKey);
if (iflag)
{
bool iflag11111 = await device.Set_BeginIdentify();
//bool ifa = await device.Set_Write("","");
//string ifla = await device.Get_Frequencyband();
//bool ifla1 = await device.Set_FilterData("FC 08");
//string ia = await device.Get_FilterData();
iflag = await device.SendHeartPack();
if (!iflag)
{
//device.Close();
bool iflag1 = await device.ConnectAsync(device.ip, device.port, device.ConfigKey);
iflag = await device.SendHeartPack();
if (iflag)
{
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "已连接";
}
else
{
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "未连接";
}
}
else
{
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "已连接";
}
}
else
{
//更新界面状态
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "未连接";
device.Close();
bool iflag1 = await device.ConnectAsync(device.ip, device.port, device.ConfigKey);
iflag = await device.SendHeartPack();
if (iflag)
{
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "已连接";
}
}
//存库,如果没有则插入如果存在则更新
lock (string.Empty)
{
try
{
List<Base_device_state> Base_device_state = sqlSugarClient.Ado.Context.CopyNew().Queryable<Base_device_state>().Where(x => x.DeviceId == int.Parse(device.deviceid)).ToList();
if (Base_device_state != null && Base_device_state.Count > 0)
{
//只更新
Base_device_state[0].DeviceState = iflag ? 1 : 0;
Base_device_state[0].DeviceTime = DateTime.Now;
sqlSugarClient.Ado.Context.CopyNew().Updateable(Base_device_state).UpdateColumns(it => new { it.DeviceState,it.DeviceTime }).ExecuteCommand();
}
else
{
Base_device_state base_device_state = new Base_device_state()
{
DeviceId = int.Parse(device.deviceid),
DeviceState = iflag ? 1 : 0,
DeviceTime = DateTime.Now,
};
var a = sqlSugarClient.Ado.Context.CopyNew().Insertable<Base_device_state>(base_device_state).ExecuteCommand();
}
}
catch (Exception ex)
{
_logger.Error($"更新RFID状态异常:{ex.Message}", ex);
}
}
}
catch (Exception ex)
{
_logger.Error($"更新RFID状态异常:{ex.Message}", ex);
}
}
private void CollectState()
{
Task.Run(async () =>
{
while (true)
{
try
{
#region 汇集软件状态
Base_collect_state base_Collect_State = new Base_collect_state()
{
CollectId = appConfig.StationCode,
CollectState = 1,
CollectTime = DateTime.Now,
EidtTime = DateTime.Now,
};
sqlSugarClient.Ado.Context.CopyNew().Insertable<Base_collect_state>(base_Collect_State).ExecuteCommand();
#endregion 汇集软件状态
}
catch (Exception ex)
{
_logger.Error($"更新汇集软件状态异常:{ex.Message}");
}
await Task.Delay(1000 * 60 * 10);
}
});
}
private void StartCheckStatus()
{
Task.Run(async () =>
{
while (true)
{
try
{
#region RFID状态
//RefreshLogMessage("检测设备状态");
var batches = SplitListIntoBatches(rfidList, 10);
for (int i = 0; i < batches.Count; i++)
{
var currentBatch = batches[i];
// 显示当前批次信息UI线程
Console.WriteLine($"{DateTime.Now}开始检测第{i + 1}批(共{currentBatch.Count}个设备)\r\n");
// 异步检测当前批次的设备状态不阻塞UI
await DetectDeviceBatchAsync(currentBatch);
// 批次之间的间隔(最后一批无需等待)
if (i < batches.Count - 1)
{
Console.WriteLine( $"{DateTime.Now}第{i + 1}批检测完成,共{batches.Count}批,等待{1000 / 1000}秒后检测下一批\r\n");
await Task.Delay(10);
}
}
#endregion RFID状态
}
catch (Exception ex)
{
_logger.Error($"监听设备状态异常:{ex.Message}");
}
await Task.Delay(1000 * 30);
}
});
}
}
}

@ -1,11 +1,15 @@
using GalaSoft.MvvmLight;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using GalaSoft.MvvmLight;
using HslCommunication.Enthernet;
using Microsoft.Extensions.DependencyInjection;
using Models;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Model.Enum;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.Rfid;
using SlnMesnac.Serilog;
@ -21,7 +25,10 @@ using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Threading;
using TouchSocket.Core;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
using Task = System.Threading.Tasks.Task;
@ -31,6 +38,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
[RegisterAsSingletonAttribute]
public class ProductionLineViewModel : ViewModelBase
{
private static StringChange _StringChange;
private String SerialNo = "";
private SerilogHelper _logger;
private ISqlSugarClient? sqlSugarClient;
//容器里面的读写器集合
@ -69,10 +78,11 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
public ProductionLineViewModel()
{
GetOrderInfoCommand = new RelayCommand<object>(t => RefreshData(t));
ChangeTypeView = App.ServiceProvider.GetService<ChangeTypeViewModel>();
ChangeTypeView.Action += RefreshOrderNo;
Console.WriteLine(ChangeTypeView.Action.GetHashCode().ToString());
// 构造函数里注册
WeakReferenceMessenger.Default.Register<Real_DataInfo>(this, RefreshOrderNo);
_StringChange = App.ServiceProvider.GetService<StringChange>();
_logger = App.ServiceProvider.GetService<SerilogHelper>();
appConfig = App.ServiceProvider.GetService<AppConfig>();
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
@ -99,54 +109,119 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
private void RefreshOrderNo(Real_DataInfo real_Data)
private void RefreshData(object? t)
{
Random random = new Random();
string ss = random.Next(10, 99).ToString();
string EPCstring = "JSSD" + ss;
List<TagInfo> tagInfos = new List<TagInfo>();
TagInfo tagInfo = new TagInfo()
{
EPCstring = "JSSD" + ss,
EPC = Encoding.ASCII.GetBytes(EPCstring),
};
tagInfos.Add(tagInfo);
Deviceinfo.FirstOrDefault(x => x.Deviceid == "10001").RfidEPC = _StringChange.bytesToHexStr(tagInfos[0].EPC, tagInfos[0].EPC.Length);
Deviceinfo.FirstOrDefault(x => x.Deviceid == "10001").RfidASCII = EPCstring;
Deviceinfo.FirstOrDefault(x => x.Deviceid == "10001").WriteStatus = "成功";
Deviceinfo.FirstOrDefault(x => x.Deviceid == "10001").ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Deviceinfo.FirstOrDefault(x => x.Deviceid == "10001").WriteTime = DateTime.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss");
RecvIdentifyData_Instance("10001", tagInfos);
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
private void RefreshOrderNo(object recipient, Real_DataInfo real_Data)
{
//查询当前订单产线最大序列号
List<real_readdata> real_Readdatas = sqlSugarClient.Queryable<real_readdata>().Where(expression: x => x.orderno == real_Data.OrderNo && x.lineno == real_Data.LineNo).ToList();
string SNo = "";
if (real_Readdatas.Count > 0)
{
SNo = real_Readdatas.Max(x => x.serialno);
SNo = (Convert.ToInt32(SNo) + 1).ToString("D2");
}
else
{
SNo = "1";
}
Deviceinfo.FirstOrDefault(x => x.Deviceid == real_Data.Deviceid).SerialNo = Convert.ToInt32(SNo).ToString("D2");
Deviceinfo.FirstOrDefault(x => x.Deviceid == real_Data.Deviceid).OrderNo = real_Data.OrderNo;
Deviceinfo.FirstOrDefault(x => x.Deviceid == real_Data.Deviceid).ProductType = real_Data.ProductType;
Deviceinfo.FirstOrDefault(x => x.Deviceid == real_Data.Deviceid).LineNo = real_Data.LineNo;
Deviceinfo.FirstOrDefault(x => x.Deviceid == real_Data.Deviceid).RfidCount = real_Data.RfidCount;
}
private void LoadDeviceInfo()
{
//List<Base_device_info> DeviceInfos = sqlSugarClient.Queryable<Base_device_info>().Where(expression: x => x.Collectid == appConfig.StationCode && x.Deleteflag == 0).ToList();
List<Base_device_info> DeviceInfos = sqlSugarClient.Queryable<Base_device_info>().Where(expression: x => x.Collectid == appConfig.StationCode && x.Deleteflag == 0).ToList();
List<Real_DataInfo> real_DataInfos = new List<Real_DataInfo>();
Real_DataInfo real_DataInfo = new Real_DataInfo()
foreach (var item in DeviceInfos)
{
Name = "1",
Deviceid = "10001",
Connectstr = "192.168.0.1:20108",
LineNo = "6#",
OrderNo = "123456",
ProductType = "整芯带",
WriteCount = "0",
RfidCount = "20",
IsOnline = "未连接",
RfidASCII = "0",
RfidEPC = "0",
ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
ProductStatus = "生产中",
WriteStatus = "写入成功",
};
Real_DataInfo real_DataInfo2 = new Real_DataInfo()
{
Name = "2",
Deviceid = "10002",
Connectstr = "127.0.0.1:20108",
LineNo = "7#",
OrderNo = "123456",
ProductType = "整芯带",
WriteCount = "0",
RfidCount = "20",
IsOnline = "未连接",
RfidASCII = "0",
RfidEPC = "0",
ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
ProductStatus = "生产中",
WriteStatus = "写入成功",
};
real_DataInfos.Add(real_DataInfo);
real_DataInfos.Add(real_DataInfo2);
Real_DataInfo real_DataInfo = new Real_DataInfo()
{
Name = item.Name,
Deviceid = item.Deviceid,
Connectstr = item.Connectstr,
LineName = item.Name,
LineNo = item.Addr,
OrderNo = "",
ProductType = "",
WriteCount = "",
RfidCount = "",
IsOnline = "未连接",
RfidASCII = "",
RfidEPC = "",
ReadTime = "",
WriteTime ="",
ProductStatus = "",
WriteStatus = "",
};
real_DataInfos.Add(real_DataInfo);
}
//Real_DataInfo real_DataInfo = new Real_DataInfo()
//{
// Name = "1",
// Deviceid = "10001",
// Connectstr = "192.168.0.1:20108",
// LineNo = "6#",
// OrderNo = "123456",
// ProductType = "整芯带",
// WriteCount = "0",
// RfidCount = "20",
// IsOnline = "未连接",
// RfidASCII = "0",
// RfidEPC = "0",
// ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
// WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
// ProductStatus = "生产中",
// WriteStatus = "写入成功",
//};
//Real_DataInfo real_DataInfo2 = new Real_DataInfo()
//{
// Name = "2",
// Deviceid = "10002",
// Connectstr = "127.0.0.1:20108",
// LineNo = "7#",
// OrderNo = "123456",
// ProductType = "整芯带",
// WriteCount = "0",
// RfidCount = "20",
// IsOnline = "未连接",
// RfidASCII = "0",
// RfidEPC = "0",
// ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
// WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
// ProductStatus = "生产中",
// WriteStatus = "写入成功",
//};
//real_DataInfos.Add(real_DataInfo);
//real_DataInfos.Add(real_DataInfo2);
App.Current.Dispatcher.Invoke(() =>
{
Deviceinfo.Clear();
@ -158,6 +233,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
Name = item.Name,
Deviceid = item.Deviceid,
Connectstr = item.Connectstr,
LineName = item.Name,
LineNo = item.LineNo,
OrderNo = item.OrderNo,
ProductType = item.ProductType,
@ -176,32 +252,6 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
});
}
/// <summary>
/// 刷新日志
/// </summary>
/// <param name="msg"></param>
public void RefreshLogMessage(string msg)
{
try
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
//LogMessages.Add($"{DateTime.Now}: {msg}");
//while (LogMessages.Count > 100)
//{
// LogMessages.Clear();
//}
//var orderedList = LogMessages.OrderByDescending(x => x); // 排序后转为 List
//LogMessages = new ObservableCollection<string>(orderedList);
}));
}
catch (Exception ex)
{
_logger.Error($"异常:{ex.Message}");
}
}
/// <summary>
/// 接收到连续盘点标签返回
/// </summary>
@ -212,36 +262,65 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
string info = "";
try
{
bool stopflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_StopIdentify();
//测试写入
bool writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
if (!writeflag)
if (string.IsNullOrEmpty(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo))
{
writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
if (!writeflag)
{
writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
}
MessageBox.Show("请先获取MES订单号", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
//读到停止连续盘点
bool stopflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_StopIdentify();
//查询数据库是否已存在记录
bool iflag = false;
//如果不存在则
if (!iflag)
{
//拼接订单号写入标签
List<real_readdata> real_Readdatas = sqlSugarClient.Queryable<real_readdata>().Where(expression: x => x.rfidascii == tagInfos[0].EPCstring).ToList();
//如果不存在则写入
if (real_Readdatas.Count <= 0)
{
if (string.IsNullOrEmpty(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo))
{
return;
}
//拼接订单号写入标签
string WriteData = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidASCII + Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo + Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).LineNo + DateTime.Now.ToString("yy")+ Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo + Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo;
////测试写入
//bool writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
//if (!writeflag)
//{
// writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
// if (!writeflag)
// {
// writeflag = await rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_Write(Encoding.ASCII.GetString(tagInfos[0].EPC), "JG26522604101");
// }
//}
Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo = (Convert.ToInt32(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo) + 1).ToString("D2");
//保存写入记录
real_readdata real_Readdata = new real_readdata()
{
serialno = (Convert.ToInt32(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).SerialNo) - 1).ToString("D2"),
orderno = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo,
lineno = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).LineNo,
producttype = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ProductType,
rfidepc = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidEPC,
rfidascii = WriteData,
readtime = Convert.ToDateTime(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime),
writetime = Convert.ToDateTime(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteTime),
writestatus = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteStatus
};
var a = sqlSugarClient.Ado.Context.CopyNew().Insertable<real_readdata>(real_Readdata).ExecuteCommand();
//刷新界面
RefreshEventArgs(iCombineId, tagInfos);
AddRFIDData(iCombineId, tagInfos);
}
}
catch (Exception e)
{
_logger.Error($"RecvIdentifyData_Instance异常{e.Message}");
}
finally
{
//刷新界面
RefreshEventArgs(iCombineId, tagInfos);
AddRFIDData(iCombineId, tagInfos);
}
}
public void RefreshEventArgs(string iCombineId, List<TagInfo> tagInfos)
{
@ -263,7 +342,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
public void AddRFIDData(string iCombineId,List<TagInfo> tagInfos)
{
// 1. 判断当前行数是否>10是则清空
if (RFIDHistoryRecords.Count > 10)
if (RFIDHistoryRecords.Count >= 10)
{
RFIDHistoryRecords.Clear();
}

@ -27,7 +27,7 @@ namespace SlnMesnac.WPF.ViewModel
//private IAGVStateService _AGVStateService;
//private TcpServer _tcpServer;
//代码生成
//private readonly GenerateControl generateControl = new GenerateControl();
private readonly GenerateControl generateControl = new GenerateControl();
//private MiddleWare indexContent = new MiddleWare();
private ProductionLineUserControl indexContent = new ProductionLineUserControl();
//private ChangeType changeType = new ChangeType();
@ -142,7 +142,7 @@ namespace SlnMesnac.WPF.ViewModel
Application.Current.Shutdown();
break;
case "Generate":
//UserContent = generateControl;
UserContent = generateControl;
break;
//case "ChangeType":
// UserContent = changeType;
@ -191,6 +191,9 @@ namespace SlnMesnac.WPF.ViewModel
case "ChangeType":
UserContent = new ChangeType();
break;
case "HistorySearch":
UserContent = new HistorySearch();
break;
default: break;
}
}

@ -13,8 +13,9 @@
"SqlConfig": [
{
"configId": "mes",
"dbType": 1,
"connStr": "server=127.0.0.1;uid=sa;pwd=123456;database=WLDB"
"dbType": 0,
//"connStr": "server=127.0.0.1;uid=sa;pwd=123456;database=WLDB"
"connStr": "server=localhost;Database=bt_db;Uid=root;Pwd=123456"
//"connStr": "server=119.45.202.115;uid=sa;pwd=haiwei@123;database=WLDB"
//"connStr": "server=10.113.254.104;uid=sa;pwd=klltdb@3391123;database=XJMIDDBTOWCS"
},

Loading…
Cancel
Save