Для запроса статистик в СПИК существует сервис SpicStatisticsControllerService .
Данный сервис служит для открытия сессии построения статистик, ее закрытия, получения информации о текущей порции статистики и вызова построения следующей порции. Устанавливать настройки построения статистик и забирать уже построенные порции конкретных статистик необходимо через специальные сервисы. Для каждого типа статистики существует отдельный сервис, позволяющий заказать ее построение и впоследствии забрать построенную порцию. Каждая порция содержит статистику за 1 день. Подробное описание контрактов статистик приведено здесь .
Алгоритм запроса статистик выглядит следующим образом.
На рисунке 1 приведена блок схема данного алгоритма, иллюстрирующая вышесказанное.
Рисунок 1 - Блок схема алгоритма
/// <summary>
/// Тип объекта
/// </summary>
public static class ObjectTypeId
{
/// <summary>
/// Терминал
/// </summary>
public static Guid Therminal => new Guid("0783BE26-6398-480C-A88F-871438A01C36");
/// <summary>
/// Транспортное средство
/// </summary>
public static Guid Vehicle => new Guid("0F1E3A4A-88F5-4166-9BE8-76033DD85D0");
/// <summary>
/// Профиль терминала
/// </summary>
public static Guid TherminalProfile => new Guid("54E3C5C5-7EFE-49B9-AE0E-F8C44D52FA36");
}
public SpicTrackPeriodsMileageStatistics[] GetMileageStatistics()
{
// создаем заглушки сервисов
var specificStatisticsClient = new SpicSoapTrackPeriodsMileageStatisticsServiceClient();
var statisticsClient = new SpicSoapStatisticsControllerServiceClient();
// создаем запрос сессии статистик
var statisticsSessionRequest = new SpicStatisticsSessionRequest
{
Period = new SpicDateTimeRange
{
Begin = DateTime.Now.AddDays(-10),
End = DateTime.Now
},
TargetObject = new SpicObjectIdentity
{
ObjectTypeId = ObjectTypeId.Vehicle,
ObjectId = 246
}
};
// отправляем запрос и получаем сессию
var statisticsSession = statisticsClient.StartStatisticsSession(statisticsSessionRequest).Session;
// на самом деле, это один и тот же контракт, но его нужно пересоздать
var specificStatisticsSession = new SpicTrackPeriodsMileageStat.SpicStatisticsSession
{
StatisticsSessionId = statisticsSession.StatisticsSessionId,
};
// добавляем запрос на построение статистики
specificStatisticsClient.AddStatisticsRequest(specificStatisticsSession);
// запускаем построение
statisticsClient.StartBuild(statisticsSession);
var statisticsList = new List<SpicTrackPeriodsMileageStatistics>();
SpicTrackPeriodsMileageStatisticsResult statisticsResponse;
// выполняем, пока не получим последнюю порцию статистик
do
{
// ждем, пока порция статистик построится
do
{
statisticsResponse = specificStatisticsClient.GetStatistics(specificStatisticsSession);
} while (statisticsResponse.ChunkInfo.Status.Value == "Processing");
statisticsList.Add(statisticsResponse.Statistics);
// заказываем следующую порцию статистики
statisticsClient.BuildNextChunk(statisticsSession);
} while (!statisticsResponse.ChunkInfo.IsFinalChunk);
// закрываем сессию построения статистик
statisticsClient.StopStatisticsSession(statisticsSession);
return statisticsList.ToArray();
}
var baseUrl = 'http://localhost:8081/spic/';
var baseTrackPeriodsMileageUrl = baseUrl + 'trackPeriodsMileage/rest/';
var baseStatisticsUrl = baseUrl + 'StatisticsController/rest/';
var startStatisticsSessionUrl = baseStatisticsUrl + 'StartStatisticsSession';
var stopStatisticsSessionUrl = baseStatisticsUrl + 'CancelStatisticsSession';
var getCurrentChunkInfoUrl = baseStatisticsUrl + 'GetCurrentChunkInfo';
var buildNextChunkUrl = baseStatisticsUrl + 'BuildNextChunk';
var startBuildUrl = baseStatisticsUrl + 'StartBuild';
var addStatisticsTrackPeriodMileageRequestUrl = baseTrackPeriodUrl + 'AddStatisticsRequest';
var getStatisticsTrackPeriodMileageUrl = baseTrackPeriodUrl + 'GetStatistics';
var provider = new HttpJsonRequestProvider();
// создаем запрос сессии статистик
var now = new Date();
var statisticsSessionRequest =
{
Period:
{
Begin: new Date(now.getTime() - 24 * 3600 * 1000),
End: now
},
TargetObject:
{
ObjectId: 246
}
};
// отправляем запрос и получаем сессию
var statisticsSession = startStatisticsSession(statisticsSessionRequest);
// добавляем запрос на построение статистики
addStatisticsTrackPeriodMileageRequest(statisticsSession);
// запускаем построение
startBuild(statisticsSession);
var statisticsArray = [];
var statisticsResponse = null;
do {
// ждем, пока порция статистик построится
do {
statisticsResponse = getStatisticsTrackPeriodMileage(statisticsSession);
} while (statisticsResponse.ChunkInfo.Status.Value == "Processing");
statisticsArray.Add(statisticsResponse.Statistics);
// заказываем следующую порцию статистики
buildNextChunk(statisticsSession);
} while (!statisticsResponse.ChunkInfo.IsFinalChunk);
// закрываем сессию построения статистик
stopStatisticsSession(statisticsSession);
function startStatisticsSession(sessionRequest) {
return provider.POSTAuthorized(startStatisticsSessionUrl,
sessionRequest,
getAuthorizationToken()).response;
}
function stopStatisticsSession(session) {
return provider.POSTAuthorized(stopStatisticsSessionUrl,
session,
getAuthorizationToken()).response;
}
function buildNextChunk(session) {
return provider.POSTAuthorized(buildNextChunkUrl,
session,
getAuthorizationToken()).response;
}
function startBuild(session) {
return provider.POSTAuthorized(startBuildUrl,
session,
getAuthorizationToken()).response;
}
function addStatisticsTrackPeriodMileageRequest(session) {
return provider.POSTAuthorized(addStatisticsTrackPeriodMileageRequestUrl,
session,
getAuthorizationToken()).response;
}
function getStatisticsTrackPeriodMileage(session) {
return provider.POSTAuthorized(getStatisticsTrackPeriodMileageUrl,
session,
getAuthorizationToken()).response;
}
Номер материала: 493
Отправлено: Wed, Sep 12, 2018
Последнее обновление: Fri, Apr 3, 2020
Отправлено: Анисимов Максим Михайлович [m.anisimov@scout-gps.ru]
Online URL: https://kb.scout-gps.ru/article/Запрос-статистик-в-СПИК-493.html