using Newtonsoft.Json; using ServiceCenter; using ServiceCenter.Extensions; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using System.ComponentModel; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.BCR; using WCS.Entity.Protocol.DataStructure; using WCS.Entity.Protocol.SRM; using WCS.Entity.Protocol.Station; using WCS.Service.Worlds; using WCS.WorkEngineering.Extensions; namespace WCS.Service.Systems { /// /// 数据采集系统 /// [BelongTo(typeof(DataCollectionWorld))] [Description("数据采集系统")] public class DataCollectionSysyem : DeviceSystem { public List ConvList; public List> Conv91List; public List> Bcrs; public List Srms; public DataCollectionSysyem() { ConvList = Device.All.Where(v => v.HasProtocol(typeof(IStation523))).Select(v => new Station(v, this.World)).ToList(); Conv91List = Device.All.Where(v => v.HasProtocol(typeof(IStation91))).Select(v => new Device(v, this.World)).ToList(); Bcrs = Device.All.Where(v => v.HasProtocol(typeof(IBCR81))).Select(v => new Device(v, this.World)).ToList(); Srms = Device.All.Where(v => v.HasProtocol(typeof(ISRM520))).Select(v => new SRM(v, this.World)).ToList(); } protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; public override bool Select(Device dev) { return dev.Code == "SRM1"; } public override void Do(SRM obj) { SqlSugarHelper.Do(db => { DeviceDataPack pack = new DeviceDataPack(); List DevList = new List(); foreach (var item in ConvList) { var dev = new StationData() { Code = item.Entity.Code, Frame = DateTime.Now, D520 = TypeExtension.Mapper(item.Data), D521 = TypeExtension.Mapper(item.Data2), D523 = TypeExtension.Mapper(item.Data3), D90 = new WCS_Station90(), D91 = new WCS_Station91(), D80 = new WCS_BCR80(), D81 = new WCS_BCR81() }; if (Conv91List.Any(v => v.Entity.Code == item.Entity.Code)) { var d91 = Conv91List.First(v => v.Entity.Code == item.Entity.Code); dev.D91 = TypeExtension.Mapper(d91.Data); } if (Bcrs.Any(v => v.Entity.Code == item.Entity.Code)) { var d81 = Bcrs.First(v => v.Entity.Code == item.Entity.Code); dev.D81 = TypeExtension.Mapper(d81.Data); } RedisHub.WMS.Set(item.Entity.Code, item.Data2.Mode); RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm() { Code = item.Entity.Code, Msg = item.Data3.Alarm.ToString(), Time = DateTime.Now })); DevList.Add(dev); } pack.StationDatas = new DeviceDataCollection(DateTime.Now, DevList.ToArray()); List srmList = new List(); foreach (var item in Srms) { var dev = new SRMData() { Code = item.Entity.Code, Frame = DateTime.Now, D520 = TypeExtension.Mapper(item.Data), D521 = TypeExtension.Mapper(item.Data2), D537 = TypeExtension.Mapper(item.Data3), }; RedisHub.WMS.Set(item.Entity.Code, item.Data2.AutoStatus); RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm() { Code = item.Entity.Code, Msg = item.Data3.Alarm.ToString(), Time = DateTime.Now })); srmList.Add(dev); } pack.SRMDatas = new DeviceDataCollection(DateTime.Now, srmList.ToArray()); pack.Frame = DateTime.Now; var plcData = new WCS_PlcData() { AddWho = "WCS", WAREHOUSE = ServiceHub.WarehouseName, CONTENT = JsonConvert.SerializeObject(pack, null, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }), }; RedisHub.Monitor.RPush("Packs", pack); RedisHub.Monitor.Set(nameof(DeviceDataPack), pack); if (RedisHub.Monitor.LLen("Packs") > 500000) { RedisHub.Monitor.LTrim("Packs", 5000, -1); } db.Default.Insertable(plcData).ExecuteCommand(); }); } } /// /// 设备报警 /// public class EquipmentAlarm { /// /// 设备号 /// public string Code { get; set; } /// /// 内容 /// public string Msg { get; set; } /// /// 时间 /// public DateTime Time { get; set; } } }