Формулировка проблемы:
Задача проходит в рамках реализации прототипа системы EDI на базе платформы ARTA Synergy.
Необходим сервис проверки документов, которые были экспортированы из ARTA Synergy (см. задачу EDI1):
Проверка должна отвечать на следующие вопросы:
Сохранил ли целостность экспортированный документ: не изменены ли файлы в архиве, не были ли какие-то из них удалены либо добавлены новые
Соответствует ли выгруженный документ исходному документу в хранилище ARTA Synergy: не были ли изменены в ARTA Synergy файлы экспортированного документа либо добавлены/удалены/сброшены подписи на нём
Решение:
Необходимо реализовать сервис проверки экспортированных документов в виде метода API ARTA Synergy.
URL метода: rest/api/docflow/checkdocument
Тип запроса: POST
Тип содержимого запроса: multipart/form-data
На вход методу должен быть передан параметр
document, с содержимым - экспортированным
документом в виде файла формата 7z. (см.
EDI1), при этом все требования к
содержимому типа multipart/form-data[2] должны быть соблюдены.
Результатом работы метода является JSON-объект следующего вида:
{
"errorCode":0,
"errorMessage":"",
"signs":[
{
"userId":"user's identifier",
"login":"user's login",
"fullname":"lastname firstname patronymic",
"positions":[
{
"positionName":"position name",
"departmentName":"department name"
}
],
"signDate":"2015-05-27 13:53:56",
"signature":"6BOn2EMZlNgYEudZKOJOOLIEgeY=",
"certificate":"aGFzaA=="
}
]
}
где:
errorCode - код ошибки. Возможные коды
ошибок:
0 - проверка прошла успешно
13 - файл получен, но произошла ошибка
при его обработке: битый архив, неправильная структура в нём
и т.п.
901 - данные файлов в полученном файле не
соответствуют данным файлов документа в хранилище
902 - в списке подписей встречаются
подписи, которых нет в системе
903 - в документе нет ни одной подписи
Кроме этого, для сигнализации о некоторых ошибках используются коды ошибок HTTP-ответа:
403 - авторизация неуспешна
500 - внутренняя ошибка сервера: сервис
неработоспособен (сбой сервера приложений, базы данных и т.п.)
Сообщение об ошибке передаётся в параметре
errorMessage.
Для удобства использования сервиса в ответе также передаются следующие параметры:
Массив подписей на документе signs, со
следующими полями элементов:
userId - идентификатор подписавшего
пользователя
login - логин подписавшего пользователя
fullname - полное имя (ФИО) подписавшего
пользователя
positions - массив должностей
подписавшего пользователя. Поля записей:
positionName - название должности на
русском языке
departmentName - название
подразделения на русском языке
signDate - дата подписи в формате
YYYY-mm-DD HH:MM:SS
signature - подпись, закодированная в
Base64
certificate - сертификат, которым была
осуществлена подпись
Пример запроса:
POST /Synergy/checkdocument HTTP/1.1 Host: <somehost>:<someport> Connection: keep-alive Content-Length: 2258766 User-Agent: SomeBrowser/1.0 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNcKjWA55TMhmmIW8 Referer: <somereferer> ------WebKitFormBoundaryNcKjWA55TMhmmIW8 Content-Disposition: form-data; name="document"; filename="dokument dlya rassmotreniya.7zip" Content-Type: application/octet-stream <binary data>