This commit is contained in:
yang.lee
2023-11-09 17:39:03 +08:00
3 changed files with 152 additions and 12 deletions

View File

@@ -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<string>
{
public RedisReadConfig()
{
}
/// <summary>
/// 设备名
/// </summary>
public string? dev_name { get; set; }
/// <summary>
/// 标签名
/// </summary>
public string? tag_name { get; set; }
/// <summary>
/// 事件类型1注塑装箱2挤出装箱3限位
/// </summary>
public int event_type { get; set; }
/// <summary>
/// 数据类型1bool2int
/// </summary>
public int data_type { get; set; }
/// <summary>
/// 判断类型1相等2包含
/// </summary>
public int check_type { get; set; }
/// <summary>
/// 数据
/// </summary>
public string? data { get; set; }
/// <summary>
/// 启用
/// </summary>
public int enabled { get; set; }
}
}

View File

@@ -8,4 +8,20 @@
= 3,
= 4
}
public enum EventType
{
=1,
=2,
=3
}
public enum DataType
{
BOOL = 1,
INT = 2
}
public enum CheckType
{
= 1,
= 2
}
}

View File

@@ -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<RedisReadConfig> _repository;
public RedisBackGround(RedisData redisData, IPrdInstockService prdInstockService, ISqlSugarRepository<RedisReadConfig> 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<JObject>(json);
if (config.data_type == (int)DataType.INT)
{
if (config.check_type == (int)CheckType.)
{
if (res.Value<int>("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<int>("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<bool>("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)