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); }