|
|
|
|
|
|
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
|
using LiveCharts;
|
|
|
|
|
using LiveCharts.Wpf;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using SlnMesnac.Business;
|
|
|
|
|
using SlnMesnac.Model.domain;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Documents;
|
|
|
|
|
|
|
|
|
|
#region << 版 本 注 释 >>
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
|
|
* 版权所有 (c) 2024 WenJY 保留所有权利。
|
|
|
|
|
* CLR版本:4.0.30319.42000
|
|
|
|
|
* 机器名称:T14-GEN3-7895
|
|
|
|
|
* 命名空间:SlnMesnac.WPF.ViewModel
|
|
|
|
|
* 唯一标识:9e7a55b1-ef98-4957-9a44-16dd251c4b5c
|
|
|
|
|
*
|
|
|
|
|
* 创建者:WenJY
|
|
|
|
|
* 电子邮箱:
|
|
|
|
|
* 创建时间:2024-09-18 10:46:52
|
|
|
|
|
* 版本:V1.0.0
|
|
|
|
|
* 描述:
|
|
|
|
|
*
|
|
|
|
|
*--------------------------------------------------------------------
|
|
|
|
|
* 修改人:
|
|
|
|
|
* 时间:
|
|
|
|
|
* 修改说明:
|
|
|
|
|
*
|
|
|
|
|
* 版本:V1.0.0
|
|
|
|
|
*--------------------------------------------------------------------*/
|
|
|
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
|
namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
{
|
|
|
|
|
public class IndexViewModel : ObservableObject
|
|
|
|
|
{
|
|
|
|
|
private TagScanBusiness tagScanBusiness;
|
|
|
|
|
public IndexViewModel()
|
|
|
|
|
{
|
|
|
|
|
tagScanBusiness = App.ServiceProvider.GetService<TagScanBusiness>();
|
|
|
|
|
this.Init();
|
|
|
|
|
this.RefreshScanInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void Init()
|
|
|
|
|
{
|
|
|
|
|
PassRate = tagScanBusiness.TagScanPassRate();
|
|
|
|
|
|
|
|
|
|
// 初始化数据
|
|
|
|
|
RecogEfficiency = new SeriesCollection
|
|
|
|
|
{
|
|
|
|
|
new LineSeries
|
|
|
|
|
{
|
|
|
|
|
Title = "Achievement",
|
|
|
|
|
Values = new ChartValues<double> { 3, 5, 7, 2 } // 示例数据
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AxisX = new ObservableCollection<string> { "8", "12", "16", "20" };
|
|
|
|
|
|
|
|
|
|
ScanItems = new ObservableCollection<ScanLogModel>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 参数定义
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 条码信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string _tagCode;
|
|
|
|
|
public string TagCode
|
|
|
|
|
{
|
|
|
|
|
get => _tagCode;
|
|
|
|
|
set => SetProperty(ref _tagCode, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 条码总数
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int _tagAmount;
|
|
|
|
|
public int TagAmount
|
|
|
|
|
{
|
|
|
|
|
get => _tagAmount;
|
|
|
|
|
set => SetProperty(ref _tagAmount, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 合格率
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double _passRate;
|
|
|
|
|
public double PassRate
|
|
|
|
|
{
|
|
|
|
|
get => _passRate;
|
|
|
|
|
set => SetProperty(ref _passRate, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 效率数值
|
|
|
|
|
/// </summary>
|
|
|
|
|
private SeriesCollection _recogEfficiency;
|
|
|
|
|
public SeriesCollection RecogEfficiency
|
|
|
|
|
{
|
|
|
|
|
get => _recogEfficiency;
|
|
|
|
|
set => SetProperty(ref _recogEfficiency, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 效率曲线X坐标
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ObservableCollection<string> _axisX;
|
|
|
|
|
public ObservableCollection<string> AxisX
|
|
|
|
|
{
|
|
|
|
|
get => _axisX;
|
|
|
|
|
set => SetProperty(ref _axisX, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 图像路径
|
|
|
|
|
/// </summary>
|
|
|
|
|
private string _imagePath;
|
|
|
|
|
public string ImagePath
|
|
|
|
|
{
|
|
|
|
|
get => _imagePath;
|
|
|
|
|
set => SetProperty(ref _imagePath, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 日志信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ObservableCollection<string> _logMessages = new ObservableCollection<string>();
|
|
|
|
|
|
|
|
|
|
public ObservableCollection<string> LogMessages
|
|
|
|
|
{
|
|
|
|
|
get => _logMessages;
|
|
|
|
|
set => SetProperty(ref _logMessages, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 扫描记录
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<ScanLogModel> scanLogModelsItems = new List<ScanLogModel>();
|
|
|
|
|
private ObservableCollection<ScanLogModel> _scanItems = new ObservableCollection<ScanLogModel>();
|
|
|
|
|
public ObservableCollection<ScanLogModel> ScanItems
|
|
|
|
|
{
|
|
|
|
|
get => _scanItems;
|
|
|
|
|
set => SetProperty(ref _scanItems, value);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private void RefreshScanInfo()
|
|
|
|
|
{
|
|
|
|
|
//数据刷新
|
|
|
|
|
tagScanBusiness.RefreshTagScanInfoEvent += info =>
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
App.Current.Dispatcher.Invoke(() =>
|
|
|
|
|
{
|
|
|
|
|
TagCode = info.Rfid;
|
|
|
|
|
ImagePath = info.Url;
|
|
|
|
|
|
|
|
|
|
scanLogModelsItems.Add(info);
|
|
|
|
|
|
|
|
|
|
ScanItems = new ObservableCollection<ScanLogModel>(scanLogModelsItems.OrderByDescending(x=>x.CreateTime).ToList());
|
|
|
|
|
|
|
|
|
|
TagAmount++;
|
|
|
|
|
|
|
|
|
|
PassRate = tagScanBusiness.TagScanPassRate();
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//报警信息刷新
|
|
|
|
|
tagScanBusiness.RefreshDeviceAlarmMessageEvent += msg =>
|
|
|
|
|
{
|
|
|
|
|
RefreshLogMessage(msg);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ObservableCollection<string> listItems = new ObservableCollection<string>();
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 系统运行日志输出
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="message"></param>
|
|
|
|
|
private async void RefreshLogMessage(string message)
|
|
|
|
|
{
|
|
|
|
|
await Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string formattedMessage = $"{DateTime.Now.ToString("HH:mm:ss.ss")} ==> {message}";
|
|
|
|
|
|
|
|
|
|
lock (listItems)
|
|
|
|
|
{
|
|
|
|
|
listItems.Add(formattedMessage);
|
|
|
|
|
|
|
|
|
|
while (listItems.Count > 120)
|
|
|
|
|
{
|
|
|
|
|
listItems.RemoveAt(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var orderedList = listItems.OrderByDescending(x => x).ToList(); // 排序后转为 List
|
|
|
|
|
App.Current.Dispatcher.Invoke(() =>
|
|
|
|
|
{
|
|
|
|
|
LogMessages = new ObservableCollection<string>(orderedList); // 更新 UI
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
//_logger.LogError($"日志数据绑定异常:{ex.Message}");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|