You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

376 lines
11 KiB
C#

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HslCommunication.Enthernet;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Win32;
using SlnMesnac.Business;
using SlnMesnac.Common;
using SlnMesnac.Config;
using SlnMesnac.Model.domain;
using SlnMesnac.Plc;
using SlnMesnac.Repository.service;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Views;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using static System.Net.Mime.MediaTypeNames;
namespace SlnMesnac.WPF.ViewModel
{
public partial class IndexViewModel: ObservableObject
{
private ILogoIdentifyService logoIdentifyService;
private GunHelper gunHelper = GunHelper.Instance;
public RelayCommand ResetCommand { get; set;}
private LogoBusiness logoBusiness = null;
private LightHelper lightHelper = LightHelper.Instance;
private readonly ILogger<LogoBusiness> _logger2;
private IBaseMaterialService? baseMaterialService;
private ILogoIdentifyService? ocrVerfiyService;
private ILogoConfigService? logoConfigService;
private TcpServer? tcpServer;
private PlcPool plcPool = null;
public IndexViewModel()
{
logoIdentifyService = App.ServiceProvider.GetService<ILogoIdentifyService>();
LogoBusiness.RefreshMessageEvent += RefreshMessage;
LogoBusiness.RefreshBoxInfoEvent += RefreshBoxInfo;
LogoBusiness.RefreshPictureEvent += RefreshPicture;
LogoBusiness.RefreshDataGridEvent += RefreshDataGrid;
LightHelper.RefreshMessageEvent += RefreshMessage;
ResetCommand = new RelayCommand(Reset);
RefreshDataGrid();
plcPool = App.ServiceProvider.GetService<PlcPool>();
tcpServer = App.ServiceProvider.GetService<TcpServer>();
ocrVerfiyService = App.ServiceProvider.GetService<ILogoIdentifyService>();
baseMaterialService = App.ServiceProvider.GetService<IBaseMaterialService>();
logoConfigService = App.ServiceProvider.GetService<ILogoConfigService>();
_logger2 = App.ServiceProvider.GetService<ILogger<LogoBusiness>>();
logoBusiness = LogoBusiness.GetInstance(_logger2, logoConfigService, baseMaterialService, ocrVerfiyService, plcPool, tcpServer);
//程序启动,打开绿色指示灯
gunHelper.SendData("OK");
OKIsVis = Visibility.Hidden;
NGIsVis = Visibility.Hidden;
}
/// <summary>
/// 复位方法
/// 复位PLC放行复位报警灯
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private void Reset()
{
Message = "";
logoBusiness.Pass();
lightHelper.SendData("CLOSE");
}
4 months ago
public async void RefreshDataGrid()
{
5 months ago
try
{
await Task.Run(async() =>
{
4 months ago
// 查询条件初始化
DateTime BeginDate = DateTime.Now.Date; // 当天的 0:00:00
DateTime EndDate = DateTime.Now.Date.AddDays(2).AddSeconds(-1); // 当天的 23:59:59
List<LogoIdentify> list = await logoIdentifyService.QueryAllByTime(BeginDate,EndDate);
if (list == null || list.Count == 0) return;
4 months ago
#region 计算通过率
int totalCount = list.Count;
int passCount = list.Where(x => x.isChecked == 1).Count();
ScanCount = totalCount.ToString();
PassCount = passCount.ToString();
int NeedCheckPassCount = list.Where(x => x.isChecked == 1 && x.Result == 1).Count();
// 计算通过率并保留两位小数,添加百分号
double passRate = totalCount == 0 ? 0 : (double)NeedCheckPassCount / passCount * 100;
PassRate = passRate.ToString("F2") + "%";
#endregion
await App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
LogoIdentifyDataGrid.Clear();
LogoIdentifyDataGrid.Clear();
list = list.OrderByDescending(x => x.RecordTime).ToList();
foreach (LogoIdentify verify in list)
{
LogoIdentifyDataGrid.Add(verify);
}
}));
});
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#region 界面刷新
/// <summary>
/// 刷新界面箱体信息
/// </summary>
/// <param name="boxCode"></param>
/// <param name="boxTime"></param>
/// <param name="model"></param>
/// <param name="imageData"></param>
public void RefreshBoxInfo(string boxCode,string boxTime,string model,bool isSuccess)
{
BoxCode = boxCode;
BoxTime = boxTime;
ProductModel = model;
RefreshResultColor(isSuccess);
if (!isSuccess)
{
ImageData = null;
}
}
/// <summary>
/// 刷新界面照片
/// </summary>
/// <param name="boxCode"></param>
/// <param name="boxTime"></param>
/// <param name="model"></param>
/// <param name="imageData"></param>
public void RefreshPicture(byte[] imageData)
{
ImageData = imageData;
}
/// <summary>
/// 刷新界面提示信息
/// </summary>
/// <param name="message"></param>
public void RefreshMessage(string message,bool isWarning = false)
{
if (isWarning)
{
MsgColor = System.Windows.Media.Brushes.Red;
}
else
{
MsgColor = System.Windows.Media.Brushes.White;
}
Message = $"{DateTime.Now.ToString("HH:mm:ss")}:{message}";
}
#endregion
#region 界面参数定义
#region 初始化datagrid
private ObservableCollection<LogoIdentify> _LogoIdentifyDataGrid = new ObservableCollection<LogoIdentify>();
public ObservableCollection<LogoIdentify> LogoIdentifyDataGrid
{
get { return _LogoIdentifyDataGrid; }
set
{
_LogoIdentifyDataGrid = value;
RaisePropertyChanged();//属性通知
}
}
#endregion
4 months ago
#region 扫码数
private string _ScanCount;
public string ScanCount
{
get { return _ScanCount; }
set { _ScanCount = value; RaisePropertyChanged(nameof(ScanCount)); }
}
#endregion
#region 通过数
private string _PassCount;
public string PassCount
{
get { return _PassCount; }
set { _PassCount = value; RaisePropertyChanged(nameof(PassCount)); }
}
#endregion
#region 通过率
private string _PassRate;
public string PassRate
{
get { return _PassRate; }
set { _PassRate = value; RaisePropertyChanged(nameof(PassRate)); }
}
#endregion
#region 箱体码
private string _BoxCode;
public string BoxCode
{
get { return _BoxCode; }
set { _BoxCode = value; RaisePropertyChanged(nameof(BoxCode)); }
}
#endregion
#region 箱体码扫描时间
private string _BoxTime;
public string BoxTime
{
get { return _BoxTime; }
set { _BoxTime = value; RaisePropertyChanged(nameof(BoxTime)); }
}
#endregion
#region 产品型号
private string _ProductModel;
public string ProductModel
{
get { return _ProductModel; }
set { _ProductModel = value; RaisePropertyChanged(nameof(ProductModel)); }
}
#endregion
#region 提示信息
private string _Message;
public string Message
{
get { return _Message; }
set { _Message = value; RaisePropertyChanged(nameof(Message)); }
}
private System.Windows.Media.Brush _msgColor;
public System.Windows.Media.Brush MsgColor
{
get { return _msgColor; }
set
{
_msgColor = value;
RaisePropertyChanged(nameof(MsgColor));
}
}
#endregion
#region Logo照片
private byte[] _imageData;
public byte[] ImageData
{
get => _imageData;
set
{
_imageData = value;
RaisePropertyChanged(nameof(ImageData)); // 属性改变时触发通知
}
}
#endregion
#region Logo识别结果
//private string _resultTxt;
//public string ResultTxt
//{
// get { return _resultTxt; }
// set
// {
// _resultTxt = value;
// RaisePropertyChanged(nameof(ResultTxt));
// }
//}
//private System.Windows.Media.Brush _resultColor;
//public System.Windows.Media.Brush ResultColor
//{
// get { return _resultColor; }
// set
// {
// _resultColor = value;
// RaisePropertyChanged(nameof(ResultColor));
// }
//}
#region 识别结果ok\ng展示
private Visibility _OKIsVis;
public Visibility OKIsVis
{
get { return _OKIsVis; }
set
{
_OKIsVis = value;
RaisePropertyChanged(nameof(OKIsVis));
}
}
private Visibility _NGIsVis;
public Visibility NGIsVis
{
get { return _NGIsVis; }
set
{
_NGIsVis = value;
RaisePropertyChanged(nameof(NGIsVis));
}
}
#endregion
public void RefreshResultColor(bool isSuccess)
{
if (isSuccess)
{
OKIsVis = Visibility.Visible;
NGIsVis = Visibility.Collapsed;
//ResultTxt = "OK";
//ResultColor = System.Windows.Media.Brushes.LimeGreen;
}
else
{
OKIsVis = Visibility.Collapsed;
NGIsVis = Visibility.Visible;
//ResultTxt = "NG";
//ResultColor = System.Windows.Media.Brushes.Red;
}
}
#endregion
#endregion
}
}