Задание «Продажа песчано-гравийной смеси» #
Задание № 1 #
Разработать приложение, решающее задачу по управлению списком с данными.
Данные #
Элемент списка: акт отгрузки ПГС.
Название поля | Описание поля | Тип поля |
---|---|---|
Id | Уникальный идентификатор отгрузки | UUID |
Title | Наименование ПГС | Текст |
SWG | Тип ПГС | Тип ПГС из списка |
Measure | Единица измерения | Из списка: м3, т |
Count | Отгруженное количество | Положительное вещественное число |
Price | Цена за ед. измерения (руб.) | Положительное вещественное число |
Cost | Стоимость (тыс. руб.) | Положительное целое число. Не может быть больше $\frac{Price*Count}{1000}$ |
ShipmentDateTime | Дата и время отгрузки | Дата и время в формате ISO |
Model | Модель транспортного средства | Текст |
Registration | Регистрационный номер ТС | Текст |
Washing | Была ли оказана услуга мытья ТС? | Логическое значение true/false |
Пример описания акта отгрузки в формате JSON:
{
"Id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
"Title": "Песчано-гравийная смесь (ПГС)",
"SWG": "Песок речной",
"Measure": "м3",
"Count": 36,
"Price": 640,
"Cost": 22.3488,
"ShipmentDateTime": "2024-01-01T00:00:00 ",
"Model": "KAMAZ-65951-СА",
"Registration": "Д903ЧН",
"Washing": true
}
Приложение должно считывать список актов отгрузки из CSV-файла (разделитель – запятая).
Пример данных:
Id,Title,SWG,Measure,Count,Price,Cost,ShipmentDateTime,Model,Registration,Washing
de42a00f-7f43-4d10-808d-bee47fdeef49,Песчано-гравийная смесь (ПГС),Песок речной,м3,36,640,22.3488,"2024-01-01T00:00:00 ",KAMAZ-65951-СА,Д903ЧН,True
2b52fcb1-34ec-48d2-95f2-b79f2d9c3c70,Песчано-гравийная смесь (ПГС),Щебень гранитный,м3,14,2660,36.1228,"2024-01-01T00:00:00",МАЗ 5516А8-336,Э723ВЛ,True
92a8c420-dd0d-43c6-a7a7-8ab5618b6cc5,Песчано-гравийная смесь (ПГС),Щебень гравийный,м3,16,1520,23.3472,"2024-01-01T00:00:00",МАЗ 5516А8-336,О295ЩЮ,True
fb0532cb-29c3-4be2-83ed-a8924a7901cb,Песчано-гравийная смесь (ПГС),Щебень шлаковый,м3,13,1400,17.108,"2024-01-01T00:00:00",МАЗ 5516А8-336,Ф760ЛЭ,True
202f3382-4572-435f-a66f-d6f981a97b5c,Песчано-гравийная смесь (ПГС),Песок карьерный,т,20,400,7.6,"2024-01-01T00:00:00"," УРАЛ 6х4 С35510",Й330ЖЭ,True
e7f9375b-ecab-4270-bafa-1263b5a6a4dc,Песчано-гравийная смесь (ПГС),Щебень гранитный,т,20,1860,33.48,"2024-01-01T00:00:00"," УРАЛ 6х4 С35510",Р188БС,False
4469cef4-4c11-4114-9efc-4bdee93def2c,Песчано-гравийная смесь (ПГС),Щебень гравийный,т,40,1060,39.008,"2024-01-01T00:00:00",KAMAZ-65951-СА,В866МЗ,False
2009d170-5d57-435b-8f42-d08d10b02b8c,Песчано-гравийная смесь (ПГС),Песчано-гравийная смесь,т,45,380,16.245,"2024-01-01T00:00:00",KAMAZ-65951-СА,Ф754ФБ,False
Имя файла с исходными данными должно передаваться приложению с ключом --swg-file
... --swg-file="../data/file.csv"
... --swg-file="C:\Users\AM\data\app-3968942893870838401.csv"
Список типов ПГС #
Тип ПГС | Насыпная плотность (т/м3) |
---|---|
Песок речной | 1.5 |
Песок карьерный | 1.5 |
Щебень гранитный | 1.4 |
Щебень гравийный | 1.43 |
Щебень шлаковый | 1.17 |
Песчано-гравийная смесь | 1.6 |
Задание #
В зависимости от аргументов вызова приложение должно выполнять следующие команды:
1. list
– получить список актов отгрузки.
#
Выходные данные: список всех актов отгрузки в формате JSON, упорядоченный по возрастанию даты и времени отгрузки и id. Список может быть пустым.
Информация об акте отгрузки должна содержать только идентификатор, наименование и стоимость.
{
"report": [
{
"Id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
"Title": "Песчано-гравийная смесь (ПГС)",
"Cost": 22.3488
},
{
"Id": "2b52fcb1-34ec-48d2-95f2-b79f2d9c3c70",
"Title": "Песчано-гравийная смесь (ПГС)",
"Cost": 36.1228
}
]
}
{
"report": []
}
2. show-shipment
– получить один элемент списка по идентификатору.
#
--shipment-id=ID
– обязательный параметр. Корректное значение: идентификатор существующего в списке акта отгрузки.
Выходные данные: полная информация об акте отгрузки в формате JSON.
show-shipment --shipment-id=de42a00f-7f43-4d10-808d-bee47fdeef49
{
"shipment-id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
"shipment": {
"Id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
"Title": "Песчано-гравийная смесь (ПГС)",
"SWG": "Песок речной",
"Measure": "м3",
"Count": 36,
"Price": 640,
"Cost": 22.3488,
"ShipmentDateTime": "2024-01-01T00:00:00",
"Model": "KAMAZ-65951-СА",
"Registration": "Д903ЧН",
"Washing": true
}
}
3. list-by-swg
– получить список актов отгрузки по типу ПГС.
#
--type=TYPE
– обязательный параметр типа ПГС, корректное значение – из списка ПГС.
Выходные данные: список актов отгрузки в формате JSON соответствующего типа ПГС, упорядоченный по убыванию даты и времени отгрузки и возрастанию id. Список может быть пустым.
Информация об акте отгрузки должна содержать только идентификатор, наименование и стоимость.
list-by-swg --type="Щебень шлаковый"
{
"type": "Щебень шлаковый",
"report": [
{
"Id": "fb0532cb-29c3-4be2-83ed-a8924a7901cb",
"Title": "Песчано-гравийная смесь (ПГС)",
"Cost": 17.108
}
]
}
4. list-by-period
– получить список отгрузок за период.
#
--from
– обязательный параметр даты в формате ISO.
--to
– обязательный параметр даты в формате ISO.
Выходные данные: список актов отгрузки, для которых дата отгрузки находится в промежутке между --from
и --to
включительно. Список упорядочен по возрастанию даты и времени отгрузки и id. Список может быть пустым.
Информация об акте отгрузки должна содержать только идентификатор, наименование, дату отгрузки (поле ShipmentDate
) и стоимость.
list-by-period --from="2024-01-01" --to="2024-01-02"
{
"from": "2024-01-01",
"to": "2024-01-02",
"report": [
{
"Id": "fb0532cb-29c3-4be2-83ed-a8924a7901cb",
"Title": "Песчано-гравийная смесь (ПГС)",
"ShipmentDate": " 2024-01-01",
"Cost": 17.108
},
{
"Id": "202f3382-4572-435f-a66f-d6f981a97b5c",
"Title": "Песчано-гравийная смесь (ПГС)",
"ShipmentDate": " 2024-01-02",
"Cost": 7.6
}
]
}
5. report
– получить отчётную информацию по объёму загрузки.
#
--year
– обязательный положительный числовой параметр года отчёта.
Выходные данные: отчётность по месяцам для отгрузок переданного года. Список упорядочен по месяцу, каждый отчёт содержит поля:
month
– код месяца,monthTitle
– название месяца,count
– количество отгрузок,cost
– общая стоимость отгрузок,weight
– суммарный вес отгрузокMeasure=т
volume
– суммарный объём груза для отгрузокMeasure=м3
В выдаче должны присутствовать только те месяцы года, для которых есть данные.
report --year=2024
{
"report": [
{
"month": 1,
"monthTitle": "Январь",
"count": 8,
"cost": 202.4868,
"weight": 125,
"volume": 79
}
]
}
Выходные данные #
При корректных входных данных приложение должно завершать работу с кодом возврата 0 и возвращать данные в формате JSON.
При некорректных входных данных приложение должно завершать работу с ненулевым кодом возврата и возвращать сообщение об ошибке. Некорректными данными считаются:
- отсутствие аргумента команды или некорректная команда.
- отсутствие обязательного параметра команды, его некорректное значение или несоответствие значения указанному типу данных.
- отсутствие аргумента
--swg-file
или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.