using BPA.Message; using BPASmartClient.Device; using BPASmartClient.EventBus; using BPASmartClient.Helper; using BPASmartClient.Http; using BPASmartClient.Message; using BPASmartClient.Model; using BPASmartClient.Model.小炒机; using BPASmartClient.Peripheral; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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 result = Plugin.GetInstance().GetPlugin()?.deviceConfigModelJsons; //var text = TextHelper.GetInstance.ReadTextInfo("StartShop", "DeviceConfig"); //string path = $"{LocaPath.GetInstance().GetDeviceConfigPath}{text}.json"; //if (File.Exists(path)) //{ //string JsonString = File.ReadAllText(path); //var result = JsonConvert.DeserializeObject>(JsonString); if (result != null) { foreach (var shop in result)//店铺集合 { foreach (var device in shop.deviceModels)//设备集合 { string Namespace = device.DeviceNamespace.Substring(0, device.DeviceNamespace.LastIndexOf('.')); var deviceTemp = Assembly.Load(Namespace).CreateInstance(device.DeviceNamespace) as IDevice; deviceTemp.Name = device?.DeviceName; deviceTemp.DeviceId = int.Parse(device.DeviceId); //通讯模块 List peripherals = new List(); foreach (var comms in device.communicationDevcies)//通讯集合 { string IPeripheralNamespace = comms.CommunicationNamespace.Substring(0, comms.CommunicationNamespace.LastIndexOf('.')); var peripheralTemp = Assembly.Load(IPeripheralNamespace).CreateInstance(comms.CommunicationNamespace) as IPeripheral; peripheralTemp.variables = comms.variables; peripheralTemp.communicationPar = comms.communicationPar; 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 < 3; 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) { new RecipeBomEvent() { DeviceId = device.DeviceId, recipeBoms = JsonConvert.DeserializeObject(result) }.Publish(); MessageLog.GetInstance.Show("接收到【 API 】获取的辅料信息"); } else if (PushType == 0) { var apiData = JsonConvert.DeserializeObject(result); new MaterialDeliveryEvent() { DeviceId = device.DeviceId, orderMaterialDelivery = apiData }.Publish(); MessageLog.GetInstance.Show("接收到【 API 】获取的物料信息"); apiData?.BatchingInfo?.ForEach(x => { MessageLog.GetInstance.Show($"物料ID:=[{x.BatchingId}],{x.BatchingLoc}号位置:{x.BatchingCount}"); }); } else if (PushType == 2)//小炒API流程获取,待定 { new StirFryGoodsEvent() { DeviceId = device.DeviceId, stirFrymessage = JsonConvert.DeserializeObject(result) }.Publish(); MessageLog.GetInstance.Show("接收到【 API 】获取的小炒流程信息"); } } catch (Exception ex) { MessageLog.GetInstance.ShowEx(ex.ToString()); } } #endregion }); } public void StopService() { this.devices.ForEach(device => device.Stop()); } } }