REST API: описание запросов
Все запросы имеют необязательный параметр apiVersion (версия API). Пример: GET /rest/tasks/87554?apiVersion=2.0
Названия и типы полей в запросе и ответе могут отличаться в зависимости от значения параметра apiVersion.
Возможные значения параметра apiVersion: 1.0, 1.1, 1.2, 1.3, 1.4, 2.0, 2.1
Значение версии API по умолчанию: apiVersion=1.0
Изменения вводились постепенно, и начиная с версии 1.0 до версии 2.0 было изменено:
- Тип запроса/ответа для полей с числовыми значениями. Ранее они передавались/отображались как строки (
"id": "100"
), в версии 2.0 - как числа ("id": 100
) - Тип запроса/ответа для полей с логическими значениями. Ранее они передавались/отображались как строки (
"archive": "f"
), в версии 2.0 - как логические значения ("archive": false
) - Тип запроса/ответа для полей со значениями типа "дата". Ранее они передавались/отображались как строки (
"deadline": "2019-06-06 17:31:00"
), в версии 2.0 - как Unix Timestamp ("deadline": 1559831460
) - Все вышеперечисленные изменения коснулись и значений полей внутри настраиваемых полей (внутри поля "custom_fields" для версий < 2.0 и внутр поля "fields" для версии 2.0). Ранее числа, логические значения и даты передавались/отображались как строки, в версии 2.0 - как числа, логические значения и Unix Timestamp, соответственно
- Передавались экранированные символы кавычек внутри структуры настраиваемых полей (
"custom_fields": "{\"id_obiektа\":{\"field_id\":95,\"value\":753}}"
). В версии 2.0 - неэкранированные ("fields": "{"id_obiektа":{"field_id":95,"value":753}}"
) - В версии 2.0 также были несколько изменены адреса запросов и названия некоторых полей в запросах и ответах
apiVersion=2.0
, если явно не указано иное.
В описании каждого запроса приведён список ролей, под которыми можно его выполнять. Если роли не указаны, запрос разрешён любому авторизованному пользователю.
Если выполняется запрос на получение/изменение сущности, которой не существует, сервер отдаст ответ с кодом 404
.
Отсутствие описания ответа означает пустой json с http-кодом 200
.
Обязательные поля в запросах помечены символом звездочка (*) в комментариях к ним.
/rest/auth
POST /rest/auth/by-invite
Запрос на авторизацию по ключу приглашения.
Параметры
обязательный
key
string — ключ приглашения
Запрос отдает 403
, если ключ приглашения уже активирован, либо пользователь ключа удален.
http 200
// 2.0+
{
"id": 6, // id пользователя
"login": "login", // логин пользователя
"fio": "ФИО", // имя пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"last_authentication": 1605793362, // дата последней авторизации
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 14754, // id основной организации
"organization_ids": [
14754
], // массив id организаций, доступных пользователю
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"role_id": 8, // id роли
"email": "t@t.ru", // адрес электронной почты
"address": "Казань", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"map_extent": [ // координаты положения карты: [min lon, min lat, max lon, max lat]
46.0927078887718,
53.9919087034184,
55.2997131017069,
56.6837870890742
],
"tracking": false, // включен ли трекинг
"blocked": false, // заблокирован ли пользователь
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"token": "87e3d7ae036b752cc90bd093bbfa1634", // токен
"expiration_date": 1682595742 // дата окончания действия токена
}
POST /rest/auth/by-login
Неавторизованный пользователь, авторизованный пользователь.
Запрос на авторизацию.
// 2.0+
{
"login": "login", // логин
"password": "password" // пароль
}
http 200
// 2.0+
{
"id": 6, // id пользователя
"login": "login", // логин пользователя
"fio": "ФИО", // имя пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"last_authentication": 1605793362, // дата последней авторизации
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 14754, // id основной организации
"organization_ids": [
14754
], // массив id организаций, доступных пользователю
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"role_id": 8, // id роли
"email": "t@t.ru", // адрес электронной почты
"address": "Казань", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"map_extent": [ // координаты положения карты: [min lon, min lat, max lon, max lat]
46.0927078887718,
53.9919087034184,
55.2997131017069,
56.6837870890742
],
"tracking": false, // включен ли трекинг
"blocked": false, // заблокирован ли пользователь
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"token": "87e3d7ae036b752cc90bd093bbfa1634", // токен
"expiration_date": 1682595742 // дата окончания действия токена
}
DELETE /rest/auth/tokens/:token
Главный администратор, главный инспектор.
Удаление пользовательской сессии (токена).
POST /rest/auth/pushes/subscribe
Запрос на регистрацию для получения PUSH-сообщений. Запрос поступает с мобильного устройства.
// 2.0+
{
"regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr", // уникальный адрес устройства для получения
// PUSH-сообщений, генерируется при установке приложения
"fqn": "android://ru.gs.mapmobile" // полное имя приложения
}
POST /rest/auth/pushes/unsubscribe
Запрос на отмену регистрации для получения PUSH-сообщений. Запрос поступает с мобильного устройства.
// 2.0+
{
"regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr", // уникальный адрес устройства для получения PUSH-сообщений,
// генерируется при установке приложения
"fqn": "android://ru.gs.mapmobile" // полное имя приложения
}
/rest/tasks
GET /rest/tasks/cache
Запрос на создание WebSocketChannel для возможности получения оповещений об операциях с заданиями (создание, обновление, удаление, добавление комментариев, ответов на комментарии) в формате JSON.
Можно передать параметр clusterId
для фильтрации оповещений по определённому кластеру
(можно передать id
только одного кластера).
// ws://localhost:9000/tasks/cache
Пример сообщения о создании задания
// 2.0+
{
"datetime": 1626142349 // timestamp момента создания задания
"event_caller": 6 // id создателя
"issues": {
"insert": [
{
"id": 786847, // id задания
"no": 3, // номер задания в кластере
"title": "Ямы на дорогах", // заголовок
"user_id": 363, // id создателя задания
"user_fio": "Иванов Иван", // ФИО создателя задания
"text": "Ямы на дорогах в центре города на ул.Профсоюзная", // описание
"organization_id": 1, // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"organization_name": "Население", // название назначенной организации
"organization_logo": "logo_3.png", // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 442, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорожного полотна", // название контракта
"contract_no": 01062022, // номер контракта
"date": 1543312469, // дата создания задания
"deadline": 1541581662, // дедлайн
"expired_date": 1541581662 // момент, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 2, // id приоритета
"priority_name": "Дополнительные", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "Рассмотрение", // название этапа
"num_main_photo": 1, //порядковый номер фотографии, которая будет в заголовке.
"archive": false, // архивное задания
"system_data": null, // поле для интеграционных целей
"update_date": 1547311229, // дата изменения задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"is_template": false, // шаблонное задание
"assigned_user_id": 719, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя,
"assigned_organization_id": 312, // id назначенной организации
"assigned_organization_name": null // название назначенной организации
"lon": 49.1421403, // координаты точки - lon
"lat": 55.774427, // координаты точки - lat
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": 107486, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"num": 1, // порядковый номер файла
"sample_matching": 60, // процент совпадения фото с образцом
"name": "Nature.jpg", // исходное название файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", // название файла на сервере
"link": null, // для видеофайлов: ссылка, если видеофайл находится не на сервере; для файлов других типов null
"sticker": { // стикер, прикрепленный к файлу
"id": 76, // id
"title": "Тестовый стикер" // название
}
"create_date": 1533215550, // дата добавления файла
"deleted": false, // удален файл или нет
"size": 1288395, // размер файла в байтах
"file_source": "device_camera", // источник файла ("device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone")
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикрепления файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1533113954, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // координаты места создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 243.121212121 // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация по платформе и приложению
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 786847 // id задания
}
]
}
]
}
}
Формат сообщения об изменении задания такой же, но вместо ключа insert
в JSON используется ключ update
.
Пример сообщения о создании комментария
// 2.0+
{
"datetime": 1626142349 // timestamp момента создания комментария
"event_caller": 6 // id создателя
"issues": {
"commentInsert": [
{
"id": 50029, // id комментария
"uuid": "1454bd95-3653-4499-ab39-9733af031312",
"date": 1533289354, // дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 1, // id этапа
"name": "новое" // название этапа
},
"new_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 2, // id этапа
"name": "назначено" // название этапа
},
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": { // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"id": 188, // id организации
"name": "Отдел разработки" // название организации
},
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": { // значение assigned_user после изменения (если это значение было изменено, иначе null)
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // имя пользователя
},
"files_added": [], // список добавленных после изменения файлов
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 //id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", //ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"task_no": 60529, // номер задания
"chat_message_number": 99, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
}
]
}
}
Пример сообщения о создании пользователя
// 2.0+
{
"datetime": 1626142349 // timestamp момента создания пользователя
"event_caller": 6 // id создателя
"users": {
"insert": [
{
"id": 6, // id пользователя
"login": "ivanov", // логин
"fio": "Иванов Иван Иванович", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
1-LDAP)"last_authentication": 1605793362, // дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 1, // id основной организации
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 8, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
}
]
}
}
Формат сообщения об изменении пользователя такой же, но вместо ключа insert
в JSON используется ключ update
.
Пример сообщения о создании организации
// 2.0+
{
"datetime": 1626142349 // timestamp момента создания организации
"event_caller": 6 // id создателя
"organizations": {
"insert": [
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
"cluster_id": 2, // id кластера
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 500, // организация-исполнитель заданий,
// подставляемая по умолчанию
"chat_id": 65006 // идентификатор канала уведомлений
}
]
}
}
Формат сообщения об изменении пользователя такой же, но вместо ключа insert
в JSON используется ключ update
.
GET /rest/tasks/points
Быстрый запрос для получения списка заданий и точек.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)childTasks
boolean — при значении childTasks=true отдаются только дочерние задания, при значении childTasks=false отдаются только не дочерние заданияonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, no, text, title. Например, search=7891no
integer — поиск по номеру задания (или по параметру id для заданий без номера)+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgeUpdateDate
timestamp — отображаются задания, дата обновления которых больше или равна указанной датеleUpdateDate
timestamp — отображаются задания, дата обновления которых меньше или равна указанной датеgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgeDate
timestamp — отображаются задания, дата которых больше или равна указанной датеleDate
timestamp — отображаются задания, дата которых меньше или равна указанной датеgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgeDeadline
timestamp — отображаются задания, deadline которых больше или равен указанной датеleDeadline
timestamp — отображаются задания, deadline которых меньше или равен указанной датеgtUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше указанной датыltUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше указанной датыgeUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше или равна указанной датеleUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше или равна указанной датеgtDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше указанной датыltDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше указанной датыgeDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше или равна указанной датеleDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше или равна указанной датеgtDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше указанной датыltDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше указанной датыgeDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше или равен указанной датеleDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше или равен указанной датеgtSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом больше указанного значенияltSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом меньше указанного значенияgtAddedPhotoCount
integer — отображаются задания, у которых количество фото, добавленных после создания задания, больше указанного значенияbbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийcustomFields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — просроченные задания для, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBy
defaultnews_date
— поле, по которому осуществляется сортировкаsortDirection
defaultDESC
— направление сортировки (ASC, DESC)
/tasks/points
/tasks/points?limit=10&page=1&withArchive=true&onlyStatus=2,3&priority_id=1,2
/tasks/points?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>Date=1438157002<Date=1443513802&expired=false
/tasks/points?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/points?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
http 200
// 2.0+
{
"items": [
{
"id": 789238, // id задания
"no": 3, // номер задания в кластере
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1 // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
"favorite": true, // находится ли задание в избранном у текущего пользователя
},
... // следующие элементы списка
]
}
GET /rest/tasks/geometry
Быстрый запрос для получения списка заданий и геометрии - точек и данных настраиваемых полей типа "геометрия".
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)childTasks
boolean — при значении childTasks=true отдаются только дочерние задания, при значении childTasks=false отдаются только не дочерние заданияonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, no, text, title. Например, search=7891no
integer — поиск по номеру задания (или по параметру id для заданий без номера)+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgeUpdateDate
timestamp — отображаются задания, дата обновления которых больше или равна указанной датеleUpdateDate
timestamp — отображаются задания, дата обновления которых меньше или равна указанной датеgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgeDate
timestamp — отображаются задания, дата которых больше или равна указанной датеleDate
timestamp — отображаются задания, дата которых меньше или равна указанной датеgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgeDeadline
timestamp — отображаются задания, deadline которых больше или равен указанной датеleDeadline
timestamp — отображаются задания, deadline которых меньше или равен указанной датеgtUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше указанной датыltUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше указанной датыgeUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше или равна указанной датеleUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше или равна указанной датеgtDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше указанной датыltDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше указанной датыgeDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше или равна указанной датеleDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше или равна указанной датеgtDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше указанной датыltDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше указанной датыgeDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше или равен указанной датеleDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше или равен указанной датеgtSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом больше указанного значенияltSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом меньше указанного значенияgtAddedPhotoCount
integer — отображаются задания, у которых количество фото, добавленных после создания задания, больше указанного значенияbbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийcustomFields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — просроченные задания для, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBy
defaultnews_date
— поле, по которому осуществляется сортировкаsortDirection
defaultDESC
— направление сортировки (ASC, DESC)
/tasks/geometry?limit=10&page=1&withArchive=true&onlyStatus=2,3&priority_id=1,2
/tasks/geometry?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>Date=1438157002<Date=1443513802&expired=false
/tasks/geometry?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/geometry?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
http 200
// 2.0+
{
"items": [
{
"id": 789238, // id задания
"no": 3, // номер задания в кластере
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1, // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
"favorite": true, // находится ли задание в избранном у текущего пользователя
"fields": { // json-объект, хранящий значения настраиваемых полей тпа "геометрия" в формате:
"Geometrija": { // {"транслит русского названия поля": {
"field_id": 8, // "field_id": <ID>,
"value": { // "value": <значение>
"coordinates": [ // }}
[
37.54096936955436,
55.9499035987994
],
[
37.558478490656356,
55.95202252412895
],
[
37.58148066935899,
55.95914896382962
]
],
"distance": 6.484990692549826,
"type": "LineString",
"description": "Маршрут до места назначения",
"name": "Маршрут",
"pointsCount": 3
}
}
}
},
... // следующие элементы списка
]
}
GET /rest/tasks/distribution
Статистика по количеству заданий в разрезе видов работ, приоритетов, этапов.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)childTasks
boolean — при значении childTasks=true отдаются только дочерние задания, при значении childTasks=false отдаются только не дочерние заданияonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, no, text, title. Например, search=7891no
integer — поиск по номеру задания (или по параметру id для заданий без номера)+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgeUpdateDate
timestamp — отображаются задания, дата обновления которых больше или равна указанной датеleUpdateDate
timestamp — отображаются задания, дата обновления которых меньше или равна указанной датеgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgeDate
timestamp — отображаются задания, дата которых больше или равна указанной датеleDate
timestamp — отображаются задания, дата которых меньше или равна указанной датеgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgeDeadline
timestamp — отображаются задания, deadline которых больше или равен указанной датеleDeadline
timestamp — отображаются задания, deadline которых меньше или равен указанной датеgtUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше указанной датыltUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше указанной датыgeUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше или равна указанной датеleUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше или равна указанной датеgtDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше указанной датыltDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше указанной датыgeDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше или равна указанной датеleDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше или равна указанной датеgtDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше указанной датыltDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше указанной датыgeDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше или равен указанной датеleDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше или равен указанной датеgtSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом больше указанного значенияltSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом меньше указанного значенияgtAddedPhotoCount
integer — отображаются задания, у которых количество фото, добавленных после создания задания, больше указанного значенияbbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийcustomFields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — просроченные задания для, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBy
defaultnews_date
— поле, по которому осуществляется сортировкаsortDirection
defaultDESC
— направление сортировки (ASC, DESC)
/tasks/distribution?withArchive=true&onlyStatus=2,3&priority_id=1,2
/tasks/distribution?gtUpdateDate=1440835402<UpdateDate=1443513802>Date=1438157002<Date=1443513802&expired=false
/tasks/distribution?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/distribution?search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
http 200
// 2.0+
{
"type": { // расклад количества заданий по видам работ
1: 1021, // id вида работ : количество заданий
2: 879,
3: 699
},
"priority": { // расклад количества заданий по приоритетам
1: 6625,
2: 12211,
3: 3644
},
"stage": { //расклад количества заданий по стадиям: 1 - в работе, 2 - завершено
0: 5,
1: 22457,
2: 18
},
"status": { // расклад количества заданий по этапам
1: 22245,
2: 197,
3: 8,
4: 30
}
}
}
GET /rest/tasks/new-stats
Получение статистики по заданиям в разрезе по дням.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)childTasks
boolean — при значении childTasks=true отдаются только дочерние задания, при значении childTasks=false отдаются только не дочерние заданияonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgeUpdateDate
timestamp — отображаются задания, дата обновления которых больше или равна указанной датеleUpdateDate
timestamp — отображаются задания, дата обновления которых меньше или равна указанной датеgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgeDate
timestamp — отображаются задания, дата которых больше или равна указанной датеleDate
timestamp — отображаются задания, дата которых меньше или равна указанной датеgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgeDeadline
timestamp — отображаются задания, deadline которых больше или равен указанной датеleDeadline
timestamp — отображаются задания, deadline которых меньше или равен указанной датеgtUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше указанной датыltUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше указанной датыgeUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше или равна указанной датеleUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше или равна указанной датеgtDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше указанной датыltDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше указанной датыgeDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше или равна указанной датеleDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше или равна указанной датеgtDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше указанной датыltDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше указанной датыgeDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше или равен указанной датеleDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше или равен указанной датеbbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийcustomFields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — просроченные задания для, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
http 200
2.0+
{
"items": [
{
"date": 1518696000, // дата в формате Unix Timestamp
"done_expired": 0, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 0, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 3, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 2, // непросроченные задания, находящиеся в стадии 1 - в работе
}
]
}
GET /rest/tasks/states
Список всех возможных состояний заданий.
http 200
// 2.0+
{
"items": [
{
"id": 11, // id состояния
"name": "assigned_me", // название состояния
"field": "assigned_user_id", // поле, по которому осуществляется проверка
"value": true, // значение, которое оно должно принимать
"sign": null, // знак для сравнения
"field_from_session": null, // поле в сессии, если нужно сравнивать с ним
"role": null // служебное поле
},
... // следующие элементы списка состояний
]
}
GET /rest/tasks/capabilities
Получение списка возможных действий с заданиями (capability).
http 200
// 2.0+
{
"items": [
{
"id": 2, // id действия
"label": "Удалить задание" // название действия
"name": "delete", // кодовое название действия
"default": false // разрешеное ли действие по умолчанию
},
... // следующие элементы списка действий
]
}
GET /rest/tasks/allowed
Получение списка правил, доступных роли текущего пользователя. Правила описывают состояния (states), в которых должно находиться задание, чтобы определенное действие (capability) было доступно роли (role) пользователя. Если для роли не прописано какое-то действие, оно для нее не доступно. Если в поле состояний (states) стоит null, действие доступно роли при любых состояниях.
http 200
// 2.0+
{
"items": [
{
"id": 38, // id правила
"capability_id": 1, // id действия
"states": [
1,
2
] // массив id состояний, либо null
},
{
"id": 14,
"capability_id": 7,
"states": null
},
{
"id": 159,
"capability_id": 7,
"states": [
18
]
},
... // следующие элементы списка
]
}
GET /rest/tasks
Список всех заданий, доступных пользователю.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)childTasks
boolean — при значении childTasks=true отдаются только дочерние задания, при значении childTasks=false отдаются только не дочерние заданияonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, no, text, title. Например, search=7891no
integer — поиск по номеру задания (или по параметру id для заданий без номера)+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgeUpdateDate
timestamp — отображаются задания, дата обновления которых больше или равна указанной датеleUpdateDate
timestamp — отображаются задания, дата обновления которых меньше или равна указанной датеgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgeDate
timestamp — отображаются задания, дата которых больше или равна указанной датеleDate
timestamp — отображаются задания, дата которых меньше или равна указанной датеgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgeDeadline
timestamp — отображаются задания, deadline которых больше или равен указанной датеleDeadline
timestamp — отображаются задания, deadline которых меньше или равен указанной датеgtUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше указанной датыltUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше указанной датыgeUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых больше или равна указанной датеleUpdateDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата обновления которых меньше или равна указанной датеgtDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше указанной датыltDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше указанной датыgeDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых больше или равна указанной датеleDateLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальная дата которых меньше или равна указанной датеgtDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше указанной датыltDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше указанной датыgeDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых больше или равен указанной датеleDeadlineLocal
DateTime (yyyy-MM-dd HH:mm:ss) — отображаются задания, локальный deadline которых меньше или равен указанной датеgtSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом больше указанного значенияltSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом меньше указанного значенияgtAddedPhotoCount
integer — отображаются задания, у которых количество фото, добавленных после создания задания, больше указанного значенияbbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийfields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — просроченные задания для, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBy
defaultnews_date
— поле, по которому осуществляется сортировкаДопустимые поля для сортировки: news_date, news_type_id, category_id. Для сортировки заданий по удалению от центра bbox, нужно передать bbox и sortBy=center_bbox. Также допустима сортировка по удаленности от указанной точки. В этом случае не указывается поле для сортировки, но указываются дополнительные параметры с координатами точки lon (долгота), lat (широта) и направление сортировки в параметре sortDirection. Сортировка по удаленности от указанной точки ведется только по тем заданиям, которые имеют точку.
sortDirection
defaultDESC
— направление сортировки (ASC, DESC)lon
double — координата долготы для сортировки заданий по удаленности от точкиlat
double — координата широты для сортировки заданий по удаленности от точкиpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице
/tasks?withArchive=true&onlyStatus=2,3&priority_id=1,2
/tasks?gtUpdateDate=1440835402<UpdateDate=1443513802>Date=1438157002<Date=1443513802&expired=false
/tasks?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks?search=тест&fields=[{"name":"gorod","op":"EQ","value":"Казань"},{"name":"Telefon","op":"NOT NULL"}]
http 200
// 2.0+
{
"items": [
{
"id": 786847, // id задания
"no": 3, // номер задания в кластере
"title": "Ямы на дорогах", // заголовок
"user_id": 363, // id создателя задания
"user_fio": "Иванов Иван", // ФИО создателя задания
"text": "Ямы на дорогах в центре города на ул.Профсоюзная", // описание
"organization_id": 1, // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"organization_name": "Население", // название назначенной организации
"organization_logo": "logo_3.png", // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 442, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорожного полотна", // название контракта
"contract_no": 01062022, // номер контракта
"date": 1543312469, // дата создания задания
"deadline": 1541581662, // дедлайн
"expired_date": 1541581662 // момент, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 2, // id приоритета
"priority_name": "Дополнительные", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "Рассмотрение", // название этапа
"num_main_photo": 1, //порядковый номер фотографии, которая будет в заголовке.
"archive": false, // архивное задания
"system_data": null, // поле для интеграционных целей
"update_date": 1547311229, // дата изменения задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"is_template": false, // шаблонное задание
"assigned_user_id": 719, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя,
"assigned_organization_id": 312, // id назначенной организации
"assigned_organization_name": null // название назначенной организации
"lon": 49.1421403, // координаты точки - lon
"lat": 55.774427, // координаты точки - lat
"unread_message_count": 3, // количество непрочитанных комментариев
"favorite": true, // находится ли задание в избранном у текущего пользователя
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": 107486, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"num": 1, // порядковый номер файла
"sample_matching": 60, // процент совпадения фото с образцом
"name": "Nature.jpg", // исходное название файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", // название файла на сервере
"link": null, // для видеофайлов: ссылка, если видеофайл находится не на сервере; для файлов других типов null
"sticker": { // стикер, прикрепленный к файлу
"id": 76, // id
"title": "Тестовый стикер" // название
}
"create_date": 1533215550, // дата добавления файла
"deleted": false, // удален файл или нет
"size": 1288395, // размер файла в байтах
"file_source": "device_camera", // источник файла ("device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone")
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикрепления файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1533113954, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // координаты места создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 243.121212121 // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация по платформе и приложению
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 786847 // id задания
}
],
},
... // следующие элементы списка заданий
],
"schedules": [
{
"id": 107486, // id расписания
"title": "Расписание", // название
"time_zone": "Europe/Moscow" // таймзона расписания, возможный формат - "UTC+3", "UTC+03:00" или "Europe/Moscow"
"worktime": 7200, // дедлайн
"on": true, // включено расписание или нет
"deleted": false // признак удалённого расписания
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Главный администратор"
},
"cluster": { // кластер
"id": 150086,
"title": "Тестовый кластер"
},
"archive": false, // является ли расписание архивным
"contract": { // контракт
"id": 195270,
"no": "1",
"title": "организация",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 195270,
"name": "организация",
"cluster": {
"id": 150086,
"title": "Тестовый кластер"
}
},
"total_template_count": 1 // количество шаблонов
}
],
"count": 59503 // количество заданий
}
GET /rest/tasks/bbox
Кластеризация заданий по координатам.
Если в кластере одно задание, то оно вместе с правами пользователя на задание и с одним последним комментарием отдается в ответе.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
обязательный
bbox
List<Double> — отображаются задания, которые попадают в заданный bbox; bbox задается двумя точками, координаты которых передаются в списке: bbox=x1,y1,x2,y2maxClusters
integer default25
— максимальное количество кластеров; общее количество кластеров и заданий не превысит этой величины. Как максимум можно передатьmaxClusters=100
.minD
double — минимально допустимое расстояние между центрами кластеров в километрахlimit
integer default10000
— максимальное количество заданий, попадающих в выборкуid
integer — - указывается id "активного" задания на карте, которое обязательно должно попасть в tasks, если оно попадает в выборку (исключая bbox), и не должно не попасть ни в один кластерstage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, no, text, title. Например, search=7891no
integer — поиск по номеру задания (или по параметру id для заданий без номера)+
onlyStatus
— отображаются задания с соответствующими этапами+
priority_id
long — фильтр по приоритетам заданий+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной датыgtSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом больше указанного значенияltSampleMatching
double — отображаются задания, для которых процент совпадения фото с образцом меньше указанного значенияgtAddedPhotoCount
integer — отображаются задания, у которых количество фото, добавленных после создания задания, больше указанного значения+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
contractId
long — отображаются задания, созданные по указанным контрактам+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:При фильтрации шаблонных заданий:
Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
При фильтрации нешаблонных заданий фильтр наклыдывается на поле schedule_id.
isTemplate
boolean defaultfalse
— фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору кластера и Инспектору кластера запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterId
long — фильтр по кластерам организацийfields
— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expired
boolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — непросроченные задания, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
http 200
// 2.0+
{
"activeId": 192 // переданный "активный" id, если он подпадает под фильтры
"items": [
{
"id": 767, // id задания, если в кластере одно задание
"count": 1, // количество заданий в кластере
"lon": 49.6142578125, // координаты точки - lon
"lat": 55.4040698270061 // координаты точки - lat
},
{
"id": null,
"count": 17, // количество заданий в кластере
"lon": 55.56, // координаты точки - lon
"lat": 46.67 // координаты точки - lat
},
... // следующие элементы списка
],
"tasks": [
{
"task": {
"id": 786847, // id задания
"no": 3, // номер задания в кластере
"title": "Ямы на дорогах", // заголовок
"user_id": 363, // id создателя задания
"user_fio": "Иванов Иван", // ФИО создателя задания
"text": "Ямы на дорогах", // описание
"organization_id": 1, // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"organization_name": "Население", // название назначенной организации
"organization_logo": "logo_3.png", // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 442, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорожного полотна", // название контракта
"contract_no": 01062022, // номер контракта
"date": 1543312469, // дата создания задания
"deadline": 1542969580, // дедлайн
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 2, // id приоритета
"priority_name": "Дополнительные", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "Рассмотрение", // название этапа
"num_main_photo": 1, //порядковый номер фотографии, которая будет в заголовке.
"archive": false, // архивное задания
"system_data": null, // поле для интеграционных целей
"update_date": 1547311229, // дата изменения задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"is_template": false, // шаблонное задание
"expired_date": 1542969580, // дата, когда задание было просрочено
"assigned_user_id": 719, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя,
"assigned_organization_id": 312, // id назначенной организации
"assigned_organization_name": null // название назначенной организации
"lon": 49.1421403, // координаты точки - lon
"lat": 55.774427, // координаты точки - lat
"date": 1541581403357, // дата создания задания
"unread_message_count": 3, // количество непрочитанных комментариев
"favorite": true, // находится ли задание в избранном у текущего пользователя
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": 107486, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"num": 1, // порядковый номер файла
"sample_matching": 60, // процент совпадения фото с образцом
"name": "Nature.jpg", // исходное название файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", // название файла на сервере
"link": null, // для видеофайлов: ссылка, если видеофайл находится не на сервере; для файлов других типов null
"sticker": { // стикер, прикрепленный к файлу
"id": 76, // id
"title": "Тестовый стикер" // название
}
"create_date": 1533215550, // дата добавления файла
"deleted": false, // удален файл или нет
"size": 1288395, // размер файла в байтах
"file_source": "device_camera", // источник файла ("device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone")
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикрепления файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1533113954, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // координаты места создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 243.121212121 // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация по платформе и приложению
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 786847 // id задания
}
],
},
"capabilities": { // права пользователя на задание:
// имеет ли пользователь право выполнять
// указанные действия (capabilities) с заданием
"update_type": false,
"update_custom_fields": true,
"edit": true,
"assign_department": true,
"show": true,
"update_title": false,
"update": true,
"update_priority": false,
"edit_files": true,
"attach_photo_video_from_gallery": true,
"delete": true,
"update_point": false,
"confirm": true,
"update_text": false,
"show_owner": true,
"attach_photo_video_from_camera": true,
"assign_status": true,
"assign_user": true,
"update_parent_task": true
},
"comments": [ // список комментариев
{
"id": 214719, // id комментария
"uuid": "78ada22b-6025-40c1-a9f3-f91a9d1e06cc",
"date": 1619169384, // дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "#5", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"chat_message_number": 5, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"task_id": 786847, // id задания
"parent": null, // родительский комментарий
"system_message_code": null, // код системного сообщения
"fio": "Администратор", // ФИО пользователя
"user_id": 6 // id пользователя
}
]
}
... // следующие элементы списка заданий
],
"schedules": [
{
"id": 107486, // id расписания
"title": "Расписание", // название
"time_zone": "Europe/Moscow" // таймзона расписания, возможный формат - "UTC+3", "UTC+03:00" или "Europe/Moscow"
"worktime": 7200, // дедлайн
"on": true, // включено расписание или нет
"deleted": false // признак удалённого расписания
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Главный администратор"
},
"cluster": { // кластер
"id": 150086,
"title": "Тестовый кластер"
},
"archive": false, // является ли расписание архивным
"contract": { // контракт
"id": 195270,
"no": "1",
"title": "организация",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 195270,
"name": "организация",
"cluster": {
"id": 150086,
"title": "Тестовый кластер"
}
},
"total_template_count": 1 // количество шаблонов
}
],
"total": 19 // всего заданий
}
POST /rest/tasks
Добавление задания.
Параметры запроса
mapServiceObjectAttributes
boolean — включение/отключение маппинга из атрибутов объекта обслуживания в поля задания. Если параметр не передан, то учитывается значение настройки Функции заданий/Включить автоматический маппинг полей и координат из объекта обслуживания.copyServiceObjectFiles
boolean — включение/отключение копирования файлов из объекта обслуживания в задание. Если параметр не передан, то учитывается значение настройки Функции заданий/Прикреплять файлы объектов обслуживания.
Дата и дедлайн могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс вычисляется исходя из кластера задания.
В массив attachments
закладывается возможность прикрепления ярлыков к файлам
сразу при создании задания (поле sticker_id
). При прикреплении ярлыков производится
проверка их доступности виду работ задания. При проверке учитывается свойство
ярлыков is_for_all
(доступно всем видам работ). Если хотя бы один из указанных
ярлыков не соответствуют виду работ, будет получен код 403 . При передаче sticker_id: null
или
отсутствии sticker_id
считается, что к файлу не прикреплен никакой ярлык.
Каждый из attachments типа PHOTO может содержать
массив beacons
с данными по радиометкам, снятым в момент фотографирования.
Отправлять можно неограниченное количество меток, но в БД
будут сложены только метки с максимальным уровне сигнала (rssi
).
Количество складываемых меток ограничивается настройкой
Функции заданий/Метки/Максимальное количество меток на один файл
(по умолчанию 5).
// 2.0+
{
"organization_id": 3, // id организации-создателя;
// поле должно быть передано, если создатель задания
// не принадлежит ни к одной организации
//
"contract_id": 442 // контракт, по которому создаётся задание;
// переданный контракт должен быть логически
// увязан с видом работ задания и объектом
// обслуживания, из которого создаётся задание
"date": "2024-06-01 12:00", // * дата задания
"title": "Яма на дороге", // * заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // * описание
"type_id": 1, // * id вида работ
"priority_id": 1, // * id приоритета
"parent_id": 2, // id родительского задания
"status_id": 1, // id этапа
//
"assigned_user_id": 95, // 0.24+ исполнитель
"assigned_organization_id": 101, // 0.24+ организация исполнителя при её наличии;
// также можно указать только организацию
// без указания конкретного исполнителя;
// организации должен быть доступен вид работ задания
//
"workgroup_id": 188, // id проекта
"deadline": "2025-01-01 12:00", // дедлайн;
// если не передан, то может быть проставлен
// на основе поля period_of_review_in_sec вида работ.
// Для этого:
// * вид работ должен иметь тип AT_CREATE
// * либо
// * вид работ должен иметь тип AT_UPDATE
// * и должен быть указан исполнитель
// (или только организация исполниеля)
//
"system_data": "версия: 1.1.1", // поле для интеграционных целей
//
"point": [ // координаты точки задания в формате [lon, lat]
55.56,
46.67
],
"tracking_on": true, // 0.18+ настройка включения/выключения оповещений
// о входе/выходе исполнителя в зону/из зоны задания
//
"zone_radius": 20, // 0.18+ размер зоны задания для оповещений о входе/выходе
// исполнителя в/из неё
//
"service_object_id": 7, // 0.24+ id объекта обслуживания
"service_object_layer_id": 5 // id слоя
//
"fields": { // JSON-объект, состоящий из списка настраиваемых полей
"Pole": { // с их значениями в формате:
"field_id": 1 // {"транслит русского названия поля": {
"value": 12 // "field_id": <ID поля>,
} // "value": <значение>
}, // }}
//
"attachments": [ // 0.16+ файлы
{
"file": "dN2k9B9r42YbfDyz.jpg", // имя файла на сервере после закачки
"sample_matching": 60, // процент совпадения фото с образцом
"file_name": "моя фотография.jpg", // оригинальное имя файла
"description": "Второстепенное фото", // описание файла
"file_type": "PHOTO", // тип файла, PHOTO/VIDEO/FILE/SOUND
"main_photo": true, // признак главного фото задания;
// можно применяться только к PHOTO;
// в attachments допускается не более одного
// main_photo = true
//
"sticker_id": 12, // id ярлыка для прикрепления к файлу
"file_source": "device_camera", // 0.21+ источник файла;
// device_camera/app_camera/app_redactor/gallery/dictaphone
//
"attachment": { // 0.21+ время и место прикрепления файла
"time": 1533111159, // время
"time_provider": "system", // источник времени, ntp/gps/system
"location": { // место
"provider": "gps", // источник координат
"accuracy": 12.5, // точность координат
"lonlat": [ // координаты
55.56,
46.67
],
"distance_to_task": 102.363663636 // расстояние от точки задания
// до места прикрепления файла, метры
}
},
"origin": { // 0.21+ время и место записи файла
"time": 1533113954, // время
"time_provider": "ntp", // источник времени, ntp/gps/system
"location": { // место
"provider": "gps", // источник координат, gps/network
"accuracy": 10.5, // точность координат
"lonlat": [ // координаты
55.45,
46.89
],
"distance_to_task": 102.65656556 // расстояние от точки задания
// до места записи файла, метры
}
},
"author": { // 0.21+ информация о приложении и платформе
"platform": "android", // платформа, iOS/android/desktop/web
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение, в котором был записан файл
"application_version": "8.5" // версия приложения
},
"beacons": [ // метки маяков, прикреплённые к фото
{
"uuid": "e2c56db5-dffb-48d2-b060-d0f5a71096e0", // идентификаторы маяка
"major": 0,
"minor": 817,
"rssi": -52.5, // измеренная мощность сигнала
"distance": 7.6 // вычисленное расстояние (метры)
},
...
],
},
... // следующие элементы списка файлов
]
}
http 200
// 2.0
{
"id": 789249, // id созданного задания
"no": 3, // номер задания в кластере
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя задания
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 442, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорожного полотна", // название контракта
"contract_no": 01062022, // номер контракта
"date": 1542969580, // дата создания задания
"deadline": 1542969580, // дедлайн
"expired_date": 1541581662 // момент, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": 1, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1542969580, // дата обновления задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"workgroup_id": 188, // id проекта
"assigned_organization_id": 101, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 95, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"is_template": false, // шаблонное задание
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"unread_message_count": 3, // количество непрочитанных комментариев
"favorite": false, // находится ли задание в избранном у текущего пользователя
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": null, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
GET /rest/tasks/:id
Получение данных по конкретному заданию.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог просмотреть задание, его роли должна быть доступна capability = show.
http 200
// 2.0
{
"task": {
"id": 789249, // id созданного задания
"no": 3, // номер задания в кластере
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 442, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорожного полотна", // название контракта
"contract_no": 01062022, // номер контракта
"date": 1542969580, // дата создания задания
"deadline": 1542969580, // дедлайн
"expired_date": 1541581662 // момент, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1542969580, // дата обновления задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"is_template": false, // шаблонное задание
"date": 1542969580, // дата создания задания
"unread_message_count": 3, // количество непрочитанных комментариев
"favorite": true, // находится ли задание в избранном у текущего пользователя
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": 107486, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"beacons": [ // метки маяков, прикреплённые к фото
{
"uuid": "e2c56db5-dffb-48d2-b060-d0f5a71096e0", // идентификаторы маяка
"major": 0,
"minor": 817,
"rssi": -52.5, // измеренная мощность сигнала
"distance": 7.6 // вычисленное расстояние (метры)
},
...
],
... // следующие элементы
}
],
},
"schedule": {
"id": 107486, // id расписания
"title": "Расписание", // название
"worktime": 7200, // дедлайн
"on": true, // включено расписание или нет
"time_zone": "Europe/Moscow", // таймзона расписания
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Главный администратор"
},
"cluster": { // кластер
"id": 150086,
"title": "Тестовый кластер"
},
"archive": false, // является ли расписание архивным
"contract": { // контракт
"id": 195270,
"no": "1",
"title": "организация",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 195270,
"name": "организация",
"cluster": {
"id": 150086,
"title": "Тестовый кластер"
}
},
"total_template_count": 1 // количество шаблонов
},
"configuration": {}
}
PATCH /rest/tasks/:id
Обновление задания.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Права пользователей на выполнения данного запроса могут быть описаны следующим образом:
для изменения значения поля stage роль пользователя должна иметь capability со свойствами: capability_id = 6, capability_name = "confirm",
для изменения значения поля assigned_organization_id роль пользователя должна иметь capability со свойствами: capability_id = 7, capability_name = "assign_department",
для изменения значения поля assigned_user_id роль пользователя должна иметь capability со свойствами: capability_id = 8, capability_name = "assign_user",
для изменения значения поля assigned_status роль пользователя должна иметь capability со свойствами: capability_id = 9, capability_name = "assign_status",
для изменения значения поля text роль пользователя должна иметь capability со свойствами: capability_id = 3, capability_name = "edit".
Параметры запроса
mapServiceObjectAttributes
boolean — включение/отключение маппинга из атрибутов объекта обслуживания в поля задания. Если параметр не передан, то учитывается значение настройки Функции заданий/Включить автоматический маппинг полей и координат из объекта обслуживания.copyServiceObjectFiles
boolean — включение/отключение копирования файлов из объекта обслуживания в задание. Если параметр не передан, то учитывается значение настройки Функции заданий/Прикреплять файлы объектов обслуживания.
Дедлайн может быть передан как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс вычисляется исходя из кластера задания.
Новые переданные файлы будут прикреплены к заданию и добавлены к ранее прикрепленным файлам.
Если массив "attachments" содержит файл с "main_photo":true, информацию по номеру главного фото берем из него. Независимо от того, было ли передано поле "photo_main" в основном JSON-объекте, оно будет проигнорировано. Если массив "attachments" не будет передан, или в нем не будет информации по номеру главного фото, информацию по номеру главного фото берем из поля "photo_main" в основном JSON-объекте. Если поле "photo_main" в основном JSON-объекте тоже не было передано, оставляем номер главного фото без изменений.
В массив "attachments" закладывается возможность прикрепления стикеров к файлам при изменении задания (поле "sticker_id"). При прикреплении стикеров производим проверку доступности указанных стикеров виду работ. При проверке учитываем свойство стикеров "is_for_all" (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, выдаем 403. При передаче "sticker_id": null полагаем, что к файлу не прикреплен никакой стикер. Если поле "sticker_id" не было передано, полагаем, что к файлу не прикреплен никакой стикер.
Каждый из attachments типа PHOTO может содержать
массив beacons
с данными по радиометкам, снятым в момент фотографирования.
Отправлять можно неограниченное количество меток, но в БД
будут сложены только метки с максимальным уровне сигнала (rssi
).
Количество складываемых меток ограничивается настройкой
Функции заданий/Метки/Максимальное количество меток на один файл
(по умолчанию 5).
При передаче поля "fields" происходит частичное изменение настраиваемых полей:
переданное настраиваемое поле, которое было прикреплено к заданию ранее, обновляется;
новое настраиваемое поле, прикрепляется к заданию и добавляется к ранее прикрепленным полям.
Для открепления всех настраиваемых полей необходимо передать null.
// 2.0+
{
"task": {
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"status_id": 1, // id этапа
"assigned_organization_id": 3, // id назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"contract_id": 443, // id контракта, по которому создано задание
"type_id": 1, // id вида работ
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"priority_id": 1, // id приоритета
"parent_id": 2, // id родительского задания
"service_object_id": 7, // id объекта обслуживания;
// прикрепить объект обслуживания можно,
// если ни один объект к заданию ещё не был прикреплён
"service_object_layer_id": 5 // id слоя
"deadline": "2030/06/01 17:15:00", // дедлайн
"system_data": "версия: 1.1.1",
"archive": false, // архивное задание
//
"fields": { // JSON-объект, состоящий из списка настраиваемых полей
"Pole": { // с их значениями в формате:
"field_id": 1 // {"транслит русского названия поля": {
"value": 12 // "field_id": <ID поля>,
} // "value": <значение>
}, // }}
//
"point": [
55.56,
46.67
], // координаты точки в формате [lon, lat]; отправка null сотрёт точку; если поле отсутствует в JSON, изменений в БД не будет
"pointZoom": 14, // зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"tracking_on": true, // настройка включения/выключения оповещений о входе/выходе исполнителя в зону/из зоны задания; доступно для версий Cerebellum, начиная с 0.18
"zone_radius": 20, // размер зоны задания для оповещений о входе/выходе исполнителя в зону/из зоны задания; доступно для версий Cerebellum, начиная с 0.18
"update_comments": "Задание было назначено", //комментарии при обновлении
"photo_main": 1, // номер главного фото, начиная с 0 (среди ранее загруженных файлов), для версий Cerebellum до 0.16
"attachments": [ // передача файлов в массиве для версий Cerebellum от 0.16 и старше
{
"file": "dN2k9B9r42YbfDyz.jpg", // название файла после загрузки
"file_name": "1313410929241.jpg", // исходное название файла
"sample_matching": 60, // процент совпадения фото с образцом
"description": "Второстепенное фото", // описание файла
"file_type": "PHOTO", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": false, // является ли фото главным
"sticker_id": 12, // id стикера для прикрепления к файлу
"file_source": "device_camera", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту прикрепления
"provider": "gps", // источник координат места прикрепления, тип String, возможные значения: "gps"/"network"
"accuracy": 12.5, // точность координат места прикрепления, тип Double
"lonlat": [
55.56,
46.67
], // координаты места прикрепления в формате [lon, lat]
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла, тип Double, измеряется в метрах
}
},
"origin": { // информация по времени и месту записи файла
"time": 1533113954, // время записи файла
"time_provider": "ntp", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту записи
"provider": "gps", // источник координат места записи, тип String, возможные значения: "gps"/"network"
"accuracy": 10.5, // точность координат места записи, тип Double
"lonlat": [
55.45,
46.89
], // координаты места записи в формате [lon, lat]
"distance_to_task": 342.212819281928 // расстояние от точки задания до места записи файла, тип Double, измеряется в метрах
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа, тип String, возможные значения: "iOS"/"android"/"desktop"/"web"
"platform_version": "4.2", // версия платформы, тип String
"application": "MapMobile", // приложение, в котором был записан файл, тип String
"application_version": "8.5" // версия приложения, тип String
},
"beacons": [ // метки маяков, прикреплённые к фото
{
"uuid": "e2c56db5-dffb-48d2-b060-d0f5a71096e0", // идентификаторы маяка
"major": 0,
"minor": 817,
"rssi": -52.5, // измеренная мощность сигнала
"distance": 7.6 // вычисленное расстояние (метры)
},
...
],
},
{
"file": "dN2k9B9r42YbreDyz.3gp", // название файла после загрузки
"file_name": "1313910929241.3gp", // исходное название файла
"description": "Вторая запись", // описание файла
"file_type": "VIDEO", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": false, // для видео false или null
"sticker_id": 11 // id стикера для прикрепления к файлу
"file_source": "gallery", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту прикрепления
"provider": "gps", // источник координат места прикрепления, тип String, возможные значения: "gps"/"network"
"accuracy": 120.5, // точность координат места прикрепления, тип Double
"lonlat": [
55.45,
46.37
], // координаты места прикрепления в формате [lon, lat]
"distance_to_task": 352.23535253 // расстояние от точки задания до места прикрепления файла, тип Double, измеряется в метрах
}
},
"origin": { // информация по времени и месту записи файла
"time": 1533113954, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту записи
"provider": "gps", // источник координат места записи, тип String, возможные значения: "gps"/"network"
"accuracy": 100.5, // точность координат места записи, тип Double
"lonlat": [
55.44,
46.88
], // координаты места записи в формате [lon, lat]
"distance_to_task": 123.121212 // расстояние от точки задания до места записи файла, тип Double, измеряется в метрах
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа, тип String, возможные значения: "iOS"/"android"/"desktop"/"web"
"platform_version": "4.2", // версия платформы, тип String
"application": "MapMobile", // приложение, в котором был записан файл, тип String
"application_version": "8.5" // версия приложения, тип String
}
},
{
"file": "dN2k9B9r42YbtDtz.m4a", // название файла после загрузки
"file_name": "1313410926541.m4a", // исходное название файла
"description": "Аудио запись", // описание файла
"file_type": "SOUND", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": null, // для аудио false или null
"sticker_id": null, // id стикера для прикрепления к файлу
"file_source": "dictaphone", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту прикрепления
},
"origin": { // информация по времени и месту записи файла
"time": 1533113954, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту записи
},
"author": null // информация о приложении и платформе
},
{
"file": "dN2k9B9r42Ybsa.txt", // название файла после загрузки
"file_name": "1288324666.txt", // исходное название файла
"description": "Вторая запись", // описание файла
"file_type": "FILE", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": null, // для типа "FILE" false или null
"sticker_id": null, // id стикера для прикрепления к файлу
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту прикрепления
},
"origin": { // информация по времени и месту записи файла
"time": 1533113954, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту записи
},
"author": null // информация о приложении и платформе
},
{
"id": 54666, // id файла
// обновлять можно только описание, стикер
// и процент совпадения фото с образцом
"sample_matching": 60, // процент совпадения фото с образцом
"description": "Вторая запись", // описание файла
"sticker_id": 5, // id стикера для прикрепления к файлу
},
... // следующие элементы списка файлов
]
},
}
http 200
// 2.0
{
"id": 789249, // id созданного задания
"no": 3, // номер задания в кластере
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"contract_id": 443, // id контракта, по которому создано задание
"contract_title": "Контракт на выполнение ремонта дорог", // название контракта
"contract_no": 01082022, // номер контракта
"date": 1542969580, // дата создания задания
"deadline": 1542969580, // дедлайн
"expired_date": 1541581662 // момент, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_no": 1, // номер этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1542969580, // дата обновления задания
"date_local": "19.04.2024 01:00", // локальная дата создания задания
"deadline_local": "22.04.2024 01:00", // локальный дедлайн
"expired_date_local": "22.04.2024 01:00", // локальная дата, когда задание было просрочено
"update_date_local": "22.04.2024 01:00", // локальная дата изменения задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"is_template": false, // шаблонное задание
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"unread_message_count": 3, // количество непрочитанных комментариев
"favorite": true, // находится ли задание в избранном у текущего пользователя
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"service_object_layer_title": "Название слоя", // название слоя
"service_object_title": "Наименование объекта", // наименование объекта
"schedule_id": 107486, // id расписания
"added_photo_count": 0, // количество фото, добавленных после создания задания
"sample_matching": 60, // минимальный процент совпадения фото с образцом
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_no": 2, // номер этапа
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
DELETE /rest/tasks/:id
Удаление задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог удалить задание, его роль должна иметь capability со свойствами: capability_id = 2, capability_name = "delete".
GET /rest/tasks/:id/can/*capabilities
Проверка прав пользователя на задание: имеет ли пользователь право выполнять указанные действия (capabilities) с заданием. Действия (capabilities) перечисляются через запятую в строке запроса.
/tasks/123/can/show,delete
http 200
// 2.0+
{
"show": true, // действие, доступно или нет
"delete": true // действие, доступно или нет
}
POST /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Поставить оценку указанному заданию. Оценку можно поставить, только если это ещё не было сделано, либо если она была удалена. Запрос разрешается выполнять только пользователю с ролью Клиент, который создал задание. Оценка является целым числом и обязательно должна быть передана. Комментарий является необязательным. В базу будет записано время проставления оценки и пользователь, который её проставил.
// 2.0+
{
"rating": 5, // * Оценка, целое число от 1 до 5
"comment": "Все отлично"
}
http 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
http 400
// 2.0+
{
"error_description": "rating: Обязательное поле."
}
http 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
http 403
// 2.0+
{
"error_description": "Оценка уже была поставлена."
}
GET /rest/tasks/:id/rating
Клиент-создатель задания, главный администратор, главный инспектор, администратор организации, инспектор организации.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Получить оценку, поставленную заданию.
http 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
http 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
http 404
// 2.0+
{
"error_description": "Оценки не существует."
}
PATCH /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Проставить оценку указанному заданию. Разрешается выполнять только пользователю с ролью Клиент, который создал задание. К этому моменту оценка уже должна быть поставлена. Поля оценки и комментария в этом запросе необязательные, можно не присылать одно из них. Попытка не прислать оба поля не вызывает изменений в БД, пользователю отдаётся код 200. Попытка прислать null в качестве оценки вызывает 400 BadRequest.
// 2.0+
{
"rating": 4, // Оценка, целое число от 1 до 5
}
// 2.0+
{
"comment": "Не уложились в срок",
}
// 2.0+
{
"rating": null, // 400 Bad Request
}
// 2.0+
{ // Не вызывает изменений в БД
}
http 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
http 200
// 2.0+
{
"rating": 4, // Оценка, Int от 1 до 5
"comment": "Не уложились в срок",
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
http 400
// 2.0+
{
"error_description": "rating: Обязательное поле."
}
http 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
http 404
// 2.0+
{
"error_description": "Такой оценки не существует!"
}
DELETE /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Удалить оценку, поставленную заданию.
http 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
http 404
// 2.0+
{
"error_description": "Такой оценки не существует!"
}
GET /rest/tasks/:id/comments/list
Получение списка комментариев к заданию.
Параметры фильтрации
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultDESC
— направление сортировки (ASC, DESC). Сортировка производится по номеру сообщения (первичный критерий) и дате (вторичный критерий для сообщений без номера)
http 200
// 2.0+
{
"items": [
{
"id": 50029, // id комментария
"uuid": "1454bd95-3653-4499-ab39-9733af031312",
"date": 1533289354, // дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 1, // id этапа
"name": "новое" // название этапа
},
"new_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 2, // id этапа
"name": "назначено" // название этапа
},
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": { // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"id": 188, // id организации
"name": "Отдел разработки" // название организации
},
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": { // значение assigned_user после изменения (если это значение было изменено, иначе null)
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // имя пользователя
},
"files_added": [], // список добавленных после изменения файлов
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 //id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", //ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, //id задания
"chat_message_number": 99, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
},
{
"id": 50028, //id комментария
"uuid": "b95268a0-41d8-4c91-b758-aa822782c181",
"date": 1533289321, //дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 100, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
},
{
"id": 50026, // id комментария
"uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",
"date": 1533215336, // дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": "Были добавлены новые файлы. Файлы были изменены.", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39981, // id изменения
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_assigned_status": null, // значение этапа до изменения (если это значение было изменено, иначе null)
"new_assigned_status": null, // значение этапа после изменения (если это значение было изменено, иначе null)
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": null, // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": null, // значение assigned_user после изменения (если это значение было изменено, иначе null)
"files_added": [
{ // список добавленных после изменения файлов
"id": 54665, // id файла
"num": 24, // порядковый номер файла
"sample_matching": 60, // процент совпадения фото с образцом
"name": "Fox.jpg", // исходное названи файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", //название файла на сервере
"link": null, // ссылка, если видео файл, если он находится не на сервере, или null
"sticker": null, // информация для стикера, прикрепленного к файлу
"create_date": 1533215334,
"deleted": false, // был файл удален или нет
"file_source": "device_camera", // источник файла
"size": 1288395, // размер файла в байтах
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикреплени файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 25.85713665489607, // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1533113954, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // информация по месту создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 115.121211221212, // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 60529 // id задания
}
],
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 // id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 101, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
}
]
}
POST /rest/tasks/:id/comments
Добавление комментария к заданию.
// 2.0+
{
"uuid": "Работы начаты", // UUID4, необязательное поле
"comment": "Комментарий" // текст комментария
}
http 200
// 2.0+
{
"id": 9145, // id комментария
"uuid": "cdnjskcnkjdancfk", // UUID4, необязательное поле
"parent": null, // родительский комментарий
"date": 1542969580, // дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начаты", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 102, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
}
POST /rest/tasks/:id/comments/:referenceId
Добавление ответного комментария
Параметры запроса
id
long — id заданияreferenceId
long — id существующего комментария
// 2.0+
{
"uuid": "vfjdnvkjlsdnfvkj" // UUID4, необязательное поле
"comment": "Работы начали. Прибыли на объект" // текст комментария
}
http 200
// 2.0+
{
"id": 9146, // id комментария
"uuid": "cdnjskcnkjdancfk", // UUID4, необязательное поле
"parent": {...}, // родительский комментарий в том же формате,
// но без вложенного родительского
"date": 1542969580, // дата создания комментария
"date_local": "20.06.2024 15:40", // локальная дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начали. Прибыли на объект", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 103, // номер сообщения в чате задания
"chat_id": 123, // системный номер канала сообщений
"system_message_code": null // код системного сообщения
}
PUT /rest/tasks/:id/stickers
Прикрепление стикеров к файлам задания. При прикреплении производится проверка доступности указанных стикеров виду работ. При проверке учитывается свойство стикеров is_for_all (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, будет выдана ошибка 403. Если пара {file_id, sticker_id} не передана, полагаем, что к файлу никакой стикер не прикрепляется.
// 2.0+
{
"files": [
{
"file_id": 123,
"sticker_id": 12
},
{
"file_id": 124,
"sticker_id": 14
}
]
}
GET /rest/tasks/:id/photos/main/fit/w:width/h:height
Получение превью главной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что её стороны не будут выступать за границы прямоугольника.
Параметры запроса
w
integer — желаемая ширинаh
integer — желаемая высота
/tasks/69704/photos/main/fit/w400/h300
GET /rest/tasks/:id/photos/:num/fit/w:width/h:height
Получение превью указанной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что её стороны не будут выступать за границы прямоугольника.
Параметры запроса
num
integer — порядковый номер фотографииw
integer — желаемая ширинаh
integer — желаемая высота
/tasks/69704/photos/3/fit/w400/h300
GET /rest/tasks/:id/photos/main/crop/w:width/h:height
Получение превью главной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.
Параметры запроса
w
integer — желаемая ширинаh
integer — желаемая высота
/tasks/69704/photos/main/crop/w400/h300
GET /rest/tasks/:id/photos/:num/crop/w:width/h:height
Получение превью указанной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.
Параметры запроса
num
integer — порядковый номер фотографииw
integer — желаемая ширинаh
integer — желаемая высота
/tasks/69704/photos/3/crop/w400/h300
GET /rest/tasks/:id/photos/main
Получение главной фотографии задания.
GET /rest/tasks/:id/photos/:num
Получение указанной фотографии задания.
Параметры запроса
num
integer — порядковый номер фотографии
GET /rest/tasks/:id/sounds/:num
Получение указанной звукозаписи задания.
Параметры запроса
num
integer — порядковый номер звукозаписи
GET /rest/tasks/:id/videos/:num
Получение указанного видеофайла задания.
Параметры запроса
num
integer — порядковый номер видеофайла
GET /rest/tasks/:id/files/:num
Получение указанного приложенного файла задания.
Параметры запроса
num
integer — порядковый номер приложенного файла
POST /rest/tasks/mapping/layer/:layerId/object/:objectId
Маппинг объекта обслуживания в пустое задание.
http 200
// 2.0+
{
"task": {
"id": null,
"no": null,
"title": "Киндери-title", // заголовок
"text": "Киндери-desc", // описание
"fields": { // JSON-объект, состоящий из списка настраиваемых полей
"test": {
"field_id": 3,
"value": "1-field"
}
},
"lat": 55.89687634, // координаты точки - lat
"lon": 49.24621582, // координаты точки - lon
"stage": 1, // стадия задания
"archive": false, // архивное задание
"is_template": false, // шаблонное задание
"deadline": null,
"num_main_photo": null,
"system_data": null,
"update_date": null,
"expired_date": null,
"service_object_layer_id": null,
"service_object_layer_title": null,
"service_object_id": null,
"service_object_title": null,
"schedule_id": null,
"added_photo_count": 0,
"sample_matching": null,
"parent": null,
"unread_message_count": null,
"organization_logo": null,
"workgroup_id": null,
"date": null,
"attachments": [],
"sys_org_id": 456,
"sys_clr_id": null,
"sys_user_id": null
}
}
POST /rest/tasks/:id/favorite
Добаление задания в список избранных заданий пользователя.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог добавить задание в список избранных, его роли должна быть доступна capability = show.
Если задание уже находится в списке избранных заданий пользователя, ошибку не получаем (INSERT в таблицу повторно не выполняется).
http 200
// 2.0+
{
}
DELETE /rest/tasks/:id/favorite
Удаление задания из списка избранных заданий пользователя.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог добавить задание в список избранных, его роли должна быть доступна capability = show.
Если задание не находится в списке избранных заданий пользователя, получаем ошибку 403.
http 200
// 2.0+
{
}
/rest/configuration
GET /rest/configuration/tree-nodes
Главный администратор, главный инспектор.
Отдаёт метаинформацию обо всем дереве настроек.
Настройки хранятся в базе в виде дерева, в котором одни из них вложены в другие. Промежуточные настройки являются "папками", а терминальные настройки (листья) - это, собственно, сами настройки, в которые ещё могут быть вложены их возможные значения, различные для разных пользователей и/или ролей, организаций, состояний заданий. Формат представления этих сущностей в JSON разный.
Каждая из настроек помимо id
имеет поля name
и label
. Первое из них
используется как имя настройки при вызове /props
. Рекомендуется использовать
в нём только латинские буквы, цифры, знаки -
и _
. Второе поле
используется как имя настройки, отображаемое в интерфейсе.
Если в одну промежуточную настройку вложено несколько других с одинаковым
именем name
, то они собираются в массив. Порядковый номер
настройки в массиве задаётся полем array_index
.
Также настройки могут быть системными. Они хранят сведения, критически важные для работы приложения, а потому создаются только разработчиками при выпуске новых версий, и не могут быть изменены или удалены (это не касается их возможных значений).
Терминальная настройка имеет тип данных type
и четыре поля для
значения по умолчанию, из которых заполненным может быть только
одно (какое именно - зависит от типа данных): default_bool_value
,
default_double_value
, default_int_value
,
default_string_value
.
Терминальная настройка может иметь любое количество возможных значений,
в том числе нулевое. Все возможные значения одной настройки отсортированы
по полю order_index
и имеют правило доступа access_rule
.
Последнее определяет, какое именно возможное значение будет взято
при вычислении настройки. Внутри access_rule
могут находиться
user
- при наличии указывает, что возможное значение справедливо только для этого пользователя;role
- при наличии указывает, что возможное значение справедливо только для этой роли;organization
- при наличии указывает, что возможное значение справедливо только пользователей внутри этой организации;state_rule
- содержит состояния заданий (states
). Если настройка вычисляется в контексте задания, то возможное значение может быть применено, только если задание удовлетворяет этим состояниям.
Все эти поля необязательны.
При вычислении значения настройки сначала определяется список допустимых
возможных значений в соответствии с описанием полей user
, role
,
organization
, state_rule
выше (при их отсутствии возможное значение
всегда допустимо).
Из допустимых возможных значений выбирается первое из них в порядке
возрастания order_index
. Из него в зависимости от типа настройки
выбирается одно из полей bool_value
, double_value
, int_value
string_value
. Если допустимых значений нет, то берётся значение
по умолчанию.
Промежуточная настройка
// 2.0+
{
"id": 1, // * ID настройки
"name": "intermediate_node", // * название для выдачи в JSON в /configuration/props
"label": "Некая промежуточная настройка", // * имя настройки для отображения в интерфейсе
"is_terminal": false, // * false для промежуточной настройки
"is_system": true/false, // * признак системной настройки
"array_index": 0, // * задаёт индекс в массиве, если настройка входит в массив
//
"children": [...] // Массив дочерних настроек.
// Может содержать оба типа настроек - и промежуточные,
// и терминальные.
}
Терминальная настройка
// 2.0+
{
"id": 2, // * ID настройки
"name": "terminal_node", // * название для выдачи в JSON в /configuration/props
"label": "Некая терминальная настройка", // * имя настройки для отображения в интерфейсе
"is_terminal": true, // * true для терминальной настройки
"is_system": true/false, // * признак системной настройки
//
"type": "INTEGER", // * тип данных терминальной настройки, один из
// {BOOLEAN, INTEGER, DOUBLE, STRING}
//
"default_bool_value": null, // значение по умолчанию будет
"default_double_value": null, // находиться в одном из четырёх полей
"default_int_value": 1, //
"default_string_value": null, //
//
"possible_values": [...] // Массив возможных значений настройки
}
Возможное значение настройки
// 2.0+
{
"id": 1, // * ID возможного значения
"order_index": 0, // * задаёт порядок этого возможного значения среди прочих
//
"bool_value": null, // в зависимости от типа настройки, её значение
"double_value": null, // будет содержаться в одном из этих полей
"int_value": 2, //
"string_value": null, //
//
"access_rule": { // правило срабатывания
"role": { // роль пользователя
"id": 7,
"name": "Пользователь ведомства"
},
"organization": { // организация пользователя
"id": 188,
"name": "Информационные технологии"
},
"user": { // пользователь
"id": 1230,
"fio": "Иванов Сергей Петрович"
},
"state_rule": { // состояния задания
"states": [
1,
2,
3
]
}
}
}
http 200
// 2.0+
{
"rootProperty": {...} // корневой узел - всегда промежуточный
}
PUT /rest/configuration/tree-nodes/:id
Главный администратор, главный инспектор.
Позволяет полностью изменить информацию о каком-то узле дерева настроек, включая его свойства, свойства дочерних настроек, набор дочерних настроек, набор возможных значений терминальных настроек и проч.
Тело запроса должно содержать полное описание изменяемого узла, его потомков, потомков его потомков и так далее, даже если сами эти потомки не меняются.
Если для какого-то поля указано, что оно неизменяемо (без дополнительных комментариев), это означает, что заданное при создании этой настройки значение в дальнейшем не может быть изменено.
Параметры
обязательный
id
long — id редактируемой настройки
Промежуточная настройка
// 2.0+
{
"id", // не изменяемо; для новых настроек не передаётся
"name", // * название; для системных настроек неизменяемо
"label", // * отображаемое имя; для системных настроек неизменяемо
"is_terminal": false, // * false для промежуточных настроек; неизменяемо
"array_index": 0, // * индекс в массиве
"children": [...] // дочерние настройки
}
Терминальная настройка
// 2.0+
{
"id", // неизменяемо; для новых настроек не передаётся
"name", // * название; для системных настроек неизменяемо
"label", // * отображаемое имя; для системных настроек неизменяемо
"is_terminal": true, // * true для терминальных настроек; неизменяемо
"type": "INTEGER", // * тип; неизменяемо
"possible_values": [...] // возможные значения
}
Возможное значение настройки
// 2.0+
{
"id", // неизменяемо; для новых настроек не передаётся
"order_index", // * порядок в списке возможных значений
"bool_value", // поля для хранения значения; должно быть заполнено
"double_value", // только одно в зависимости от типа настройки
"int_value",
"string_value",
"access_rule": { // правило доступности возможного значения
"role": { // для роли
"id": 7
},
"user": { // для пользователя
"id": 1230
},
"organization": { // для организации
"id": 188
},
"state_rule": { // в состояниях
"states": [
1,
2,
3
]
}
}
}
http 200
// 2.0+
{
"property": {...} // изменённый узел
}
GET /rest/configuration/props
Отдаёт все настройки и их значения, рассчитанные для текущего пользователя.
http 200
// 2.0+
{ // Содержатся все настройки в виде JSON-объекта
// с названиями полей, соответствующими "name" настроек.
// Значения настроек уже рассчитаны в соответствии
// с заведёнными для них правилами и с учетом
// переданного токена (или его отсутствия).
}
GET /rest/configuration/backward-compatible
Получение некоторых настроек для сохранения обратной совместимости
со старыми версиями клиентских приложений. Ранее запрос назывался
/files/settings
; он и сейчас работает, т.к. на nginx сделан проброс.
Т.к. ранее /files/settings
был просто запросом к файлу, и потому
выполнялся без токена, то в /backward-compatible
сохранено такое
поведение. Все настройки вычисляются так, как если бы токен не передавался.
http 200
// 2.0+
{
"is_camera_needs_to_use_location": false, // настройка "mobileapp/camera/is_camera_needs_to_use_location"
"camera_max_location_error_meters": 50, // настройка "mobileapp/camera/camera_max_location_error_meters"
"camera_max_location_delay_millis": 10000, // настройка "mobileapp/camera/camera_max_location_delay_millis"
"is_need_to_use_custom_camera": true, // настройка "mobileapp/camera/is_need_to_use_custom_camera"
"camera_is_put_date_stamp": false, // настройка "mobileapp/camera/camera_is_put_date_stamp"
"is_need_choose_sticker_before_start_camera": false, // настройка "mobileapp/camera/is_need_choose_sticker_before_start_camera"
"is_need_choose_sticker_after_stop_camera": false, // настройка "mobileapp/camera/is_need_choose_sticker_after_stop_camera"
"camera_max_distance_to_task_meters": 100, // настройка "mobileapp/camera/camera_max_distance_to_task_meters"
"is_need_add_caption_mode": true, // настройка "mobileapp/camera/is_need_add_caption_mode"
"is_required_add_caption": false, // настройка "mobileapp/camera/is_required_add_caption"
"is_landing": false, // настройка "system/is_landing"
"mapinformer_type": "standard", // настройка "mobileapp/mapinformer_type"
"geoportal": {
"url": "http://integration.dev.geo4.pro", // доступ к геопорталу; значение рассчитывается
// исходя из ключей ssc.host и requests.use.ssl.protocol
// в настройках
"socket_port": "80" // константа
},
"cerebellum": {
"url": "http://integration.dev.geo4.pro" // доступ к cerebellum; значение рассчитывается
// исходя из ключей ssc.host и requests.use.ssl.protocol
}
}
GET /rest/configuration/java-options
Получение информации о настройках конфигурации.
http 200
// 2.0+
{
"onlyMyOrganization": false, // в системе отображается только организация текущего пользователя
// (значение параметра берется из конфигурационного файла application.conf)
"-Dfiles.localStorage": "c:/work/tmp", // локальное хранилище для загружаемых файлов
// (значение параметра берется из "VM Options")
"filesLocalStorage": "c:/work/tmp", // локальное хранилище для загружаемых файлов
// (если значение параметра не прописано в "VM Options",
// тогда оно берется из конфигурационного файла application.conf)
"taskSeparateNumeration": false, // раздельная нумерация заданий в разных кластерах
"gisEditorDefaultAccess": false, // интеграция с ГИС редактором
"issueZoneTrackingOn": false // включать отслеживание местоположения исполнителя
// по умолчанию для всех заданий
}
PUT /rest/configuration/locale/*code
Главный администратор.
Изменить локаль сервера.
GET /rest/configuration/system/ldap
Получить значения настроек аутентификаци через LDAP.
http 200
// 2.0+
{
"host": "ldap.example.com", // хост
"port": 389, // порт
"admin_login": "login", // логин администратора
"admin_password": "password", // пароль администратора
"attributes": { // основные атрибуты Active Directory
"phone": "telephoneNumber", // телефон
"name": "displayName", // фио
"login": "sAMAccountName", // логин
"email": "mail" // email
},
"automatic_user_creation": { // автоматическое создание пользователей
"role_id": 7, // идентификатор роли пользователя
"organization_id": 7, // идентификатор организации пользователя
"enabled": false // включено
}
}
PUT /rest/configuration/system/ldap
Главный администратор.
Изменить значения настроек аутентификаци через LDAP.
Входные данные
// 2.0+
{
"host": "ldap.example.com", // хост
"port": 389, // порт
"admin_login": "login", // логин администратора
"admin_password": "password", // пароль администратора
"attributes": { // основные атрибуты Active Directory
"phone": "telephoneNumber", // телефон
"name": "displayName", // фио
"login": "sAMAccountName", // логин
"email": "mail" // email
},
"automatic_user_creation": { // автоматическое создание пользователей
"role_id": 7, // идентификатор роли пользователя
"organization_id": 7, // идентификатор организации пользователя
"enabled": false // включено
}
}
http 200
// 2.0+
{
"host": "ldap.example.com", // хост
"port": 389, // порт
"admin_login": "login", // логин администратора
"admin_password": "password", // пароль администратора
"attributes": { // основные атрибуты Active Directory
"phone": "telephoneNumber", // телефон
"name": "displayName", // фио
"login": "sAMAccountName", // логин
"email": "mail" // email
},
"automatic_user_creation": { // автоматическое создание пользователей
"role_id": 7, // идентификатор роли пользователя
"organization_id": 7, // идентификатор организации пользователя
"enabled": false // включено
}
}
/rest/clusters
GET /rest/clusters/list
Список кластеров, доступных текущему пользователю.
Главному администратору и главному инспектору доступны все неудаленные кластеры.
Пользователи других ролей видят только свой кластер.
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [ // список доступных кластеров
{
"id": 2, // id кластера
"title": "Организации Вахитовского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"isolated": false, // отметка: является ли кластер изолированным
"time_zone": "Europe/Moscow", // таймзона кластера
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
},
... // следующие элементы списка
],
}
GET /rest/clusters/:id
Получение информации по кластеру (если данный кластер доступен текущему пользователю).
Главному администратору и главному инспектору доступны все неудаленные кластеры.
Пользователи других ролей видят только свой кластер.
http 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"isolated": false, // отметка: является ли кластер изолированным
"time_zone": "Europe/Moscow", // таймзона кластера
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
}
POST /rest/clusters
Главный администратор, Главный инспектор.
Добавление нового кластера.
// 2.0+
{
"title": "Организации Кировского района" // * название кластера
"isolated": false, // отметка: является ли кластер изолированным
// по умолчанию - false
"time_zone": "Europe/Moscow" // таймзона кластера, возможный формат - "UTC+3", "UTC+03:00" или "Europe/Moscow"
}
http 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"isolated": false, // отметка: является ли кластер изолированным
"time_zone": "Europe/Moscow", // таймзона кластера
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
}
PATCH /rest/clusters/:id
Главный администратор, Главный инспектор, Администратор кластера.
Администратор кластера может редактировать только свой кластер.
Изменение информации о кластере.
// 2.0+
{
"title": "Организации Приволжского района" // * название кластера
}
http 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Приволжского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"isolated": false, // отметка: является ли кластер изолированным
"time_zone": "Europe/Moscow", // таймзона кластера
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
}
DELETE /rest/clusters/:id
Главный администратор.
Удаление кластера.
При попытке удаления кластера "По умолчанию" или кластера, в котором есть организации, получим ошибку (400 BadRequest).
GET /rest/clusters/:id/tariffs/statistics
Главный администратор.
Запрос возвращает информацию о количестве пользователей и заданий, созданных за расчетный период тарифа
http 200
// 2.0+
{
"task_count": 43, // количество заданий, созданных в кластере за расчетный период
"user_count": 68, // количество пользователей в кластере
"used_memory": null, // израсходованная память
"tariff": {
"id": 1, // id тарифа
"limits": {
"task_count": 500, // ограничение по количеству заданий
"user_count": 600, // ограничение по количеству пользователей
"storage_space": 100 // ограничение на общее количество используемого дискового места, ГБ
}
"is_free": true // метка: является ли тариф бесплатным
},
"begin": "08.12.2023", // дата начала расчетного периода
"end": "08.01.2024" // дата, до которой действует тариф
}
/rest/organizations
GET /rest/organizations/list/:limit/:offset
Получение списка организаций, где offset
- номер первой выводимой в ответе организации, limit
- количество выводимых
в ответе организаций.
Главный инспектор и главный администратор видят все организации, для других пользователей видимость организаций зависит от настройки behavior.can.see.my.organization.only. Если эта настройка выставлена в true, пользователь будет видеть только доступные ему организации. Если настройка выставлена в false, доступ к организациям будет ограничиваться его кластером.
Параметры limit
, offset
не обязательны.
Параметры
clusterId
long — отображаются организации указанного кластераsearch
string — поиск по названию или idclient
boolean — показывать только клиентские организации
http 200
// 2.0+
{
"items": [
{
"id": 2, // id организации
"name": "Отдел Тестирования T", // название организации
"logo": "logo_291.jpg", // название файла логотипа
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"users_count": 37, // количество пользователей
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901 // БИК банка
"account": 2012019292109, // Счет организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгултера
"max_users_count": 50 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 500 // организация-исполнитель по умолчанию
},
... // следующие элементы списка организаций
]
}
GET /rest/organizations/public
Получение списка публичных (клиентских) организаций.
http 200
// 2.0+
{
"items": [
{
"id": 3, // id организации
"name": "Власть народу", // название организации
"logo": "logo_162.jpg", //
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
}
},
... // следующие элементы списка организаций
]
}
POST /rest/organizations/icons
Загрузка файлов пиктограмм для организаций.
Для версий Cerbellum до 0.16 в запросе на загрузку пиктограмм необходимо:
указать
Content-Disposition: name="Filedata"
,передать файл в переменной
Filedata
.
Для версий Cerbellum от 0.16 и старше в запросе достаточно передать файл пиктограммы, дополнительно ничего указывать не нужно.
Пример загрузки пиктограммы через REST-клиент Advanced REST client
http 200
// 2.0+
{
"name": "ebb453e8-db16-1004-8f9e-3e07628b8015.jpg" // имя файла, преобразованное с помощью
// UUID-стандарта идентификации
}
GET /rest/organizations/:id
Получение данных по конкретной организации.
Для пользователей с ролями Главный администратор, Главный инспектор доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается их кластером.
http 200
// 2.0+
{
"id": 600, // ID
"name": "Высокие технологии", // название
"logo": "logo_600.jpg", // файл с логотип организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Банковский счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 50 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 500, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
POST /rest/organizations
Добавление новой организации.
Главный администратор, Администратор кластера.
Администратор кластера может создавать организации только внутри своего кластера.
Файл с логотипом к моменту запроса должен находиться в папке
{FILES_ROOT}/department_logo
Поле
id
применяется для интеграционных целей: чтобы создаваемая организация имела тот жеID
, что и её двойник в некой другой системе
Входные данные
// 2.0+
{
"name": "Высокие технологии", // * название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // id положения карты
"client": false, // признак клиентской организации; по умолчанию false
"gis_editor_default_access": false, // интеграция с ГИС редактором,
// доступно только главному администратору
"cluster_id": 2, // id кластера
//
"info": { // * дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"id": 600, // id при создании; не должно совпадать с существующими
//
"default_assigned_organization_id": 99 // организация-исполнитель по умолчанию
}
http 200
// 2.0+
{
"id": 600, // ID
"name": "Высокие технологии", // название
"logo": "logo_600.jpg", // файл с логотип организации
"cluster_id": 2, // id кластера
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": null, // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 99, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
PATCH /rest/organizations/:id
Изменение информации об организации.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может менять данные только своих организаций.
Администратор кластера может менять данные организаций внутри своего кластера.
Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo
Перенос организации в другой кластер (cluster_id) разрешен только пользователю с ролью Главный администратор.
Входные данные
// 2.0+
{
"name": "Высокие технологии", // название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // id положения карты
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором,
// доступно только главному администратору
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после
// загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после
// загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное
// после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
// (не должно быть меньше текущего количества пользователей организации)
},
"default_assigned_organization_id": 99 // организация-исполнитель по умолчанию
}
http 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 99, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
PUT /rest/organizations/:id
Изменение существующей организации.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может изменять данные только своих организаций.
Администратор кластера может менять данные организаций внутри своего кластера.
Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo
Перенос организации в другой кластер clusterid) разрешен только пользователю с ролью Главный администратор.
Входные данные
// 2.0+
{
"name": "Высокие технологии", // * название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // * id положения карты
"client": false, // * признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором,
// доступно только главному администратору
"info": { // * дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации (не должно быть меньше текущего количества пользователей организации)
}, //
//
"default_assigned_organization_id": 99 // организация-исполнитель по умолчанию
}
http 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
"cluster_id": 2, // id кластера
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 99, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
DELETE /rest/organizations/:id
Удаление организации.
Главный администратор, Администратор кластера.
Администратор кластера может удалять организации внутри своего кластера.
При удалении организации происходит удаление пользователей, для которых эта организация - главная.
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer об удалении пользователей
POST /rest/organizations/:id/invite-url
Создать invite-URL.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может создать invite-URL для своей организации.
Администратор кластера может создать invite-URL для организации своего кластера.
http 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 500, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
DELETE /rest/organizations/:id/invite-url
Удалить invite-URL.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может удалить invite-URL из своей организации.
Администратор кластера может удалить invite-URL из организации своего кластера.
http 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
"gis_editor_default_access": false, // интеграция с ГИС редактором
"invite_url": "https://...", // url приглашения
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"default_assigned_organization_id": 500, // организация-исполнитель по умолчанию
"message_channel_id": 65006 // идентификатор канала уведомлений
}
GET /rest/organizations/:id/users
Получение списка пользователей организации, где id
- id организации.
Главный администратор и Главный инспектор могут видеть всех пользователей всех организаций.
Администратор кластера может видеть пользователей организаций внутри своего кластера, а также внутри доступных ему проектов.
Пользователи с другими ролями могут видеть пользователей внутри своих организаций и доступных проектов.
Данные пользователей с ролью Клиент недоступны другим пользователям с ролью Клиент.
http 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id основной организации, либо null, если пользователь
// не относится ни к какой организации
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"organization_ids": [ // массив id организаций пользователя
2,
132,
232
],
"role_id": 10, // id роли пользователя: 6, 7 - обычный пользователь,
// 10 - админ организации, 8 - администратор всех организаций
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в статии "В работе"
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка
// пользователей организации
]
}
GET /rest/organizations/:id/workgroups
Список проектов организации, доступных текущему пользователю.
Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:
проекты, в которые их включили явно
открытые проекты, если они состоят в этой организации
администраторам и инспекторам этой организации доступны все проекты
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default1000000
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)title
string — поиск только тех групп, названия которых включают переданный текст (без учета регистра)
http 200
// 2.0+
{
"items": [ // список доступных проектов
{
"id": 2, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": true, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590578653, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
},
},
{
"id": 3,
"title": "Мобильное приложение для работы с обращениями граждан",
"open": false,
"defaults": false,
"creation_date": 1590578653,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 189,
"name": "Отдел разработки ПО"
}
},
{
"id": 1,
"title": "По умолчанию",
"open": true,
"defaults": true,
"creation_date": 1590578653,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 189,
"name": "Отдел разработки ПО"
}
}
],
}
POST /rest/organizations/:id/types/:typeId
Привязка вида работ к организации.
Главный администратор, Администратор кластера, Администратор организации.
Администратор кластера может привязать вид работ только к организациям своего кластера.
Администратор организации может привязать вид работ только к своим организациям.
Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
DELETE /rest/organizations/:id/types/:typeId
Удаление связи между видом работ и организацией.
Главный администратор, Администратор кластера, Администратор организации.
Администратор кластера может удалить связь между видом работ и организацией своего кластера.
Администратор организации может удалить связь между видом работ и своей организацией.
Если связи не существует, получаем ошибку 400.
GET /rest/organizations/:id/stamp
Получить изображение печати организации.
Для пользователей с ролями Главный администратор, Главный инспектор доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается их кластером.
GET /rest/organizations/:id/head-signature
Получить изображение подписи руководителя организации.
Для пользователей с ролями Главный администратор, Главный инспектор доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается их кластером.
GET /rest/organizations/:id/accountant-signature
Получить изображение подписи бухгалтера организации.
Для пользователей с ролями Главный администратор, Главный инспектор доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается их кластером.
/rest/workgroups
GET /rest/workgroups/list
Список проектов, видимых текущему пользователю.
Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:
проекты, в которые их включили явно
открытые проекты их организаций
администратором и инспекторам организаций видны все проекты в рамках их организаций
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)title
string — поиск только тех проектов, названия которых включают переданный текст (без учета регистра)
http 200
// 2.0+
{
"items": [ // список доступных проектов
{
"id": 2, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": true, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
},
},
{
"id": 3,
"title": "Мобильное приложение для работы с обращениями граждан",
"open": false,
"defaults": false,
"creation_date": 1590577589,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 188,
"name": "Отдел технической поддержки"
},
},
{
"id": 1,
"title": "По умолчанию",
"open": true,
"defaults": true,
"creation_date": 1590577589,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 188,
"name": "Отдел системного администрирования"
}
}
]
}
GET /rest/workgroups/:id
Получение информации о проекте, если проект доступен текущему пользователю.
Главному администратору и главному инспектору доступны все проекты.
Администраторам и инспекторам организаций доступны проекты их организаций, а также другие проекты, в которые их включили явно.
Пользователям других ролей доступны открытые проекты их организаций, а также другие проекты, в которые их включили явно.
http 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
}
GET /rest/workgroups/:id/users
Получение списка пользователей проекта, где id
- id проекта.
Главный администратор и Главный инспектор могут видеть пользователей внутри всех проектов.
Пользователи с другими ролями могут видеть пользователей внутри доступных им проектов.
Данные пользователей с ролью Клиент недоступны другим пользователям с ролью Клиент.
http 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id основной организации, либо null, если пользователь
// не относится ни к какой организации
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"organization_ids": [ // массив id организаций пользователя
2,
132,
232
],
"role_id": 10, // id роли пользователя: 6, 7 - обычный пользователь,
// 10 - админ организации, 8 - администратор всех организаций
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в статии "В работе"
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка
// пользователей организации
]
}
POST /rest/workgroups
Добавление нового проекта.
Главный администратор, Главный инспектор, Администратор организации, Инспектор организации, Администратор кластера.
Главный администратор и Главный инспектор могут создать проект в любой организации.
Администратор организации и Инспектор организации могут создать проект только в своих организациях.
Администратор кластер может создавать проекты в организациях своего кластера.
// 2.0+
{
"title": "Настольная система по работе с обращениями граждан", // * название проекта
"organization": {
"id": 189
}, // * id организации проекта
"open": false // отметка: является ли данный проект открытым; значение по умолчанию - true
}
http 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
}
PATCH /rest/workgroups/:id
Изменение информации о проекте.
Главный администратор, Главный инспектор, Администратор организации, Инспектор организации, Администратор кластера.
Главному администратору и Главному инспектору для редактирования доступны все проекты.
Администратору организации и Инспектору организации для редактирования доступны проекты своих организаций, а также другие проекты, в которые их включили явно.
Администратору кластера для редактирования доступны проекты в организациях своего кластера.
При попытке изменения проекта "По умолчанию" получим ошибку (400 BadRequest).
// 2.0+
{
"title": "Настольная система по работе с жалобами граждан" // * название проекта
}
http 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с жалобами граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
}
DELETE /rest/workgroups/:id
Удаление проекта.
Главный администратор, Администратор организации, Администратор кластера.
Главному администратору для удаления доступны все проекты.
Администратору организации для удаления доступны проекты своих организаций, а также другие проекты, в которые его включили явно.
Администратору кластера для удаления доступны проекты в организациях своего кластера.
При попытке удаления проекта "По умолчанию" получим ошибку (400 BadRequest).
POST /rest/workgroups/:id/users/:userId
Добавление пользователя в проект
Главный администратор, Главный инспектор, Администратор организации, Инспектор организации, Администратор кластера.
Главному администратору и Главному инспектору доступны все проекты.
Администратору организации и Инспектору организации доступны проекты своих организаций, а также другие проекты, в которые их включили явно.
Администратору кластера доступны проекты в организациях своего кластера.
Если пользователь уже состоит в проекте (открытом или закрытом), ничего не происходит; при этом неважно, каким образом он был включен туда ранее.
DELETE /rest/workgroups/:id/users/:userId
Удаление пользователя из проекта
Главный администратор, Администратор организации, Администратор кластера.
Главному администратору доступны все проекты.
Администратору организации доступны проекты своих организаций, а также другие проекты, в которые его включили явно.
Администратору кластера доступны проекты в организациях своего кластера.
Если проект открытый, и пользователь состоит в его организации, то ничего не происходит, а запрос возвращает 403 Forbidden.
Если пользователь не участвует в проекте, то ничего не происходит.
/rest/users
GET /rest/users/current
Получение информации о текущем пользователе.
http 200
// 2.0+
{
"id": 6, // id пользователя
"login": "ivanov", // логин
"fio": "Иванов Иван Иванович", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 1, // id основной организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 8, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"default_assigned_organization_id": 500 // организация-исполнитель заданий,
// подставляемая по умолчанию
}
POST /rest/users/register
Неавторизованный пользователь.
Регистрация нового пользователя с ролью Клиент .
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer о создании пользователя
// 2.0+
{
"login": "login", // * логин
"paswd": 12345, // * пароль
"fio": "Иванов И.И.", // * ФИО
"organization_id": 514, // * id организации
"email": "test@gmail.com", // * email
"tracking": true // включить трекинг, по умолчанию - false
"phone": "+7 999 888 7766", // телефон
"role_id": 6, // id роли,
// возможные значения роли - Пользователь организации и Клиент,
// по умолчанию - Клиент
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999" // паспортные данные
}
http 200
// 2.0+
{
"id": 6923, // id пользователя
"login": "login", // логин
"fio": "Иванов И.И.", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": null, // последнее приглашение
"system": false, // системный пользователь
"tags": [], // список меток пользователя
"organization_id": 514, // id организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"role_id": 6, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": false, // включить трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
}
POST /rest/users/check-login
Неавторизованный пользователь.
Проверка логина на существование в системе.
// 2.0+
{
"login": "user_test" // логин пользователя
}
http 200
// 2.0+
{
"check": false // true - логин не существует в системе,
// и он доступен для использования;
// false - логин существует в системе,
// и он не доступен для использования;
}
GET /rest/users
Получение списка всех пользователей, которых может увидеть текущий пользователь:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
Параметры запроса
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
clusterId
long — отображаются пользователи указанного кластераtaskDate
timestamp — дата, параметр для подсчета количества заданий: в списке отобразится количество назначенных на пользователя заданий, в стадии "В работе" в указанный день (время не учитывается)+
typeId
long — фильтр по типам пользователей+
tagId
long — фильтр по меткам пользователей
http 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО
"organization_id": 2, // id основной организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_ids": [ // массив id организаций пользователя
2,
132,
232
],
"role_id": 10, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в стадии "В работе"
"tracking": false, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка пользователей
]
}
GET /rest/users/by-distance
Запрос выдает список видимых пользователей с информацией об их местоположении:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
todo Если трекинг для пользователя не включен, то информация о местоположении пользователя отсутствует.
Параметры запроса
lon
double — долгота точки, параметр для сортировки пользователей: для активных в течение последних суток пользователей, по местоположению которых имеются данные, рассчитывается расстояние от местоположения пользователя до точки с указанными координатами, и пользователи сортируются в порядке удаления от указанной точки; остальные пользователи сортируются по полюfio
lat
double — широта точки, параметр для сортировки пользователей: для активных в течение последних суток пользователей, по местоположению которых имеются данные, рассчитывается расстояние от местоположения пользователя до точки с указанными координатами, и пользователи сортируются в порядке удаления от указанной точки; остальные пользователи сортируются по полюfio
roles
list of ints — список id ролейorganizationId
list of ints — список id основных организацийsearch
string — параметр для фильтрации пользователей по полюfio
: в списке остаются только те пользователи, значение поляfio
которых содержит в себе указанную строкуpage
integer default1
— параметр для фильтрации пользователей, номер страницы списка пользователей: в ответе отобразится только та часть списка пользователей, которая соответствует указанной страницеlimit
integer default10
— параметр для фильтрации пользователей, количество пользователей из списка, размещенных на одной странице: в ответе отобразится только то количество пользователей из списка, которое соответствует указанному ограничению
http 200
// 2.0+
{
"items": [
{
"user": {
"id": 614, // id пользователя
"fio": "Иванов Иван Иванович", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"organization_id": 3 // id организации пользователя
},
"glonass_id": 225, // ГЛОНАСС-id
"lon": 49.1416784, // координата долготы местоположения пользователя
"lat": 55.7745002, // координата широты местоположения пользователя
"date": 1501844904, // дата последней активности пользователя
"active": true // активность пользователя за последние сутки от
// текущего времени: активность рассчитывается
// исходя из даты последнего обновления точки
// пользователя; null, если нет даты
// обновления, или мы не имеем данных о
// местоположении пользователя;
"distance": 34.7971366515358 // расстояние от пользователя до указанной
// в параметрах запроса точки (в км.),
// либо null, в случаях, если точка не была
// указана в параметрах запроса, или мы не
// имеем данных о местоположении пользователя;
},
... // следующие элементы списка
]
}
GET /rest/users/count
Главный администратор, главный инспектор.
Получение количества пользователей.
http 200
// 2.0+
{
"count": 970 // количество пользователей
}
GET /rest/users/locations
Запрос выдает точки всех пользователей, которые доступны текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
http 200
// 2.0+
{
"items": [
{
"id": 999, // id пользователя
"point": { // координаты местоположения пользователя
"user_id": 225, // ГЛОНАСС-id
"lon": 50.0001, // координата longitude (долгота)
"lat": 50.0002, // координата latitude (широта),
"date": 1526314368, // время последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя в заданный временной интервал
// (интервал задается в переменной geo4me.user.activity.interval
// в файле app.conf, по умолчанию, 30 минут)
}
}
]
}
GET /rest/users/monitoring
Соединение по web-socket для получения координат и значений датчиков пользователей.
Запрос выдает данные, доступные текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пример сообщения по WS
// 2.0+
{
"gauges": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
}
{
"points": [
{
"user": {
"id": 609, // id пользователя
"department_id": 609 // id организации
},
"location": {
"user_id": 1510, // ГЛОНАСС-id
"lon": 49.4513218, // координата долготы
"lat": 56.2500685, // координата широты
"date": 1490987230, // дата последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя (временной интервал
// для проверки активности пользователя задается
// в настройках, по умолчанию это 30 минут);
// null, если нет данных о местоположении пользователя
}
}
]
}
GET /rest/users/locations/live
Соединение по web-socket для получения актуальной информации о местоположении пользователей.
Запрос выдает данные о местоположении пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
// 2.0+
{
"points": [
{
"user": {
"id": 609, // id пользователя
"department_id": 609 // id организации
},
"location": {
"user_id": 1510, // ГЛОНАСС-id
"lon": 49.4513218, // координата долготы
"lat": 56.2500685, // координата широты
"date": 1490987230, // дата последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя (временной интервал
// для проверки активности пользователя задается
// в настройках, по умолчанию это 30 минут);
// null, если нет данных о местоположении пользователя
}
},
{
"user": {
"id": 622,
"organization_id": 622
},
"location": {
"user_id": 1511,
"lon": 0.0,
"lat": 0.0,
"date": null,
"active": false
}
}
]
}
PATCH /rest/users/tags-batch
Главный администратор.
Массовый запрос на редактирование меток пользователей: всем пользователям, id которых указаны в users
, будут добавлены метки из added
и удалены метки из remove
.
Входные данные
// 2.0+
{
"users": [ // пользователи, метки которых необходимо отредактировать
{
"id": 121 // id пользователя
},
... // следующие элементы списка пользователей
],
"tags": { // метки пользователей
"add": [ // метки, которые необходимо добавить
{
"id": 1 // id метки
},
... // следующие элементы списка меток
],
"remove": [ // метки, которые необходимо удалить
{
"id": 2 // id метки
},
... // следующие элементы списка меток
]
}
}
POST /rest/users
Добавление нового пользователя.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может добавить пользователя только в свою организацию.
Администратор кластера может добавить пользователя только в организацию своего кластера.
При добавлении аватара к началу выполнения запроса файл должен быть загружен на сервер запросом POST /files/upload
.
Полученный name нужно подставить в поле avatar_file_name при выполнении основного запроса.
Дата окончания срока действия может быть передана как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время.
В качестве часового пояса берётся пояс кластера главной организации; если главной организации нет, но пользователь состоит только в одном кластере, берётся пояс этого кластера. Иначе берётся часовой пояс системы.
Параметры
with-invite-url
boolean defaultfalse
— нужно ли создавать приглашение (key+url).silence
boolean defaultfalse
— не уведомлять MapSurfer о создании пользователя
Входные данные
// 2.0+
{
"id": 123, // id пользователя
"login": "ivanov_ivan", // логин
"paswd": "qwerty123", // пароль
"fio": "Иванов И.И.", // * ФИО пользователя
"organization_id": 1, // id основной организации
"gis_editor_access": true, // интеграция с ГИС редактором,
// доступно только главному администратору
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 7, // id роли, по умолчанию 7 - Пользователь организации
"type": { // тип
"id": 1 // id типа
},
"blocked": false, // признак заблокированного пользователя
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": "2030/01/01 00:00", // срок действия учётной записи
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"clusters": [ // кластеры
{
"id": 3
}
],
"email": "test@gmail.com", // email
"phone": "+7 999 888 7766", // телефон
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"tracking": true // включить трекинг
}
http 200
// 2.0+
{
"id": 123,
"login": "ivanov_ivan",
"fio": "Иванов И.И.",
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"organization_id": 1, // id основной организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 7, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": 1450, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
}
PATCH /rest/users/:id
Редактирование учетной записи пользователя по id.
Текущий пользователь, Главный администратор, Администратор организации, Администратор кластера.
Текущий пользователь может редактировать свою учетную запись.
Администратор организации может редактировать учетные записи пользователей только своей организации.
Администратор кластера может редактировать учетные записи пользователей из организаций своего кластера.
При organizationIds = [] и не-передаче organizationId ("оставить главную организацию как есть") будет осуществлена попытка стереть как organizationId, так и organizationIds. Такая попытка пройдёт только если одновременно меняется роль на главного администратора/инспектора.
При передаче organizationIds = [] и передаче organizationId = X ("установить главную организацию") будет сделана замена organizationIds = [X], чтобы привести передаваемые данные к согласованности.
Имеем два случая и разное поведение в каждом из них. Так сделано потому, что оба приведённых выше запроса — некорректные, и мы "исправляем" каждый из них наиболее удобным для нас способом, чтобы минимизировать изменения в клиентах, которые на данный момент отправляют (или могут отправлять) неверные данные.
Дата окончания срока действия может быть передана как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время.
В качестве часового пояса берётся пояс кластера главной организации; если главной организации нет, но пользователь состоит только в одном кластере, берётся пояс этого кластера. Иначе берётся часовой пояс системы.
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer об изменении пользователя
Входные данные
// 2.0+
{
"login": "ivanov_ivan", // логин
"fio": "Иванов Иван Иванович", // ФИО
"paswd": "123123", // новый пароль
"role_id": 7, // id роли; пользователь не может сам поменять свою роль
"organization_id": 517, // id основной организации, права на изменения
// есть только у главного администратора
"organization_ids": [ // массив id организаций пользователя
517,
132,
232
],
"type": { // тип
"id": 1 // id типа
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": "2030/01/01 00:00", // срок действия учётной записи
"gis_editor_access": true, // интеграция с ГИС редактором,
// доступно только главному администратору
"blocked": false, // признак заблокированного пользователя
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": { // метки пользователя
"add": [ // метки, которые необходимо добавить
{
"id": 21 // id метки
}
],
"remove": [ // метки, которые необходимо удалить
{
"id": 22 // id метки
}
]
},
"clusters": { // кластеры
"add": [
{
"id": 3
}
],
"remove": [
{
"id": 4
}
]
},
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"phone": "+7 999 888 7766", // телефон
"passport": "9205 999999", // паспортные данные
"tracking": true // включить трекинг
}
http 200
// 2.0+
{
"id": 6935, // id пользователя
"login": "ivanov_ivan", // логин пользователя
"fio": "Иванов Иван Иванович", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 21
},
... // следующие элементы списка
],
"organization_id": 517, // id основной организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"organization_ids": [ // массив id организаций пользователя
517,
132,
232
],
"role_id": 10, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": 1450 // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
}
DELETE /rest/users/current
Удаление текущего пользователя.
Права пользователей на выполнение данного запроса определяются значением настройки Разрешения и области видимости/Разрешать удалять самого себя/Включено
.
По умолчанию для пользователя с ролью Клиент настройка включена, для всех остальных пользователей настройка выключена.
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer об удалении пользователя
DELETE /rest/users/:id
Удаление учетной записи пользователя.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может удалять учетные записи пользователей только своей организации.
Администратор кластера может удалять учетные записи пользователей из организаций своего кластера.
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer об удалении пользователя
GET /rest/users/:id/geo4me/track
Получение трека пользователя за указанный временной интервал (dateFrom
, dateTo
).
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
Параметры запроса
from
timestamp — дата начала временного интервала для получения трека пользователяtill
timestamp — дата окончания временного интервала для получения трека пользователя
// 2.0+
{
"items": [
{
"data": 1516709271, // дата
"lat": 55.01, // координаты точки, широта
"lon": 50.02, // координаты точки, долгота
"control": true, // является ли точка контрольной
"address": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27", // адрес точки
"distance": 18644 // пройденная дистанция от начала пути
}, // ... другие точки
]
}
Примечания:
Если параметры
dateFrom
,dateTo
не заданы, по умолчанию берем текущие сутки (с 00:00:00 до текущего времени текущего дня);Если параметр
dateFrom
задан,dateTo
не задан, берем сутки вперед отdateFrom
;Если параметр
dateTo
задан,dateFrom
не задан, берем сутки назад отdateTo
;Если параметры
dateFrom
,dateTo
заданы, но временной интервал превышает 1 неделю, выдаем ошибку 404;Задание параметров
dateFrom
,dateTo
в будущем времени допускается.
GET /rest/users/:id/avatar
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
GET /rest/users/:id/avatar/crop/w:width/h:height
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
Аватар отдается указанных размеров (возможна обрезка изображения вдоль одной из сторон).
GET /rest/users/:id/avatar/fit/w:width/h:height
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
Аватар отдается указанных размеров (возможно появление пустого поля вдоль одной из сторон).
DELETE /rest/users/:id/avatar
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Удалить аватар пользователя.
Текущий пользователь может удалить свой аватар.
Администратор организации может удалить аватар пользователя только своей организации.
Администратор кластера может удалить аватар пользователя из организации своего кластера.
Параметры
silence
boolean defaultfalse
— не уведомлять MapSurfer об изменении пользователя
GET /rest/users/gauges/values
Получить текущий срез значений всех датчиков.
Запрос выдает данные о значениях датчиков пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
http 200
// 2.0+
{
"items": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"name": "Наличие интернета", // название типа датчика
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
}
GET /rest/users/:id/gauges/history
Главный администратор, главный инспектор, администратор кластера. администратор организации, инспектор организации, текущий пользователь.
Получить историю значений датчиков за указанный период.
Администратор кластера может получить историю значений датчиков пользователя из организации своего кластера.
Администратор организации (инспектор организации) может получить историю значений датчиков пользователя только своей организации.
Авторизованный пользователь может получить только свою историю значений датчиков.
Параметры запроса
обязательный
from
timestamp — дата начала временного интервала для получения истории значений датчиковобязательный
till
timestamp — дата окончания временного интервала для получения истории значений датчиков
http 200
// 2.0+
{
"items": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"name": "Наличие интернета", // название типа датчика
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
}
GET /rest/users/gauges/live
Соединение по web-socket для получения значений датчиков пользователей.
Запрос выдает данные о значениях датчиков пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пример сообщения по WS
// 2.0+
{
"gauges": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
}
POST /rest/users/types
Главный администратор.
Добавление нового типа пользователей.
Пиктограмма является обязательным полем, поэтому к началу выполнения запроса файл пиктограммы уже должен
быть загружен на сервер запросом POST /files/upload
. Полученный name нужно подставить в поле icon_file_name
при выполнении основного запроса.
Входные данные
// 2.0+
{
"title": "Название типа", // * название
"icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG", // * имя файла после загрузки на сервер
// (png)
"use_initials": true, // признак того, что нужно использовать инициалы
// пользователя в маркере на карте (вместо пиктограммы)
"use_avatar": true // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}
http 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
}
PATCH /rest/users/types/:id
Главный администратор.
Изменение информации о типе пользователей.
Входные данные
// 2.0+
{
"title": "Название типа", // название
"icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG", // имя файла после загрузки на сервер
// (png)
"use_initials": true, // признак того, что нужно использовать инициалы
// пользователя в маркере на карте (вместо пиктограммы)
"use_avatar": true // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}
http 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
}
DELETE /rest/users/types/:id
Главный администратор.
Удаление типа пользователей.
Нельзя удалить тип пользователей по умолчанию - будет получена 403.
Нельзя удалить тип пользователей, если существуют (неудалённые) пользователи с этим типом - будет получена 403.
GET /rest/users/types/list
Список типов пользователей.
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
},
... // следующие элементы списка
],
"total": 3, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/users/types/:id
Получение информации о типе пользователей.
http 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
}
GET /rest/users/types/:id/icon
Любой пользователь.
Получение пиктограммы (файла) типа пользователей.
POST /rest/users/tags
Главный администратор.
Добавление новой метки пользователей.
Входные данные
// 2.0+
{
"title": "Курьер", // * название метки
"color": "ff0000" // цвет метки для отображения на карте (HEX код)
}
http 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
}
PATCH /rest/users/tags/:id
Главный администратор.
Изменение информации о метке пользователей.
Входные данные
// 2.0+
{
"title": "Курьер Подмосковье", // название метки
"color": "008000" // цвет метки для отображения на карте (HEX код)
}
http 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер Подмосковье", // название метки
"color": "008000" // цвет метки
}
GET /rest/users/tags/list
Список меток пользователей.
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
},
... // следующие элементы списка
],
"total": 3, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/users/tags/:id
Получение информации о метке пользователей.
http 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
}
DELETE /rest/users/tags/:id
Главный администратор.
Удаление метки пользователей.
GET /rest/users/roles
Список ролей пользователей.
http 200
{
"items": [
{
"id": 6, // id роли
"name": "Клиент", // название роли
"code": "CUSTOMER" // код роли
},
... // следующие элементы списка
]
}
PATCH /rest/users/roles/:id
Главный администратор.
Изменение роли пользователя.
{
"name": "Клиент" // * название роли
}
http 200
{
"id": 6, // id роли
"name": "Клиент", // название роли
"code": "CUSTOMER" // код роли
}
POST /rest/users/roles/sort
Главный администратор.
Сортировка ролей в порядке, заданном в теле запроса.
{
"ids": [ // id всех ролей в нужном порядке
6,
1,
3,
2,
5,
4
]
}
http 200
{
"items": [
{
"id": 6, // id роли
"name": "Клиент", // название роли
"code": "CUSTOMER" // код роли
},
... // следующие элементы списка ролей
// в заданном порядке сортировки
]
}
POST /rest/users/:id/invites
Создать приглашение.
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Текущий пользователь может создать себе приглашение.
Администратор организации может создать приглашение пользователю из своей организации.
Администратор кластера может создать приглашение пользователю из организации своего кластера.
Дата окончания срока действия может быть передана как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время.
В качестве часового пояса берётся пояс кластера главной организации пользователя; если главной организации нет, но пользователь состоит только в одном кластере, берётся пояс этого кластера. Иначе берётся часовой пояс системы.
Параметры
with-invite-url
boolean defaultfalse
— нужно ли генерировать url приглашения
Входные данные
// 2.0+
{
"expires": "20-12-2029 01:00:00", // дата окончания действия,
// по умолчанию - +36524 дней (~100 лет) к текущему времени
"total": 5 // максимальное количество попыток использования, по умолчанию - 10000
}
http 200
// 2.0+
{
"id": 1051, // id
"user": { // пользователь
"id": 997, // id пользователя
"fio": "Александр Филиппович" // ФИО пользователя
},
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"created_by": { // создатель
"id": 234, // id создателя
"fio": "Георгий Константинович" // ФИО создателя
},
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
}
DELETE /rest/users/invites/:id
Удалить приглашение.
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Текущий пользователь может удалить свое приглашение.
Администратор организации может удалить приглашение пользователя своей организации.
Администратор кластера может удалить приглашение пользователя организации своего кластера.
POST /rest/users/invites/:id/url
Создать invite-URL.
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Текущий пользователь может создать invite-URL для своего приглашения.
Администратор организации может создать invite-URL для приглашения пользователя своей организации.
Администратор кластера может создать invite-URL для приглашения пользователя организации своего кластера.
http 200
// 2.0+
{
"id": 1051, // id
"user": { // пользователь
"id": 997, // id пользователя
"fio": "Александр Филиппович" // ФИО пользователя
},
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"created_by": { // создатель
"id": 234, // id создателя
"fio": "Георгий Константинович" // ФИО создателя
},
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
}
DELETE /rest/users/invites/:id/url
Удалить invite-URL.
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Текущий пользователь может удалить invite-URL из своего приглашения.
Администратор организации может удалить invite-URL из приглашения пользователя своей организации.
Администратор кластера может удалить invite-URL из приглашения пользователя организации своего кластера.
http 200
// 2.0+
{
"id": 1051, // id
"user": { // пользователь
"id": 997, // id пользователя
"fio": "Александр Филиппович" // ФИО пользователя
},
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": null, // url
"created_by": { // создатель
"id": 234, // id создателя
"fio": "Георгий Константинович" // ФИО создателя
},
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
}
GET /rest/users/invites/list
Получить список приглашений.
главный администратор и инспектор видят все приглашения
администратор и инспектор кластера видят приглашения пользователей своего кластера
администратор и инспектор организации видят приглашения пользователей своих организаций
прочие пользователи видят только свои приглашения
Сортировка осуществляется по полю id
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 1051, // id
"user": { // пользователь
"id": 997, // id пользователя
"fio": "Александр Филиппович" // ФИО пользователя
},
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"created_by": { // создатель
"id": 234, // id создателя
"fio": "Георгий Константинович" // ФИО создателя
},
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
}
],
"total": 1, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
POST /rest/users/import
Массовое создание пользователей.
Главный администратор, администратор кластера, администратор организации.
Может быть передано только одно из двух полей -
lines
или users
- но не оба одновременно.
lines
должны содержать ФИО пользователей,
по одному на строке.
users
должны содержать полноценные формы создания
пользователей, аналогичные POST /users.
Значения атрибутов organization
, role
, type
, tags
,
tracking
, переданные на "верхнем уровне" формы будут
служить как значения по умолчанию для полей пользователей
из lines
и users
.
Если у создаваемого пользователя нет организации,
и поле organization
на "верхнем уровне" не проставлено,
то будет использована главная организация пользователя,
выполняющего запрос. Главный администратор не состоит
ни в одной организации, поэтому для него обязательна
передача organization
либо на "верхнем уровне" формы,
либо в пользователях.
Администратор кластера может создавать пользователей только в рамках своего кластера. Администратор организации может создавать пользователей только в рамках своей организации.
В ответ пользователю возвращается номер тикета, по которому с помощью запроса /users/import/:ticket можно узнать статус импортирования.
Параметры
with-invite-url
boolean defaultfalse
— нужно ли создавать приглашение (key+url)silence
boolean defaultfalse
— не уведомлять MapSurfer о создании пользователя
Входные данные
// 2.0+
{
"organization": { // организация
"id": 99
},
"role": { // роль необязательна, по умолчанию Пользователь организации;
// возможные значения - Клиент, Пользователь,
// Администратор организации, Инспектор организации
"id": 7
},
"type": { // тип пользователя
"id": 1
},
"tags": [ // тэги
{
"id": 5
}
],
"tracking": true, // включить трекинг (по умолчанию false)
//
"lines": "..." // список ФИО пользователей, разделённых переводом строки;
// пустые строки, а также пробелы в начале и конце игнорируются
//
"users": [
{
"id": 123, // id пользователя
"login": "ivanov_ivan", // логин
"paswd": "qwerty123", // пароль
"fio": "Иванов И.И.", // * ФИО пользователя
"organization_id": 1, // id основной организации
"gis_editor_access": true, // интеграция с ГИС редактором,
// доступно только главному администратору
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 7, // id роли, по умолчанию 7 - Пользователь организации
"type": {
"id": 1 // тип
},
"blocked": false, // признак заблокированного пользователя
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": [ // метки пользователя
{
"id": 1
},
{
"id": 22
},
... // следующие элементы списка
],
"email": "test@gmail.com", // email
"phone": "+7 999 888 7766", // телефон
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"tracking": true // включить трекинг
}
]
}
http 200
// 2.0+
{
"ticket": "3e875e7f-1788-42fd-b6a7-6e891909297b" // идентификатор очереди
}
GET /rest/users/import/:ticket
Проверить статус создания пользователей.
Главный администратор, администратор кластера, администратор организации.
Параметры
ticket
string — идентификатор очередиshowUsersWhenDone
boolean defaultfalse
— при завершении импорта отдавать в ответе информацию по созданным пользователям.
http 200
// 2.0+
{
"total": 60, // общее количество ФИО, полученных от клиента
"processed": 60, // количество обработанных пользователей (успешно или неуспешно)
"failures": [ // массив сообщений об ошибках
// для пользователей, создание которых не удалось
{
"name": "Саша",
"message": "Пользователь с указанным фио уже существует."
}
],
"users": [ // созданные пользователи
// (только если showUsersWhenDone=true
// и обработка импорта завершена)
{
"id": 123,
"login": "ivanov_ivan",
"fio": "Иванов И.И.",
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"authentication_type": 0, // тип аутентификации (0 - логин/пароль,
// 1 - LDAP)
"active_till": 1712984116 // срок действия учётной записи
"last_authentication": 1605793362, // дата последней авторизации
"active_till_local": "02.09.2024 12:00", // локальная дата окончания срока действия учётной записи
"last_authentication_local": "25.03.2024 16:02", // локальная дата последней авторизации
"blocked": false, // признак заблокированного пользователя
"avatar_update_date": 1605793362, // дата обновления аватара
"gis_editor_access": true, // интеграция с ГИС редактором
"invite": { // последнее приглашение
"id": 1051, // id
"key": "a3600ca4-ee35-1004-895f-b6c011bf8f3a", // ключ
"url": "https://active...", // url
"creation_date": 1658304773, // дата создания
"expires": 1658305090, // дата окончания действия
"expires_local": "01.01.2025 12:00", // локальная дата окончания срока действия
"total": 5, // максимальное количество попыток использования
"attempts_left": 5 // оставшееся количество попыток использования
},
"system": false, // системный пользователь
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"organization_id": 1, // id основной организации
"clusters": [ // кластеры
{
"id": 3, // id кластера
"title": "Тестовый кластер" // название кластера
}
],
"organization_ids": [ // массив id организаций пользователя
1,
132,
232
],
"role_id": 7, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": 1450, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
}
]
}
/rest/types
GET /rest/types
Получение списка доступных текущему пользователю видов работ.
главный администратор и главный инспектор видят все виды работ
администратор кластера и инспектор кластера видят:
глобальные виды работ
локальные виды работ своего кластера
прочие пользователи видят:
глобальные виды работ, если они доступны его организациям
локальные виды работ своего кластера, если они доступны его организациям
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, groupId=1,2
.
useCache
boolean defaulttrue
— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearch
string — текстовый поиск видов работ по значениям параметров id, namename
string — текстовый поиск видов работ по значению параметра namedefaultType
boolean — при значении defaultType=true отображаются виды работ, которые являются видами по умолчаниюperiodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах равна указанному значениюltPeriodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах меньше указанного значенияgtPeriodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах больше указанного значения+
deadlineType
integer — отображаются виды работ, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению "AT_CREATE", расчет срока ведется от времени создания, deadlineType=2 соответствует значению "AT_UPDATE", расчет срока ведется от даты назначения на исполнителя)+
groupId
long — отображаются виды работ, принадлежащие указанным группамclusterId
long — отображаются глобальные и локальные виды работ указанного кластераsortBy
defaultid
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)В независимости от значения настройки
behavior.use.custom.work.types.sort=true/false
вapplication.conf
, если параметры сортировкиsortBy
,sortDirection
переданы, то сортировка ведется по ним.Если параметры
sortBy
,sortDirection
не переданы иbehavior.use.custom.work.types.sort=true
, то сортировка будет вестись по полюorder_key
с направлением ASC.Если параметры
sortBy
,sortDirection
не переданы иbehavior.use.custom.work.types.sort=false
, то сортировка будет вестись по полюid
с направлением ASC.
/types
/types?search=доставка&defaultType=true<PeriodOfReviewInSec=172800
/types?search=доставка&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
http 200
// 2.0+
{
"count": 20, // количество видов работ, удовлетворяющих
// условиям поиска и фильтрации
"items": [
{
"id": 12, // id вида работ
"name": "Обрушение конструкции", // название вида работ
"icon": "icon_12.png", // файл пиктограммы
"default": true, // является ли данный вид
// видом по умолчанию
"period_of_review": null, // период исполнения работ
// данного вида работ
"period_of_review_in_sec": null, // величина срока исполнения работ данного
// вида работ по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// null,
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид работ
1,
2,
3
],
"order_key": 3, // порядковый номер вида работ
// в отсортированном списке
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": null // id группы, которой принадлежит
// вид работ, и null,
// если он не принадлежит никакой группе
},
... // следующие элементы списка видов работ
]
}
Более подробно о времени истечения срока исполнения видов работ можно прочитать здесь: Время истечения срока в часах
Более подробно о сортировке видов работ можно прочитать здесь: Сортировка видов работ
Более подробно о группировке видов работ можно прочитать здесь: Группировка видов работ
GET /rest/types/compressed
Получение списка доступных текущему пользователю видов работ с учетом доступности вида работ организациям:
поле organizations в ответе будет отсутствовать, вместо него добавляются новые поля: included_organizations (доступные организации) и excluded_organizations (недоступные организации)
если вид работ доступен всем организациям (default=true), то поля included_organizations, excluded_organizations будут пустыми
если вид работ доступен не всем организациям (default=false), тогда поле included_organizations будет заполнено доступными организациями, если их количество составлет не более половины от количества всех организаций; в противном случае поле excluded_organizations будет заполнено недоступными организациями.
Главный администратор и главный инспектор видят все виды работ.
Администратор кластера и инспектор кластера видят:
глобальные виды работ
локальные виды работ своего кластера
Прочие пользователи видят:
глобальные виды работ, если они доступны его организациям
локальные виды работ своего кластера, если они доступны его организациям
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, groupId=1,2
.
useCache
boolean defaulttrue
— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearch
string — текстовый поиск видов работ по значениям параметров id, namename
string — текстовый поиск видов работ по значению параметра namedefaultType
boolean — при значении defaultType=true отображаются виды работ, которые являются видами по умолчаниюperiodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах равна указанному значениюltPeriodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах меньше указанного значенияgtPeriodOfReviewInSec
long — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах больше указанного значения+
deadlineType
integer — отображаются виды работ, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению "AT_CREATE", расчет срока ведется от времени создания, deadlineType=2 соответствует значению "AT_UPDATE", расчет срока ведется от даты назначения на исполнителя)+
groupId
long — отображаются виды работ, принадлежащие указанным группамclusterId
long — отображаются глобальные и локальные виды работ указанного кластераsortBy
defaultid
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)
Примечания:
В независимости от значения настройки behavior.use.custom.work.types.sort=true/false
в application.conf
,
если параметры сортировки sortBy
, sortDirection
переданы, то сортировка ведется по ним.
Если параметры sortBy
, sortDirection
не переданы и behavior.use.custom.work.types.sort=true
, то сортировка будет
вестись по полю order_key
с направлением ASC.
Если параметры sortBy
, sortDirection
не переданы и behavior.use.custom.work.types.sort=false
, то сортировка будет
вестись по полю id
с направлением ASC.
/types/compressed
/types/compressed?search=доставка&defaultType=true<PeriodOfReviewInSec=172800
/types/compressed?search=доставка&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types/compressed?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types/compressed?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
http 200
// 2.0+
{
"count": 20, // количество видов работ, удовлетворяющих
// условиям поиска и фильтрации
"items": [
{
"id": 12, // id вида работ
"name": "Обрушение конструкции", // название вида работ
"icon": "icon_12.png", // файл пиктограммы
"default": true, // является ли данный вид
// видом по умолчанию
"period_of_review": null, // период исполнения работ
// данного вида работ
"period_of_review_in_sec": null, // величина срока исполнения работ данного
// вида работ по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// null,
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [
], // массив id организаций, которым доступен вид работ, в данном запросе будет пустым
"included_organizations": [ // массив id организаций,
// которым доступен вид работ
1,
2,
3
],
"excluded_organizations": [
], // массив id организаций, которым не доступен вид работ
"order_key": 3, // порядковый номер вида работ
// в отсортированном списке
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": null // id группы, которой принадлежит
// вид работ, и null,
// если он не принадлежит никакой группе
},
... // следующие элементы списка видов работ
]
}
Более подробно о времени истечения срока исполнения видов работ можно прочитать здесь: Время истечения срока в часах
Более подробно о сортировке видов работ можно прочитать здесь: Сортировка видов работ
Более подробно о группировке видов работ можно прочитать здесь: Группировка видов работ
POST /rest/types/sort
Главный администратор, главный инспектор.
Ручная сортировка видов работ в порядке, заданном в теле запроса.
Входные данные
// 2.0+
{
"ids": [ // id видов работ в отсортированном порядке
12,
1,
3,
6,
2,
5
]
}
http 200
// 2.0+
{
"items": [
{
"id": 12, // id вида
"name": "Обрушение конструкции", // название вида
"map_icon_done": "map_icon_done_1.png", // название иконки для этапа "выполнено" на карте
"default": true, // является ли данный вид видом
// по умолчанию
"period_of_review": null, // период исполнения работ данного вида
"period_of_review_in_sec": null, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения работ
// данного вида: null, от даты создания
// "AT_CREATE", от даты назначения
// на исполнителя "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
1,
2,
3
],
"order_key": 3, // порядковый номер видов работ
// в отсортированном списке
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": null // id группы, которой принадлежит вид,
// и null, если вид не принадлежит
// никакой группе
},
... // следующие элементы списка видов работ
// в заданном порядке сортировки
]
}
GET /rest/types/groups/list
Получить список всех групп видов работ.
главный администратор и главный инспектор видят все группы видов работ
прочие пользователи видят:
глобальные группы видов работ
локальные группы видов работ своего кластера
Параметры
clusterId
long — отображаются глобальные и локальные группы видов работ указанного кластера
http 200
// 2.0+
{
"items": [
{
"id": 41, // id группы
"name": "название группы" // название группы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
},
... // следующие элементы списка групп
]
}
POST /rest/types/groups
Главный администратор, администратор кластера.
Создание новой группы видов работ.
Администратор кластера может создать только локальную группу видов работ внутри своего кластера.
Входные данные
// 2.0+
{
"name": "название группы", // * название группы
"cluster": { // кластер
"id": 64
}
}
http 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы", // название группы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
}
GET /rest/types/groups/:id
Получение группы видов работ.
главный администратор и главный инспектор видят все группы видов работ
прочие пользователи видят:
глобальные группы видов работ
локальные группы видов работ своего кластера
http 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы", // название группы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
}
PATCH /rest/types/groups/:id
Главный администратор, администратор кластера.
Изменение группы видов работ.
Администратор кластера может редактировать только локальные группы видов работ своего кластера.
Входные данные
// 2.0+
{
"name": "измененное название группы" // название группы
}
http 200
// 2.0+
{
"id": 208, // id группы
"name": "измененное название группы", // название группы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
}
DELETE /rest/types/groups/:id
Главный администратор, администратор кластера.
Удаление группы видов работ.
Администратор кластера может удалять только локальные группы видов работ своего кластера.
POST /rest/types
Главный администратор, администратор кластера.
Создание вида работ.
Администратор кластера может создать только локальный вид работ внутри своего кластера.
Входные данные
// 2.0+
{
"name": "Доставка техники", // * название вида работ
"icon": "icon_158.png", // * название двумерной иконки, иконка
// по умолчанию - "default_icon.png"
"map_icon": "default_iconmap.png", // * название иконки для карты, иконка
// по умолчанию - "default_iconmap.png"
"map_icon_highlight": "default_iconmap_highlight.png", // * название увеличенной иконки для карты,
// иконка по умолчанию -
// "default_iconmap_highlight.png"
"type_default": false, // * является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // * поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22, // id группы, которой принадлежит вид,
// и null, если вид не принадлежит
// никакой группе
"stickers": { // стикеры
"add": [ // стикеры, которые необходимо добавить
{
"id": 1 // id
},
... // следующие элементы списка
]
},
"fields": { // настраиваемые поля
"add": [ // настраиваемые поля, которые необходимо добавить
{
"id": 1 // id
},
... // следующие элементы списка
]
},
"cluster": { // кластер
"id": 64
}
}
http 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // файл пиктограммы
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
}
GET /rest/types/:id
Получение вида работ по указанному id.
главный администратор и главный инспектор видят все виды работ
администратор кластера и инспектор кластера видят:
глобальные виды работ
локальные виды работ своего кластера
прочие пользователи видят:
глобальные виды работ, если они доступны его организациям
локальные виды работ своего кластера, если они доступны его организациям
http 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида работ
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // файл пиктограммы
"default": false, // является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
}
PATCH /rest/types/:id
Главный администратор, администратор кластера.
Изменение вида работ.
Администратор кластера может редактировать локальный вид работ своего кластера и глобальный вид работ, если при этом он только привязывает или отвязывает организации/стикеры/настраиваемые поля своего кластера.
Входные данные
// 2.0+
{
"name": "Доставка оборудования", // название вида
"icon": "icon_158.png", // название двумерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки для карты
"type_default": false, // является ли данный вид работ видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"stickers": { // стикеры
"add": [ // стикеры, которые необходимо добавить
{
"id": 1 // id
},
... // следующие элементы списка
],
"remove": [ // стикеры, которые необходимо удалить
{
"id": 2 // id
},
... // следующие элементы списка
]
},
"fields": { // настраиваемые поля
"add": [ // настраиваемые поля, которые необходимо добавить
{
"id": 1 // id
},
... // следующие элементы списка
],
"remove": [ // настраиваемые поля, которые необходимо удалить
{
"id": 2 // id
},
... // следующие элементы списка
]
},
"group_id": 22 // id группы, которой принадлежит
// вид, или null (либо 0), если вид не
// принадлежит никакой группе
}
http 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
}
DELETE /rest/types/:id
Главный администратор, администратор кластера.
Удаление вида работ.
Администратор кластера может удалять только локальные виды работ своего кластера.
POST /rest/types/:id/fields/:fieldId
Главный администратор, администратор кластера.
Привязка настраиваемого поля к виду работ.
Администратор кластера может привязать глобальное настраиваемое поле только к локальному виду работ своего кластера.
Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
DELETE /rest/types/:id/fields/:fieldId
Главный администратор, администратор кластера.
Удаление связи между видом работ и настраиваемым полем, отвязка поля от вида работ.
Администратор кластера может отвязать глобальное настраиваемое поле только от локального вида работ своего кластера.
Если связи не существует, получаем ошибку 400.
POST /rest/types/:id/stickers/:stickerId
Главный администратор, администратор кластера.
Прикрепление стикера к виду работ.
Администратор кластера может привязать глобальный стикер только к локальному виду работ своего кластера.
Если стикер доступен для всех видов работ (is_for_all=true
), получаем 403.
Если связь уже существует, то есть, стикер был явно прикреплен к виду работ, ошибку не получаем
(INSERT в таблицу повторно не выполняется).
DELETE /rest/types/:id/stickers/:stickerId
Главный администратор, администратор кластера.
Открепление стикера от вида работ.
Администратор кластера может отвязать глобальный стикер только от локального вида работ своего кластера.
Если стикер доступен для всех видов работ (is_for_all=true
), получаем 403.
Если связи не существует, то есть, стикер не был явно прикреплен к виду работ, получаем ошибку 400.
/rest/statuses
POST /rest/statuses
Главный администратор, администратор кластера.
Создать этап.
Администратор кластера может создать только локальный этап внутри своего кластера.
Создать локальный этап внутри кластера можно только если этот кластер изолирован.
// 2.0+
{
"name": "рассмотрение", // * название этапа
"visible": true, // * видимость этапа пользователям в списке этапов
"default": false, // * является ли данный этап этапом по умолчанию
"closed": false, // * является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286 // id кластера
},
"color": "000000" // цвет этапа
}
http 200
// 2.0+
{
"id": 1, // id этапа
"no": 1, // номер этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"color": "000000", // цвет этапа
"order": 5 // порядковый номер,
// назначается автоматически
}
GET /rest/statuses
Получение списка видимых этапов заданий.
главный администратор и главный инспектор видят все видимые этапы
пользователи изолированного кластера видят только видимые локальные этапы своего кластера
пользователи неизолированного кластера видят только видимые глобальные этапы
Параметры
search
string — текстовый поиск этапов по значениям параметров id, namename
string — текстовый поиск этапов по значению параметра namedefault
boolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюclosed
boolean — при значении closed=true отображаются этапы, относящиеся к выполненнымclusterId
long — отображаются глобальные и локальные этапы указанного кластераsortDirection
defaultASC
— направление сортировки (ASC, DESC), сортировка осуществляется по полюorder_key
http 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"no": 1, // номер этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"color": "000000", // цвет этапа
"order": 5 // порядковый номер,
// назначается автоматически
},
... // следующие элементы списка этапов
]
}
GET /rest/statuses/list/all
Любой авторизованный пользователь.
Получение списка этапов заданий.
главный администратор и главный инспектор видят все этапы
пользователи изолированного кластера видят только локальные этапы своего кластера
пользователи неизолированного кластера видят только глобальные этапы
Параметры запросов:
search
string — текстовый поиск этапов по значениям параметров id, namename
string — текстовый поиск этапов по значению параметра namedefault
boolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюvisible
boolean — при значении visible=true отображаются этапы, видимые пользователям в списке этаповclosed
boolean — при значении closed=true отображаются этапы, относящиеся к выполненнымclusterId
long — отображаются глобальные и локальные этапы указанного кластераsortDirection
defaultASC
— направление сортировки (ASC, DESC), сортировка осуществляется по полюorder_key
http 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"no": 1, // номер этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"color": "000000", // цвет этапа
"order": 5 // порядковый номер,
// назначается автоматически
},
... // следующие элементы списка этапов
]
}
POST /rest/statuses/sort
Главный администратор, администратор кластера.
Ручная сортировка этапов.
Администратор кластера может сортировать только локальные этапы в своём кластере.
Этапы рассматриваются вместе в группе. Есть группа глобальных этапов, есть группы кластерных этапов. Сортировать этапы можно только в рамках группы. При этом нужно передать id всех этапов в группе, включая невидимые (visible = false). Если переданы не все этапы, один этап передан несколько раз - это 400 bad request. Если переданы этапы из нескольких групп - это 403 forbidden.
// 2.0+
{
"ids": [ // id этапов в отсортированном порядке
12,
1,
3,
6,
2,
5
]
}
http 200
// 2.0+
{
"items": [
{
"id": 12, // id этапа
"no": 1, // номер этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"color": "000000", // цвет этапа
"order": 5 // порядковый номер
},
... // следующие элементы списка этапов
// в заданном порядке сортировки
]
}
PATCH /rest/statuses/:id
Главный администратор, администратор кластера.
Изменить этап.
Администратор кластера может редактировать только локальный этап своего кластера.
// 2.0+
{
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
http 200
// 2.0+
{
"id": 1, // id этапа
"no": 1, // номер этапа
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"color": "000000", // цвет этапа
"order": 5 // порядковый номер,
// назначается автоматически
}
DELETE /rest/statuses/:id
Главный администратор, администратор кластера.
Удалить этап.
Администратор кластера может удалять только локальные этапы своего кластера.
/rest/priorities
GET /rest/priorities
Получение списка приоритетов заданий.
главный администратор и главный инспектор видят все приоритеты
прочие пользователи видят:
глобальные приоритеты
локальные приоритеты своего кластера
Параметры запроса
clusterId
long — отображаются глобальные и локальные приоритеты указанного кластераsearch
sring — текстовый поиск приоритетов по значениям параметров id, namename
string — текстовый поиск приоритетов по значению параметра name
/priorities
/priorities?search=test
http 200
// 2.0+
{
"count": 10, // количество приоритетов заданий,
// удовлетворяющих заданным условиям поиска и сортировки
"items": [
{
"id": 1, // id приоритета
"name": "Плановые", // название
"icon": "priority_1.png", // имя файла пиктограммы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order_important": 1 // порядковый номер для сортировки
},
... // следующие элементы списка приоритетов
]
}
POST /rest/priorities/sort
Главный администратор, администратор кластера.
Ручная сортировка приоритетов.
Администратор кластера может сортировать только локальные приоритеты своего кластера.
Приоритеты рассматриваются вместе в группе. Есть группа глобальных приоритетов, есть группы кластерных приоритетов. Сортировать приоритеты можно только в рамках группы. При этом нужно передать id всех приоритетов в группе, включая невидимые (visible = false). Если переданы не все приоритеты, один приоритет передан несколько раз - это 400 bad request. Если переданы приоритеты из нескольких групп - это 403 forbidden.
Входные данные
// 2.0+
{
"ids": [
39,
1,
2,
3
]
}
http 200
// 2.0+
{
"items": [
{ // отсортированный список приоритетов
"id": 39,
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png",
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order_important": 1
},
{
"id": 1,
"name": "Плановые",
"icon": "priority_9_20140327111133.png",
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order_important": 2
},
... // следующие элементы списка
]
}
POST /rest/priorities
Главный администратор, администратор кластера.
Создать приоритет.
Администратор кластера может создать только локальный приоритет внутри своего кластера.
Поле icon
имеет значение по умолчанию default_category.png
.
Поле order_important
будет заполнено автоматически,
путем вычисления следующего, наибольшего числового значения.
// 2.0+
{
"name": "Плановые", // * название приоритета
"cluster": { // кластер
"id": 64
}
"icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png" // имя файла пиктограммы
// после загрузки на сервер
// через POST /files
}
http 200
// 2.0+
{
"id": 1, // id приоритета
"name": "Плановые", // название
"icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png", // имя файла пиктограммы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order_important": 7 // порядковый номер для сортировки
}
PATCH /rest/priorities/:id
Главный администратор, администратор кластера.
Изменить приоритет.
Администратор кластера может редактировать локальный приоритет своего кластера.
// 2.0+
{
"name": "Внеплановые", // название приоритета
"icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png" // имя файла пиктограммы
// после загрузки на сервер
// через POST /files
}
http 200
// 2.0+
{
"id": 1, // id приоритета
"name": "Внеплановые", // название
"icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png", // имя файла пиктограммы
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order_important": 8 // порядковый номер для сортировки
}
DELETE /rest/priorities/:id
Главный администратор, администратор кластера.
Удалить приоритет.
Администратор кластера может удалять только локальные приоритеты своего кластера.
/rest/fields
GET /rest/fields
Список настраиваемых полей и их возможных типов.
главный администратор и главный инспектор видят все настраиваемые поля
прочие пользователи видят:
глобальные настраиваемые поля
локальные настраиваемые поля своего кластера
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, minLength=1,2
.
useCache
defaulttrue
— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearch
string — текстовый поиск настраиваемых полей по значениям параметров id, name, group_name, format, regexp, default_valuename
string — текстовый поиск настраиваемых полей по значению параметра nameregexp
string — текстовый поиск настраиваемых полей по значению параметра regexpdefaultValue
string — текстовый поиск настраиваемых полей по значению параметра defaultValuegroupName
string — текстовый поиск настраиваемых полей по значению параметра groupNameformat
string — текстовый поиск настраиваемых полей по значению параметра formatisRequired
default — при значении isRequired = true отображаются обязательные настраиваемые поляdeleted
boolean defaultfalse
— при значении deleted = false отображаются не удаленные настраиваемые поляisForAll
boolean — при значении isForAll = true отображаются доступные для всех типов заданий настраиваемые поляvisible
boolean — при значении visible = true отображаются видимые настраиваемые поля (видимые при показе полной информации по заданию)+
minLength
integer — отображаются настраиваемые поля, минимальная длина которых совпадает с одним из указанных значений+
maxLength
integer — отображаются настраиваемые поля, максимальная длина которых совпадает с одним из указанных значенийclusterId
long — отображаются глобальные и локальные настраиваемые поля указанного кластера
/fields
/fields?search=test
/fields?search=test&isRequired=false&deleted=false
/fields?isForAll=true&minLength=1&maxLength=10
http 200
// 2.0+
{
"fields_types": [ // список возможных типов настраиваемых полей
{
"name": "string", // английское название типа
"rusname": "строка" // русское название типа
},
{
"name": "int",
"rusname": "целое число"
},
... // следующие элементы списка возможных
// типов настраиваемых полей
],
"items": [
{
"id": 18, // id поля
"name": "Знак зодиака (string, len<=8)", // русское название
"translit": "Znak_zodiaka__string__len<=8_", // транслит русского названия
"format": "string", // формат: английское название типа поля
"group_name": "", // название группы полей, если
// оно нужно. По одинаковым названиям
// поля группируются при отображении
"possible_values": null, // возможные значения. Для типа list.
// Список значений, разделенных \n
"regexp": "", // регулярное выражение для типов string и text,
// если оно необходимо для проверки значений
"min_length": 0, // минимальная длина строки/текста типов
// string и text, если необходимо такое
// ограничение
"max_length": 8, // максимальная длина строки/текста типов
// string и text, если необходимо такое
// ограничение
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": false, // является ли поле обязательным
"default_value": "", // значение по умолчанию
"visible": true, // является ли поле видимым. Отображать
// ли его, когда показывается полная
// информация по заданию
"is_for_all": true, // доступно ли поле всем типам заданий
"order": 1, // порядковый номер поля в общем списке
"type_ids": [
14
], // массив id типов заданий, для которых
// поле доступно, если оно не
// доступно всем типам заданий
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
}
},
... // следующие элементы списка
// настраиваемых полей
],
"count": 35 // количество настраиваемых полей, удовлетворяющих
// заданным условиям фильтрации и поиска
}
POST /rest/fields/sort
Главный администратор, администратор кластера.
Ручная сортировка настраиваемых полей.
Администратор кластера может сортировать только локальные настраиваемые поля своего кластера.
Настраиваемые поля рассматриваются вместе в группе. Есть группа глобальных настраиваемых полей, есть группы кластерных настраиваемых полей. Сортировать настраиваемые поля можно только в рамках группы. При этом нужно передать id всех полей в группе, включая невидимые (visible = false). Если переданы не все поля, одно поле передано несколько раз - это 400 bad request. Если переданы поля из нескольких групп - это 403 forbidden.
Входные данные
// 2.0+
{
"ids": [
4,
1,
3,
6,
2,
5
]
}
http 200
// 2.0+
{
"items": [
{
"id": 19,
"name": "Знак зодиака (string, len<=8)",
"translit": "Znak_zodiaka__string__len<=8_",
"format": "string",
"group_name": "",
"possible_values": null,
"regexp": "",
"min_length": 0,
"max_length": 8,
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": false,
"default_value": "",
"visible": true,
"is_for_all": true,
"order": 1,
"type_ids": [
14
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
}
},
{
"id": 9,
"name": "Доп.поле для тестов (5-10)",
"translit": "Dop_pole_dlya_testov",
"format": "text",
"group_name": "",
"possible_values": null,
"regexp": "",
"min_length": 5,
"max_length": 10,
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": false,
"default_value": 12345,
"visible": true,
"is_for_all": true,
"order": 2,
"type_ids": [],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
}
},
...
]
}
POST /rest/fields
Главный администратор, администратор кластера.
Создание нового настраиваемого поля.
Администратор кластера может создать только локальное настраиваемое поле внутри своего кластера.
Входные данные
// 2.0+
{
"name": "Фактический адрес организации", // * название нового поля
"format": "text", // * формат данных поля, возможные значения:
// "int", "float", "bool", "geometry", "dataTableObjects",
// "string", "text", "list", "date";
"group_name": "Информация об организации", // название группы полей,
// при указании несуществующей
// группы полей в таблицу
// будет добавлена запись.
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list", и является
// обязательным параметром для поля формата "list"
"первое значение",
"второе значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов "string",
// "text", "int", "float"
"min_length": 2, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 25, // максимальная длина, доступно только
// для полей форматов "string", "text"
"table_id": 1, // id таблицы данных,
// обязательное поле для полей формата "dataTableObjects",
// доступно только для полей формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов,
// обязательное поле для полей формата "dataTableObjects",
// доступно только для полей формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту,
// обязательное поле для полей формата "dataTableObjects",
// доступно только для полей формата "dataTableObjects"
"is_required": true, // обязательное ли поле, по умолчанию false
"default_value": "г.Москва", // значение по умолчанию, доступно
// для всех форматов полей, за
// исключением форматов "geometry" и "dataTableObjects",
// значение задается с соответствии
// с форматом поля (текст, число,
// дата, булево значение)
"visible": true, // видимость данного поля при отображении
// полной информации по заданию, по умолчанию true
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"cluster": { // кластер
"id": 64
}
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values
, но формат настраиваемого поля не "list";передано поле
regexp
, но формат не "string", "text", "int" или "float";переданы поля
min_length
илиmax_length
, но формат не "string" или "text";переданы поля
table_id
илиmultiselect
илиallow_add_num
, но формат не "dataTableObjects";передано поле
default_value
, но формат "geometry" или "dataTableObjects";значение
default_value
(переданное или текущее)не соответствует формату поля (для форматов "bool", "int", "float", "date");
и/или не проходит валидацию по
regexp/min_length/max_length
;и/или не является одним из
possible_values
(для поля формата "list").
http 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Фактический адрес организации", // название нового поля
"translit": "Fakticheskiy_adres_organizatsi", // транслитерация названия поля
"format": "text", // формат данных поля, возможные значения:
// "int", "float", "bool", "geometry", "string",
// "text", "list", "date"
"group_name": "Информация об организации", // название группы полей, при указании
// несуществующей группы полей в таблицу
// будет добавлена запись.
"possible_values": [ // список возможных значений, доступно только
// для поля формата "list"
"первое значение",
"второе значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно только
// для полей форматов "string", "text",
// "int", "float"
"min_length": 2, // минимальная длина, доступно только для
// полей форматов "string", "text"
"max_length": 25, // максимальная длина, доступно только
// для полей форматов "string", "text"
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": true, // обязательное ли поле
"default_value": "РТ, г.Москва", // значение по умолчанию, доступно для всех
// форматов полей, за исключением
// форматов "geometry" и "dataTableObjects",
// значение задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": true, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
}
GET /rest/fields/:id
Получение информации по настраиваемому полю.
главный администратор и главный инспектор видят все настраиваемые поля
прочие пользователи видят:
глобальные настраиваемые поля
локальные настраиваемые поля своего кластера
http 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Адрес филиала организации", // название поля
"translit": "string", // транслитерация названия поля
"format": "text", // формат данных поля, возможные значения:
// "int", "float", "bool", "geometry",
// "string", "text", "list", "date"
"group_name": "Информация о филиалах организации", // название группы полей
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов
// "string", "text", "int", "float"
"min_length": 5, // минимальная длина, доступно только для
// полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// форматов "geometry" и "dataTableObjects", значение
// задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
}
PUT /rest/fields/:id
Главный администратор, администратор кластера.
Редактирование настраиваемого поля.
Администратор кластера может редактировать локальное настраиваемое поле своего кластера и глобальное настраиваемое поле, если при этом он только привязывает или отвязывает локальные виды работ своего кластера.
Формат поля изменить нельзя, т.к. это может вызвать массовую некорректность данных настраиваемых полей в заданиях.
Входные данные
// 2.0+
{
"name": "Адрес филиала организации", // измененное название поля
"group_name": "Информация о филиалах организации", // измененное название группы полей
"possible_values": [ // список возможных значений,
// доступно только для поля
// формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов
// "string", "text", "int", "float"
"min_length": 5, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": false, // обязательное ли поле
"table_id": 1, // id таблицы данных,
// доступно только для полей формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов,
// доступно только для полей формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// доступно только для полей формата "dataTableObjects"
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// форматов "geometry" и "dataTableObjects",
// значение задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false // видимость данного поля при отображении
// полной информации по заданию
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
]
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values
, но формат настраиваемого поля не "list";передано поле
regexp
, но формат не "string", "text", "int" или "float";переданы поля
min_length
или maxlength, но формат не "string" или "text";переданы поля
table_id
илиmultiselect
илиallow_add_num
, но формат не "dataTableObjects";передано поле
default_value
, но формат "geometry" или "dataTableObjects";значение
default_value
(переданное или текущее)не соответствует формату поля (для форматов "bool", "int", "float", "date");
и/или не проходит валидацию по
regexp/min_length/max_length
;и/или не является одним из
possible_values
(для поля формата "list").
Если массив possible_values
не будет передан, то элементы списка не изменятся. При передаче массива
possible_values
все предыдущие значения списка будут удалены.
http 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Адрес филиала организации", // название поля
"translit": "string", // транслитерация названия поля
"format": "text", // формат данных поля, возможные
// значения: "int", "float", "bool",
// "geometry", "string", "text", "list", "date"
"group_name": "Информация о филиалах организации", // название группы полей
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно только
// для полей форматов "string", "text",
// "int", "float"
"min_length": 5, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"table_id": 1, // id таблицы данных для формата "dataTableObjects"
"multiselect": true, // разрешение на прикрепление нескольких объектов
// для формата "dataTableObjects"
"allow_add_num": true, // разрешение на изменение числа, прикреплённого к объекту
// для формата "dataTableObjects"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// форматов "geometry" и "dataTableObjects", значение
// задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
},
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
}
DELETE /rest/fields/:id
Главный администратор, администратор кластера.
Удаление настраиваемого поля.
Администратор кластера может удалять только локальные настраиваемые поля своего кластера.
/rest/files
POST /rest/files
Загрузка файла во временный каталог хранения. Полученное в ответе имя необходимо передать в запрос, в котором файл будет прикрепляться к сущности (например, пиктограмма вида работ - к виду работ, пиктограмма приоритета - к приоритету и т.п.) При этом файл будет перемещён из временного каталога хранения в постоянный (каталог пиктограмм видов работ, каталог пиктограмм приоритетов и т.п.)
Для загрузки файла необходимо указать http-заголовок
Body Content Type: multipart/form-data
и в теле запроса в поле file
указать расположение.
Запрос POST /files
можно использовать
в паре со всеми запросами на изменение сущности (вида работ, приоритета
и т.п.) Но можно загружать файлы сразу в нужный каталог хранения,
минуя временный. Для этого следует использовать один из роутов,
перечисленных ниже (POST /files/type-icons
для пиктограмм видов
работ и т.п.)
Исключение составляют файлы, которые нужно будет прикреплять к заданиям
(фото, видео, аудио и прочие файлы заданий), потому, что для них
помимо помещения в каталог следует выполнить специализированные
действия. Здесь следует использовать один из специализированных запросов
(POST /files/photos
, POST /files/videos
, POST /files/sounds
,
POST /files/files
).
http 200
// 2.0+
{
"name": "c360f08c-e79f-1004-8be5-8b2398b49a74.jpg" // имя файла во временном каталоге хранения
}
POST /rest/files/type-icons
Загрузка файла в каталог пиктограмм видов работ.
POST /rest/files/priority-icons
Загрузка файла в каталог пиктограмм приоритетов.
POST /rest/files/photos
Загрузка фотографии в каталог фотографий задания.
POST /rest/files/videos
Загрузка видеофайла в каталог видеофайлов задания.
POST /rest/files/files
Загрузка файла в каталог прочих файлов задания.
POST /rest/files/sounds
Загрузка аудиофайла в каталог аудиофайлов задания.
DELETE /rest/files/:id
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability в обозначает действие, которое можно выполнять с заданием (к которому прикреплен файл). Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show" и capability_id = 5, capability_name = "edit_files"
Удаление файла, прикрепленного к заданию; fileId - id файла.
/rest/stickers
GET /rest/stickers
Список стикеров.
главный администратор и главный инспектор видят все стикеры
прочие пользователи видят:
глобальные стикеры
локальные стикеры своего кластера
Сортировка осуществляется по полю title
.
Параметры
clusterId
long — отображаются глобальные и локальные стикеры указанного кластераuseCache
boolean defaulttrue
— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 3, // название стикера
"title": "Показания приборов", // описание стикера
"description": "Показания приборов после выполнения работ на объекте",
"is_for_all": false, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников
// видов работ,
// к которым прикреплен
// текущий стикер
2,
14,
3,
7,
4
],
"cluster": { // кластер
"id": 2184, // id кластера
"title": "Тестовый кластер" // название кластера
}
},
... // следующие элементы списка
]
}
POST /rest/stickers
Главный администратор, администратор кластера.
Создание стикера.
Администратор кластера может создать только локальный стикер внутри своего кластера.
Входные данные
// 2.0+
{
"title": "Показания приборов", // * название стикера
"description": "Показания приборов после выполнения работ на объекте", // описание стикера
"is_for_all": false, // доступность стикера для
// всех видов работ; по
// умолчанию true
"types": [ // массив id видов работ,
// к которым прикреплен
// текущий стикер
12,
14
],
"cluster": { // кластер
"id": 64
}
}
В ответе выдается type_ids
- список id-шников видов работ, к которым прикреплен текущий стикер.
Если is_for_all=true
, то стикер доступен всем видам работ, следовательно, type_ids
будет
содержать список id-шников всех видов работ.
Если is_for_all=false
, то type_ids
будет содержать список id-шников видов работ, которые
были явно прикреплены к стикеру.
http 200
// 2.0+
{
"id": 6,
"title": "Показания приборов", // название стикера
"description": "Показания приборов после выполнения работ на объекте", // описание стикера
"is_for_all": false, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников видов работ,
// к которым прикреплен текущий стикер
12,
14
],
"cluster": { // кластер
"id": 4, // id кластера
"title": "Тестовый кластер" // название кластера
}
}
PUT /rest/stickers/:id
Главный администратор, администратор кластера.
Изменение стикера.
Администратор кластера может редактировать локальный стикер своего кластера и глобальный стикер, если при этом он только привязывает или отвязывает локальные виды работ своего кластера.
Входные данные
// 2.0+
{
"title": "Показания приборов", // название стикера
"description": "Показания приборов до выполнения работ на объекте", // описание стикера
"is_for_all": true, // доступность стикера для
// всех видов работ
"types": [ // массив id видов работ,
// к которым прикреплен
// текущий стикер
12,
14
]
}
http 200
// 2.0+
{
"id": 6,
"title": "Показания приборов", // название стикера
"description": "Показания приборов до выполнения работ на объекте", // описание стикера
"is_for_all": true, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников видов работ,
// к которым прикреплен текущий стикер
12,
14
],
"cluster": { // кластер
"id": 4, // id кластера
"title": "Тестовый кластер" // название кластера
}
}
DELETE /rest/stickers/:id
Главный администратор, администратор кластера.
Удаление стикера.
Администратор кластера может удалять только локальные стикеры своего кластера.
Стикер будет откреплен ото всех файлов, к которым он был прикреплен.
/rest/timetables
GET /rest/timetables/:id/tasks/:yyyymmdd/@/:hhmi
Получение списка заданий по расписанию (созданных, запланированных и пропущенных) за указанное время.
:yyyymmdd
— дата запуска заданий в формате YYYY-MM-DD.:hhmi
(опционально) — время запуска заданий в формате HH-MI.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблонаtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
2.0+
{
"schedule": { // расписание
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
},
"items": [
{ // успешно созданное задание по расписанию
"task": { // созданное задание
"id": 298,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 1514833200, // срок выполнения
"expired_date": 1514833200, // когда задание было просрочено
"stage": 1, // стадия
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
},
"status": { // этап
"name": "новое",
"color": "0000ff"
},
"update_date": 1514829600, // дата последнего изменения
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"no": 300435, // номер задния
"workgroup_id": 141820, // id проекта
"deleted": null // признак удалённого задания = deleted != null
},
"template": { // шаблон-основа для задания
"id": 198,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 1514833200, // срок выполнения
"expired_date": 1514833200, // когда задание было просрочено
"stage": 1, // стадия
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
},
"status": { // этап
"name": "новое",
"color": "0000ff"
},
"update_date": 1514829600, // дата последнего изменения
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"no": 300435, // номер задния
"workgroup_id": 141820, // id проекта
"deleted": null // признак удалённого задания = deleted != null
},
"run": { // информация о запуске расписания
"time": "18:40" // время
"date": "21.10.2023" // дата в формате DD.MM.YYYY
},
"fail": null, // поле сообщения об ошибке пусто
"missed": false // true, если создание задания
// просрочено более 15 минут назад
},
{ // запланированное или просроченное задание
"task": null,
"template": {...}, // задание-шаблон
"fail": null, // поле сообщения об ошибке пусто
"run": {...},
"missed": false // задание не создано, но с момента
// запуска ещё не прошло 15 минут
},
{ // запланированное или просроченное задание
"task": null,
"template": {...}, // задание-шаблон
"fail": null, // поле сообщения об ошибке пусто
"run": {...},
"missed": true // создание задания просрочено
},
{ // при создании задания произошла ошибка
"task": null,
"template": {...}, // задание-шаблон
"fail": "Текст ошибки",
"run": {...},
"missed": false
},
...
],
"total": 5,
"limit": 25,
"page": 1
}
GET /rest/timetables/:id/stats/:yyyymm/@/:hhmm
Получение статистики по расписаниям за указанный период в разрезе по дням.
:id
(необязательно) — id расписания:yyyymm
— месяц запуска заданий в формате YYYY-MM.:hhmm
(необязательно) — время запуска заданий в формате YYYY-MM.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
clusterId
long — id кластера расписанияtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)time
— время запуска; формат передачи: time=HH:mmignoreArchive
boolean defaulttrue
— при значении ignoreArchive=true учитываются запуски только неархивных расписаний+
status
string — состояние задания. Возможные значения:fail - не создано из-за ошибок
missed - создание просрочено (более 15 мин назад)
creating - создающиеся задания
planned - запланированные задания
done_expired - просроченные задания, находящиеся в стадии 2 - завершено
done_not_expired - непросроченные задания, находящиеся в стадии 2 - завершено
rejected_expired - просроченные задания, находящиеся в стадии 0 - отклонено
rejected_not_expired - непросроченные задания, находящиеся в стадии 0 - отклонено
working_expired - просроченные задания, находящиеся в стадии 1 - в работе
working_not_expired - непросроченные задания, находящиеся в стадии 1 - в работе
http 200
2.0+
{
"stats": [
{
"fail": 0, // не создано из-за ошибок
"missed": 2, // создание просрочено (более 15 мин назад)
"creating": 0, // создание просрочено (менее 15 мин назад)
"planned": 0, // запланированные задания
"done_expired": 0, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 0, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 0, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 0, // непросроченные задания, находящиеся в стадии 1 - в работе
"created": 0, // созданные задания
"date": "21.10.2023" // дата в формате DD.MM.YYYY
},
...
],
"schedule": { // расписание
// (если присутствует часть /:id)
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
},
}
GET /rest/timetables/runs/:yyyymmdd
Получение списка запусков расписаний в разрезе дней со статистикой по каждому запуску.
:yyyymmdd
— дата запуска заданий в формате YYYY-MM-DD.
Запуски группируются по расписаниям: page и limit накладываются на расписания, а в ответе отдаются все запуски отобранных расписаний.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
timetableId
long — id расписания+
clusterId
long — id кластера расписанияtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)time
— время запуска; формат передачи: time=HH:mmignoreArchive
boolean defaulttrue
— при значении ignoreArchive=true учитываются запуски только неархивных расписаний+
status
string — состояние задания. Возможные значения:fail - не создано из-за ошибок
missed - создание просрочено (более 15 мин назад)
creating - создающиеся задания
planned - запланированные задания
done_expired - просроченные задания, находящиеся в стадии 2 - завершено
done_not_expired - непросроченные задания, находящиеся в стадии 2 - завершено
rejected_expired - просроченные задания, находящиеся в стадии 0 - отклонено
rejected_not_expired - непросроченные задания, находящиеся в стадии 0 - отклонено
working_expired - просроченные задания, находящиеся в стадии 1 - в работе
working_not_expired - непросроченные задания, находящиеся в стадии 1 - в работе
http 200
2.0+
{
"items": [
{
"schedule": { // расписание
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
},
"runs": [ // запуски расписания
{
"time": "18:40" // время
"date": "21.10.2023" // дата в формате DD.MM.YYYY
"stats": { // статистика запуска
"fail": 0, // не создано из-за ошибок
"missed": 2, // создание просрочено (более 15 мин назад)
"creating": 0, // создание просрочено (менее 15 мин назад)
"planned": 0, // запланированные задания
"done_expired": 0, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 0, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 0, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 0, // непросроченные задания, находящиеся в стадии 1 - в работе
"created": 0, // созданные задания
}
},
...
]
}
],
"total": 2747,
"limit": 12,
"page": 1
}
GET /rest/timetables/list
Запрос за списком расписаний
главный администратор и главный инспектор: все расписания
администратор кластера и инспектор кластера: все расписания, созданные в его кластере
администратор организации и инспектор организации: все расписания, созданные в его организации; все расписания, в которых он имеет доступ хотя бы к одному шаблону
пользователь организации: все расписания, в которых он имеет доступ хотя бы к одному шаблону
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
timetableId
long — id расписания+
contractId
long — id контракта расписания+
clusterId
long — id кластера расписанияtaskTitle
string — текстовый поиск по заголовку заданияscheduleTitle
string — текстовый поиск по заголовку расписанияscheduleSearch
string — текстовый поиск по значениям параметров id, title расписанияarchive
boolean defaultfalse
— при значении archive=true отдаются только архивные расписанияpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
}
],
"total": 92,
"limit": 1,
"page": 1
}
POST /rest/timetables
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
Создать расписание.
Расписание можно создать на уровне системы, кластера или организации.
Для создания расписания на уровне кластера необходимо передать поле cluster
, а на уровне организации - organization
.
При передаче обоих полей (cluster
и organization
) в ответе будет выдан BadRequest.
По умолчанию для администратора кластера/организации расписание создается на уровне его организации.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс передаётся в самом расписании. Если его нет, то он будет вычислен из кластера расписания. Если расписание принадлежит организации
из кластера организации. Иначе - будет взят часовой пояс системы.
Входные данные
// 2.0+
{
"on": false, // * включено расписание или нет
"title": "Расписание", // * название расписания
"start_date_time": "2025-01-01 00:00:00", // начало действия расписания
"finish_date_time": "01.01.2026 00:00", // окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"time_zone": "Europe/Moscow" // таймзона расписания, возможный формат - "UTC+3", "UTC+03:00" или "Europe/Moscow"
"contract": { // контракт расписания
"id": 97
},
"organization": { // организация расписания
"id": 134
},
"cluster": { // кластер расписания
"id": 135
},
"weekdays": [ // рабочие группы
{
"on": true, // * включена группа или нет
"times": [ // массив моментов времени
{
"on": true, // * включен момент времени или нет
"time": "12:01" // * время
}
],
"periods_months": [ // периоды
{
"value": [ // * массив значений
"OCTOBER"
],
"on": true // * включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"value": [ // * массив значений
"FRIDAY"
],
"on": false // * включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"value": [ // * массив значений
"20.12.2024"
],
"on": true // * включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"value": [ // * массив значений
"01.01"
],
"on": true // * включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"value": [ // * массив значений
10
],
"on": true // * включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"on": false, // * включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"value": [ // * массив значений
"WEDNESDAY"
],
"on": true // * включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"value": [ // * массив значений
"02.01.2024"
],
"on": true // * включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"value": [ // * массив значений
"01.01"
],
"on": true // * включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"value": [ // * массив значений
7,
14
],
"on": true // * включен шаблон или нет
}
]
}
],
"templates": [ // шаблоны
{
"id": 133122, // id шаблона
}
]
}
http 200
// 2.0+
{
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
}
PATCH /rest/timetables/:id
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
Изменить расписание.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс будет взят из самого расписания.
Входные данные
// 2.0+
{
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"archive": false, // архивное расписание
"start_date_time": "2025-01-01 00:00:00", // начало действия расписания
"finish_date_time": "01.01.2026 00:00", // окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
],
"templates": { // шаблоны
"add": [ // добавить
{
"id": 133122 // id шаблона
}
],
"remove": [ // удалить
{
"id": 133119 // id шаблона
}
]
}
}
http 200
// 2.0+
{
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
}
DELETE /rest/timetables/:id
Удаление расписания.
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
POST /rest/timetables/preview/:yyyymm
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
:yyyymm
— месяц запуска заданий в формате YYYY-MM.
Получить запуски и выходные дни расписания за указанный месяц. В реальности данные присылаются за 6 недель, включающие указанный месяц. Первая неделя из шести выбирается так, чтобы она включала 1-е число указанного месяца.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс передаётся в самом расписании. Если его нет, то он будет вычислен из кластера расписания. Если расписание принадлежит организации
из кластера организации. Иначе - будет взят часовой пояс системы.
Присланные изменения учитываются при генерации запусков расписания, но не сохраняются в БД.
Входные данные
// 2.0+
{
"on": false, // * включено расписание или нет
"title": "Расписание", // * название расписания
"start_date_time": "2025-01-01 00:00:00", // начало действия расписания
"finish_date_time": "01.01.2026 00:00", // окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"time_zone": "Europe/Moscow" // таймзона расписания, возможный формат - "UTC+3", "UTC+03:00" или "Europe/Moscow"
"contract": { // контракт расписания
"id": 97
},
"organization": { // организация расписания
"id": 134
},
"cluster": { // кластер расписания
"id": 135
},
"weekdays": [ // рабочие группы
{
"on": true, // * включена группа или нет
"times": [ // массив моментов времени
{
"on": true, // * включен момент времени или нет
"time": "12:01" // * время
}
],
"periods_months": [ // периоды
{
"value": [ // * массив значений
"OCTOBER"
],
"on": true // * включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"value": [ // * массив значений
"FRIDAY"
],
"on": false // * включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"value": [ // * массив значений
"20.12.2024"
],
"on": true // * включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"value": [ // * массив значений
"01.01"
],
"on": true // * включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"value": [ // * массив значений
10
],
"on": true // * включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"on": false, // * включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"value": [ // * массив значений
"WEDNESDAY"
],
"on": true // * включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"value": [ // * массив значений
"02.01.2024"
],
"on": true // * включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"value": [ // * массив значений
"01.01"
],
"on": true // * включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"value": [ // * массив значений
7,
14
],
"on": true // * включен шаблон или нет
}
]
}
]
}
http 200
// 2.0+
{
"schedule": { // расписание
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 0, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
},
"runs": [ // запуски расписания
{
"date": "24.10.2023", // дата
"time": "09:50" // время
}
],
"holidays": [ // выходные дни
"20.12.2024"
]
}
POST /rest/timetables/:id/preview/:yyyymm
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
:yyyymm
— месяц запуска заданий в формате YYYY-MM.
Получить запуски и выходные дни расписания за указанный месяц. В реальности данные присылаются за 6 недель, включающие указанный месяц. Первая неделя из шести выбирается так, чтобы она включала 1-е число указанного месяца.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; часовой пояс будет взят из самого расписания.
Присланные изменения учитываются при генерации запусков расписания, но не сохраняются в БД.
Входные данные
// 2.0+
{
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"archive": false, // архивное расписание
"start_date_time": "2025-01-01 00:00:00", // начало действия расписания
"finish_date_time": "01.01.2026 00:00", // окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
}
http 200
// 2.0+
{
"schedule": { // расписание
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
},
"runs": [ // запуски расписания
{
"date": "24.10.2023", // дата
"time": "09:50" // время
}
],
"holidays": [ // выходные дни
"20.12.2024"
]
}
GET /rest/timetables/:id
Получение информации по расписанию.
Главный администратор, главный инспектор, администратор кластера (если расписание относится к его кластеру), инспектор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации), инспектор организации (если расписание относится к его организации), любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона.
http 200
// 2.0+
{
"id": 263, // id расписания
"on": false, // включено расписание или нет
"title": "Расписание", // название расписания
"start_date_time": 1673955726, // начало действия расписания
"finish_date_time": 1705480730, // окончание действия расписания
"start_date_time_local": "01.01.2025 00:00", // локальное начало действия расписания
"finish_date_time_local": "01.01.2026 00:00", // локальное окончание действия расписания
"worktime": 7200, // срок выполнения заданий, сек
"archive": false, // архивное расписание
"total_template_count": 1, // количество шаблонов в расписании
"time_zone": "Europe/Moscow", // таймзона расписания
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"organization": { // организация
"id": 134, // id организации
"name": "Отдел разработки", // название организации
"cluster": { // кластер организации
"id": 1,
"title": "По умолчанию"
}
}
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"user": { // информация о пользователе, который создал расписание
"id": 360393, // id пользователя
"fio": "Админ кластера" // фио пользователя
},
"weekdays": [ // рабочие группы
{
"id": 645, // id группы
"on": true, // включена группа или нет
"times": [ // массив моментов времени
{
"id": 83, // id момента времени
"on": true, // включен момент времени или нет
"time": "12:01" // время
}
],
"periods_months": [ // периоды
{
"id": 64, // id периода
"value": [ // массив значений
"OCTOBER"
],
"on": true // включен период или нет
}
],
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 489, // id шаблона
"value": [ // массив значений
"FRIDAY"
],
"on": false // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 488, // id шаблона
"value": [ // массив значений
"20.12.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 490, // id шаблона
"value": [ // массив значений
10
],
"on": true // включен шаблон или нет
}
]
}
],
"holidays": [ // выходные группы
{
"id": 646, // id группы
"on": false, // включена группа или нет
"weekly_patterns": [ // еженедельные шаблоны
{
"id": 492, // id шаблона
"value": [ // массив значений
"WEDNESDAY"
],
"on": true // включен шаблон или нет
}
],
"random_patterns": [ // произвольные шаблоны
{
"id": 491, // id шаблона
"value": [ // массив значений
"02.01.2024"
],
"on": true // включен шаблон или нет
}
],
"yearly_patterns": [ // ежегодные шаблоны
{
"id": 495, // id шаблона
"value": [ // массив значений
"01.01"
],
"on": true // включен шаблон или нет
}
],
"monthly_patterns": [ // ежемесячные шаблоны
{
"id": 493, // id шаблона
"value": [ // массив значений
7,
14
],
"on": true // включен шаблон или нет
}
]
}
]
}
GET /rest/timetables/:id/templates
Запрос возвращает список шаблонов расписания, к которым у текущего пользователя есть доступ.
Главный администратор, главный инспектор, администратор кластера (если расписание относится к его кластеру), инспектор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации), инспектор организации (если расписание относится к его организации), любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона.
Главному администратору и Главному инспектору запрос вернет все шаблоны расписания.
Администратору кластера и Инспектору кластера запрос вернет все шаблоны расписания, которые принадлежат организациям его кластера или назначены на организации его кластера.
Администратору организации и Инспектору организации запрос вернет все шаблоны расписания, которые принадлежат его организации или назначены на его организацию.
Пользователю организации запрос вернет те шаблоны, которые на него назначены.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
+
typeId
long — id вида работ+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организацииtaskTitle
string — текстовый поиск по заголовку заданияpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
{
"items": [
{
"id": 133119, // id шаблона
"no": 133119, // номер
"title": "Тестовая задача", // название
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
},
"contract": { // контракт расписания
"id": 97, // id контракта
"no": "N1", // номер контракта
"title": "Контракт расписания",
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"start_date": 1706798372,
"finish_date": 1716798372
},
"deadline": 1630665780, // дедлайн
"num_main_photo": 1, // номер главного фото
"update_date": 1630493003, // дата обновления
"expired_date": 1630493003, // момент, когда задание было просрочен
"workgroup_id": 125735 // id проекта
}
],
"total": 2, // всего
"limit": 1, // количество на одной странице
"page": 1 // текущая страница
}
POST /rest/timetables/:id/restart/:yyyymmdd/@/:hhmm
Главный администратор, администратор кластера (если расписание относится к его кластеру), администратор организации (если расписание относится к его организации).
Перезапустить запуск.
:yyyymmdd
— дата запуска в формате YYYY-MM-DD;:hhmm
— время запуска в формате hh:mm.
/rest/chats
/rest/addresses
GET /rest/addresses/search
Поиск адреса с учётом координат.
Используется поисковый движок geocoder geo4me. Выдаётся 10 первых результатов.
Результаты сортируются в порядке удаления от центра поиска.
Параметры
обязательный
q
string — строка запроса поиска адреса, напримерq=Назарбаева 27
обязательный
ll
— координаты центра поиска в формате широта,долгота, напримерll=55.3416,50.6909
http 200
// 2.0+
{
"items": [
{
"lng": 49.14210192142546, // долгота
"lat": 55.77440909550581, // широта
"kind": "10",
"label": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27",
"formattedLabel": "Казань, улица Нурсултана Назарбаева, 27"
}
]
}
/rest/scripts
GET /rest/scripts/status
Любой пользователь.
Проверить наличие JEP.
http 200
// 2.0+
{
"started": true // установлена ли JEP-библиотека
}
GET /rest/scripts/list
Список скриптов.
главный администратор и инспектор видят все скрипты
администратор и инспектор кластера видят локальные скрипты своего кластера
остальные пользователи не видят никаких скриптов
Сортировка осуществляется по полю title
.
Параметры
clusterId
long — отображаются глобальные и локальные скрипты указанного кластераpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 1, // id скрипта
"script": "return noop()", // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"roles": [ // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"cluster": { // кластер плагина
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"type": "REACTION", // тип плагина. Возможные значения - VALIDATION, REACTION
"entity_type": "TASK", // модель, над которой совершается операция. Возможные значения - TASK, USER, COMMENT
"operation": "UPDATE", // операция над моделью. Возможные значения: для моделей TASK и USER - INSERT, UPDATE, DELETE, для модели COMMENT - INSERT
"webhook_server": { // для вебхуков: информация о сервере вебхука
"id": 64, // id сервера
"name": "integration new", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"on": false // включен сервер или нет
},
"workgroups": [ // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"statuses_before": [ // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"user_organizations_before": [], // для плагинов модели USER: организации пользователей до изменения
"user_organizations_after": [], // для плагинов модели USER: организации пользователей после изменения
"user_roles_before": [], // для плагинов модели USER: роли пользователей до изменения
"user_roles_after": [], // для плагинов модели USER: роли пользователей после изменения
"user_types_before": [], // для плагинов модели USER: типы пользователей до изменения
"user_types_after": [], // для плагинов модели USER: типы пользователей после изменения
"user_tags_before": [], // для плагинов модели USER: метки пользователей до изменения
"user_tags_after": [] // для плагинов модели USER: метки пользователей после изменения
}
],
"total": 1, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/scripts/:id
Главный администратор, главный инспектор, администратор кластера, инспектор кластера.
Получить информации о скрипте.
Администратор и инспектор кластера видят только локальные скрипты своего кластера.
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return noop()", // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"roles": [], // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
"cluster": { // кластер плагина
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"type": "REACTION", // тип плагина
// возможные значения - VALIDATION, REACTION
"entity_type": "USER", // модель, над которой совершается операция. Возможные значения - TASK, USER, COMMENT
"operation": "INSERT", // операция над моделью. Возможные значения: для моделей TASK и USER - INSERT, UPDATE, DELETE, для модели COMMENT - INSERT
"webhook_server": { // для вебхуков: информация о сервере вебхука
"id": 64, // id сервера
"name": "integration new", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"on": false // включен сервер или нет
},
"user_organizations_before": [ // для плагинов модели USER: организации пользователей до изменения
{
"id": 10, // id организации
"name": "Услыги по ремонту" // название организации
}
],
"user_organizations_after": [ // для плагинов модели USER: организации пользователей после изменения
{
"id": 3, // id организации
"name": "Доставка товаров" // название организации
}
],
"user_roles_before": [ // для плагинов модели USER: роли пользователей до изменения
{
"id": 7, // id роли
"name": "Пользователь организации", // название роли
"code": "ORG_USER" // код роли
}
],
"user_roles_after": [ // для плагинов модели USER: роли пользователей после изменения
{
"id": 10, // id роли
"name": "Администратор организации", // название роли
"code": "ORG_ADMINISTRATOR" // код роли
}
],
"user_types_before": [ // для плагинов модели USER: типы пользователей до изменения
{
"id": 1, // id типа
"title": "Человек" // название типа
},
{
"id": 2,
"title": "Транспортное средство"
}
],
"user_types_after": [ // для плагинов модели USER: типы пользователей после изменения
{
"id": 1, // id типа
"title": "Человек" // название типа
},
{
"id": 2,
"title": "Транспортное средство"
}
],
"user_tags_before": [ // для плагинов модели USER: метки пользователей до изменения
{
"id": 1, // id метки
"title": "Курьер", // название метки
"color": "ffffff" // цвет метки
}
],
"user_tags_after": [], // для плагинов модели USER: метки пользователей после изменения
{
"id": 101, // id метки
"title": "Доставка техники", // название метки
"color": "ff0000" // цвет метки
}
],
"workgroups": [], // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
"types": [], // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
"priorities": [], // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
"statuses_before": [], // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
"statuses_after": [], // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
"stages_before": [], // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
"stages_after": [] // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
}
POST /rest/scripts
Главный администратор, администратор кластера.
Добавление нового скрипта.
Администратор кластера может создать только локальный скрипт внутри своего кластера.
Входные данные
// 2.0+
{
"script": "return noop()", // * скрипт
"title": "test 1", // * название скрипта
"entity_type": "TASK", // * модель, над которой совершается операция. Возможные значения - TASK, USER, COMMENT
"operation": "UPDATE", // * операция над моделью. Возможные значения: для модели TASK и USER - INSERT, UPDATE, DELETE, для модели COMMENT - INSERT
"type": "REACTION", // * тип плагина. Возможные значения - VALIDATION, REACTION
"webhook_server": { // для вебхуков: id сервера
"id": 64
}
"description": "description", // описание
"on": true, // включен скрипт или нет (по умолчанию - true)
"cluster": { // кластер плагина
"id": 62286 // id кластера
},
"roles": [ // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11
}
],
"workgroups": [ // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188
}
],
"types": [ // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139
}
],
"priorities": [ // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167
}
],
"statuses_before": [ // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2
}
],
"statuses_after": [ // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 3
}
],
"stages_before": [ // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"user_organizations_before": [], // для плагинов модели USER: список id организаций пользователей до изменения
"user_organizations_after": [], // для плагинов модели USER: список id организаций пользователей после изменения
"user_roles_before": [], // для плагинов модели USER: список id ролей пользователей до изменения
"user_roles_after": [], // для плагинов модели USER: список id ролей пользователей после изменения
"user_types_before": [], // для плагинов модели USER: список id типов пользователей до изменения
"user_types_after": [], // для плагинов модели USER: список id типов пользователей после изменения
"user_tags_before": [], // для плагинов модели USER: список id меток пользователей до изменения
"user_tags_after": [] // для плагинов модели USER: список id меток пользователей после изменения
}
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return noop()", // скрипт
"title": "test 1", // название
"description": "description", // описание
"type": "REACTION", // тип плагина. Возможные значения - VALIDATION, REACTION
"entity_type": "TASK", // модель, над которой совершается операция. Возможные значения - TASK, COMMENT
"operation": "UPDATE", // операция над моделью. Возможные значения: для модели TASK - INSERT, UPDATE, DELETE, для модели COMMENT - INSERT
"webhook_server": { // для вебхуков: информация о сервере вебхука
"id": 64, // id сервера
"name": "integration new", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"on": false // включен сервер или нет
},
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"roles": [ // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"cluster": { // кластер плагина
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"workgroups": [ // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"statuses_before": [ // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"user_organizations_before": [], // для плагинов модели USER: организации пользователей до изменения
"user_organizations_after": [], // для плагинов модели USER: организации пользователей после изменения
"user_roles_before": [], // для плагинов модели USER: роли пользователей до изменения
"user_roles_after": [], // для плагинов модели USER: роли пользователей после изменения
"user_types_before": [], // для плагинов модели USER: типы пользователей до изменения
"user_types_after": [], // для плагинов модели USER: типы пользователей после изменения
"user_tags_before": [], // для плагинов модели USER: метки пользователей до изменения
"user_tags_after": [] // для плагинов модели USER: метки пользователей после изменения
}
PATCH /rest/scripts/:id
Главный администратор, администратор кластера.
Изменение информации о скрипте.
Администратор кластера может редактировать только локальный скрипт своего кластера.
Входные данные
// 2.0+
{
"script": "return noop()", // скрипт
"title": "test 1", // название скрипта
"description": "description", // описание
"type": "REACTION", // тип плагина. Возможные значения - VALIDATION, REACTION
"operation": "UPDATE", // операция над моделью. Возможные значения - INSERT, UPDATE, DELETE
"webhook_server": { // для вебхуков: id сервера
"id": 64
},
"on": true, // включен скрипт или нет (по умолчанию - true)
"roles": [ // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11
}
],
"workgroups": [ // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188
}
],
"types": [ // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139
}
],
"priorities": [ // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167
}
],
"statuses_before": [ // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2
}
],
"statuses_after": [ // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 3
}
],
"stages_before": [ // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"user_organizations_before": [], // для плагинов модели USER: список id организаций пользователей до изменения
"user_organizations_after": [], // для плагинов модели USER: список id организаций пользователей после изменения
"user_roles_before": [], // для плагинов модели USER: список id ролей пользователей до изменения
"user_roles_after": [], // для плагинов модели USER: список id ролей пользователей после изменения
"user_types_before": [], // для плагинов модели USER: список id типов пользователей до изменения
"user_types_after": [], // для плагинов модели USER: список id типов пользователей после изменения
"user_tags_before": [], // для плагинов модели USER: список id меток пользователей до изменения
"user_tags_after": [] // для плагинов модели USER: список id меток пользователей после изменения
}
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return noop()", // скрипт
"title": "test 1", // название
"description": "description", // описание
"type": "REACTION", // тип плагина. Возможные значения - VALIDATION, REACTION
"entity_type": "TASK", // модель, над которой совершается операция. Возможные значения - TASK, USER, COMMENT
"operation": "UPDATE", // операция над моделью. Возможные значения: для модели TASK и USER - INSERT, UPDATE, DELETE, для модели COMMENT - INSERT
"webhook_server": { // для вебхуков: информация о сервере вебхука
"id": 64, // id сервера
"name": "integration new", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"on": false // включен сервер или нет
},
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"roles": [ // привязка к роли пользователя, который выполняет операцию
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"cluster": { // кластер плагина
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"workgroups": [ // для плагинов модели TASK: привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // для плагинов модели TASK: привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // для плагинов модели TASK: привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"statuses_before": [ // для плагинов модели TASK: этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // для плагинов модели TASK: этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // для плагинов модели TASK: стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // для плагинов модели TASK: стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"user_organizations_before": [], // для плагинов модели USER: организации пользователей до изменения
"user_organizations_after": [], // для плагинов модели USER: организации пользователей после изменения
"user_roles_before": [], // для плагинов модели USER: роли пользователей до изменения
"user_roles_after": [], // для плагинов модели USER: роли пользователей после изменения
"user_types_before": [], // для плагинов модели USER: типы пользователей до изменения
"user_types_after": [], // для плагинов модели USER: типы пользователей после изменения
"user_tags_before": [], // для плагинов модели USER: метки пользователей до изменения
"user_tags_after": [] // для плагинов модели USER: метки пользователей после изменения
}
DELETE /rest/scripts/:id
Главный администратор, администратор кластера.
Удаление скрипта.
Администратор кластера может удалять только локальные скрипты своего кластера.
GET /rest/scripts/servers/list
Список серверов для вебхуков.
главный администратор и инспектор видят все серверы
администратор и инспектор кластера видят локальные серверы своего кластера
остальные пользователи не видят никаких серверов
Сортировка осуществляется по полю name
.
Параметры
clusterId
long — отображаются глобальные и локальные серверы указанного кластераpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 12, // id сервера
"name": "integration", // название сервера
"url": "https://integration.dev.geo4.pro/", // адрес сервера
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"on": true // включен сервер или нет
}
],
"total": 10, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/scripts/servers/:id
Главный администратор, главный инспектор, администратор кластера, инспектор кластера.
Получить информацию о сервере вебхука.
Администратор и инспектор кластера видят только локальные серверы своего кластера.
http 200
// 2.0+
{
"id": 12, // id сервера
"name": "integration", // название сервера
"url": "https://integration.dev.geo4.pro/", // адрес сервера
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"on": true // включен сервер или нет
}
POST /rest/scripts/servers
Главный администратор, администратор кластера.
Добавление нового сервера для вебхука.
Администратор кластера может создать только локальный сервер внутри своего кластера.
Входные данные
// 2.0+
{
"name": "integration", // * название сервера
"url": "https://integration.dev.geo4.pro/", // * адрес сервера
"cluster": { // кластер
"id": 62286 // id кластера
},
"on": true // включен сервер или нет (по умолчанию - true)
}
http 200
// 2.0+
{
"id": 12, // id сервера
"name": "integration", // название сервера
"url": "https://integration.dev.geo4.pro/", // адрес сервера
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"on": true // включен сервер или нет
}
PATCH /rest/scripts/servers/:id
Главный администратор, администратор кластера.
Изменение информации о сервере вебхука.
Администратор кластера может редактировать только локальный сервер своего кластера.
Входные данные
// 2.0+
{
"name": "new integration", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"on": false // включен сервер или нет
}
http 200
// 2.0+
{
"id": 12, // id сервера
"name": "new integration", // название сервера
"url": "https://integration.new.dev.geo4.pro/", // адрес сервера
"cluster": { // кластер
"id": 62286, // id кластера
"title": "Тестовый кластер" // название кластера
},
"on": false // включен сервер или нет
}
DELETE /rest/scripts/servers/:id
Главный администратор, администратор кластера.
Удаление сервера вебхука.
Администратор кластера может удалять только локальные серверы своего кластера.
/rest/logs
GET /rest/logs/list
Главный администратор, главный инспектор.
Возвращает информацию о действиях пользователей.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default10
— количество записей на страницеtable_name
string — фильтр по таблицамuser_id
long — фильтр по пользователямmethod
string — фильтр по методам HTTP запросаoperation
string — фильтр по операциям (insert/update/delete)from
timestamp — отображаются действия, совершенные после указанной датыtill
timestamp — отображаются действия, совершенные до указанной даты
// 2.0+
{
"items": [
{
"id": 87368, // id действия
"object_id": 176853, // id объекта, над которым было совершено действие
"table_name": "issues.comments", // название таблицы
"operation": "INSERT", // операция
"date": 1573198662, // дата совершения действия
"user": { // пользователь, который совершил действие
"id": 6,
"fio": "Администратор"
},
"http_request": { // http запрос
"id": 13433,
"url": "localhost:9000/tasks/75183...",
"method": "PATCH",
"payload": { // тело запроса
"issue_date": 1573121844002,
"expired_date": 1572614941,
"parent_id": 75322,
"fields": {
"Date": {
"field_id": 13,
"value": 1548158400
}
}
},
"datetime": 1573198428,
"author": {
"id": 6,
"fio": "Администратор"
},
"ip": "0:0:0:0:0:0:0:1",
"user_agent": "PostmanRuntime/7.19.0"
}
}
... // следующие элементы списка
}
/rest/service-objects
GET /rest/service-objects/mappings/list
Главный администратор, администратор кластера, инспектор кластера.
Список маппингов.
Администратор и инспектор кластера видят маппинг, если у них есть права на чтение слоя маппинга.
Сортировка осуществляется по полю id
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице
http 200
// 2.0+
{
"items": [
{
"id": 63, // id
"layer": { // слой
"id": 5 // id слоя
"title": "Сервисные объекты", // название
"name": "service_objects_vw" // название индекса
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // формат названия
"title_fields": [ // атрибуты названия
"address"
],
"fields": [ // атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"format": "{0}-{1}", // формат
"type": "CustomField", // тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"fields": [ // атрибуты формата
"fid",
"address"
],
"field_id": 2 // id настраиваемого поля
},
{
"format": "{0}-title-{1}",
"type": "Title",
"fields": [
"address",
"fid"
]
},
{
"format": "{0}-desc-{1}",
"type": "Description",
"fields": [
"address",
"fid"
]
}
]
}
],
"total": 1, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/service-objects/mappings/layer/:id
Главный администратор, администратор кластера, инспектор кластера.
Получить информацию о маппинге по id его слоя.
Администратор и инспектор кластера видят маппинг, если у них есть права на чтение слоя маппинга.
http 200
// 2.0+
{
"id": 63, // id
"layer": { // слой
"id": 5 // id слоя
"title": "Сервисные объекты", // название
"name": "service_objects_vw" // название индекса
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // формат названия
"title_fields": [ // атрибуты названия
"address"
],
"fields": [ // атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"format": "{0}-{1}", // формат
"type": "CustomField", // тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"fields": [ // атрибуты формата
"fid",
"address"
],
"field_id": 2 // id настраиваемого поля
},
{
"format": "{0}-title-{1}",
"type": "Title",
"fields": [
"address",
"fid"
]
},
{
"format": "{0}-desc-{1}",
"type": "Description",
"fields": [
"address",
"fid"
]
}
]
}
POST /rest/service-objects/mappings
Главный администратор, администратор кластера.
Запрос на создание маппинга из атрибутов слоя объектов обслуживания в поля задания.
Администратору кластера разрешено создавать маппинг, если ему разрешено редактировать слой маппинга.
// 2.0+
{
"layer": { // * слой
"id": 5 // id слоя
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // * формат названия
"title_fields": [ // * атрибуты названия
"address"
],
"fields": [ // * атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"type": "CustomField", // * тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"field_id": 2, // id настраиваемого поля
"format": "{0}-{1}", // * формат
// для полей типа int (Type, Priority, AssignedOrganization, AssignedUser)
// можно указать ссылку вида {0} либо явным образом прописанное число
"fields": [ // * атрибуты формата
"fid",
"address"
]
},
{
"type": "Title",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
http 200
// 2.0+
{
"id": 63, // id
"layer": { // слой
"id": 5 // id слоя
"title": "Сервисные объекты", // название
"name": "service_objects_vw" // название индекса
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // формат названия
"title_fields": [ // атрибуты названия
"address"
],
"fields": [ // атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"format": "{0}-{1}", // формат
"type": "CustomField", // тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"fields": [ // атрибуты формата
"fid",
"address"
],
"field_id": 2 // id настраиваемого поля
},
{
"format": "{0}-title-{1}",
"type": "Title",
"fields": [
"address",
"fid"
]
},
{
"format": "{0}-desc-{1}",
"type": "Description",
"fields": [
"address",
"fid"
]
}
]
}
PUT /rest/service-objects/mappings/layer/:id
Главный администратор, администратор кластера.
Запрос на редактирование маппинга (по id его слоя) из атрибутов слоя объектов обслуживания в поля задания. Работает по принципу полной замены.
Администратору кластера разрешено редактировать маппинг, если ему разрешено редактировать слой маппинга.
// 2.0+
{
"layer": { // * слой
"id": 5 // id слоя
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // * формат названия
"title_fields": [ // * атрибуты названия
"address"
],
"fields": [ // * атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"type": "CustomField", // * тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"field_id": 2, // id настраиваемого поля
"format": "{0}-{1}", // * формат
// для полей типа int (Type, Priority, AssignedOrganization, AssignedUser)
// можно указать ссылку вида {0} либо явным образом прописанное число
"fields": [ // * атрибуты формата
"fid",
"address"
]
},
{
"type": "Title",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
http 200
// 2.0+
{
"id": 63, // id
"layer": { // слой
"id": 5 // id слоя
"title": "Сервисные объекты", // название
"name": "service_objects_vw" // название индекса
},
"geo_json_field": "the_geom.coordinates", // атрибут с координатами
"title_format": "{0}", // формат названия
"title_fields": [ // атрибуты названия
"address"
],
"fields": [ // атрибуты
"fid",
"address",
"the_geom.coordinates"
],
"field_mappings": [ // соответствие атрибутов и полей
{
"format": "{0}-{1}", // формат
"type": "CustomField", // тип. Возможные значения: CustomField, Title, Description,
// Type, Priority, AssignedOrganization, AssignedUser
"fields": [ // атрибуты формата
"fid",
"address"
],
"field_id": 2 // id настраиваемого поля
},
{
"format": "{0}-title-{1}",
"type": "Title",
"fields": [
"address",
"fid"
]
},
{
"format": "{0}-desc-{1}",
"type": "Description",
"fields": [
"address",
"fid"
]
}
]
}
DELETE /rest/service-objects/mappings/layer/:id
Главный администратор, администратор кластера.
Запрос на удаление маппинга (по id его слоя) из атрибутов слоя объектов обслуживания в поля задания.
Администратору кластера разрешено удалять маппинг, если ему разрешено редактировать слой маппинга.
/rest/contracts
GET /rest/contracts/list
Список контрактов, доступных текущему пользователю.
Главному администратору и главному инспектору доступны все неудаленные контракты.
Администраторам и инспекторам кластера доступны контракты их кластера.
Администраторам и инспекторам организации доступны контракты, для которых их организация является исполнителем контракта.
Остальные пользователи получают в ответе пустой список.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, customerId=1,2
.
no
string — текстовый поиск контрактов по номеруtitle
string — текстовый поиск контрактов по названию+
customerId
long — отображаются контракты, принадлежащие указанным организациям-заказчикам+
assignedOrganizationId
long — отображаются контракты, принадлежащие указанным организациям-исполнителям+
clusterId
long — отображаются контракты, принадлежащие указанным кластерамpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortBy
defaulttitle
— поле, по которому ведется сортировка. Возможные значения -title
,no
.sortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [ // список доступных контрактов
{
"id": 989, // id контракта
"title": "Контракт на поставку оборудования", // название контракта
"description": "Контракт на поставку оборудования от 12.01.2022", // описание контракта
"no": "N1", // номер контракта
"cluster": { // информация о кластере контракта
"id": 1310, // id кластера
"title": "Доставка по России" // название кластера
},
"customer": { // информация об организации-заказчике
"id": 6, // id организации
"name": "Отдел продаж" // название организации
},
"assigned_organization": { // информация об организации-исполнителе контракта
"id": 39707, // id организации
"name": "Доставка по Казани" // название организации
},
"start_date": 1641988800, // дата начала действия контракта
"finish_date": 1642852800, // дата окончания действия контракта
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"grant_task_creation": false, // права исполнителя на создание задания по контракту
"groups": [ // группы сервисных объектов, по которым можно создавать задания
{
"id": 981,
"objects": [ // список сервисных объектов
{
"id": 962,
"title": "сервисный объект", // название сервисного объекта
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
},
{
"id": 963,
"title": "сервисный объект", // название сервисного объекта
"object_id": 1,
"layer_id": 5
}
],
"types": [ // список видов работ
{
"id": 1, // id вида рвбот
"name": "Доставка", // название вида работ
"icon": "icon.png" // файл пиктограммы вида работ
},
{
"id": 2,
"name": "Погрузка",
"icon": "icon.png"
}
]
}
]
}
],
"total": 84, // общее количество контрактов
"limit": 25, // количество записей на тсранице
"page": 1 // номер страницы
}
GET /rest/contracts/:id
Получение информации по контракту.
Главный администратор, Главный инспектор, Администратор кластера, Инспектор кластера, Администратор организации, Инспектор организации.
Контракт виден главному администратору и инспектору, администраторам и инспекторам кластера контракта, администраторам и инспекторам организации-исполнителя.
http 200
// 2.0+
{
"id": 989, // id контракта
"title": "Контракт на поставку оборудования", // название контракта
"description": "Контракт на поставку оборудования от 12.01.2022", // описание контракта
"no": "N1", // номер контракта
"cluster": { // информация о кластере контракта
"id": 1310, // id кластера
"title": "Доставка по России" // название кластера
},
"customer": { // информация об организации-заказчике
"id": 6, // id организации
"name": "Отдел продаж" // название организации
},
"assigned_organization": { // информация об организации-исполнителе контракта
"id": 39707, // id организации
"name": "Доставка по Казани" // название организации
},
"start_date": 1641988800, // дата начала действия контракта
"finish_date": 1642852800, // дата окончания действия контракта
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"grant_task_creation": false, // права исполнителя на создание задания по контракту
"groups": [ // группы сервисных объектов, по которым можно создавать задания
{
"id": 981,
"objects": [ // список сервисных объектов
{
"id": 962,
"title": "сервисный объект", // название сервисного объекта
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
],
"types": [ // список видов работ
{
"id": 1, // id вида рвбот
"name": "Доставка", // название вида работ
"icon": "icon.png" // файл пиктограммы вида работ
}
]
}
]
}
POST /rest/contracts
Добавление нового контракта.
Главный администратор, Администратор кластера.
Администратор кластера может создавать контракты только в своем кластере.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; Часовой пояс будет вычислен из кластера контракта.
// 2.0+
{
"title": "Контракт на поставку оборудования", // * название контракта
"description": "Контракт на поставку оборудования от 12.02.2022", // описание контракта
"no": "N1", // номер контракта
"assigned_organization": { // * информация об организации-исполнителе контракта
"id": 39707 // * id организации
},
"customer": { // * информация об организации-заказчике
"id": 6 // * id организации
},
"start_date": "2025-01-01 00:00", // дата начала действия контракта
"finish_date": "2026-01-01 00:00", // дата окончания действия контракта
"grant_task_creation": true, // права исполнителя на создание задания по контракту, по умолчанию false
"groups_add": [ // группы сервисных объектов, по которым можно создавать задания
{
"types_add": [ // список видов работ
{
"id": 1 // id вида рвбот
}
],
"objects_add": [ // список сервисных объектов
{
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
]
}
]
}
http 200
// 2.0+
{
"id": 989, // id контракта
"title": "Контракт на поставку оборудования", // название контракта
"description": "Контракт на поставку оборудования от 12.01.2022", // описание контракта
"no": "N1", // номер контракта
"cluster": { // информация о кластере контракта
"id": 1310, // id кластера
"title": "Доставка по России" // название кластера
},
"customer": { // информация об организации-заказчике
"id": 6, // id организации
"name": "Отдел продаж" // название организации
},
"assigned_organization": { // информация об организации-исполнителе контракта
"id": 39707, // id организации
"name": "Доставка по Казани" // название организации
},
"start_date": 1641988800, // дата начала действия контракта
"finish_date": 1642852800, // дата окончания действия контракта
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"grant_task_creation": false, // права исполнителя на создание задания по контракту
"groups": [ // группы сервисных объектов, по которым можно создавать задания
{
"id": 981,
"objects": [ // список сервисных объектов
{
"id": 962,
"title": "сервисный объект", // название сервисного объекта
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
],
"types": [ // список видов работ
{
"id": 1, // id вида рвбот
"name": "Доставка", // название вида работ
"icon": "icon.png" // файл пиктограммы вида работ
}
]
}
]
}
PATCH /rest/contracts/:id
Изменение информации о контракте.
Главный администратор, Администратор кластера.
Администратор кластера может редактировать контракты только в своем кластере.
Даты начала и окончания срока действия могут быть переданы как в формате Unix Timestamp, так и в виде строки. Строка при этом состоит из даты (YYYY, MM, DD в прямом или обратном порядке, разделённые точкой, дефисом или слэшем) и времени (hh:mm или hh:mm:ss), разделённых пробелом.
Timestamp трактуется как абсолютное время в UTC. Строковая дата трактуется как местное время; Часовой пояс будет вычислен из кластера контракта.
// 2.0+
{
"title": "Контракт на поставку оборудования", // название контракта
"description": "Контракт на поставку оборудования от 12.02.2022", // описание контракта
"no": "N1", // номер контракта
"assigned_organization": { // информация об организации-исполнителе контракта
"id": 39707 // * id организации
},
"customer": { // информация об организации-заказчике
"id": 6 // id организации
},
"start_date": "2025-01-01 00:00", // дата начала действия контракта
"finish_date": "2025-12-31 00:00", // дата окончания действия контракта
"grant_task_creation": true, // права исполнителя на создание задания по контракту
"groups_add": [ // список новых групп сервисных объектов
{
"types_add": [ // список видов работ
{
"id": 1 // id вида рвбот
}
],
"objects_add": [ // список сервисных объектов
{
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
]
}
],
"groups_edit": [ // список измененных групп сервисных объектов
{
"id": 981, // id группы сервисных объектов
"types_add": [ // список добавленных видов работ
{
"id": 1 // id вида рвбот
}
],
"objects_add": [ // список добавленных сервисных объектов
{
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
],
"types_remove": [ // список удаленных видов работ
{
"id": 2 // id вида рвбот
}
],
"objects_remove": [ // список удаленных сервисных объектов
{
"object_id": 1 // id сервисного объекта
"layer_id": 5 // id слоя сервисного объекта
}
],
}
],
"groups_remove": [ // список удаленных групп сервисных объектов
{
"id": 1 // id группы сервисных объектов
}
]
}
http 200
// 2.0+
{
"id": 989, // id контракта
"title": "Контракт на поставку оборудования", // название контракта
"description": "Контракт на поставку оборудования от 12.02.2022", // описание контракта
"no": "N1", // номер контракта
"cluster": { // информация о кластере контракта
"id": 1310, // id кластера
"title": "Доставка по России" // название кластера
},
"customer": { // информация об организации-заказчике
"id": 6, // id организации
"name": "Отдел продаж" // название организации
},
"assigned_organization": { // информация об организации-исполнителе контракта
"id": 39707, // id организации
"name": "Доставка по Казани" // название организации
},
"start_date": 1641988800, // дата начала действия контракта
"finish_date": 1642852800, // дата окончания действия контракта
"start_date_local": "01.01.2025 00:00", // локальная дата начала действия контракта
"finish_date_local": "01.01.2026 00:00", // локальная дата окончания действия контракта
"grant_task_creation": false, // права исполнителя на создание задания по контракту
"groups": [ // группы сервисных объектов, по которым можно создавать задания
{
"id": 981,
"objects": [ // список сервисных объектов
{
"id": 962,
"title": "сервисный объект", // название сервисного объекта
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
],
"types": [ // список видов работ
{
"id": 1, // id вида рвбот
"name": "Доставка", // название вида работ
"icon": "icon.png" // файл пиктограммы вида работ
}
]
},
{
"id": 982,
"objects": [ // список сервисных объектов
{
"id": 972,
"title": "сервисный объект", // название сервисного объекта
"object_id": 2, // id сервисного объекта
"layer_id": 6 // id слоя сервисного объекта
}
],
"types": [ // список видов работ
{
"id": 1, // id вида рвбот
"name": "Доставка", // название вида работ
"icon": "icon.png" // файл пиктограммы вида работ
}
]
}
]
}
DELETE /rest/contracts/:id
Удаление контракта.
Главный администратор, Администратор кластера.
/rest/licenses
POST /rest/licenses/key
Главный администратор.
Загрузить ключ лицензии.
// 2.0+
{
"license_key": "CJKLE-NJDRQ-78CVM-94CQP-ZNAKW-ZB3K1" // ключ лицензии
}
POST /rest/licenses/activation-code
Главный администратор.
Загрузить код активации.
// 2.0+
{
"activation_code": "Njk8SVFTe3JlVRsXBHJPcDNNCF88IF..." // код активации
}
DELETE /rest/licenses
Главный администратор.
Удалить ключ лицензии.
DELETE /rest/licenses/new
Главный администратор.
Удалить новый загруженный ключ лицензии до получения кода активации по нему.
GET /rest/licenses/info
Главный администратор.
Получить информацию о лицензии.
http 200
// 2.0+
{
"license_key": "86GLA-4AJZC-*****-*****-*****-*****", // первые 10 символов ключа
"new_license_key": "MAK95-WDW7X-*****-*****-*****-*****", // первые 10 символов нового ключа
"hardware_id": "eikiJHxxdDJcUVRcDlZGW3ZbDkFDXw...", // код активации
"new_hardware_id": "dH0lci5wcWYEUlhfDAREWnZfCkBCDV...", // код активации новой лицензии
"expires": 1694072924, // Unix Timestamp срока истечения действия ключа
// null, если ключ бессрочный
"new_expires": 1794072924, // Unix Timestamp срока истечения действия НОВОГО ключа
// null, если ключ бессрочный
"total_limit": 100, // максимальное количество пользователей для этого ключа
// null, если ключ безлимитный
"new_total_limit": 1000 // максимальное количество пользователей для НОВОГО ключа
// null, если ключ безлимитный
"system_limit": 15, // максимальное количество пользователей в системе
"status": "EXCEEDED" // статус системы, возможные значения -
// VALID | UNCONFIRMED | BROKEN | EXPIRED | EXCEEDED | INACTIVE
}
/rest/metrics
GET /rest/metrics/tasks/mins/:N
Список запросов, совершенных пользователями в системе за последние N минут. В список входят запросы на создание, изменение и удаление заданий.
Данные за текущую (на момент выполнения запроса) минуту в список не входят.
Данные по запросам пользователей, которые выполнили меньше 5% от общего количества запросов за N минут, будут объединены ("user" будет указан null).
Главный администратор, Главный инспектор.
http 200
// 2.0+
{
"items": [ // Список запросов, совершенных пользователями
{
"operation": "INSERT", // Запросы на создание заданий
"datetime": 1670854680, // дата и время совершения запросов
"user": { // данные пользователя, который совершал запросы
"id": 111, // id пользователя
"fio": "Иванов Петр Сергеевич" // ФИО пользователя
}
"count": 12 // количество запросов за N минут
},
{
"operation": "UPDATE", // Запросы на изменение заданий
"datetime": 1670855220,
"user": {
"id": 121,
"fio": "Иванов Сергей Петрович"
}
"count": 14
},
{
"operation": "DELETE", // Запросы на удаление заданий
"datetime": 1670854680,
"user": {
"id": 122,
"fio": "Семенов Андрей Александрович"
}
"user_id": 6,
"count": 4
},
{
"operation": "UPDATE", // Объединенные данные по запросам пользователей на изменение заданий
"datetime": 1670855000,
"user": null,
"count": 2
},
],
"total": 32 // Общее количество запросов за N минут
}
/rest/
GET /rest/version
Любой пользователь.
Возвращает служебную информацию о версии приложения
status = 200
// 2.0+
{
"appname": "Your System", // "application.name" в application.conf
"version": "1.7.7", // служебное поле для обратной совместимости с более ранними версиями протокола; сейчас не используется
"cerebellum": "0.24", // версия Cerebellum
"branch": "0.24.0", // branch, из которого была произведена сборка
"build": 1, // номер сборки
"commit": "198d389d672138f112920833459981b0b35234ee", // коммит сборки
"link": "http://ci.geo4.pro/job/cerebellum/job/dev-current/142/", // ссылка на сборку
"mapinformer_android": "1.16", // последняя выпущенная версия MapInformer Android
"mapinformer_ios": "1.11.1", // последняя выпущенная версия MapInformer iOS
"status": "VALID" // статус системы, возможные значения -
// VALID | UNCONFIRMED | BROKEN | EXPIRED | EXCEEDED | INACTIVE
}