Пояснения:
1)У меня windows, и команда curl почему-то не работает, start.bat сделать не удалось, я сделала отдельный файл с XML file.xml и работала через браузер
2)Из Java8 применяла LocalDateTime для конвертации времени в TimeStamp, но для Java7 есть отдельная библиотека JodaTime
3)Решила создать отдельный класс для вывода в json, чтобы не копаться по внутренностях json generation, хотя знаю о такой возможности и использовала это
Сервис учёта использования печатных устройств
Необходимо написать сервис учёта использования печатных устройств и предоставления
статистики.
Сервис должен выполнять следующее:
- по HTTP получать данные по использованию печатных устройств;
- аггрегировать получаемые данные (при рестарте сервера данные должны сохраняться);
- по HTTP предоставлять статистические данные по использованию печатных устройств.
Данные передаются на сервер через POST HTTP запрос (например, POST /jobs) в XML
формате. Ответ возвращается в виде JSON.
Формат входящего XML следующий:
print
user1
device1
10
scan
user1
device1
12
fax
user2
device1
5
где:
jobs - корневой элемент xml, содержащий элементы типа job (количество >=1);
- job - информация о задании;
- type - тип задания. Возможные значения: print, copy, scan, fax;
- user - имя пользователя;
- device - адрес или имя устройства;
- amount - число страниц (распечатанных, отсканированных и т. п в зависимости от типа
задания);
Формат ответа: JSON-объект следующего вида:
{ "user1" : "22", "user2" : "5"}
где:
- ключём является идентификатор пользователя;
- значением - суммарное количество обработанных страниц для данного пользователя в
данной транзакции.
Статистика доступна по HTTP через запрос GET /statistics. Должна быть возможность
фильтрации данных, в соответствии с переданными параметрами запроса:
- user — фильтр по пользователю;
- type — фильтр по типу задания;
- device — фильтр по устройству;
- timeFrom — начиная с указанного момента времени (формат произвольный);
- timeTo — до указанного момента времени (формат произвольный);
Параметры могут появляться в любых комбинациях, в том числе отсутствовать вообще.
Пример запроса:
GET /statistics?type=copy&device=device9
Результатом должен быть ответ в формате JSON в виде:
[
{
"jobId" : 1,
"device": "device1",
"user": "user1",
"type": "scan",
"amount": 23,
"time": "21.03.2016 10:45"
},
{
"jobId" : 2,
"device": "device1",
"user": "user2",
"type": "copy",
"amount": 11,
"time": "21.03.2016 11:30"
},
...
]
Данные в списке отсортированы в хронологическом порядке.
Примечания
1. Идентификатор задания следует считать уникальным в рамках одного и того же
устройства.
2. Время задания фиксируется по времени прихода данных на сервер.
3. Для хранения данных не использовать то, что требует дополнительных действий по
установке и настройке (например, корпоративные БД, типа MSSQL Server, Oracle и
подобные).
Ожидаемый результат
В качестве результата работы должен быть архив с:
1. исходным кодом приложения;
2. файлом build.bat или build.sh, с помощью которого приложение компилируется и
собирается;
3. файлом start.bat или start.sh, с помощью которого приложение запускается;
4. файл readme.txt с пояснениями (при необходимости).