Формулировка проблемы:
Задача проходит в рамках реализации прототипа системы 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>