using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using SlnMesnac.Config; using SlnMesnac.Model.domain; using SlnMesnac.Model.dto; using SlnMesnac.Plc; using SlnMesnac.Repository.service; using SlnMesnac.Rfid; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2024 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:LAPTOP-E0N2L34V * 命名空间:SlnMesnac.Business.base * 唯一标识:ed6470dd-80bf-4a9b-bfae-3c3a46af4c38 * * 创建者:WenJY * 电子邮箱:wenjy@mesnac.com * 创建时间:2024-04-08 17:18:05 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> namespace SlnMesnac.Business.@base { /// /// 业务基类 /// public class BaseBusiness { public readonly ILogger _logger; /// /// 参数配置 /// public readonly AppConfig _appConfig; /// /// PLC工厂 /// public readonly List _plcFactories; /// /// RFID工厂 /// public readonly List _rfidFactories; /// /// 容器 /// private IServiceProvider _serviceProvider; #region 本地缓存信息 private List baseConfigInfos; #endregion /// /// 刷新日志信息 /// /// public delegate void PrintMessageToListBox(string msg); public event PrintMessageToListBox? PrintMessageToListBoxEvent; public BaseBusiness(ILogger logger, AppConfig appConfig, List plcFactories, List rfidFactories, IServiceProvider serviceProvider) { _logger = logger; _appConfig = appConfig; _plcFactories = plcFactories; _rfidFactories = rfidFactories; _serviceProvider = serviceProvider; using (var scope = _serviceProvider.CreateScope()) { baseConfigInfos = scope.ServiceProvider.GetRequiredService>(); } } /// /// 刷新日志 /// /// public void RefreshMessage(string msg) { _logger.LogInformation(msg); PrintMessageToListBoxEvent?.Invoke(msg); } /// /// 根据Key获取PLC连接信息 /// /// /// /// /// public PlcAbsractFactory GetPlcByKey(string key) { if (_plcFactories == null) { throw new ArgumentNullException($"根据Key获取PLC连接信息异常:PLC 连接信息为空"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("根据Key获取PLC连接信息异常:设备Key参数为空"); } try { var info = _plcFactories.Where(x => x.ConfigKey == key).FirstOrDefault(); return info; } catch (Exception ex) { throw new InvalidOperationException($"根据Key获取PLC连接信息异常:{ex.Message}"); } } /// /// 根据Key获取Rfid连接信息 /// /// /// /// /// public RfidAbsractFactory GetRfidByKey(string key) { if (_rfidFactories == null) { throw new ArgumentNullException($"根据Key获取RFID连接信息异常:PLC 连接信息为空"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("根据Key获取RFID连接信息异常:设备Key参数为空"); } try { var info = _rfidFactories.Where(x => x.ConfigKey == key).FirstOrDefault(); return info; } catch (Exception ex) { throw new InvalidOperationException($"根据Key获取RFID连接信息异常:{ex.Message}"); } } /// /// 根据RFID Key读取RFID信息 /// /// /// /// public void ReadEpcStrByRfidKey(string rfidKey, out string epcStr) { try { var rfidEquip = GetRfidByKey(rfidKey); List tagInfoList = rfidEquip.TimePeriodRead(); epcStr = tagInfoList.OrderByDescending(x => x.Count).First().EPCstring; } catch (Exception ex) { throw new InvalidOperationException($"根据RFID Key读取RFID信息异常:{ex.Message}"); } } /// /// 使用---根据RFID Key读取RFID信息 /// /// /// /// public async Task ReadEpcStrByRfidKeyAsync(string rfidKey) { try { string epcStr = string.Empty; var rfidEquip = GetRfidByKey(rfidKey); if(rfidEquip == null) { //TODO 推送设备报警 return null; } List tagInfoList =await rfidEquip.GetRFIDAsync(); epcStr = tagInfoList.OrderByDescending(x => x.Count).First().EPCstring; return epcStr; } catch (Exception ex) { // throw new InvalidOperationException($"根据RFID Key读取RFID信息异常:{ex.Message}"); return null; } } /// /// 根据configKey获取PLC地址 /// /// /// /// public string GetPlcAddressByConfigKey(string configKey) { try { if (baseConfigInfos.Count == 0) { throw new ArgumentNullException("根据Key获取PLC地址异常:配置集合为空"); } var result = baseConfigInfos.Where(x => x.ConfigKey == configKey).First().ConfigValue; return result; } catch (Exception ex) { throw new InvalidOperationException($"根据Key获取PLC地址异常{configKey}:{ex.Message}"); } } } }