/// <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/
All Articles