Exemplo n.º 1
0
        protected override bool ActionBody(BaseProcess action)
        {
            bool isProcessed = true;

            try {
                messageGenerator = GetService <IMercuryMessageBodyGenerator>();

                int  pageSize     = GetValue <int>(ARG_PAGE_SIZE);
                int  pageCount    = GetValue <int>(ARG_PAGE_COUNT);
                int  pageStart    = GetValue <int>(ARG_PAGE_START);
                Guid enterpriseId = GetValue <Guid>(ARG_PAGE_ENTERPRISE_ID);
                operationName = GetValue <string>(ARG_OPERATION_NAME);
                mercuryLogin  = GetValue <string>(ARG_MERCURY_LOGIN);
                string suffix    = GetValue <string>(ARG_SUFFIX);
                int?   iteration = GetValue <int?>(ARG_ITERATION);

                DateTimeOffset?beginDate = GetValue <DateTimeOffset?>(ARG_BEGIN_DATE);
                DateTimeOffset?endDate   = GetValue <DateTimeOffset?>(ARG_END_DATE);

                LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Начало формирования запросов в систему Меркурий.");

                #region Проверка параметров
                if (pageCount <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Количество страниц должно быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Количество страниц должно быть > 0");
                }
                if (pageSize <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Размер страниц должно быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Размер страниц должно быть > 0");
                }
                if (pageStart <= 0)
                {
                    isProcessed = false;
                    LocalContext.SaveLog($" Начальная страница должна быть > 0.");
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Начальная страница должна быть > 0");
                }
                Document enterpriseDoc = LocalReader.LoadDocumentByType(enterpriseId, "Enterprise");

                string enterpriseGUID = (string)enterpriseDoc["GUID"];
                string enterpriseCode = (string)enterpriseDoc["Code"];

                if (enterpriseDoc == null)
                {
                    isProcessed = false;
                    AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.VALID_NO_ENTERPRISE, $"Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}");
                    LocalContext.SaveLog($" Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}.");
                }
                #endregion

                if (isProcessed)
                {
                    List <StepContext> steps = new List <StepContext>();
                    LocalContext.SaveLog($" Площадка для формирования запросов {enterpriseCode}.");
                    LocalContext.SaveLog($" Стартовая страница {pageStart}, количество страниц для получения {pageCount}, размер страницы {pageSize}.");
                    for (int i = 0; i < pageCount; i++)
                    {
                        LocalContext.SaveLog($" Формирование страницы {(i + pageStart - 1) * pageSize} - {(i + pageStart) * pageSize}.");

                        StepContext requestContext = CreateStep(QueryId, MQSOperationType.COMMUNICATE);
                        requestContext.MercuryQueueStep.Status = MQSStatus.NEW;
                        if (iteration.HasValue)
                        {
                            requestContext.MercuryQueueStep.StepId = "0.0_" + iteration.Value.ToString("D3");
                        }
                        else
                        {
                            requestContext.MercuryQueueStep.StepId = "0.0";
                        }
                        requestContext.MercuryQueueStep.StepNo         = LocalContext.MercuryQueueStep.StepNo + 1;
                        requestContext.MercuryQueueStep.StepName       = Consts.STEP_NAME_MERCURY_COMMUNICATE;
                        requestContext.MercuryQueueStep.Description    = "Сформирован запрос";
                        requestContext.MercuryQueueStep.OperationGroup = Consts.OP_GROUP_CHECK_FOR_COMPLETED_OUTBOUND + suffix;
                        requestContext.GenerateFileNames(operationName);
                        var req = GenerateRequest(i + pageStart, pageSize, LocalContext.MercurySettings, mercuryLogin,
                                                  enterpriseGUID, enterpriseCode, beginDate, endDate);
                        requestContext.SaveRequest(req);
                        var args = new Dictionary <string, ActionArgument>();
                        args.Add("PageNo", new ActionArgument(typeof(int), "PageNo", i));
                        requestContext.MercuryQueueStep.Parameters = ArgumentSerializer.SerializeArguments(args);
                        steps.Add(requestContext);
                        LocalContext.SaveLog($" Страница {i + pageStart - 1} сформирована.");
                    }

                    // Сохранение информации о сгенерированных запросах
                    using (IDatabaseConnector connector = GetService <IDatabaseConnector>()) {
                        IMercuryQueueStepService transactionPersist = this.GetService <IMercuryQueueStepService>(connector);
                        transactionPersist.RegisterSteps(steps);
                        transactionPersist.SaveFinish(LocalContext.MercuryQueueStep.Id, MQSStatus.COMPLETE, "Выполнено формирование запросов.", DateTimeOffset.UtcNow);
                        connector.Commit();
                        breakAutosave = true;
                        SetValue("Status", MQSStatus.COMPLETE);
                    }
                }
                else
                {
                    LocalContext.SaveLog($" Заданы не все параметры для формирования запроса(-ов).");
                    LocalContext.SaveLog($" Операция отменена.");
                    ResultDescription = "Ошибка. Не верные параметры.";
                }
            } catch (Exception e) {
                isProcessed = false;
                AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_MIP, UserErrorConsts.StockList.RTE_MAKE_REQUEST, UserErrorConsts.DEFAULT_LAS_SUPPRT_ERROR);
                ResultDescription = "Ошибка процесса формирования запросов в систему 'Меркурий'.";
                LocalContext.SaveLog(e.ToString());
            }
            LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Окончание формирования запросов в систему 'Меркурий'.");
            return(isProcessed);
        }