Ejemplo n.º 1
0
        /// <summary>
        /// Возвращает маппинг Statement на PersonErp
        /// </summary>
        /// <param name="batch">
        /// The batch.
        /// </param>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <returns>
        /// The <see cref="PersonErp"/>.
        /// </returns>
        public PersonErp GetPersonErp(Batch batch, Statement statement)
        {
            var personErp = new PersonErp
            {
                BeginPacket = GetBhs(batch.Id, statement),
                Adt_A01     = new List <ADT_A01>(),
                EndPacket   = GetBts(statement.MedicalInsurances.Count)
            };

            var session        = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();
            var conceptManager = ObjectFactory.GetInstance <IConceptCacheManager>();

            foreach (var insurance in statement.MedicalInsurances)
            {
                // Создаем сообщение
                var message = new Message();
                message.Batch    = batch;
                message.Type     = conceptManager.GetById(model.srz.concepts.TransactionCode.A08);
                message.Reason   = GetReason(statement);
                message.IsCommit = false;
                message.IsError  = false;
                session.Save(message);

                // Связка
                var messageStatement = new MessageStatement();
                messageStatement.Message   = message;
                messageStatement.Statement = statement;
                messageStatement.Type      = conceptManager.GetById(MessageStatementType.MainStatement);
                messageStatement.Version   = statement.Version;
                session.Save(messageStatement);

                personErp.Adt_A01.Add(GetAdtA01(statement, insurance, message));
            }

            return(personErp);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Обработка
        /// </summary>
        /// <param name="file">
        /// Путь к файлу загрузки
        /// </param>
        /// <param name="context">
        /// The context.
        /// </param>
        /// <returns>
        /// был ли обработан пакет
        /// </returns>
        public override bool Processing(FileInfo file, IJobExecutionContext context)
        {
            var logger = LogManager.GetCurrentClassLogger();

            // Попытка десериализации файла
            var personErp = new PersonErp();

            try
            {
                // Десериализация
                personErp = XmlSerializationHelper.Deserialize(file.FullName, personErp) as PersonErp;
            }
            catch (Exception ex)
            {
                // Ошибка десериализации либо создания бачта
                logger.Error(ex.Message, ex);
                throw;
            }

            // Получаем идентификатор батча
            var batchId = Guid.Empty;

            if (personErp != null && personErp.BeginPacket != null)
            {
                Guid.TryParse(personErp.BeginPacket.Identificator, out batchId);
            }

            if (batchId == Guid.Empty)
            {
                logger.Error("Не верный идентификатор пакета. Имя файла: " + file.FullName);
                return(false);
            }

            var session = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();

            if (personErp == null || personErp.AckList == null)
            {
                return(false);
            }

            // Парсим ошибки ФЛК от шлюза
            foreach (var ack in personErp.AckList)
            {
                var messageId = Guid.Empty;
                Guid.TryParse(ack.Msa.ReferenceIdentificator, out messageId);

                // Получаем ссылку на заявление
                var statement =
                    session.QueryOver <Statement>()
                    .JoinQueryOver <MessageStatement>(s => s.MessageStatements)
                    .Where(ms => ms.Message.Id == messageId)
                    .List()
                    .FirstOrDefault();

                if (statement == null)
                {
                    logger.Error("Отсутствует заявление");
                    return(false);
                }

                // Удаляем предыдущие ошибки
                var oldErrors =
                    session.QueryOver <Error>()
                    .Where(x => x.Statement.Id == statement.Id && x.Application.Id == ExchangeSubjectType.Erz)
                    .List();
                foreach (var oldError in oldErrors)
                {
                    session.Delete(oldError);
                }

                session.Flush();

                // Пишем ошибки в Errors
                var wasError = false;
                foreach (var uprErr in personErp.AckList.FirstOrDefault().ErrList)
                {
                    // Пропускаем предупреждения
                    if (uprErr.LevelSeriously != "E")
                    {
                        continue;
                    }

                    // Создаем запись в БД
                    var error = new Error();
                    error.Statement   = statement;
                    error.Application = ObjectFactory.GetInstance <IConceptCacheManager>().GetById(ExchangeSubjectType.Erz);
                    error.Code        = uprErr.ErrorCodeApp.MessageCode;
                    error.Message1    = uprErr.ErrorCodeApp.MessageDescription;
                    error.Repl        = "Ошибки ФЛК шлюза РС";
                    session.Save(error);

                    // Взводим флаг ошибки
                    wasError = true;
                }

                if (wasError)
                {
                    // Меняем статус заявления на отклонено
                    statement.Status = ObjectFactory.GetInstance <IConceptCacheManager>().GetById(StatusStatement.Cancelled);
                    session.Save(statement);

                    // Пишем ошибку в сообщение
                    var message = ObjectFactory.GetInstance <IMessageManager>().GetById(messageId);
                    if (message != null)
                    {
                        message.IsError = true;
                        session.Save(message);
                    }
                }

                // Чистим сессию
                session.Flush();
            }

            return(true);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Сериализация наследников PersonErp
 /// </summary>
 /// <param name="person">
 /// Объект пакета
 /// </param>
 /// <param name="fileName">
 /// Имя файла
 /// </param>
 public static void SerializePersonErp(PersonErp person, string fileName)
 {
     SerializeBasePersonTemplate(person, fileName, "UPRMessageBatch");
 }