feat - 添加删除功能,优化写入逻辑,添加延时,优化订单页面逻辑

master
SoulStar 1 month ago
parent 6f3b817078
commit a25f95d7f5

@ -57,6 +57,11 @@ namespace SlnMesnac.Config
/// 默认值:
///</summary>
public int? Deleteflag { get; set; }
/// <summary>
/// 首次读取写入延迟
/// </summary>
public int? WriteDelaySet { get; set; }
}
}

@ -1,4 +1,5 @@
using System;
using SQLite;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
@ -13,6 +14,8 @@ namespace SlnMesnac.Model.domain
}
public class MesOrderInfo
{
[PrimaryKey]
public string ID { get; set; }
[JsonPropertyName("ProductSpec")]
public string ProductSpec { get; set; }
[JsonPropertyName("OrderNo")]
@ -27,5 +30,7 @@ namespace SlnMesnac.Model.domain
public double PlanQty { get; set; }
[JsonPropertyName("NextProductNo")]
public int NextProductNo { get; set; }
public DateTime InsertDate { get; set; }
}
}

@ -69,6 +69,30 @@ namespace Sln.Iot.Repository
return _connection.Delete<T>(id);
}
/// <summary>
/// 根据条件批量删除
/// </summary>
/// <param name="predExpr">删除条件</param>
/// <returns>删除的记录数</returns>
public int Delete(Expression<Func<T, bool>> predExpr)
{
var items = _connection.Table<T>().Where(predExpr).ToList();
int count = 0;
foreach (var item in items)
{
count += _connection.Delete(item);
}
return count;
}
/// <summary>
/// 删除所有数据
/// </summary>
public int DeleteAll()
{
return _connection.DeleteAll<T>();
}
/// <summary>
/// sql直接执行
/// </summary>

@ -0,0 +1,22 @@
using Sln.Iot.Repository;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service.Impl
{
public class RealReadDataImpl
{
private static readonly Lazy<RealReadDataImpl> lazy = new Lazy<RealReadDataImpl>(() => new RealReadDataImpl());
public static RealReadDataImpl Instance
{
get
{
return lazy.Value;
}
}
public SQLiteHelper<real_readdata> _helper = new SQLiteHelper<real_readdata>();
}
}

@ -1,15 +1,16 @@
using Sln.Iot.Repository;
using SlnMesnac.Model.domain;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service.Impl
{
public class RealReadDataImpl
public class MesOrderInfoImpl
{
private static readonly Lazy<RealReadDataImpl> lazy = new Lazy<RealReadDataImpl>(() => new RealReadDataImpl());
private static readonly Lazy<MesOrderInfoImpl> lazy = new Lazy<MesOrderInfoImpl>(() => new MesOrderInfoImpl());
public static RealReadDataImpl Instance
public static MesOrderInfoImpl Instance
{
get
{
@ -17,6 +18,6 @@ namespace SlnMesnac.Repository.service.Impl
}
}
public SQLiteHelper<real_readdata> _helper = new SQLiteHelper<real_readdata>();
public SQLiteHelper<MesOrderInfo> _helper = new SQLiteHelper<MesOrderInfo>();
}
}

@ -175,7 +175,7 @@ namespace SlnMesnac.Rfid.Factory
}
catch (Exception e)
{
Log.Information($"{m_deviceID},IP:{m_strIP}数据接收异常" + e.Message);
Log.Information($"{m_deviceID},IP:{m_strIP}数据接收异常 Message:" + e.Message);
return false;
}
}

@ -221,7 +221,11 @@ namespace SlnMesnac.WPF.Model
///</summary>
public string? Connectstr { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
public int? WriteDelaySet { get; set; }
private string _isOnline ="未连接";

@ -99,7 +99,7 @@
<RowDefinition Height="70"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<DockPanel VerticalAlignment="Center" Margin="0,0,0,0" LastChildFill="False">
<!--<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"/>
@ -137,7 +137,10 @@
<Button
Content="暂停盘点" Width="200" Height="50" FontSize="20" Margin="10,0,0,0" Command="{Binding StopReadCommand}" CommandParameter="{Binding Name, ElementName=Search}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}"/>
</StackPanel>
<Button DockPanel.Dock="Right"
Content="清除订单记录" Width="200" Height="50" FontSize="20" Margin="10,0,0,0" Command="{Binding ClearData}" CommandParameter="{Binding Name, ElementName=Search}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}"/>
</DockPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding ChangeTypePanel}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
@ -152,6 +155,7 @@
<DataGridTextColumn Binding="{Binding ProductType}" Header="物料类型" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding PlanQty}" Header="计划数量" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding NextProductNo}" Header="带号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding InsertDate}" Header="获取时间" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="1.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>

@ -116,7 +116,7 @@
<RowDefinition Height="70"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<DockPanel Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Center" LastChildFill="False">
<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"/>
@ -163,7 +163,10 @@
Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="0,0,20,0"/>
<Button Content="导出" Width="100" FontSize="20" Command="{Binding ExportCommand}" CommandParameter="{Binding Name,ElementName=Search}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}" />
</StackPanel>
<Button DockPanel.Dock="Right"
Content="清除记录" Width="100" FontSize="20" Margin="10,0,0,0" Command="{Binding ClearData}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}"/>
</DockPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding realreaddata}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"

@ -12,6 +12,7 @@ using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.Repository.service.Impl;
using SlnMesnac.Rfid;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
@ -41,6 +42,9 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
private readonly SerilogHelper _logger;
public List<RfidAbsractFactory> rfidList;
public ObservableCollection<string> Items { get; set; }
private MesOrderInfoImpl databaseService = MesOrderInfoImpl.Instance;
public ChangeTypeViewModel()
{
_logger = App.ServiceProvider.GetService<SerilogHelper>();
@ -49,7 +53,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
UpdateCommand = new RelayCommand<object>(t => Update(t));
StopReadingCommand = new RelayCommand<object>(t => StopRead(t));
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
GetOrderInfoCommand = new RelayCommand<object>(t => RefreshData(t));
ClearData = new RelayCommand<object>(t => ClearAllData());
//sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
rfidList = App.ServiceProvider.GetRequiredService<List<RfidAbsractFactory>>();
@ -58,7 +63,15 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
{
Items.Add(rfid.FilterData);
}
var items = databaseService._helper.QueryAll();
items.Reverse();
ChangeTypePanel.Clear();
foreach (var item in items)
{
ChangeTypePanel.Add(item);
}
}
private string _QueryIsCheck = "";
@ -80,10 +93,16 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
private void Update(object parameter)
{
if (parameter == null)
if (parameter == null)
{
return;
}
//获取设备编号
if (string.IsNullOrEmpty(QueryIsCheck.ToString().Trim()))
{
MessageBox.Show("请选择产线!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// 假设你的行模型叫 DictModel
var model = parameter as MesOrderInfo;
@ -107,7 +126,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RfidCount = model.PlanQty.ToString(),
NextProductNo = model.NextProductNo.ToString("D3")
};
WeakReferenceMessenger.Default.Send(real_Data);
WeakReferenceMessenger.Default.Send(real_Data);
MessageBox.Show("MES订单切换成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
Log.Information($"{mesOrderNo}MES订单切换成功{JsonSerializer.Serialize(real_Data)}");
@ -168,10 +187,9 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
Console.WriteLine("调用MES获取订单接口");
//调用MES接口获取生产订单信息
//MessageBox.Show("MES订单获取成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
List<MesOrderInfo> mesOrderInfos = new List<MesOrderInfo>();
//string response = "{\"code\":200,\"msg\":\"success\",\"data\":[{\"OrderNo\":\"SS042\",\"ProductCode\":\"4030502500100006\",\"ProductType\":\"钢丝带-ST-井下阻燃钢丝带\",\"ProductName\":\"输送带-井下阻燃钢丝带-ST\",\"ProductSpec\":\"1400mmST/S2500*18+8MT/MTD7.2P15N89\",\"PlanQty\":130.00,\"NextProductNo\":2}]}\r\n";
string response = await _httpclient.GetMesOrderInfo(lineno, BeginDate.ToString("yyyy-MM-dd"));
Console.WriteLine("接收MES接口返回:"+ response);
Console.WriteLine("接收MES接口返回:" + response);
// 反序列化
try
{
@ -186,15 +204,26 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
//Console.WriteLine("序列化:" + responsejson.Code);
if(responsejson.Data == null || responsejson.Data.Count == 0)
if (responsejson.Data == null || responsejson.Data.Count == 0)
{
MessageBox.Show("今天无订单", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (response != null)
{
ChangeTypePanel.Clear();
//ChangeTypePanel.Clear();
DateTime twoDaysAgo = DateTime.Now.AddDays(-2);
databaseService._helper.Delete(x => x.InsertDate < twoDaysAgo);
foreach (var item in responsejson.Data)
{
item.ID = Guid.NewGuid().ToString();
item.InsertDate = DateTime.Now;
databaseService._helper.Insert(item);
}
var items = databaseService._helper.QueryAll();
items.Reverse();
ChangeTypePanel.Clear();
foreach (var item in items)
{
ChangeTypePanel.Add(item);
}
@ -253,11 +282,22 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
}
private void ClearAllData()
{
var result = MessageBox.Show("确定要清除所有订单记录吗?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
databaseService._helper.DeleteAll();
ChangeTypePanel.Clear();
}
}
/// <summary>
///
///
/// </summary>
public RelayCommand<object> UpdateCommand { get; set; }
public RelayCommand<object> UpdateCommand1 { get; set; }
public RelayCommand<object> ClearData { get; set; }
private string _ProductType;
public string ProductType
{
@ -290,6 +330,6 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
set => SetProperty(ref _ChangeTypePanel, value);
}
}
}

@ -44,6 +44,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
//sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
ExportCommand = new RelayCommand<object>(t=> ExportData(t));
ClearData = new RelayCommand<object>(t => ClearAllData());
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
EndDate = DateTime.Now.Date.AddDays(2).AddSeconds(-1); // 当天的 23:59:59
RefreshHistoryData();
@ -64,9 +65,17 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
public RelayCommand<object> GetOrderInfoCommand { get; set; }
public RelayCommand<object> ExportCommand { get; set; }
public RelayCommand<object> ClearData { get; set; }
private void ClearAllData()
{
var result = MessageBox.Show("确定要清除所有历史记录吗?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
databaseService._helper.DeleteAll();
realreaddata.Clear();
}
}
/// <summary>
/// 从MES获取订单信息

@ -27,6 +27,7 @@ using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@ -251,6 +252,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
WriteTime = "",
ProductStatus = "",
WriteStatus = "",
WriteDelaySet = item.WriteDelaySet
};
real_DataInfos.Add(real_DataInfo);
@ -280,6 +282,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
ProductStatus = item.ProductStatus,
WriteStatus = item.WriteStatus,
RfidEPC = item.RfidEPC,
WriteDelaySet = item.WriteDelaySet
};
Deviceinfo.Add(real_DataInfo);
}
@ -298,18 +301,21 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
//二次验证
if (IsVerify)
{
IsVerify = false;
//二次验证如果不通过
var judgeString = Encoding.ASCII.GetString(tagInfos[0].EPC);
judgeString = judgeString.Replace("\0", "");
if (judgeString != LastWrite)
{
var tempEPC = LastRFIDEPC;
rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_BeginIdentify().GetAwaiter().GetResult();
LastRFIDEPC = tempEPC;
CurrentState = "盘点中";
IsVerify = true;
return;
}
else
{
IsVerify = false;
Log.Information($"验证成功");
Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteStatus = "成功";
@ -335,6 +341,9 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var a = databaseService._helper.Insert(real_Readdata);
AddRFIDData(iCombineId, tagInfos);
LastRFIDEPC = "";
LastWrite = "";
rfidList.FirstOrDefault(x => x.deviceid == iCombineId).Set_BeginIdentify().GetAwaiter().GetResult();
CurrentState = "盘点中";
return;
@ -342,6 +351,11 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
else //正常写入
{
if (!IsVerify)
{
await Task.Delay(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteDelaySet ?? 2000);
}
if (string.IsNullOrEmpty(Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).OrderNo))
{
MessageBox.Show("请先获取MES订单号", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@ -559,6 +573,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
var res = false;
do
{
await Task.Delay(1000);
Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "未连接";
Log.Information($"[{device.deviceid}]:[{device.ip}:{device.port}]连接中...");
res = await device.ConnectAsync(device.ip, device.port, device.deviceid);

@ -81,7 +81,8 @@
"Devicetype": "RFly_I160",
"Collectid": "102",
"Addr": "VM006",
"Deleteflag": "0"
"Deleteflag": "0",
"WriteDelaySet": 0
},
{
"DeviceId": "10002",
@ -91,7 +92,8 @@
"Devicetype": "RFly_I160",
"Collectid": "102",
"Addr": "VM006",
"Deleteflag": "1"
"Deleteflag": "1",
"WriteDelaySet": 0
}
],

Loading…
Cancel
Save