123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using StackExchange.Redis;
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Linq;
- using System.Data;
- using Ropin.Inspection.Service;
- using Ropin.Inspection.Repository;
- using Ropin.Inspection.Model.Entities;
- using Ropin.Inspection.Model;
- using Newtonsoft.Json;
- using LinqKit;
- using Ropin.Inspection.Common.Helper;
- using Microsoft.AspNetCore.NodeServices;
- using Microsoft.EntityFrameworkCore;
- using Ropin.Core.Extensions.Redis;
- namespace Ropin.Inspection.Api.Work
- {
- public class HostedService : IHostedService, IDisposable
- {
- private readonly ILogger _logger;
- private readonly IServiceProvider _provider;
- private readonly IRedisBasketRepository _redisBasketRepository;
- private readonly IDbContextFactory<InspectionDbContext> _dbContextFactory;
- private readonly Func<InspectionDbContext> _dbFuncContextFactory;
- private readonly INodeServices _nodeServices;
- private readonly IPushMsgService _pushMsgService;
- private readonly ITdevWebScadaDevSpotRepository _devWebScadaDevSpotRepository;
- //private readonly ITdevDevStoreService _devDevStoreService;
- private readonly ITdevDevStoreRepository _tdevDevStoreRepository;
- public HostedService(ILogger<HostedService> logger,
- IServiceProvider provider,
- ITdevDevStoreRepository devDevStoreRepository,
- INodeServices nodeServices,
- Func<InspectionDbContext> dbContextFactory,
- IRedisBasketRepository redisBasketRepository,
- IPushMsgService pushMsgService,
- //IDbContextFactory<InspectionDbContext> dbContextFactory,
- ITdevWebScadaDevSpotRepository devWebScadaDevSpotRepository)
- {
- _logger = logger;
- _provider = provider;
- _tdevDevStoreRepository = devDevStoreRepository;
- _devWebScadaDevSpotRepository = devWebScadaDevSpotRepository;
- _nodeServices = nodeServices;
- // _devDevStoreService = devDevStoreService;
- _redisBasketRepository = redisBasketRepository;
- _dbFuncContextFactory = dbContextFactory;
- _pushMsgService = pushMsgService;
- //var v = _provider.GetRequiredService<IDbContextFactory<InspectionDbContext>>();
- //_dbContextFactory = dbContextFactory;//
- }
- private object _locker = new object();
- public Task StartAsync(CancellationToken cancellationToken)
- {
- Task.Run(async () =>
- {
- while (true)
- {
- try
- {
- string strMsgalarmdic = await _redisBasketRepository.GetValue("fanyibox_msgalarmdic");
- if (string.IsNullOrWhiteSpace(strMsgalarmdic))
- {
- Console.WriteLine("队列中数据不存在!");
- await _redisBasketRepository.Set("fanyibox_error", "队列中数据不存在!",new TimeSpan(2000000));
- }
- else
- {
- Dictionary<string, DeviceVlue> msgAlarmDic = JsonConvert.DeserializeObject<Dictionary<string, DeviceVlue>>(strMsgalarmdic);
- if (msgAlarmDic != null && msgAlarmDic.Count()>0)
- await SendInterval(msgAlarmDic);
- }
- await Task.Delay(100000);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex.Message);
- await Task.Delay(1000);
- }
- }
- });
- return Task.CompletedTask;
- }
- private async Task SendInterval(Dictionary<string, DeviceVlue> msgAlarmDic)
- {
- List<Task> tasks = new List<Task>();
- foreach (var keyValuePair in msgAlarmDic)
- {
- tasks.Add(Task.Run(async () =>
- {
- await _pushMsgService.PushAlarmMsgAsync(new TpushMsgModel
- {
- C_DevStoreCode = keyValuePair.Value.storeCode,
- C_MsgTypeCode = "MSG_TYPE_001",
- Msg = "设备点异常" + keyValuePair.Value.name + " boxId:" + keyValuePair.Value.boxId + " " + keyValuePair.Key,
- Subject = "运维通知",
- DevNumber = "boxId:" + keyValuePair.Value.boxId + " " + keyValuePair.Key,
- DevName = keyValuePair.Value.name,
- GenerationType = 2,
- msgStatus = 0,
- },"运维通知");
- }));
- }
- FanyiHelper.msgAlarmDic.Clear();
- await _redisBasketRepository.Remove("fanyibox_msgalarmdic");
- //tasks.Add(Task.Run(() =>
- //{
- //}));
- await Task.WhenAll(tasks);
- }
- public Task StopAsync(CancellationToken cancellationToken)
- {
- Dispose();
- _logger.LogInformation("内部任务计划结束");
- return Task.CompletedTask;
- }
- public void Dispose()
- {
- //t?.Dispose();
- }
- }
- }
|