/// <summary> /// - /// </summary> /// <typeparam name="TMessageDomain"> </typeparam> /// <typeparam name="TSourceDomain"> , </typeparam> public class CreateMessageCoreService<TMessageDomain, TSourceDomain> where TMessageDomain : MessageDomain { private readonly ISourceService<TSourceDomain> _sourceService; private readonly IMessageDomainConverter<TMessageDomain, TSourceDomain> _messageDomainConverter; private readonly IMessageDomainService<TMessageDomain> _messageDomainService; private readonly IOrgPPAGUIDService _orgPPAGUIDService; private readonly IGisLogger _logger; public CreateMessageCoreService(ISourceService<TSourceDomain> sourceService, IMessageDomainConverter<TMessageDomain, TSourceDomain> messageDomainConverter, IMessageDomainService<TMessageDomain> messageDomainService, IOrgPPAGUIDService orgPPAGUIDService, IGisLogger logger) { _sourceService = sourceService; _messageDomainConverter = messageDomainConverter; _messageDomainService = messageDomainService; _orgPPAGUIDService = orgPPAGUIDService; _logger = logger; } public void CreateMessages(CoreInitData coreInitData) { var stopWatch = new Stopwatch(); stopWatch.Start(); try { // , var sourceDomains = _sourceService.GetSourceDomains(coreInitData); // senderId var orgPPAGUID = _orgPPAGUIDService.GetOrgPPAGUID(coreInitData.UkId); // var messages = _messageDomainConverter.ToMessageDomain(sourceDomains, coreInitData, orgPPAGUID); // _messageDomainService.InsertMessageDomains(messages); stopWatch.Stop(); _logger.Info(this.GetType(), $" {messages.Count} {coreInitData.UkId} {stopWatch.Elapsed}"); } catch (Exception ex) { _logger.Error(this.GetType(), $" {coreInitData}", ex); } } }
/// <summary> /// - /// </summary> /// <typeparam name="TMessageDomain"> </typeparam> /// <typeparam name="TMessageProxy"> </typeparam> /// <typeparam name="TAckProxy"> </typeparam> public class SendMessageCoreService<TMessageDomain, TMessageProxy, TAckProxy> where TMessageDomain : MessageDomain where TAckProxy : IAckRequestAck { private readonly IMessageDomainService<TMessageDomain> _messageDomainService; private readonly IMessageProxyConverter<TMessageDomain, TMessageProxy> _messageProxyConverter; private readonly ISendMessageProxyProvider<TMessageProxy, TAckProxy> _sendMessageProxyProvider; private readonly ISendMessageHandler<TMessageDomain, TAckProxy> _sendMessageHandler; private readonly IGisLogger _logger; public SendMessageCoreService(IMessageDomainService<TMessageDomain> messageDomainService, IMessageProxyConverter<TMessageDomain, TMessageProxy> messageProxyConverter, ISendMessageProxyProvider<TMessageProxy, TAckProxy> sendMessageProxyProvider, ISendMessageHandler<TMessageDomain, TAckProxy> sendMessageHandler, IGisLogger logger) { _messageDomainService = messageDomainService; _messageProxyConverter = messageProxyConverter; _sendMessageProxyProvider = sendMessageProxyProvider; _sendMessageHandler = sendMessageHandler; _logger = logger; } public void SendMessages(CoreInitData coreInitData) { var stopWatch = new Stopwatch(); stopWatch.Start(); try { // // // var messages = _messageDomainService.GetMessageDomainsForSend(coreInitData); foreach (var messageDomain in messages) { try { // var proxyMessageRequests = _messageProxyConverter.ToMessageProxy(messageDomain); // var proxyAck = _sendMessageProxyProvider.SendMessage(proxyMessageRequests); // _sendMessageHandler.SendSuccess(messageDomain, proxyAck); } catch (Exception exception) { // _sendMessageHandler.SendFail(messageDomain, exception); } } stopWatch.Stop(); _logger.Info(this.GetType(), $" {messages.Count} {coreInitData.UkId} " + $"{messages.Count(x => x.Status == MessageStatus.Sent)} , " + $"{messages.Count(x => x.Status == MessageStatus.SendError)} , " + $"{messages.Count(x => x.Status == MessageStatus.SendErrorTryAgain)} , {stopWatch.Elapsed}"); } catch (Exception ex) { _logger.Error(this.GetType(), $" {coreInitData}", ex); } } }
/// <summary> /// - /// </summary> /// <typeparam name="TMessageDomain"> </typeparam> /// <typeparam name="TGetStateResultProxy"> </typeparam> /// <typeparam name="TResultProxy"> </typeparam> /// <typeparam name="TResult"> </typeparam> public class GetResultsCoreService<TMessageDomain, TGetStateResultProxy, TResultProxy, TResult> where TMessageDomain : MessageDomain where TResultProxy : IGetStateResult { private readonly IMessageDomainService<TMessageDomain> _messageDomainService; private readonly IGetResultProxyProvider<TGetStateResultProxy, TResultProxy> _getResultProxyProvider; private readonly IGetStateProxyConverter<TGetStateResultProxy, TMessageDomain> _getStateProxyConverter; private readonly IResultConverter<TResultProxy, TResult> _resultConverter; private readonly ISaveResultService<TResult, TMessageDomain> _saveResultService; private readonly IGetResultMessageHandler<TMessageDomain, TResult> _getResultMessageHandler; private readonly IGisLogger _logger; /// <summary> /// , , /// </summary> private const int GET_RESULT_TIMEOUT_IN_DAYS = 3; public GetResultsCoreService(IMessageDomainService<TMessageDomain> messageDomainService, IGetResultProxyProvider<TGetStateResultProxy, TResultProxy> getResultProxyProvider, IGetStateProxyConverter<TGetStateResultProxy, TMessageDomain> getStateProxyConverter, IResultConverter<TResultProxy, TResult> resultConverter, ISaveResultService<TResult, TMessageDomain> saveResultService, IGetResultMessageHandler<TMessageDomain, TResult> getResultMessageHandler, IGisLogger logger) { _messageDomainService = messageDomainService; _getResultProxyProvider = getResultProxyProvider; _getStateProxyConverter = getStateProxyConverter; _resultConverter = resultConverter; _saveResultService = saveResultService; _getResultMessageHandler = getResultMessageHandler; _logger = logger; } public void GetResults(CoreInitData coreInitData) { var stopWatch = new Stopwatch(); stopWatch.Start(); try { // var messages = _messageDomainService.GetMessageDomainsForGetResults(coreInitData); foreach (var messageDomain in messages) { try { // getState var getStateProxy = _getStateProxyConverter.ToGetStateResultProxy(messageDomain); TResultProxy resultProxy; // . // false, // true, if (_getResultProxyProvider.TryGetResult(getStateProxy, out resultProxy)) { // - var result = _resultConverter.ToResult(resultProxy); // _saveResultService.SaveResult(result, messageDomain); // _getResultMessageHandler.Success(messageDomain, result); } else { if (messageDomain.SendedDate.HasValue && DateTime.Now.Subtract(messageDomain.SendedDate.Value).Days > GET_RESULT_TIMEOUT_IN_DAYS) { // , _getResultMessageHandler.NoResultByTimeout(messageDomain); } else { //, _getResultMessageHandler.NotReady(messageDomain); } } } catch (Exception exception) { // _getResultMessageHandler.Fail(messageDomain, exception); } } stopWatch.Stop(); _logger.Info(this.GetType(), $" {messages.Count} {coreInitData.UkId} " + $"{messages.Count(x => x.Status == MessageStatus.Done)} , " + $"{messages.Count(x => x.Status == MessageStatus.InProcess)} , " + $"{messages.Count(x => x.Status == MessageStatus.ResponseTakingError)} , " + $"{messages.Count(x => x.Status == MessageStatus.ResponseTakingErrorTryAgain)} , {stopWatch.Elapsed}"); } catch (Exception ex) { _logger.Error(this.GetType(),$" {coreInitData}", ex); } } }
Source: https://habr.com/ru/post/316362/