Работа с планированием
Создание планирования
Общее описание
Функция POST /v6/api/planningManagement/plannings позволяет создать планирование задач.
Указанные в запросе задачи будут распределены между выбранными абонентами, а также будет предложена последовательность их выполнения.
Планирование задач для Сотрудников доступно на тарифах «Премиум» и «Платинум» при подключенной опции «Автопланирование».
Параметры вызова
| Параметр | Описание |
|---|---|
| planningDate | Дата и время планирования (обязательный параметр). Подробнее о формате времени |
| planningInterval | Продолжительность планирования в днях (обязательный параметр). |
| withDetailedRoutes | Опция формирования детального маршрута выполнения задач:
|
| withVerification | Проверка попадания даты начала задачи в интервал планирования:
|
| ignoreAllRestrictions | Учет ограничительных критериев (рабочее время, компетенции и пр.). Параметр действует, если isRearrangement = true:
|
| isRearrangement | Требуется ли пересчет маршрута:
|
| solutionCount | Количество вариантов решений маршрутов: 1, 2 или 3. Передается только при планировании на один день. |
| zoneIDs | ИД гео-зон. Подробнее о передаче нескольких идентификаторов |
| competenceIDs | ИД компетенций. Подробнее о передаче нескольких идентификаторов |
| Сотрудники, между которыми распределяются задачи (subscribers) | |
| subscriberID | ИД Сотрудника (обязательный параметр). |
| latitude | Географическая широта начальной точки Сотрудника. Если параметр не передан, используются актуальные или заданные в настройках координаты. |
| longitude | Географическая долгота начальной точки Сотрудника. Если параметр не передан, используются актуальные или заданные в настройках координаты. |
| Задачи для планирования (tasks) | |
| taskID | ИД задачи. |
| priority | Приоритет задачи. При равных приоритетах распределение происходит по оптимальному маршруту. |
| preferredPositionInRoute | Позиция задачи в маршруте (1–10). Если параметр передан, задача обязательно включается в маршрут (переопределяет isMandatoryInRoute). |
| isMandatoryInRoute | Обязательность включения задачи в маршрут:
|
| Параметры переопределения настроек шаблона планирования (inputSettings). Передаются в формате ключ/значение. | |
| calculationTimeout | Максимальное время расчета планирования (в секундах). |
| isRoundTrip | Требуется ли возврат Сотрудника в исходную точку:
|
| isHomeZoneTasksPreferred | Нужно ли сначала назначать задачи из основной гео-зоны:
|
| automaticClusteringEnabled | Кластеризация задач по гео-зонам. Существуют следующие значения:
|
| automaticClusteringWithAdditionalZones | Нужно ли после кластеризации назначать абонентам дополнительные гео-зоны других Сотрудников. Существуют следующие значения:
|
| automaticClusteringNearestZonesDelta | Дельта учета ближайших дополнительных зон (в градусах, 1 градус ≈111 км). |
| automaticClusteringZonesStartPoint | Выбор начальной точки для алгоритма кластеризации. Существуют следующие значения:
|
| automaticClusteringWithPointApproximation | Аппроксимация центров зон по задачам при кластеризации для использования матрицы расстояний. Существуют следующие значения:
|
| maxSubscriberRouteDistance | Максимальное расстояние, которое может быть преодолено абонентом за весь маршрут (в километрах). |
| routerType | Тип маршрута. Существуют следующие значения:
|
Результат выполнения
При успешном выполнении возвращается статус 201.
Функция возвращает структуру со следующими параметрами заявки:
| Параметр | Описание |
|---|---|
| planningID | ИД планирования |
| planningDate | Дата и время планирования (подробнее о формате времени). |
| planningInterval | Продолжительность планирования (дни) |
| withDetailedRoutes | Опция формирования детального маршрута выполнения задач. Существуют следующие значения:
|
| withVerification | Проверка даты начала задачи на попадание в указанный интервал планирования. Существуют следующие значения:
|
| ignoreAllRestrictions | Учет ограничительных критериев при планировании (например, рабочее время, компетенции). Существуют следующие значения:
|
| isRearrangement | Необходимо ли пересчитать маршрут планирования. Существуют следующие значения:
|
| solutionCount | Количество вариантов решений по маршрутам. Возможные значения — 1, 2, 3. |
| zoneIDs | ИД гео-зон. |
| competenceIDs | ИД компетенций. |
| Ошибки, возникшие при планировании задач (warnings) | |
| сode | Ошибка назначения задач (описание ошибок ) |
| entityID | ИД сущности, по которой возникла ошибка |
| message | Текст ошибки |
| Абоненты, между которыми надо распределить задачи (subscribers) | |
| subscriberID | ИД Сотрудника |
| latitude | Географическая широта начальной точки Сотрудника (в градусах) |
| longitude | Географическая долгота начальной точки Сотрудника (в градусах) |
| Задачи для планирования (tasks) | |
| taskID | ИД задачи |
| priority | Приоритет задачи. Чем выше приоритет, тем раньше будет задача в очереди на выполнение. |
| preferredPositionInRoute | Порядок задачи в маршруте. Допустимые значения: от 1 до 10. Если параметр передан, то задача обязательно будет поставлена в маршрут (переопределяет параметр isMandatoryInRoute). |
| isMandatoryInRoute | Должна ли задача быть обязательно поставлена в маршрут. Существуют следующие значения:
|
| Параметры для переопределения настроек шаблона планирования (inputSettings) | |
| calculationTimeout | Максимальное время для расчета планирования (в секундах). |
| isRoundTrip | Нужно ли Сотруднику в конце возвращаться в исходную точку. Существуют следующие значения:
|
| isHomeZoneTasksPreferred | Нужно ли Сотруднику назначать задачи сначала из основной гео-зоны. Существуют следующие значения:
|
| automaticClusteringEnabled | Кластеризация задач по гео-зонам. Существуют следующие значения:
|
| automaticClusteringWithAdditionalZones | Нужно ли после кластеризации назначать абонентам дополнительные гео-зоны других Сотрудников. Существуют следующие значения:
|
| automaticClusteringNearestZonesDelta | Дельта учета ближайших дополнительных зон (в градусах, 1 градус ≈111 км). |
| automaticClusteringZonesStartPoint | Выбор начальной точки для алгоритма кластеризации. Существуют следующие значения:
|
| automaticClusteringWithPointApproximation | Аппроксимация центров зон по задачам при кластеризации для использования матрицы расстояний. Существуют следующие значения:
|
| maxSubscriberRouteDistance | Максимальное расстояние, которое может быть преодолено абонентом за весь маршрут (в километрах). |
Формат запроса
POST /v6/api/planningManagement/plannings HTTP/1.1
Host: host
Authorization: Bearer token
\{
"planningDate": "dateTime",
"planningInterval": integer,
"subscribers": [
\{
"subscriberID": integer,
"latitude": number,
"longitude": number
}
],
"tasks": [
\{
"taskID": integer,
"priority": integer,
"preferredPositionInRoute": integer,
"isMandatoryInRoute": boolean
}
],
"inputSettings": [
\{
"name": "string",
"value": "string"
}
],
"withDetailedRoutes": boolean,
"withVerification": boolean,
"ignoreAllRestrictions": boolean,
"isRearrangement": boolean,
"solutionCount": integer,
"zoneIDs": [
integer
],
"competenceIDs": [
integer
]
}Пример запроса
POST /v6/api/planningManagement/plannings HTTP/1.1
Host: api.mpoisk.ru
Authorization: Bearer token
\{
"planningDate": "2020-12-09T11:02:11Z",
"planningInterval": 1,
"subscribers": [
\{
"subscriberID": 1,
"latitude": 37.61775044433594,
"longitude": 55.735528725106505
},
\{
"subscriberID": 2,
"latitude": 37.61775044433512,
"longitude": 55.735858725106505
}
],
"tasks": [
\{
"taskID": 1,
"priority": 0,
"preferredPositionInRoute": 1,
"isMandatoryInRoute": true
},
\{
"taskID": 2,
"priority": 1
"preferredPositionInRoute": 2,
},
\{
"taskID": 3,
"priority": 2
}
],
"inputSettings": [
\{
"name": "isRoundTrip",
"value": "true"
}
],
"withDetailedRoutes": true,
"withVerification": true,
"ignoreAllRestrictions": false,
"isRearrangement": false,
"solutionCount": 1,
"zoneIDs": [
1
],
"competenceIDs": [
1
]
}Формат ответа
\{
"planningID": integer,
"warnings": [
\{
"code": "string",
"entityID": integer,
"message": "string"
}
],
"planningDate": "dateTime",
"planningInterval": integer,
"subscribers": [
\{
"subscriberID": integer,
"latitude": number,
"longitude": number
}
],
"tasks": [
\{
"taskID": integer,
"priority": integer,
"preferredPositionInRoute": integer,
"isMandatoryInRoute": boolean
}
],
"inputSettings": [
\{
"name": "string",
"value": "string"
}
],
"withDetailedRoutes": boolean,
"withVerification": boolean,
"ignoreAllRestrictions": boolean,
"isRearrangement": boolean,
"solutionCount": integer,
"zoneIDs": [
integer
],
"competenceIDs": [
integer
]
}Пример ответа
\{
"planningID": 1,
"warnings": [
\{
"code": "NO_SUB_WITH_FREE_WORK_SCHEDULE_FOR_TASK",
"entityID": 3,
"message": "No subscribers with free work schedule for task 1"
}
],
"planningDate": "2020-11-19",
"planningInterval": 2,
"tasks": [
\{
"taskID": 1,
"priority": 0,
"preferredPositionInRoute": 1,
"isMandatoryInRoute": true
},
\{
"taskID": 2,
"priority": 1,
"preferredPositionInRoute": 2,
},
\{
"taskID": 3,
"priority": 2
}
],
"inputSettings": [
\{
"name": "isRoundTrip",
"value": "true"
}
],
"withDetailedRoutes": true,
"withVerification": true,
"ignoreAllRestrictions": false,
"isRearrangement": false,
"solutionCount": 1,
"zoneIDs": [
1
],
"competenceIDs": [
1
]
}Получение результата планирования
Общее описание
Функция GET /v6/api/planningManagement/plannings/{planningID}/results позволяет получить результаты планирования по его идентификатору.
Параметры вызова
В запросе используется обязательный параметр planningID — идентификатор планирования.
Результат выполнения
Функция возвращает структуру со следующими параметрами заявки:
| Параметр | Описание |
|---|---|
| planningID | ИД планирования |
| status | Дата и время планирования |
| progress | Прогресс завершения планирования (в процентах) |
| Ошибки, возникшие при планировании задач (warnings) | |
| code | Ошибка назначения задач |
| entityID | ИД сущности, по которой возникла ошибка |
| message | Текст ошибки |
| Результат планирования (solutions) | |
| name | Название планирования |
| planningDate | Дата и время планирования (подробнее о формате времени). |
| solutionUUID | UUID варианта решения по маршруту |
| Маршруты планирования (routes) | |
| subscriberID | ИД Сотрудника |
| Последовательность выполнения задач (visits) | |
| taskID | ИД задачи |
| arrival | Дата и время начала выполнения задачи (подробнее о формате времени). |
| finish | Дата и время завершения задачи (ко времени начала задачи добавляется указанное время выполнения, подробнее о формате времени) |
| Детальный маршрут выполнения задачи (detailedRoute) | |
| routeItemID | ИД отрезка маршрута |
| points | Широта и долгота каждой точки маршрута |
Формат запроса
GET /v6/api/planningManagement/plannings/\{planningID}/results HTTP/1.1
Host: host
Authorization: Bearer tokenПример запроса
GET /v6/api/planningManagement/plannings/1/results HTTP/1.1
Host: api.mpoisk.ru
Authorization: Bearer tokenФормат ответа
\{
"planningID": integer,
"status": "string",
"progress": integer,
"warnings": [
\{
"code": "string",
"entityID": integer,
"message": "string"
}
],
"solutions": [
\{
"name": "string",
"routes": [
\{
"subscriberID": integer,
"visits": [
\{
"taskID": integer,
"arrival": "dateTime",
"finish": "dateTime"
}
],
"detailedRoute": [
\{
"routeItemID": integer,
"points": [
[
number
]
]
}
]
}
],
"planningDate": "dateTime",
"solutionUUID": "string"
}
]
}Пример ответа
\{
"planningID": 0,
"status": "string",
"progress": 0,
"warnings": [
\{
"code": "string",
"entityID": 0,
"message": "string"
}
],
"solutions": [
\{
"name": "Планирование",
"routes": [
\{
"subscriberID": 1,
"visits": [
\{
"taskID": 1,
"arrival": "2020-11-19T10:00:00+03:00",
"finish": "2020-11-1911:00:00+03:00"
},
\{
"taskID": 2,
"arrival": "2020-11-19T12:00:00+03:00",
"finish": "2020-11-19T13:10:00+03:00"
}
],
"detailedRoute": [
\{
"routeItemID": 0,
"points": [
[
55.7355728,
37.61722
],
[
55.73501,
37.61714
],
[
55.735508,
37.65776
]
]
},
\{
"routeItemID": 1,
"points": [
[
55.735508,
37.65776
],
[
55.7357635,
37.658287
],
[
55.7647934,
37.6925774
]
]
}
]
}
],
"planningDate": "2020-11-18T13:18:05+03:00",
"solutionUUID": "6cd574b9-da56-4575-9e13-69a5d7035568"
}
]
}Назначение задач из планирования
Общее описание
Функция POST /v6/api/planningManagement/plannings/{planningID}/assignment позволяет назначить задачи из планирования Сотруднику.
Параметры вызова
Функция имеет следующие параметры:
| Параметр | Описание |
|---|---|
| planningID | ИД планирования (обязательный параметр) |
| solutionUUID | UUID варианта решения по маршруту. Параметр следует передавать только при назначении задач из планирования на один день. При назначении задач из планирования на два дня и больше параметр передавать не требуется. |
| taskIDs | ИД задач. При передаче пустого массива будут назначены все задачи из планирования. Подробнее о передаче нескольких идентификаторов |
Результат выполнения
Функция возвращает структуру со следующими параметрами заявки:
| Параметр | Описание |
|---|---|
| planningID | ИД планирования |
| status | Дата и время планирования |
| progress | Прогресс завершения планирования (в процентах) |
| Ошибки, возникшие при планировании задач (warnings) | |
| code | Ошибка назначения задач |
| entityID | ИД сущности, по которой возникла ошибка |
| message | Текст ошибки |
| Результат планирования (solutions) | |
| name | Название планирования |
| planningDate | Дата и время планирования (подробнее о формате времени). |
| solutionUUID | UUID варианта решения по маршруту |
| Маршруты планирования (routes) | |
| subscriberID | ИД Сотрудника |
| Последовательность выполнения задач (visits) | |
| taskID | ИД задачи |
| arrival | Дата и время начала выполнения задачи (подробнееk о формате времени). |
| finish | Дата и время завершения задачи (ко времени начала задачи добавляется указанное время выполнения, подробнее о формате времени) |
| Детальный маршрут выполнения задачи (detailedRoute) | |
| routeItemID | ИД отрезка маршрута |
| points | Широта и долгота каждой точки маршрута |
Формат запроса
POST /v6/api/planningManagement/plannings/\{planningID}/assignment HTTP/1.1
Host: host
Authorization: Bearer token
\{
"solutionUUID": "string",
"taskIDs": [
integer
]
}Пример запроса
POST /v6/api/planningManagement/plannings/1/assignment HTTP/1.1
Host: api.mpoisk.ru
Authorization: Bearer token
\{
"solutionUUID": "6cd574b9-da56-4575-9e13-69a5d7035568",
"taskIDs": [
1,
2
]
} Формат ответа
\{
"planningID": integer,
"status": "string",
"progress": integer,
"warnings": [
\{
"code": "string",
"entityID": integer,
"message": "string"
}
],
"solutions": [
\{
"name": "string",
"routes": [
\{
"subscriberID": integer,
"visits": [
\{
"taskID": integer,
"arrival": "dateTime",
"finish": "dateTime"
}
],
"detailedRoute": [
\{
"routeItemID": integer,
"points": [
[
number
]
]
}
]
}
],
"planningDate": "dateTime",
"solutionUUID": "string"
}
]
}Пример ответа
\{
"planningID": 0,
"status": "string",
"progress": 0,
"warnings": [
\{
"code": "string",
"entityID": 0,
"message": "string"
}
],
"solutions": [
\{
"name": "Планирование",
"routes": [
\{
"subscriberID": 1,
"visits": [
\{
"taskID": 1,
"arrival": "2020-11-19T10:00:00+03:00",
"finish": "2020-11-1911:00:00+03:00"
},
\{
"taskID": 2,
"arrival": "2020-11-19T12:00:00+03:00",
"finish": "2020-11-19T13:10:00+03:00"
}
],
"detailedRoute": [
\{
"routeItemID": 0,
"points": [
[
55.7355728,
37.61722
],
[
55.73501,
37.61714
],
[
55.735508,
37.65776
]
]
},
\{
"routeItemID": 1,
"points": [
[
55.735508,
37.65776
],
[
55.7357635,
37.658287
],
[
55.7647934,
37.6925774
]
]
}
]
}
],
"planningDate": "2020-11-18T13:18:05+03:00",
"solutionUUID": "6cd574b9-da56-4575-9e13-69a5d7035568"
}
]
}Остановка планирования
Общее описание
Функция PUT /v6/api/planningManagement/plannings/{planningID}/termination позволяет остановить процесс планирования.
Параметры вызова
В запросе используется обязательный параметр planningID — идентификатор планирования.
Результат выполнения
При успешном выполнении возвращается статус 204.
Формат запроса
PUT /v6/api/planningManagement/plannings/\{planningID}/termination HTTP/1.1
Host: host
Authorization: Bearer tokenПример запроса
PUT /v6/api/planningManagement/plannings/1/termination HTTP/1.1
Host: api.mpoisk.ru
Authorization: Bearer token