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
Значение версии 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-login
Неавторизованный пользователь, авторизованный пользователь.
Запрос на авторизацию.
// 2.0+
{
"login": "login", // логин
"password": "password" // пароль
}
http 200
// 2.0+
{
"id": 6, // id пользователя
"login": "login", // логин пользователя
"fio": "ФИО", // имя пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": null, // id организации
"workgroup_ids": [
132,
232
], // массив id проектов, доступных пользователю
"role_id": 8, // id роли
"info": {
"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, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"token": "87e3d7ae036b752cc90bd093bbfa1634" // token
}
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.
// ws://localhost:9000/tasks/cache
GET /rest/tasks/stats
Получение статистики по заданиям. Количество заданий с группировкой по этапам, приоритетам, видам работ, организациям-исполнителям, организациям-создателям.
Параметры фильтрации
date_from
timestamp — дата начала, начиная с которой необходимо отфильтровать заданияdate_till
timestamp — дата, до которой необходимо отфильтровать задания
/tasks/stats?date_from=1445845360&date_till=1448523760`
http 200
// 2.0+
{
"statuses": [ // по этапам
{
"status_id": 1,
"count": 3
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 0
}
],
"priorities": [ // по приоритетам
{
"priority_id": 1,
"statuses": [
{
"status_id": 1,
"count": 1
},
{
"status_id": 2,
"count": 0
},
{
"status_id": 3,
"count": 2
}
]
}
],
"types": [ // по видам работ
{
"type_id": 1,
"statuses": [
{
"status_id": 1,
"count": 2
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 2
}
]
}
],
"organizations": [ // по организациям-создателям
{
"organization_id": 1,
"statuses": [
{
"status_id": 1,
"count": 0
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 2
}
]
}
],
"assignedOrganizations": [ // по назначенным организациям
{
"assigned_organization_id": 1,
"statuses": [
{
"status_id": 1,
"count": 2
},
{
"status_id": 2,
"count": 3
},
{
"status_id": 3,
"count": 4
}
]
}
]
}
GET /rest/tasks/points
Быстрый запрос для получения списка заданий и точек.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssigned
boolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosed
boolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMy
boolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus
— отображаются задания с соответствующими этапами+
onlyStates
— отображаются задания, которые находятся в соответствующих состояниях+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplate
boolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром 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&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/points?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>CreateDate=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 задания
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1 // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
},
... // следующие элементы списка
]
}
GET /rest/tasks/geometry
Быстрый запрос для получения списка заданий и геометрии - точек и данных настраиваемых полей типа "геометрия".
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssigned
boolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosed
boolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMy
boolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus
— отображаются задания с соответствующими этапами+
onlyStates
— отображаются задания, которые находятся в соответствующих состояниях+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
organizationId
long — отображаются задания, созданные в указанных организациях+
creatorId
long — отображаются задания, созданные указанными пользователями+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям+
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&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/geometry?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>CreateDate=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 задания
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1, // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
"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}withAssigned
boolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosed
boolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMy
boolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus
— отображаются задания с соответствующими этапами+
onlyStates
— отображаются задания, которые находятся в соответствующих состояниях+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplate
boolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром 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?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/distribution?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=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/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/tracking
Список информации о входе/выходе пользователей в зоны действия заданий.
Параметры фильтрации
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице
http 200
// 2.0+
// /tasks/tracking?page=2&limit=5
{
"items": [ // Список записей о входе/выходе пользователей в зоны действия заданий
{
"id": 17, // id записи
"user": { // информация по пользователю
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // ФИО пользователя
},
"coordinate": { // информация по точке (центр зоны задания)
"id": 24257, // id точки
"lon": 49.142077, // долгота
"lat": 55.774431 // широта
},
"date": 1521620985, // время действия (входа/выхода)
"inside": false, // характеристика нахождения пользователя внутри (true) или вне (false) зоны действия задания
// true - при изменении задания (Исполнитель находится внутри зоны действия задания/ Исполнитель находится вне зоны действия задания)
// false - при перемещении пользователя (Исполнитель вошел в зону действия задания/Исполнитель покинул зону действия задания)
}
]
}
GET /rest/tasks
Для пользователя организации "Население" (people_dep = true) в ответе отобразятся только созданные им задания. Для пользователя организации, отличной от "Население" (people_dep = false), в ответе отобразятся все задания его организации. Для пользователя без организации (например, главного администратора) в ответе отобразятся все задания всех организаций.
Список всех заданий, доступных пользователю.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2
.
stage
integer — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssigned
boolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosed
boolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchive
boolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMy
boolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssigned
boolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearch
string — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus
— отображаются задания с соответствующими этапами+
onlyStates
— отображаются задания, которые находятся в соответствующих состояниях+
priority_id
long — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_id
long — фильтр по видам работ заданийgtUpdateDate
timestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDate
timestamp — отображаются задания, дата обновления которых меньше указанной датыgtDate
timestamp — отображаются задания, дата которых больше указанной датыltDate
timestamp — отображаются задания, дата которых меньше указанной датыgtDeadline
timestamp — отображаются задания, deadline которых больше указанной датыltDeadline
timestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationId
long — отображаются задания, которые назначены на указанные организации+
assignedUserId
long — отображаются задания, которые назначены на указанных пользователей+
organizationId
long — отображаются задания, созданные в указанных организациях+
workgroupId
long — отображаются задания, относящиеся к указанным проектам+
creatorId
long — отображаются задания, созданные указанными пользователями+
parentId
long — фильтр по родительским заданиям+
serviceObjectId
long — фильтр по объектам обслуживания+
serviceObjectLayerId
long — фильтр по слоям объектов обслуживания+
scheduleId
long — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplate
boolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром 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. Также допустима сортировка по удаленности от указанной точки. В этом случае не указывается поле для сортировки, но указываются дополнительные параметры с координатами точки lon (долгота), lat (широта) и направление сортировки в параметре sortDirection. Сортировка по удаленности от указанной точки ведется только по тем заданиям, которые имеют точку.
sortDirection
defaultDESC
— направление сортировки (ASC, DESC)lon
double — координата долготы для сортировки заданий по удаленности от точкиlat
double — координата широты для сортировки заданий по удаленности от точкиpage
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице
/tasks?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=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 задания
"title": "Ямы на дорогах", // заголовок
"user_id": 363, // id создателя задания
"user_fio": "Иванов Иван", // ФИО создателя задания
"text": "Ямы на дорогах в центре города на ул.Профсоюзная", // описание
"organization_id": 1, // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"organization_name": "Население", // название назначенной организации
"organization_logo": "logo_3.png", // логотип организации
"workgroup_id": 188, // id проекта
"date": 1543312469, // дата создания задания
"deadline": 1541581662557, // дедлайн
"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_name": "Рассмотрение", // название этапа
"num_main_photo": 1, //порядковый номер фотографии, которая будет в заголовке.
"archive": false, // архивное задания
"system_data": null, // поле для интеграционных целей
"update_date": 1547311229, // дата изменение задания
"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
"date": 1541581403357, // дата создания задания
"unread_message_count": 3, // количество непрочитанных сообщений
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"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_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"num": 1, // порядковый номер файла
"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 задания
}
],
},
... // следующие элементы списка заданий
],
"count": 59503 // количество заданий
}
POST /rest/tasks
Добавление задания.
В массив attachments
закладывается возможность прикрепления ярлыков к файлам
сразу при создании задания (поле sticker_id
). При прикреплении ярлыков производится
проверка их доступности виду работ задания. При проверке учитывается свойство
ярлыков is_for_all
(доступно всем видам работ). Если хотя бы один из указанных
ярлыков не соответствуют виду работ, будет получен код 403 . При передаче sticker_id: null
или
отсутствии sticker_id
считается, что к файлу не прикреплен никакой ярлык.
// 2.0+
{
"organization_id": 3, // id организации-создателя;
// поле должно быть передано, если создатель задания
// не принадлежит ни к одной организации
//
"date": 1533286296, // * дата задания
"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": 1533545495, // дедлайн;
// если не передан, то может быть проставлен
// на основе поля 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", // имя файла на сервере после закачки
"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" // версия приложения
}
},
... // следующие элементы списка файлов
]
}
http 200
// 2.0+
{
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя задания
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1542969580, // дедлайн
"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_name": "рассмотрение", // название этапа
"num_main_photo": 1, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"update_date": 1542969580, // дата обновления задания
"workgroup_id": 188, // id проекта
"assigned_organization_id": 101, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 95, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1542969580, // дата создания задания
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"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_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
Более подробное описание прикрепленных файлов см. в GET /tasks
GET /rest/tasks/:id
Получение данных по конкретному заданию.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог просмотреть задание, его роли должна быть доступна capability = show.
http 200
// 2.0+
{
"task": {
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1542969580, // дедлайн
"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_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1542969580, // дата обновления задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1542969580, // дата создания задания
"unread_message_count": 3, // количество непрочитанных сообщений
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"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_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
},
"configuration": {}
}
Более подробное описание прикрепленных файлов см. в GET /tasks
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".
Новые переданные файлы будут прикреплены к заданию и добавлены к ранее прикрепленным файлам.
Если массив "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" не было передано, полагаем, что к файлу не прикреплен никакой стикер.
При передаче поля "fields" происходит частичное изменение настраиваемых полей:
переданное настраиваемое поле, которое было прикреплено к заданию ранее, обновляется;
новое настраиваемое поле, прикрепляется к заданию и добавляется к ранее прикрепленным полям.
Для открепления всех настраиваемых полей необходимо передать null.
// 2.0+
{
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"status_id": 1, // id этапа
"assigned_organization_id": 3, // id назначенной организации
"assigned_user_id": 613, // id назначенной пользователя
"type_id": 1, // id вида работ
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"priority_id": 1, // id приоритета
"parent_id": 2, // id родительского задания
"deadline": 1533286296, // дедлайн
"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", // исходное название файла
"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
}
},
{
"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 // информация о приложении и платформе
},
... // следующие элементы списка файлов
]
}
http 200
// 2.0+
{
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1542969580, // дедлайн
"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_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1542969580, // дата обновления задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1542969580, // дата создания задания
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"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_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1542949580
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
Более подробное описание прикрепленных файлов см. в GET /tasks
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 // действие, доступно или нет
}
GET /rest/tasks/:id/track
Список информации о входе/выходе пользователя в зону действия задания.
Параметры фильтрации
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице
/tasks/123/track?page=2&limit=5
http 200
// 2.0+
{
"items": [ // Список записей о входе/выходе пользователя в зону действия задания
{
"id": 17, // id записи
"user": { // информация по пользователю
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // ФИО пользователя
},
"coordinates": { // информация по точк (центр зоны задания)
"id": 24257, // id точки
"lon": 49.142077, // долгота
"lat": 55.774431 // широта
},
"date": 1521620985, // время действия (входа/выхода)
"inside": false, // характеристика нахождения пользователя внутри (true) или вне (false) зоны действия задания
// true - при изменении задания (Исполнитель находится внутри зоны действия задания/ Исполнитель находится вне зоны действия задания)
// false - при перемещении пользователя (Исполнитель вошел в зону действия задания/Исполнитель покинул зону действия задания)
}
]
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": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1234567890 // время последнего изменения, Timestamp
"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": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1234567890 // время последнего изменения, Timestamp
"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": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1543312469 // время последнего изменения, Timestamp
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
http 200
// 2.0+
{
"rating": 4, // Оценка, Int от 1 до 5
"comment": "Не уложились в срок",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1543312469 // время последнего изменения, Timestamp
"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, // дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"date": 1533289354, // дата изменения
"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, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50028, //id комментария
"uuid": "b95268a0-41d8-4c91-b758-aa822782c181",
"date": 1533289321, //дата создания комментария
"update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 100, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50026, // id комментария
"uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",
"date": 1533215336, // дата создания комментария
"update_text": "Были добавлены новые файлы. Файлы были изменены.", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39981, // id изменения
"date": 1533215336, // дата изменения
"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, // порядковый номер файла
"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, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
}
]
}
GET /rest/tasks/:id/comments/list-hierarchy
Получение списка комментариев задания и всех его подзаданий.
Параметры фильтрации
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultDESC
— направление сортировки (ASC, DESC). Комментарии заданий отдаются одним потоком в порядке их появления, что практически во всех случаях соответствует сортировке по полю date
http 200
// 2.0+
{
"items": [
{
"id": 50029, // id комментария
"uuid": "1454bd95-3653-4499-ab39-9733af031312",
"date": 1533289354, // дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"date": 1533289354, // дата изменения
"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, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50028, //id комментария
"uuid": "b95268a0-41d8-4c91-b758-aa822782c181",
"date": 1533289352, //дата создания комментария
"update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60530, // id задания
"chat_message_number": 1, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50026, // id комментария
"uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",
"date": 1533289350, // дата создания комментария
"update_text": "Были добавлены новые файлы. Файлы были изменены.", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 98, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
}
],
"total": 3, // общее количество комментариев
"page": 1, // текущая страница
"limit": 25 // максимальное количество элементов на странице
}
POST /rest/tasks/:id/comments
Добавление комментария к заданию.
// 2.0+
{
"uuid": "Работы начаты", // UUID4, необязательное поле
"comment": "Комментарий" // текст комментария
}
http 200
// 2.0+
{
"id": 9145, // id комментария
"uuid": "cdnjskcnkjdancfk", // UUID4, необязательное поле
"parent": null, // родительский комментарий
"date": 1542969580, // дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начаты", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 102, // номер сообщения в чате задания
"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, // дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начали. Прибыли на объект", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 103, // номер сообщения в чате задания
"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 — порядковый номер приложенного файла
/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/service-objects
Чтение конфигурационных параметров для объектов обслуживания.
// 2.0+
{
"items": {
"search_params": "?size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:asc",
"layer": {
"id": 999,
"name": "baki_z"
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
}
PUT /rest/configuration/service-objects
Главный администратор, главный инспектор.
Запрос на редактирование конфигурационных параметров для объектов обслуживания. Работает по принципу полной замены.
// 2.0+
{
"search_params": "size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:desc",
"layer": {
"id": 999
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"custom_field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"custom_field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
http 200
// 2.0+
{
"search_params": "size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:desc",
"layer": {
"id": 999,
"name": "baki_z"
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"custom_field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"custom_field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
GET /rest/configuration/service-objects/search
Служит для поиска по объектам обслуживания.
Параметры запроса
q
string — текстовый поиск, пример: q=никольскаяlonLat
— координаты точки для сортировки по удалению от нее, пример: lonLat=37.617635,55.755814
http 200
// 2.0+
{
"items": {
"hits": [
{
"_id": 123, // ID объекта помещается в выделенное поле
"fid": 123, // остальные поля
"address": "Москва, улица Никольская, дом 11",
"the_geom": {
"coordinates": [
[
37.605677,
55.763433
],
],
}
}
],
"total": 1
}
}
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)
"issueZoneTrackingOn": false // включать отслеживание местоположения исполнителя
// по умолчанию для всех заданий
}
PUT /rest/configuration/locale/*code
Главный администратор.
Изменить локаль сервера.
/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, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
},
{
"id": 3,
"title": "Организации Московского района",
"defaults": false,
"creation_date": 1585638692,
"created_by": {
"id": 6,
"fio": "Администратор"
}
},
{
"id": 1,
"title": "По умолчанию",
"defaults": true,
"creation_date": 1584975466,
"created_by": {
"id": 6,
"fio": "Администратор"
}
}
],
}
GET /rest/clusters/:id
Получение информации по кластеру (если данный кластер доступен текущему пользователю).
Главному администратору и главному инспектору доступны все неудаленные кластеры.
Пользователи других ролей видят кластеры своих организаций.
http 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
}
POST /rest/clusters
Главный администратор, Главный инспектор.
Добавление нового кластера.
// 2.0+
{
"title": "Организации Кировского района" // * название кластера
}
http 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"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, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
}
DELETE /rest/clusters/:id
Главный администратор.
Удаление кластера.
При попытке удаления кластера "По умолчанию" или кластера, в котором есть организации, получим ошибку (400 BadRequest).
/rest/organizations
GET /rest/organizations/list/:limit/:offset
Получение списка организаций, где offset
- номер первой выводимой в ответе организации, limit
- количество выводимых
в ответе организаций.
Главный инспектор и главный администратор видят все организации, для других пользователей видимость организаций зависит от настройки behavior.can.see.my.organization.only. Если эта настройка выставлена в true, пользователь будет видеть только доступные ему организации. Если настройка выставлена в false, доступ к организациям будет ограничиваться кластерами его организаций.
Параметры limit
, offset
не обязательны.
Параметры
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, // количество пользователей
//
"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": "Никитина Ольга Ивановна", // ФИО бухгултера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 50 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
}
},
... // следующие элементы списка организаций
]
}
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, // признак клиентской организации
//
"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": 50 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
}
POST /rest/organizations
Добавление новой организации.
Главный администратор, Администратор кластера.
Администратор кластера может создавать организации только внутри своих кластеров.
Файл с логотипом к моменту запроса должен находиться в папке
{FILES_ROOT}/department_logo
Поле
id
применяется для интеграционных целей: чтобы создаваемая организация имела тот жеID
, что и её двойник в некой другой системе
Входные данные
// 2.0+
{
"name": "Высокие технологии", // * название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // id положения карты; по умолчанию 1
"client": false, // признак клиентской организации; по умолчанию 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 при создании; не должно совпадать с существующими
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
}
}
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, // признак клиентской организации
//
"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 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_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, // признак клиентской организации
"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 // Максимально допустимое количество пользователей организации
// (не должно быть меньше текущего количества пользователей организации)
},
"task_defaults": {
"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, // признак клиентской организации
//
"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 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 99 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_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, // * признак клиентской организации
"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 // Максимально допустимое количество пользователей организации (не должно быть меньше текущего количества пользователей организации)
}, //
//
"task_defaults": {
"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, // признак клиентской организации
//
"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 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
}
DELETE /rest/organizations/:id
Удаление организации.
Главный администратор, Администратор кластера.
Администратор кластера может удалять организации внутри своих кластеров.
При удалении организации происходит удаление пользователей, для которых эта организация - главная.
GET /rest/organizations/:id/users
Получение списка пользователей организации, где id
- id организации.
Главный администратор и Главный инспектор могут видеть всех пользователей всех организаций.
Администратор кластера может видеть пользователей организаций внутри своего кластера, а также внутри доступных ему проектов.
Пользователи с другими ролями могут видеть пользователей внутри своих организаций и доступных проектов.
Данные пользователей с ролью Клиент недоступны другим пользователям с ролью Клиент.
http 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id организации, либо null, если пользователь
// не относится ни к какой организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
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": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id организации, либо null, если пользователь
// не относится ни к какой организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
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": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 1, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
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, // канал входящих сообщений
"task_defaults": {
"assigned_organization": { // организация-исполнитель по умолчанию, если она есть
"id": 99,
"Тестовая организация"
}
}
}
POST /rest/users/register
Неавторизованный пользователь.
Регистрация нового пользователя с ролью Клиент .
Входные данные
// 2.0+
{
"login": "login", // * логин
"paswd": 12345, // * пароль
"fio": "Иванов И.И.", // * ФИО
"organization_id": 514, // * id организации
"email": "test@gmail.com", // * email
"phone": "+7 999 888 7766", // телефон
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999" // паспортные данные
}
http 200
// 2.0+
{
"id": 6923, // id пользователя
"login": "login", // логин
"fio": "Иванов И.И.", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [], // список меток пользователя
"organization_id": 514, // id организации
"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
.
taskDate
timestamp — дата, параметр для подсчета количества заданий: в списке отобразится количество назначенных на пользователя заданий, в стадии "В работе" в указанный день (время не учитывается)+
typeId
long — фильтр по типам пользователей+
tagId
long — фильтр по меткам пользователей
http 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО
"organization_id": 2, // id организации
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"workgroup_ids": [ // массив id проектов, доступных пользователю
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
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": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"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 пользователя ActiveMap
"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 при выполнении основного запроса.
Входные данные
// 2.0+
{
"id": 123, // id пользователя
"login": "ivanov_ivan", // * логин
"paswd": "qwerty123", // * пароль
"fio": "Иванов И.И.", // * ФИО пользователя
"organization_id": 1, // * id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 7, // id роли, по умолчанию 6 - Клиент
"type": { // тип
"id": 1 // id типа
},
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"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": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"organization_id": 1, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
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], чтобы привести передаваемые данные к согласованности.
Имеем два случая и разное поведение в каждом из них. Так сделано потому, что оба приведённых выше запроса — некорректные, и мы "исправляем" каждый из них наиболее удобным для нас способом, чтобы минимизировать изменения в клиентах, которые на данный момент отправляют (или могут отправлять) неверные данные.
Входные данные
// 2.0+
{
"login": "ivanov_ivan", // логин
"fio": "Иванов Иван Иванович", // ФИО
"paswd": "123123", // новый пароль
"role_id": 7, // id роли; пользователь не может сам поменять свою роль
"organization_id": 517, // id организации, права на изменения
// есть только у главного администратора
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"type": { // тип
"id": 1 // id типа
},
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": { // метки пользователя
"add": [ // метки, которые необходимо добавить
{
"id": 21 // id метки
}
],
"remove": [ // метки, которые необходимо удалить
{
"id": 22 // id метки
}
]
}
"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": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 21
},
... // следующие элементы списка
],
"organization_id": 517, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
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/:id
Удаление учетной записи пользователя.
Главный администратор, Администратор организации, Администратор кластера.
Администратор организации может удалять учетные записи пользователей только своей организации.
Администратор кластера может удалять учетные записи пользователей из организаций своего кластера.
GET /rest/users/:activeMapUserId/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
Текущий пользователь, главный администратор, администратор организации, администратор кластера.
Удалить аватар пользователя.
Текущий пользователь может удалить свой аватар.
Администратор организации может удалить аватар пользователя только своей организации.
Администратор кластера может удалить аватар пользователя из организации своего кластера.
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" // код роли
},
... // следующие элементы списка ролей
// в заданном порядке сортировки
]
}
/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 — отображаются виды работ, принадлежащие указанным группам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", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"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, // порядковый номер вида работ
// в отсортированном списке
"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 — отображаются виды работ, принадлежащие указанным группам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", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"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 организаций, которым доступен вид работ, в данном запросе будет пустым
"included_organizations": [ // массив id организаций,
// которым доступен вид работ
1,
2,
3
],
"excluded_organizations": [
], // массив id организаций, которым не доступен вид работ
"order_key": 3, // порядковый номер вида работ
// в отсортированном списке
"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": "Обрушение конструкции", // название вида
"icon": "icon_12.png", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки для карты
"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, // порядковый номер видов работ
// в отсортированном списке
"group_id": null // id группы, которой принадлежит вид,
// и null, если вид не принадлежит
// никакой группе
},
... // следующие элементы списка видов работ
// в заданном порядке сортировки
]
}
GET /rest/types/groups/list
Главный администратор, главный инспектор.
Получить список всех групп видов работ.
http 200
// 2.0+
{
"items": [
{
"id": 41, // id группы
"name": "название группы" // название группы
},
... // следующие элементы списка групп
]
}
POST /rest/types/groups
Главный администратор, главный инспектор.
Создание новой группы видов работ.
Входные данные
// 2.0+
{
"name": "название группы" // * название группы
}
http 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы" // название группы
}
GET /rest/types/groups/:id
Главный администратор, главный инспектор.
Получение группы видов работ.
http 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы" // название группы
}
PUT /rest/types/groups/:id
Главный администратор, главный инспектор.
Изменение группы видов работ.
Входные данные
// 2.0+
{
"name": "измененное название группы" // название группы
}
http 200
// 2.0+
{
"id": 208, // id группы
"name": "измененное название группы" // название группы
}
DELETE /rest/types/groups/:id
Главный администратор, главный инспектор.
Удаление группы видов работ.
POST /rest/types
Главный администратор, главный инспектор.
Создание вида работ.
Входные данные
// 2.0+
{
"name": "Доставка техники", // * название вида работ
"icon": "icon_158.png", // * название двумерной иконки, иконка
// по умолчанию - "default_icon.png"
"icon3d": "icon3d_158.png", // * название трехмерной иконки, иконка
// по умолчанию - "default_icon3d.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, если вид не принадлежит
// никакой группе
}
http 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"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", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
}
PUT /rest/types/:id
Главный администратор, главный инспектор.
Изменение вида работ.
Входные данные
// 2.0+
{
"name": "Доставка оборудования", // название вида
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_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
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null (либо 0), если вид не
// принадлежит никакой группе
}
http 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"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.
PUT /rest/types/:id/:iconType
Главный администратор, администратор организации, главный инспектор, инспектор организации.
Загрузить иконку вида работ.
Параметры запроса
id
integer — id вида работiconType
— тип загружаемой иконки, возможные значения:icon
icon3d
mapIcon
mapIconHighlight
icon3dDone
iconDone
mapIconDone
Для версий Cerebellum до 0.16 в запросе необходимо:
указать Content-Disposition: name="icon",
передать файл в переменной "icon".
Для версий Cerebellum, начиная с 0.16 и старше, достаточно просто передать файл, дополнительно ничего указывать не нужно.
Пример загрузки пиктограммы через REST-клиент Advanced REST client
http 200
// 2.0+
{
"id": 1326, // id вида
"name": "Доставка оборудования", // название вида работ
"order_key": null, // порядок сортировки
"icon": "default_icon.png", // название двумерной иконки
"icon3d": "14486184457501326_icon3d_photo_test.jpg", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: null, от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
}
/rest/statuses
POST /rest/statuses
Главный администратор, главный инспектор.
Создать этап.
Входные данные
// 2.0+
{
"name": "рассмотрение", // * название этапа
"visible": true, // * видимость этапа пользователям в списке этапов
"default": false, // * является ли данный этап этапом по умолчанию
"closed": false, // * является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
http 200
// 2.0+
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
GET /rest/statuses
Получение списка видимых этапов заданий.
Параметры
search
string — текстовый поиск этапов по значениям параметров id, namename
string — текстовый поиск этапов по значению параметра namedefault
boolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюclosed
boolean — при значении closed=true отображаются этапы, относящиеся к выполненнымsortBy
defaultid
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
},
... // следующие элементы списка этапов
]
}
GET /rest/statuses/list/all
Главный администратор, главный инспектор, администратор организации, инспектор организации.
Получение списка этапов заданий.
Параметры запросов:
search
string — текстовый поиск этапов по значениям параметров id, namename
string — текстовый поиск этапов по значению параметра namedefault
boolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюvisible
boolean — при значении visible=true отображаются этапы, видимые пользователям в списке этаповclosed
boolean — при значении closed=true отображаются этапы, относящиеся к выполненнымsortBy
defaultid
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
},
... // следующие элементы списка этапов
]
}
PUT /rest/statuses/:id
Главный администратор, главный инспектор.
Изменить этап.
Входные данные
// 2.0+
{
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
http 200
// 2.0+
{
"id": 1, // id этапа
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
DELETE /rest/statuses/:id
Главный администратор, главный инспектор.
Удалить этап.
/rest/priorities
GET /rest/priorities
Получение списка приоритетов заданий.
Параметры запроса
search
sring — текстовый поиск приоритетов по значениям параметров id, namename
string — текстовый поиск приоритетов по значению параметра namesortBy
defaultorder_important
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)
/priorities
/priorities?search=test
/priorities?search=test&sortBy=name&sortDirection=ASC
http 200
// 2.0+
{
"count": 10, // количество приоритетов заданий,
// удовлетворяющих заданным условиям поиска и сортировки
"items": [
{
"id": 1, // id
"name": "Плановые", // название приоритета
"icon": "priority_1.png", // название иконки
"order_important": 7 // степень значимости приоритета
},
... // следующие элементы списка приоритетов
]
}
POST /rest/priorities/sort
Главный администратор, главный инспектор.
Сортировка приоритетов (по полю order_important
).
Входные данные
// 2.0+
{
"ids": [ // список всех существующих id приоритетов
39,
1,
2,
3
]
}
http 200
// 2.0+
{
"items": [
{ // отсортированный список приоритетов
"id": 39,
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png",
"order_important": 4
},
{
"id": 1,
"name": "Плановые",
"icon": "priority_9_20140327111133.png",
"order_important": 1
},
{
"id": 2,
"name": "Дополнительные",
"icon": "priority_10_20140327111111.png",
"order_important": 2
},
{
"id": 3,
"name": "Сверх норматива\t",
"icon": "priority_12.png",
"order_important": 3
}
]
}
POST /rest/priorities
Главный администратор, главный инспектор.
Создать приоритет.
Поле icon
будет заполнено автоматически, путем связывания
стандартной пиктограммы default_priority_icon.png
,
которая лежит в CEREBELLUM_HOME/conf/resources/files/default_priority_icon.png
.
Поле order_important
будет заполнено автоматически,
путем вычисления следующего, наибольшего числового значения.
Входные данные
// 2.0+
{
"name": "Плановые" // * название приоритета
}
http 200
// 2.0+
{
"id": 1, // id приоритет
"name": "Плановые", // название приоритета
"icon": "default_priority.png", // название иконки
"order_important": 7 // cтепень значимости приоритета
}
PUT /rest/priorities/:id
Главный администратор, главный инспектор.
Изменить приоритет.
Входные данные
// 2.0+
{
"name": "Внеплановые" // название приоритета
}
http 200
// 2.0+
{
"id": 1, // id приоритета
"name": "Внеплановые", // название приоритета
"icon": "priority_2.png", // название иконки
"order_important": 8 // степень значимости приоритета
}
DELETE /rest/priorities/:id
Главный администратор, главный инспектор.
Удалить приоритет.
POST /rest/priorities/:id/uploadicon
Главный администратор, главный инспектор.
Загрузка и прикрепление иконки к приоритету.
Пример загрузки пиктограммы через REST-клиент Advanced REST client
http 200
// 2.0+
{
"id": 450,
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png", // имя файла, преобразованное с помощью
// UUID-стандарта идентификации
"order_important": 14
}
/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 — отображаются настраиваемые поля, максимальная длина которых совпадает с одним из указанных значенийsortBy
defaultorder
— поле, по которому ведется сортировкаsortDirection
defaultASC
— направление сортировки (ASC, DESC)
/fields
/fields?search=test
/fields?search=test&isRequired=false&deleted=false
/fields?isForAll=true&minLength=1&maxLength=10
/fields?sortBy=id&sortDirection=DESC
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, если необходимо такое
// ограничение
"is_required": false, // является ли поле обязательным
"default_value": "", // значение по умолчанию
"visible": true, // является ли поле видимым. Отображать
// ли его, когда показывается полная
// информация по заданию
"is_for_all": true, // доступно ли поле всем типам заданий
"order": 1, // порядковый номер поля в общем списке
"type_ids": [
14
] // массив id типов заданий, для которых
// поле доступно, если оно не
// доступно всем типам заданий
},
... // следующие элементы списка
// настраиваемых полей
],
"count": 35 // количество настраиваемых полей, удовлетворяющих
// заданным условиям фильтрации и поиска
}
POST /rest/fields/sort
Главный администратор, главный инспектор.
Ручная сортировка настраиваемых полей.
Сортировке подлежат только неудаленные настраиваемые поля.
Отсортированный список будет сохраняться в БД и отдаваться клиентам при последующих запросах списка
(в ответе к данному запросу, а также в ответе на GET-запрос /fields
).
Сортировка ведется по полю
order
типа integer.Для ручной сортировки будет добавлен POST-запрос
/fields/sort
, который можно будет выполнить неоднократно.В теле POST-запроса
/fields/sort
клиент должен будет передать id-шники настраиваемых полей в отсортированном им порядке. Если переданный список id-шников будет некорректным, в ответе будет выдан BadRequest. Корректность списка id-шников проверяется по следующим пунктам:неверный формат переданных данных,
передача несуществующих id-шников,
передача дублирующихся id-шников,
передача id-шников удаленных настраиваемых полей,
передача неверного количества id-шников (должны быть переданы все существующие в БД id-шники).
В БД будет произведен UPDATE: порядок полученных id-шников будет занесен в таблицу
issues.custom_fields
в столбецorder
.Пользователю в ответ на POST-запрос
/fields/sort
, а также в ответ на GET-запрос/fields
будет выдаваться список настраиваемых полей, отсортированный в указанном порядке.Для новых настраиваемых полей
order
будет назначаться равным 0. В БД также имеются настраиваемые поля сorder
= null (созданные до ввода дефолтного значенияorder
= 0). Настраиваемые поля сorder
, равным 0 или null, будут располагаться в списке после отсортированных поorder
полей, и они будут отсортированы по полюid
.
Входные данные
// 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,
"is_required": false,
"default_value": "",
"visible": true,
"is_for_all": true,
"order": 1,
"type_ids": [
14
]
},
{
"id": 9,
"name": "Доп.поле для тестов (5-10)",
"translit": "Dop_pole_dlya_testov",
"format": "text",
"group_name": "",
"possible_values": null,
"regexp": "",
"min_length": 5,
"max_length": 10,
"is_required": false,
"default_value": 12345,
"visible": true,
"is_for_all": true,
"order": 2,
"type_ids": []
},
...
]
}
POST /rest/fields
Главный администратор, главный инспектор.
Создание нового настраиваемого поля.
Входные данные
// 2.0+
{
"name": "Фактический адрес организации", // * название нового поля
"format": "text", // * формат данных поля, возможные значения:
// "int", "float", "bool", "geometry",
// "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"
"is_required": true, // обязательное ли поле, по умолчанию false
"default_value": "г.Москва", // значение по умолчанию, доступно
// для всех форматов полей, за
// исключением формата "geometry",
// значение задается с соответствии
// с форматом поля (текст, число,
// дата, булево значение)
"visible": true // видимость данного поля при отображении
// полной информации по заданию, по умолчанию true
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
]
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values
, но формат настраиваемого поля не "list";передано поле
regexp
, но формат не "string", "text", "int" или "float";переданы поля
min_length
илиmax_length
, но формат не "string" или "text";передано поле
default_value
, но формат "geometry";значение
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"
"is_required": true, // обязательное ли поле
"default_value": "РТ, г.Москва", // значение по умолчанию, доступно для всех
// форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": true, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"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"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"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, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false // видимость данного поля при отображении
// полной информации по заданию
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
]
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values
, но формат настраиваемого поля не "list";передано поле
regexp
, но формат не "string", "text", "int" или "float";переданы поля
min_length
или maxlength, но формат не "string" или "text";передано поле
default_value
, но формат "geometry";значение
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"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
}
DELETE /rest/fields/:id
Главный администратор, главный инспектор.
Удаление настраиваемого поля.
/rest/files
POST /rest/files/photos
Загрузка фотографии на сервер.
Для загрузки файла необходимо выбрать Body Content Type: multipart/form-data и в теле запроса в поле "file" указать расположение файла
http 200
// 2.0+
{
"name": "2020/04/09/16-45/c360f08c-e79f-1004-8be5-8b2398b49a74.jpg" // имя файла после загрузки
}
POST /rest/files/videos
Загрузка видеофайла на сервер.
Видеофайл загружается по схеме загрузки фотографии, описанной в запросе POST /photos
. Формат ответа идентичен
Запросы POST /files/upload/video
, POST /upload/video
выполняют тоже самое, что и запросы POST /files/upload/videos
,
POST /upload/videos
. Они необходимы для сохранения обратной совместимости.
POST /rest/files/files
Загрузка файла на сервер.
Файл загружается по схеме загрузки фотографии, описанной в запросе POST /photos
. Формат ответа идентичен
POST /rest/files/sounds
Загрузка аудиофайла на сервер.
Аудиофайл загружается по схеме загрузки фотографии, описанной в запросе POST /photos
. Формат ответа идентичен
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
Список стикеров.
Параметры
useCache
boolean defaulttrue
— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрации
http 200
// 2.0+
{
"items": [
{
"id": 3, // название стикера
"title": "Показания приборов", // описание стикера
"description": "Показания приборов после выполнения работ на объекте",
"is_for_all": false, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников
// видов работ,
// к которым прикреплен
// текущий стикер
2,
14,
3,
7,
4
],
},
{
"id": 4,
"title": "Отчетные документы",
"description": "Отчетные документы о выполнении работ на объекте",
"is_for_all": false,
"type_ids": [
2,
3,
4
],
},
{
"id": 5,
"title": "Первичные показания приборов",
"description": "Показания приборов до выполнения работ на объекте",
"is_for_all": false,
"type_ids": [
2,
14
],
}
]
}
POST /rest/stickers
Главный администратор, главный инспектор.
Создание стикера.
Входные данные
// 2.0+
{
"title": "Показания приборов", // * название стикера
"description": "Показания приборов после выполнения работ на объекте", // описание стикера
"is_for_all": false, // доступность стикера для
// всех видов работ; по
// умолчанию true
"types": [ // массив id видов работ,
// к которым прикреплен
// текущий стикер
12,
14
]
}
В ответе выдается 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
]
}
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
]
}
DELETE /rest/stickers/:id
Главный администратор, главный инспектор.
Удаление стикера.
Стикер будет откреплен ото всех файлов, к которым он был прикреплен.
/rest/schedules
GET /rest/schedules/list
Описание моделей и структур хранения данных
Расписания - schedules. У расписания есть пользователь-создатель. Все задания по этому расписанию создаются от имени этого пользователя.
Если расписание созданом администратором/инспектором организации, то то оно прикрепляется к его организации. Если расписание создано главным админстратором/инспектором, то организация может быть указана при создании (но может быть и опущена).
Если расписание прикреплено к организации, то все администраторы/инспекторы этой организации получают разрешение на его изменение.
Расписания могут быть действующими (включенными) или выключенными. Если расписание выключено, задания создаваться не будут.
У расписания могут быть моменты времени, в которые оно запускается в течение дня - times. Время хранится в формате timestamp (дата не важна, во время всех операций из нее извлекается только время). Моменты времени могут быть включены и выключены; при выключении момента времени задания в это время создаваться не будут.
У расписания есть моменты запуска - launches. Момент запуска - это дата + одно из времён запуска расписания. Эта дата и время хранится явным образом.
К расписанию прикрепляются задания-шаблоны. В момент запуска на их основе создаются реальные задания. Задания-шаблоны - это обычные задания, у которых проставлена колонка is_template=true. Параметры "стадия", "этап", "срок выполнения" таких заданий игнорируются. У расписания есть поле "срок выполнения"; если это поле заполнено, то на его основе реальному создаваемому заданию назначается срок выполнения. Если не заполнено, то срок выполнения назначается на основе вида работ.
Если расписание прикреплено к организации, то к нему разрешается прикреплять шаблоны только в рамках этой же организации.
Запрос /list
Запрос за списком расписаний с учётом фильтров и прав доступа:
API не фиксирован и может изменяться в дальнейшем!
главный администратор: все расписания
главный инспектор: все расписания
администратор организации: все расписания, созданные в его организации; все расписания, в которых он имеет доступ хотя бы к одному шаблону.
инспектор организации: все расписания, созданные в его организации; все расписания, в которых он имеет доступ хотя бы к одному шаблону.
пользователь организации: все расписания, в которых он имеет доступ хотя бы к одному шаблону.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
datesFrom
timestamp — дата начала временного интервала (включительно)datesTill
timestamp — дата окончания временного интервала (не включительно)Если переданы datesFrom и datesTill, то в каждое расписание в списке добавляется массив dates; это поле будет содержать все даты запуска соответствующего расписания между datesFrom и datesTill (не включая datesTill) в формате Unix Timestamp (с округлением до полуночи в меньшую сторону).
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsampleTemplates
defaulttrue
— включить вывод поля sample_template+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблонаtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)
http 200
// 2.0+
{
"page": 1, // текущая страница
"total": 37, // всего расписаний
"limit": 25, // количество на одной странице
"items": [ // список расписаний
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
], //
//
"dates": [ // массив дат запусков расписания
// (при наличии from и till)
1609448400,
1609534800
]
}
]
}
GET /rest/schedules/list/archive
Запрос за списком архивных расписаний с учётом фильтров и прав доступа:
главный администратор: все архивные расписания
главный инспектор: все архивные расписания
администратор организации: все архивные расписания, созданные в его организации; все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
инспектор организации: все архивные расписания, созданные в его организации; все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
пользователь организации: все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
from
timestamp — дата начала временного интервала (включительно)till
timestamp — дата окончания временного интервала (не включительно)Если переданы from и till, то в каждое расписание в списке добавляется массив dates; это поле будет содержать все даты запуска соответствующего расписания между from и till (не включая till) в формате Unix Timestamp (с округлением до полуночи в меньшую сторону).
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsampleTemplates
defaulttrue
— отключить вывод поля sample_template+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблонаtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)
http 200
// 2.0+
{
"page": 1, // текущая страница
"total": 37, // всего расписаний
"limit": 25, // количество на одной странице
"items": [ // список расписаний
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": true, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
], //
//
"dates": [ // массив дат запусков расписания
// (при наличии from и till)
1609448400,
1609534800
]
}
]
}
POST /rest/schedules
Создание нового расписания.
Главный администратор, Главный инспектор, Администратор кластера (может создать расписание в доступных ему проектах), Администратор организации (может создать расписание в доступных ему проектах), Инспектор организации (может создать расписание в доступных ему проектах).
{
"title": "Расписание на май", // * название расписания
"organization": { // организация расписания; необязательно;
// для админа/инспектора организации
// по умолчанию подставится его организация
"id": 134
},
"worktime": 3600, // срок выполнения (в секундах) для заданий,
// которые будут созданы по этому расписанию;
// если не задан, в момент создания задания
// берётся из вида работ шаблонного задания
//
"on": true, // включено расписание или нет
//
//
"templates": [ // id заданий-шаблонов, по которым составляется расписание;
{
"id": 1279826
},
...
], //
//
"dates": [ // массив дней для расписания;
1526342400, // время может быть любое, оно будет отброшено
...
} //
//
"times": [ // моменты времени для расписания
{
"time": 1514829600, // для новых моментов времени нужно передать время запуска в формате timestamp;
// (дата может быть любая, она будет отброшена)
"on": true
},
...
]
}
http 200
// 2.0+
{
"id": 1002, // id расписания
"title": "Расписание на май", // название расписания
"worktime": 3600, // срок выполнения создаваемых заданий
"on": true, // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // организация
"id": 134,
"name": "Отдел разработки"
} //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по доступным заданиям-шаблоным
{
"id": 1279826,
"title": "Доставка оборудования" // заголовок задания
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
...
],
}
PATCH /rest/schedules/:id
Главный администратор, Главный инспектор, Администратор кластера (если ему доступен проект расписания), Администратор организации (если ему доступен проект расписания), Инспектор организации (если ему доступен проект расписания).
Изменение расписания.
Можно изменить поля title, worktime, on, добавить/удалить дни расписания в объекте days, добавить/включить/выключить моменты времени в массиве times, добавить/удалить шаблоны.
На основании массивов days и times формируется список запусков launches для данного расписания. При удалении дней будут удалены соответствующие запуски, если по ним еще не были созданы задания.
{
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн (в секундах) для заданий по этому расписанию
"on": true, // включено расписание или нет
//
"templates": { // id заданий-шаблонов, по которым составляется расписание
"add": [
{
"id": 1279826
},
...
],
"remove": [
{
"id": 999123
},
...
],
}, //
//
"dates": { // объект дней для расписания в формате Unix Timestamp;
// время может быть любое, оно будет отброшено
"add": [
1526342400,
1526083200
],
"remove": [
1526774400
]
} //
//
"times": [ // моменты времени для расписания
// в формате Unix Timestamp
{
"id": 10012, // id момента времени (только при включении/выключении времени)
"on": true // включен момент времени или нет
},
{
"time": 1514829600, // для новых моментов времени нужно передать время запуска в формате Unix Timestamp;
// (дата может быть любая, она будет отброшена)
"on": true
}
]
}
http 200
// 2.0+
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // организация
"id": 134,
"name": "Отдел разработки"
} //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по доступным заданиям-шаблоным
{
"id": 1279826,
"title": "Доставка оборудования" // заголовок задания
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
}
DELETE /rest/schedules/:id
Удаление расписания.
Главный администратор, Администратор кластера (если ему доступен проект расписания), Администратор организации (если ему доступен проект расписания)
GET /rest/schedules/stats
DONE!
Получение статистики по расписаниям за указанный период в разрезе по дням.
Запрос принимает параметр collapse
, от которого зависит вид ответа:
если количество заданий в день не превышает значение
collapse
, по этим дням выдается полная информация о заданиях;если количество запусков в день превышает значение
collapse
, по этим дням статистическая информация.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
collapse
integer — см. вышеfrom
timestamp — дата начала временного интервала (включительно)till
timestamp — дата окончания временного интервала (не включительно)+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
scheduleId
long — id расписанияtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)time
— время запуска; формат передачи: time=HH:mm+
status
string — состояние задания. Возможные значения:off - выключенные задания
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": [
{
"date": 1518696000, // дата в формате Unix Timestamp
"on": 9, // включенные задания (planned + created + fail + missed + остальное)
"off": 2, // выключенные задания
"created": 5, // созданные задания
"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 - в работе
"planned": 1, // запланированные задания
"fail": 2, // не создано из-за ошибок
"missed": 0 // создание просрочено (более 15 мин назад)
},
{
"date": 1518739200,
"on": 9,
"off": 2,
"created": 5,
"done_expired": 0,
"done_not_expired": 0,
"rejected_expired": 0,
"rejected_not_expired": 0,
"working_expired": 3,
"working_not_expired": 2,
"planned": 0,
"fail": 1,
"missed": 2
},
], //
//
"items": [ // полная информация о запусках
{ // успешно созданное задание по расписанию
"run": { // ссылка на родительский запуск
"datetime": 1514829600, // дата и время запуска
"on": true, // признак включенного запуска
"time": { // time запуска
"id": 10010,
"time": 1514829600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 972,
"title": "Заголовок расписания",
"worktime": 3600, // срок выполнения заданий в секундах
"on": true, // признак включённого расписания
"archive": false, // является ли расписание архивным
"user": { // пользователь-создатель
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
},
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
}
},
"task": { // созданное задание
"id": 198,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 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, // дата последнего изменения
"deleted": null // признак удалённого задания = deleted != null
}, //
//
"template": { // шаблон-основа для задания
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
},
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
//
//
"fail": null // поле сообщения об ошибке пусто
},
{ // запланированное или просроченное задание
"run": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": null // поле сообщения об ошибке пусто
},
{ // при создании задания произошла ошибка
"run": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": "Текст ошибки"
},
...
]
}
GET /rest/schedules/runs
Получение списка запусков расписаний в разрезе дней со статистикой по каждому запуску.
API не фиксирован и может изменяться в дальнейшем!
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
from
timestamp — дата начала временного интервала (включительно)till
timestamp — дата окончания временного интервала (не включительно)page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
scheduleId
long — id расписанияtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)time
— время запуска; формат передачи: time=HH:mm+
status
string — состояние задания. Возможные значения:off - выключенные задания
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": [
{
"time": { // time запуска
"id": 115241,
"time": 1546311600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"archive": false, // является ли расписание архивным
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
},
"datetime": 1579489200, // дата и время
"on": true, // признак включенного запуска
"stats": { // статистика
"off": 0, // выключенные задания
"fail": 0, // не создано из-за ошибок
"missed": 0, // создание просрочено (более 15 мин назад)
"planned": 0, // запланированные задания
"created": 163, // созданные задания
"done_expired": 55, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 88, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 20, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 0, // непросроченные задания, находящиеся в стадии 1 - в работе
"on": 163 // включенные задания (planned + created + fail + missed + прочие)
}
},
...
]
}
GET /rest/schedules/tasks
DONE!
Главный администратор, Главный инспектор, Администратор кластера, Администратор организации, Инспектор организации
Получение списка заданий по расписанию (созданных, запланированных, пропущенных и выключенных) за нужный период.
API не фиксирован и может изменяться в дальнейшем!
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
from
timestamp — дата начала временного интервала (включительно)till
timestamp — дата окончания временного интервала (не включительно)page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице+
typeId
long — id вида работ+
priorityId
long — id приоритета+
assignedOrganizationId
long — id назначенной организации+
assignedUserId
long — id назначенного пользователя+
organizationId
long — id организации шаблона+
scheduleId
long — id расписанияtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)scheduleTitle
string — текстовый поиск по заголовку расписания (с начала строки)time
— время запуска; формат передачи: time=HH:mm+
status
string — состояние задания. Возможные значения:off - выключенные задания
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": [ //
{ // успешно созданное задание по расписанию
"run": { // ссылка на родительский запуск
"datetime": 1514829600, // дата и время запуска
"on": true, // признак включенного запуска
"time": { // time запуска
"id": 10010,
"time": 1514829600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 972,
"title": "Заголовок расписания",
"worktime": 3600, // срок выполнения заданий в секундах
"on": true, // признак включённого расписания
"user": { // пользователь-создатель
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
},
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
}
},
"task": { // созданное задание
"id": 198,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 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, // дата последнего изменения
"deleted": null // признак удалённого задания = deleted != null
}, //
//
"template": { // шаблон-основа для задания
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
},
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
//
//
"fail": null // поле сообщения об ошибке пусто
},
{ // запланированное или просроченное задание
"launch": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": null // поле сообщения об ошибке пусто
},
{ // при создании задания произошла ошибка
"launch": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": "Текст ошибки"
},
...
], //
//
"total": 117 // общее количество заданий,
// удовлетворяющих фильтрам
}
GET /rest/schedules/:id
Получение информации по расписанию.
Главный администратор, Главный инспектор, Администратор кластера (если проект расписания ему доступен), Администратор организации (если проект расписания ему доступен), Инспектор организации (если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
API не фиксирован и может изменяться в дальнейшем!
http 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по заданиям-шаблонам,
// доступным текущему пользователю
{
"id": 32,
"title": "Задание по расписанию",
"text": "Текст задания по расписанию""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": "Сникерсов Марс Твиксович"
}
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
}
GET /rest/schedules/:id/dates
Получение списка дат запуска расписания.
Главный администратор, Главный инспектор, Администратор кластера (если проект расписания ему доступен), Администратор организации (если проект расписания ему доступен), Инспектор организации (если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
Параметры запроса
обязательный
from
timestamp — дата начала временного интервала (включительно)обязательный
till
timestamp — дата окончания временного интервала (не включительно)page
integer default1
— номер запрашиваемой страницыlimit
integer default1000000
— количество записей на странице
http 200
// 2.0+
{
"items": [ // массив дат (время сброшено в 0)
1574456400,
1575406800,
1575666000,
1575752400,
1577826000,
1577912400,
1577998800,
1578085200
],
"total": 8, // общее количество дат
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/schedules/:id/templates
Запрос возвращает список шаблонов расписания, к которым у текущего пользователя есть доступ.
Главный администратор, Главный инспектор, Администратор кластера (если проект расписания ему доступен), Администратор организации (если проект расписания ему доступен), Инспектор организации (если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
Главному администратору и Главному инспектору запрос вернет все шаблоны расписания. Администратору организации и Инспектору организации запрос вернет все шаблоны расписания в рамках доступных проектов. Пользователю организации запрос вернет те шаблоны, которые на него назначены.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2
.
from
timestamp — дата начала временного интервала (включительно)till
timestamp — дата окончания временного интервала (не включительно)page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на странице+
organizationId
long — id организации; если у расписания задана организация, то фильтр накладывается на расписание, иначе на шаблоны.+
typeId
long — id вида работ+
assignedUserId
long — id назначенного пользователяtaskTitle
string — текстовый поиск по заголовку задания (с начала строки)
http 200
{
"page": 1, // текущая страница
"total": 37, // всего шаблонов доступно
"limit": 25, // количество на одной странице
"items": [ // информация по заданиям-шаблонам,
// доступным текущему пользователю
{
"id": 32,
"title": "Задание по расписанию",
"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": "Сникерсов Марс Твиксович"
}
},
]
}
POST /rest/schedules/:id/archive
Главный администратор, главный инспектор, администратор кластера (если проект расписания ему доступен), администратор организации (если проект расписания ему доступен), инспектор организации (если проект расписания ему доступен).
Отправить расписание в архив.
http 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": true, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
}
DELETE /rest/schedules/:id/archive
Главный администратор, главный инспектор, администратор кластера (если проект расписания ему доступен), администратор организации (если проект расписания ему доступен), инспектор организации (если проект расписания ему доступен).
Убрать расписание из архива.
http 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
}
/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/list
Главный администратор, Главный инспектор.
Список скриптов.
Сортировка осуществляется по полю title
.
Параметры
page
integer default1
— номер запрашиваемой страницыlimit
integer default25
— количество записей на страницеsortDirection
defaultASC
— направление сортировки (ASC, DESC)
http 200
// 2.0+
{
"items": [
{
"id": 1, // id скрипта
"script": "return valid()" // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"operation": "UPDATE" // операция над заданием. Возможные значения - INSERT, UPDATE
}
],
"total": 1, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
}
GET /rest/scripts/:id
Главный администратор, Главный инспектор.
Получить информации о скрипте.
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return valid()" // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"operation": "UPDATE" // операция над заданием. Возможные значения - INSERT, UPDATE
}
POST /rest/scripts
Главный администратор.
Добавление нового скрипта.
Входные данные
// 2.0+
{
"script": "return valid()" // * скрипт
"title": "test 1", // * название скрипта
"operation": "UPDATE" // * операция над заданием. Возможные значения - INSERT, UPDATE
"description": "description", // описание
"on": true, // включен скрипт или нет (по умолчанию - true)
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 3
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
]
}
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return valid()" // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"operation": "UPDATE" // операция над заданием. Возможные значения - INSERT, UPDATE
}
PATCH /rest/scripts/:id
Главный администратор.
Изменение информации о скрипте.
Входные данные
// 2.0+
{
"script": "return valid()" // скрипт
"title": "test 1", // название скрипта
"description": "description", // описание
"on": true, // включен скрипт или нет (по умолчанию - true)
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 3
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"operation": "UPDATE" // операция над заданием. Возможные значения - INSERT, UPDATE
}
http 200
// 2.0+
{
"id": 1, // id скрипта
"script": "return valid()" // скрипт
"title": "test 1", // название
"description": "description", // описание
"on": false, // включен скрипт или нет
"created_by": { // создатель
"id": 6,
"fio": "Администратор"
},
"create_date": 1618388512, // дата создания
"workgroups": [ // привязка к проектам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 188,
"title": "По умолчанию"
}
],
"types": [ // привязка к видам работ
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 139,
"name": "Брошенный автомобиль",
"icon": "icon_139.png"
}
],
"priorities": [ // привязка к приоритетам
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 167,
"name": "Дополнительные"
}
],
"roles": [ // привязка к ролям
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 11,
"name": "Инспектор организации",
"code": "ORG_INSPECTOR"
}
],
"statuses_before": [ // этап задания до изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 1,
"name": "new"
}
],
"statuses_after": [ // этап задания после изменения
// (разрешено несколько значений; ни одного значения означает любое значения)
{
"id": 2,
"name": "назначено"
}
],
"stages_before": [ // стадия задания до изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
1
],
"stages_after": [ // стадия задания после изменения
// возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
// (разрешено несколько значений; ни одного значения означает любое значения)
0
],
"operation": "UPDATE" // операция над заданием. Возможные значения - INSERT, UPDATE
}
DELETE /rest/scripts/: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/
GET /rest/version
Любой пользователь.
Возвращает служебную информацию о версии приложения
status = 200
// 2.0+
{
"appname": "ActiveMap GS", // "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
}