using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Shentun.Peis.ThirdInterfaces; using Shentun.Utilities; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Shentun.Peis.Schedulers { public interface IImportElectrocardiogramResultInterfaceWorker { public void DoWork(Guid interfaceId); public void DoWork(); } public class ImportElectrocardiogramResultInterfaceWorker : ThirdInterfaceWorkerBase, IImportElectrocardiogramResultInterfaceWorker { private static long i; private static bool _isRunning = false; private static readonly object lockObject = new object(); public virtual void DoWork(Guid interfaceId) { if (_isRunning) return; //lock (lockObject) //{ _isRunning = true; try { //Logger.LogInformation("Executed" + GetType().Name + "..!"); var appServiceHelper = new AppServiceHelper(); //appServiceHelper.Login(); var thirdInterfaceDtos = appServiceHelper.CallAppService>("api/app/ThirdInterface/GetList", null); var thirdInterfaceDto = thirdInterfaceDtos.Where(o => o.Id == interfaceId).FirstOrDefault(); if (thirdInterfaceDto == null) { _isRunning = false; return; } if (thirdInterfaceDto.IsActive != 'Y') { _isRunning = false; return; } var parmValue = thirdInterfaceDto.ParmValue; if (!string.IsNullOrWhiteSpace(parmValue)) { var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var interfaceConfig = configurationBuilder.Build(); var isActive = interfaceConfig.GetSection("Interface").GetSection("Scheduler") .GetSection("IsActive").Value; if (isActive != "Y") { _isRunning = false; return; } var assemblyName = interfaceConfig.GetSection("Interface").GetSection("AssemblyName").Value; var className = interfaceConfig.GetSection("Interface").GetSection("ClassName").Value; var funName = "DoWork"; object[] classConstructorArg = new object[] { thirdInterfaceDto.Id }; ReflectionHelper.Invoke(assemblyName, className, classConstructorArg, funName); } } catch (Exception ex) { _isRunning = false; Logger.LogError("Executed " + GetType().Name + " Error" + ex.Message); } _isRunning = false; return; //} } public void DoWork() { throw new NotImplementedException(); } public override Task DoWorkAsync(CancellationToken cancellationToken = default) { throw new NotImplementedException(); } } }