diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/RedisReadConfig.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/RedisReadConfig.cs new file mode 100644 index 00000000..e957e1b5 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/RedisReadConfig.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.ProductionMgr.Entities +{ + [SugarTable("base_redis_read_config")] + public class RedisReadConfig : BaseEntity + { + public RedisReadConfig() + { + } + /// + /// 设备名 + /// + public string? dev_name { get; set; } + /// + /// 标签名 + /// + public string? tag_name { get; set; } + /// + /// 事件类型1注塑装箱2挤出装箱3限位 + /// + public int event_type { get; set; } + /// + /// 数据类型1bool2int + /// + public int data_type { get; set; } + /// + /// 判断类型1相等2包含 + /// + + public int check_type { get; set; } + /// + /// 数据 + /// + public string? data { get; set; } + /// + /// 启用 + /// + public int enabled { get; set; } + + } +} diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Enums/Eagvmode.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Enums/Eagvmode.cs index b54d99be..7052237a 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Enums/Eagvmode.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Enums/Eagvmode.cs @@ -8,4 +8,20 @@ 空满框请求 = 3, 收到请求 = 4 } + public enum EventType + { + 注塑空满箱请求=1, + 挤出空满箱请求=2, + 限位请求=3 + } + public enum DataType + { + BOOL = 1, + INT = 2 + } + public enum CheckType + { + 相等 = 1, + 包含 = 2 + } } diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 5ac1eaf7..d675772a 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -1,8 +1,11 @@ -using JNPF.Common.Cache; +using Aop.Api.Domain; +using JNPF.Common.Cache; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using SqlSugar; using Tnb.Common.Redis; +using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Entities.Enums; using Tnb.ProductionMgr.Interfaces; @@ -12,17 +15,93 @@ namespace Tnb.ProductionMgr //redis定时获取数采数据 public class RedisBackGround : IHostedService, IDisposable { - private Timer? ZSpacktimer; - private Timer? JCpacktimer; - private Timer? limittimer; + private Timer? Readtimer; private readonly RedisData _redisData; private readonly IPrdInstockService _prdInstockService; - public RedisBackGround(RedisData redisData, IPrdInstockService prdInstockService) + private readonly ISqlSugarRepository _repository; + public RedisBackGround(RedisData redisData, IPrdInstockService prdInstockService, ISqlSugarRepository repository) { _redisData = redisData; _prdInstockService = prdInstockService; + _repository = repository; } - //获取注塑装箱状态 + //获取redis数据 + private void GetRedisData(object state) + { + var _redisReadConfigs = _repository.AsQueryable().Where(p => p.enabled == 1).ToList(); + foreach (var config in _redisReadConfigs) + { + try + { + var json= _redisData.GetHash(config.dev_name!, config.tag_name!).Result; + JObject? res = JsonConvert.DeserializeObject(json); + if (config.data_type == (int)DataType.INT) + { + if (config.check_type == (int)CheckType.相等) + { + if (res.Value("Value") == int.Parse(config.data!)) + { + InstockInput instockInput = new() + { + equip_code = res["DevName"]!.ToString(), + label_code = res["TagName"]!.ToString() + }; + TriggerEvent((EventType)config.event_type, instockInput); + } + } + else if (config.check_type == (int)CheckType.包含) + { + int[] ints= Array.ConvertAll(config.data!.Replace("[","").Replace("]","").Split(",",StringSplitOptions.RemoveEmptyEntries),int.Parse); + if (ints.Contains(res.Value("Value"))) + { + InstockInput instockInput = new() + { + equip_code = res["DevName"]!.ToString(), + label_code = res["TagName"]!.ToString() + }; + TriggerEvent((EventType)config.event_type, instockInput); + } + } + } + else if (config.data_type == (int)DataType.BOOL) + { + if (config.check_type == (int)CheckType.相等) + { + if (res.Value("Value") == bool.Parse(config.data!)) + { + InstockInput instockInput = new() + { + equip_code = res["DevName"]!.ToString(), + label_code = res["TagName"]!.ToString() + }; + TriggerEvent((EventType)config.event_type, instockInput); + } + } + } + } + catch (Exception) + { + } + } + } + private void TriggerEvent(EventType eventType, InstockInput instockInput) + { + switch (eventType) + { + case EventType.注塑空满箱请求: + _prdInstockService.InstockTypeOne(instockInput); + break; + case EventType.挤出空满箱请求: + _prdInstockService.InstockTypeOne(instockInput); + break; + case EventType.限位请求: + _prdInstockService.InstockOutPack(instockInput); + break; + default: + break; + } + } + //获取注塑装箱状态 private void GetZSPackStatus(object state) { try @@ -137,15 +216,11 @@ namespace Tnb.ProductionMgr } public void Dispose() { - ZSpacktimer?.Dispose(); - JCpacktimer?.Dispose(); - limittimer?.Dispose(); + Readtimer?.Dispose(); } public Task StartAsync(CancellationToken cancellationToken) { - ZSpacktimer = new Timer(GetZSPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); - JCpacktimer = new Timer(GetJCPackStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); - limittimer = new Timer(GetLimitStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); + Readtimer = new Timer(GetRedisData, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken)