Пример #1
0
        // <summary>
        /// Записва ЕИСПП Отговор
        /// </summary>
        /// <param name="correlationId">Идентификатор на съобщение</param>
        /// <param name="htmlCard">Получена карта</param>
        /// <param name="eisppNumber">ЕИСПП номер на Наказателно Производство</param>
        private async Task SaveResponse(string correlationId, string response, string eisppNumber)
        {
            MQEpep mq = null;

            try
            {
                mq = repo.All <MQEpep>()
                     .FirstOrDefault(m => m.MQId == correlationId);

                string           fileName = $"EISPP_Response_{eisppNumber}_{ DateTime.Today.ToString("dd.MM.yyyy_HH:mm:ss") }.xml";
                CdnUploadRequest request  = new CdnUploadRequest()
                {
                    ContentType       = System.Net.Mime.MediaTypeNames.Text.Html,
                    FileContentBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(response)),
                    FileName          = fileName,
                    SourceId          = correlationId, //mq.ParentSourceId.ToString(),
                    SourceType        = IOWebApplication.Infrastructure.Models.ViewModels.Common.SourceTypeSelectVM.Integration_EISPP_Response,
                    Title             = $"ОТГОВОР За Събитие НП: {eisppNumber} към { DateTime.Today.ToString("dd.MM.yyyy") }"
                };

                if (!(await cdnService.MongoCdn_AppendUpdate(request)))
                {
                    logger.LogError("Error in SaveCard with corelationId: {correlationId}!", correlationId);
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error in SaveCard with corelationId: {correlationId}!", correlationId);;
            }

            SetOk(correlationId, mq);
        }
Пример #2
0
        private string GenerateXml(MQEpep mq)
        {
            string text = string.Empty;

            var resultCase = FillCaseAll(mq);

            Transfer result = new Transfer();

            result.program = "EISS";// "ЕИСС";
            result.version = 1.8088;
            result.Case    = resultCase;
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add("", "");
            XmlSerializer x = new XmlSerializer(typeof(Transfer));

            using (var stream = new MemoryStream())
            {
                using (TextWriter writer = new StreamWriter(stream))
                {
                    x.Serialize(writer, result, ns);
                    stream.Position = 0;
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        text = reader.ReadToEnd();
                    }
                }
            }
            return(text);
        }
Пример #3
0
        /// <summary>
        /// Записва ЕИСПП карта
        /// </summary>
        /// <param name="correlationId">Идентификатор на съобщение</param>
        /// <param name="htmlCard">Получена карта</param>
        /// <param name="eisppNumber">ЕИСПП номер на Наказателно Производство</param>
        private async Task SaveCard(string correlationId, string htmlCard, string eisppNumber)
        {
            MQEpep mq = null;

            try
            {
                mq = repo.All <MQEpep>()
                     .FirstOrDefault(m => m.MQId == correlationId);

                string           decodedCard = "<!DOCTYPE html>\n" + WebUtility.HtmlDecode(htmlCard);
                string           fileName    = $"EISPP_Card_{eisppNumber}_{ DateTime.Today.ToString("dd.MM.yyyy") }.html";
                CdnUploadRequest request     = new CdnUploadRequest()
                {
                    ContentType       = System.Net.Mime.MediaTypeNames.Text.Html,
                    FileContentBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(decodedCard)),
                    FileName          = fileName,
                    SourceId          = mq.ParentSourceId.ToString(),
                    SourceType        = IOWebApplication.Infrastructure.Models.ViewModels.Common.SourceTypeSelectVM.Integration_EISPP_CardNP,
                    Title             = $"КАРТА ЗА СЪСТОЯНИЕ НА НП: {eisppNumber} към { DateTime.Today.ToString("dd.MM.yyyy") }"
                };

                if (!(await cdnService.MongoCdn_AppendUpdate(request)))
                {
                    logger.LogError("Error in SaveCard with corelationId: {correlationId}!", correlationId);
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error in SaveCard with corelationId: {correlationId}!", correlationId);;
            }

            SetOk(correlationId, mq);
        }
Пример #4
0
        public CaseType FillCaseAll(MQEpep model)
        {
            var caseAll = repo.AllReadonly <Case>()
                          .Include(x => x.Document)
                          .Include(x => x.CaseSessions)
                          .ThenInclude(x => x.CaseSessionActs)
                          .ThenInclude(x => x.CaseSessionActComplains)
                          .ThenInclude(x => x.ComplainDocument)
                          .ThenInclude(x => x.DocumentPersons)
                          .Include(x => x.CaseSessions)
                          .ThenInclude(x => x.CaseSessionActs)
                          .ThenInclude(x => x.ActComplainIndex)
                          .Include(x => x.CaseSessions)
                          .ThenInclude(x => x.CaseSessionResults)
                          .Include(x => x.CasePersons)
                          .Include(x => x.CaseLawUnits)
                          .ThenInclude(x => x.LawUnit)
                          .Where(x => x.Id == model.ParentSourceId)
                          .FirstOrDefault();

            var compliantDocuments = repo.AllReadonly <Document>()
                                     .Include(x => x.DocumentPersons)
                                     .Where(x => x.DocumentCaseInfo.Where(a => a.CaseId == caseAll.Id).Any())
                                     .Where(x => x.DocumentGroup.DocumentKindId == DocumentConstants.DocumentKind.CompliantDocument)
                                     .ToList();

            var migrations = repo.AllReadonly <CaseMigration>()
                             .Include(x => x.OutDocument)
                             .Where(x => x.CaseId == caseAll.Id)
                             .Where(x => x.CaseSessionActId != null)
                             .Where(x => x.OutDocumentId != null)
                             .ToList();

            return(FillCase(caseAll, compliantDocuments, migrations));
        }
Пример #5
0
 public new void SetErrorToMQ(MQEpep mq, int integrationState, string errorDescription)
 {
     mq.ErrorCount         = (mq.ErrorCount ?? 0) + 1;
     mq.IntegrationStateId = integrationState;
     mq.ErrorDescription   = errorDescription;
     repo.Update(mq);
     repo.SaveChanges();
 }
Пример #6
0
        protected bool RemoveIntegrationKeys(MQEpep mq)
        {
            var keys = repo.All <IntegrationKey>()
                       .Where(x => x.IntegrationTypeId == mq.IntegrationTypeId && x.SourceId == mq.SourceId && x.SourceType == mq.SourceType)
                       .ToList();

            repo.DeleteRange(keys);
            return(repo.SaveChanges() > 0);
        }
Пример #7
0
        private async Task SendSelectionProtokol(MQEpep mq)
        {
            try
            {
                var model = await initModel((int)mq.SourceId);

                //HttpRequester http = new HttpRequester();
                //http.ValidateServerCertificate = false;
                //http.CertificatePath = this.CertificatePath;
                //http.CertificatePassword = this.CertificatePassword;

                //var response = http.PostAsync(serviceUri.AbsoluteUri, model).Result;
                var response = await requester.PostAsync(serviceUri.AbsoluteUri, model);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(content))
                    {
                        long assignmentId = long.Parse(content);
                        if (assignmentId > 0)
                        {
                            mq.IntegrationStateId = IntegrationStates.TransferOK;
                            mq.DateTransfered     = DateTime.Now;
                            mq.ReturnGuidId       = assignmentId.ToString();
                            repo.Update(mq);
                            repo.SaveChanges();
                            return;
                        }
                    }
                }
                else
                {
                    logger.LogError("CSRDService: Responce code:{code}, Message: {message}, MqID: {id}", response.StatusCode, response.ReasonPhrase, mq.Id);
                    mq.ErrorDescription = "Грешка при извикване на услуга към ЦСРД";
                }
                SetErrorToMQ(mq, IntegrationStates.TransferError);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);
                var innerException = ex.InnerException;

                while (innerException != null)
                {
                    logger.LogError(innerException.Message);

                    innerException = innerException.InnerException;
                }

                mq.ErrorDescription = ex.Message;
                SetErrorToMQ(mq, IntegrationStates.TransferError);
            }
        }
Пример #8
0
        private void AppendTimeElapsed(MQEpep model)
        {
            if (!startTime.HasValue)
            {
                return;
            }

            TimeSpan ts = DateTime.Now - startTime.Value;

            model.ErrorDescription = $"Elapsed:{ts.TotalSeconds:N3}s; {model.ErrorDescription}";
        }
Пример #9
0
 public void UpdateMQ(MQEpep mq, bool result)
 {
     if (result)
     {
         UpdateMQ(mq, Guid.NewGuid());
     }
     else
     {
         UpdateMQ(mq, null);
     }
 }
Пример #10
0
        protected override async Task SendMQ(MQEpep mq)
        {
            switch (mq.SourceType)
            {
            case SourceTypeSelectVM.CaseSessionAct:
                await SendAct(mq);

                break;

            default:
                break;
            }
        }
Пример #11
0
        protected override async Task SendMQ(MQEpep mq)
        {
            switch (mq.SourceType)
            {
            case SourceTypeSelectVM.CaseSelectionProtokol:
                await SendSelectionProtokol(mq);

                break;

            default:
                break;
            }
        }
Пример #12
0
 public void UpdateMQ(MQEpep mq, Guid?id)
 {
     if (id.HasValue)
     {
         mq.DateTransfered     = DateTime.Now;
         mq.IntegrationStateId = IntegrationStates.TransferOK;
         repo.Update(mq);
         repo.SaveChanges();
     }
     else
     {
         SetErrorToMQ(mq, IntegrationStates.TransferError);
     }
 }
Пример #13
0
        /// <summary>
        /// Обновява съдържанието и статуса на ЕИСПП съобщение
        /// </summary>
        /// <param name="mq">Обект от опашката</param>
        /// <param name="message">Сериализиран ЕИСПП пакет</param>
        private void MarkAsSent(MQEpep mq, string message)
        {
            try
            {
                mq.DateTransfered     = DateTime.Now;
                mq.IntegrationStateId = EpepConstants.IntegrationStates.WaitingForReply;
                mq.Content            = Encoding.UTF8.GetBytes(message);

                repo.Update(mq);
                repo.SaveChanges();
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error in SetOK with MQId: {MQId}!", mq.Id);
            }
        }
Пример #14
0
        private async Task SendAct(MQEpep mq)
        {
            try
            {
                var actModel = await initModel((int)mq.SourceId);

                await serviceClient.SendActAsync(actModel);

                //serviceClient.DeleteAct(actModel);

                UpdateMQ(mq, true);
            }
            catch (Exception ex)
            {
                SetErrorToMQ(mq, IntegrationStates.TransferError, ex.Message);
            }
        }
Пример #15
0
        /// <summary>
        /// Записва грешка
        /// </summary>
        /// <param name="correlationId">Идентификатора на съобщението</param>
        /// <param name="exception">Възникнала грешка</param>
        private void SetError(string correlationId, string exception)
        {
            try
            {
                MQEpep mq = repo.All <MQEpep>()
                            .FirstOrDefault(m => m.MQId == correlationId);

                mq.IntegrationStateId = EpepConstants.IntegrationStates.ReplyContainsError;
                mq.ErrorDescription   = exception;

                repo.SaveChanges();
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error in SetError with corelationId: {correlationId}, error: {exception}!", correlationId, exception);
            }
        }
Пример #16
0
        protected bool AddIntegrationKey(MQEpep mq, Guid?Id)
        {
            if (Id.HasValue)
            {
                if (AddIntegrationKey(mq.SourceType, mq.SourceId, Id.ToString()))
                {
                    mq.IntegrationStateId = IntegrationStates.TransferOK;
                    mq.DateTransfered     = DateTime.Now;
                    mq.ReturnGuidId       = Id.ToString();
                    AppendTimeElapsed(mq);
                    repo.Update(mq);

                    switch (mq.SourceType)
                    {
                    case SourceTypeSelectVM.EpepUser:
                        var epepUser = repo.GetById <EpepUser>((int)mq.SourceId);
                        epepUser.EpepId = Id;
                        repo.Update(epepUser);
                        break;

                    case SourceTypeSelectVM.EpepUserAssignment:
                        var epepUserAssignment = repo.GetById <EpepUserAssignment>((int)mq.SourceId);
                        epepUserAssignment.EpepId = Id;
                        repo.Update(epepUserAssignment);
                        break;

                    default:
                        break;
                    }
                    repo.SaveChanges();

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                SetErrorToMQ(mq, IntegrationStates.TransferError);
                return(false);
            }
        }
Пример #17
0
        /// <summary>
        /// Маркира трансфера като успешен
        /// </summary>
        /// <param name="correlationId">Идентификатора на съобщението</param>
        private void SetOk(string correlationId, MQEpep mq = null)
        {
            try
            {
                if (mq == null)
                {
                    mq = repo.All <MQEpep>()
                         .FirstOrDefault(m => m.MQId == correlationId);
                }

                mq.IntegrationStateId = IntegrationStates.TransferOK;

                repo.SaveChanges();
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error in SetOK with corelationId: {correlationId}!", correlationId);
            }
        }
Пример #18
0
        /// <summary>
        /// Отменя всички неприключили заявки за добавяне/редакция на същия обект по-стари от заявката за изтриване
        /// </summary>
        /// <param name="mq"></param>
        protected void RemoveUnfinishedTasksBeforeDelete(MQEpep mq)
        {
            var editItem = repo.All <MQEpep>()
                           .Where(x => x.IntegrationTypeId == mq.IntegrationTypeId && x.SourceId == mq.SourceId && x.SourceType == mq.SourceType)
                           .Where(x => EpepConstants.IntegrationStates.UnfinishedMQStates.Contains(x.IntegrationStateId ?? 0))
                           .Where(x => EpepConstants.Methods.EditMethods.Contains(x.MethodName))
                           .Where(x => x.Id < mq.Id)
                           .ToList();

            if (editItem.Any())
            {
                foreach (var item in editItem)
                {
                    item.IntegrationStateId = EpepConstants.IntegrationStates.DisabledByDelete;
                    item.ErrorDescription   = $"Отменено поради заявка за изтриване с id={mq.Id}";
                    repo.Update(item);
                }
                repo.SaveChanges();
            }
        }
Пример #19
0
 public void SetErrorToMQ(MQEpep mq, int integrationState, string errorDescription = null)
 {
     if (IntegrationStates.ReturnToMQStates.Contains(integrationState))
     {
         if (mq.ErrorCount < IntegrationMaxErrorCount)
         {
             mq.ErrorCount = (mq.ErrorCount ?? 0) + 1;
         }
         else
         {
             integrationState = IntegrationStates.TransferErrorLimitExceeded;
         }
     }
     mq.IntegrationStateId = integrationState;
     if (!string.IsNullOrEmpty(errorDescription))
     {
         mq.ErrorDescription = errorDescription;
     }
     repo.Update(mq);
     repo.SaveChanges();
 }
Пример #20
0
        public async Task TestMQ()
        {
            var model = new MQEpep();

            model.ParentSourceId = 561;
            var resultCase = FillCaseAll(model);

            Transfer result = new Transfer();

            result.program = "ЕИСС";
            result.version = 1.8088;
            result.Case    = resultCase;

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add("", "");

            XmlSerializer x      = new XmlSerializer(typeof(Transfer));
            var           stream = new MemoryStream();
            TextWriter    writer = new StreamWriter(stream);

            x.Serialize(writer, result, ns);
            stream.Position = 0;
            StreamReader reader = new StreamReader(stream);
            string       text   = reader.ReadToEnd();

            HttpRequester http      = new HttpRequester();
            var           uploadUrl = new Uri(""); //още не работи
            var           response  = await http.PostAsync(uploadUrl.AbsoluteUri, text);

            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
            }
            else
            {
            }
        }
Пример #21
0
 protected virtual async Task SendMQ(MQEpep mq)
 {
 }
Пример #22
0
 protected override async Task SendMQ(MQEpep mq)
 {
     var result = FillCaseAll(mq);
 }
Пример #23
0
        protected override async Task SendMQ(MQEpep mq)
        {
            string text = mq.Content == null ? "" : Encoding.UTF8.GetString(mq.Content);

            if (string.IsNullOrEmpty(text))
            {
                using (var scope = new TransactionScope())
                {
                    text       = GenerateXml(mq);
                    mq.Content = Encoding.UTF8.GetBytes(text);
                    repo.Update(mq);
                    repo.SaveChanges();
                    scope.Complete();
                }
            }

            var response = await requester.PostAsyncTextXml(uploadUrl.AbsoluteUri, text);

            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                XElement result = null;
                if (!string.IsNullOrEmpty(content))
                {
                    XDocument message = XDocument.Parse(content);
                    result = message?.Element("response")?.Element("success");
                }
                else
                {
                    content = "Получен е празен резултат от ИСПН";
                }
                if (result != null)
                {
                    mq.IntegrationStateId = IntegrationStates.TransferOK;
                    mq.DateTransfered     = DateTime.Now;
                    mq.Content            = Encoding.UTF8.GetBytes(text);
                    repo.Update(mq);
                    repo.SaveChanges();
                    if (caseMq != null)
                    {
                        var mqHash = caseMq.FirstOrDefault(x => x.Id == mq.Id);
                        mqHash.Content            = mq.Content;
                        mqHash.IntegrationStateId = mq.IntegrationStateId;
                    }
                    string           fileName = $"Ispn_{mq.Id}_{ DateTime.Today:dd.MM.yyyy}.xml";
                    CdnUploadRequest request  = new CdnUploadRequest()
                    {
                        ContentType       = System.Net.Mime.MediaTypeNames.Text.Html,
                        FileContentBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(content)),
                        FileName          = fileName,
                        SourceId          = mq.ParentSourceId.ToString(),
                        SourceType        = SourceTypeSelectVM.Integration_ISPN,
                        Title             = $"Отговор към { DateTime.Today:dd.MM.yyyy}"
                    };

                    if (!(await cdnService.MongoCdn_AppendUpdate(request)))
                    {
                        logger.LogError("Error in SaveContent ISPN mqId {mq.Id}!", mq.Id.ToString());
                    }
                }
                else
                {
                    SetErrorToMQ(mq, IntegrationStates.DataContentError, content);
                }
            }
            else
            {
                throw new Exception($"Error {response.StatusCode} : {response.ReasonPhrase}  sending message ISPN!");
            }
        }
Пример #24
0
        /// <summary>
        /// Изпраща съобщение до ЕИСПП
        /// </summary>
        /// <param name="mq">Съобщение от опашката</param>
        protected override async Task SendMQ(MQEpep mq)
        {
            try
            {
                string message        = null;
                bool   isReadyMessage = false;
                if (mq.Content != null)
                {
                    message = Encoding.UTF8.GetString(mq.Content);
                    // isReadyMessage = true;
                }
                else
                {
                    var eisppEventItem = repo.AllReadonly <EisppEventItem>()
                                         .Where(x => x.MQEpepId == mq.Id)
                                         .FirstOrDefault();
                    if (!string.IsNullOrEmpty(eisppEventItem.RequestXML))
                    {
                        isReadyMessage = true;
                        message        = eisppEventItem.RequestXML;
                    }
                    else
                    {
                        var model = JsonConvert.DeserializeObject <EisppPackage>(eisppEventItem.RequestData);
                        eisppRulesService.SetIsSelectedAndClear(model);
                        message = XmlUtils.SerializeEisppPackage(model);
                    }
                }
                if (!isReadyMessage)
                {
                    if (message.StartsWith(byteOrderMarkUtf8, StringComparison.Ordinal))
                    {
                        message = message.Remove(0, byteOrderMarkUtf8.Length);
                    }

                    EisppPackage package = XmlUtils.DeserializeXml <EisppPackage>(message);

                    if (package != null)
                    {
                        var eisppEvent = package.Data.Events.Where(x => x.EventKind == EventKind.NewEvent).FirstOrDefault();
                        if (eisppEvent == null && package.Data.Events.Length > 0)
                        {
                            eisppEvent = package.Data.Events[0];
                        }
                        var structureId = eisppEvent.StructureId;
                        var eventType   = eisppEvent.EventType;

                        package.CorrelationId     = mq.MQId;
                        package.SenderNode        = senderNode;
                        package.ReceiverNode      = receiverNode;
                        package.ReceiverStructure = receiverStructure;
                        package.MessageType       = messageType;

                        int eventTypeResSid = eventType;
                        var eisppEventOld   = package.Data.Events.Where(x => x.EventKind == EventKind.OldEvent).FirstOrDefault();
                        if (eisppEventOld?.EventType > 0)
                        {
                            eventTypeResSid = EventType.DeleteEvent;
                            if (eisppEvent.EventKind == EventKind.NewEvent)
                            {
                                eventTypeResSid = EventType.ChangeEvent;
                            }
                        }

                        package.Data.Context = new Context()
                        {
                            StructureId = structureId,
                            EventDate   = eisppEvent.EventDate,
                            EventType   = eventType > 0 ? eventType : 0,
                            ResourceId  = eisppRulesService.GetResSidFromRules(eventTypeResSid)
                        };
                        if (package.Data.Context.ResourceId <= 0)
                        {
                            package.Data.Context.ResourceId = GetNomValueInt(EISPPConstants.EisppMapping.ResSid, eisppEvent.CriminalProceeding.Case.LegalProceedingType);
                        }

                        if (package.Data?.Context != null)
                        {
                            package.Data.Context.WorkingMode  = workingMode;
                            package.Data.Context.UserSystemId = userSystemId;
                            package.Data.Context.WorkPlaceId  = workPlaceId;
                        }
                        else
                        {
                            throw new ArgumentException("Context is required");
                        }

                        foreach (var eisppEventItem in package.Data.Events)
                        {
                            if (eisppEventItem.CriminalProceeding?.Case?.Persons == null)
                            {
                                continue;
                            }
                            foreach (var person in eisppEventItem.CriminalProceeding.Case.Persons)
                            {
                                if (person.BirthPlace != null)
                                {
                                    if ((person.BirthPlace.SettelmentAbroad == "0" || string.IsNullOrEmpty(person.BirthPlace.SettelmentAbroad)) &&
                                        person.BirthPlace.SettelmentBg == 0 && person.BirthPlace.PlaceId == 0)
                                    {
                                        person.BirthPlace = null;
                                    }
                                }
                            }
                        }

                        if (eventType == EventType.GetCase)
                        {
                            eisppEvent.CriminalProceeding.Case.CaseSetupType       = -1;
                            eisppEvent.CriminalProceeding.Case.LegalProceedingType = -1;
                        }

                        message = XmlUtils.SerializeEisppPackage(package);
                        message = await eisppRulesService.ApplyRules(structureId, message, eventType);
                    }
                    else
                    {
                        message = string.Empty;
                    }
                }
                if (!string.IsNullOrEmpty(message))
                {
                    mq.Content = Encoding.UTF8.GetBytes(message);
                    if (await Send(message))
                    {
                        MarkAsSent(mq, message);
                    }
                    else
                    {
                        throw new ApplicationException("Error sending message!");
                    }
                }
                else
                {
                    throw new ArgumentException("At least one Event is required");
                }
            }
            catch (InvalidOperationException iop)
            {
                throw new ArgumentException("The content is not a valid EISPP package", iop);
            }
        }