using BPA.Message; using BPASmartClient.Device; using BPASmartClient.EventBus; using BPASmartClient.Helper; using BPASmartClient.Http; using BPASmartClient.Message; using BPASmartClient.Model; using BPASmartClient.Peripheral; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace BPASmartClient.Business { /// /// 设备管理器,统一管理所有设备资源 /// public class DeviceMgr : IPlugin { //设备集合 private List devices = new List(); public void Dispose() { } public void Initialize() { } public void Start() { LoadDevice(); } public List GetDevices() { return devices; } /// /// 设备加载 /// private void LoadDevice() { var devices = Plugin.GetInstance().GetPlugin().GetDeviceConfigs(); foreach (var device in devices) { var deviceTemp = Assembly.Load(device.Module.Substring(0, device.Module.LastIndexOf('.'))).CreateInstance(device.Module) as IDevice; deviceTemp.Name = device.Name; deviceTemp.DeviceId = device.DeviceId; foreach (var pars in device.Parameters) { deviceTemp.GetType().GetProperty(pars.Key).SetValue(deviceTemp, Convert.ChangeType(pars.Value, deviceTemp.GetType().GetProperty(pars.Key).PropertyType)); } List peripherals = new List(); foreach (var peripheral in device.Peripherals) { var peripheralTemp = Assembly.Load(peripheral.Module.Substring(0, peripheral.Module.LastIndexOf('.'))).CreateInstance(peripheral.Module) as IPeripheral; foreach (var pars in peripheral.Parameters) { peripheralTemp.GetType().GetProperty(pars.Key).SetValue(peripheralTemp, Convert.ChangeType(pars.Value, peripheralTemp.GetType().GetProperty(pars.Key).PropertyType)); } peripherals.Add(peripheralTemp); } deviceTemp.Initliaze(peripherals); this.devices.Add(deviceTemp); } } public void StartService() { this.devices.ForEach(device => { device.StartMain(); #region 获取物料数据 string result = string.Empty; for (int i = 0; i < 2; i++) { try { int PushType = i;//0:主料 1:辅料 int clientId = device.DeviceId; var jsondata = new { clientId, PushType }; string header = $"[/stock/GetItemInfo]_[{DateTime.Now.Ticks}]".AESEncrypt(); string url = $"{InternetInfo.StockServer}GetItemInfo"; result = APIHelper.GetInstance.HttpRequest(url, header, jsondata, RequestType.POST); if (PushType == 1) { EventBus.EventBus.GetInstance().Publish(new RecipeBomEvent() { DeviceId = device.DeviceId, recipeBoms = JsonConvert.DeserializeObject(result) }); MessageLog.GetInstance.Show("接收到辅料信息"); } else if (PushType == 0) { var apiData = JsonConvert.DeserializeObject(result); EventBus.EventBus.GetInstance().Publish(new MaterialDeliveryEvent() { DeviceId = device.DeviceId, orderMaterialDelivery = apiData }); MessageLog.GetInstance.Show("接收到物料信息"); apiData?.BatchingInfo?.ForEach(x => { MessageLog.GetInstance.Show($"物料ID:=[{x.BatchingId}],{x.BatchingLoc}号位置:{x.BatchingCount}"); }); } } catch (Exception ex) { MessageLog.GetInstance.ShowEx(ex.ToString()); } } #endregion }); } public void StopService() { this.devices.ForEach(device => device.Stop()); } } }