Пакетное создание WorkSlots на основе WorkSheduler и списка дней
Имеется метод получения рабочих слотов из БД: {{rest-api-url}}/workschedule/api/v1/workslot
Также имеются рабочие WorkPeriod периоды из рабочего расписания WorkSheduler.
Есть метод единичного создания слота
POST {{rest-api-url}}/workschedule/api/v1/workslot
Необходим метод - на основе рабочего расписания с периодами создать рабочие слоты FREE. Слоты делаем без перерыва. Перерывы должны быть учтены ранее в расписании.
После этого клиент может выбрать рабочий слот (ACTIVE) - меняя статус на BOOKED.
Продолжительность рабочего слота задаем в свойствах, в минутах;
- #Продолжительность рабочего слота исполнителя (в минутах)
- executor.workslot.duration = 30
Диапазон возможных значений - от 5 мин до 1440 мин (сутки, например бронь номера)
Тест кейс 1:
Рабочее расписание:
id: 1
name: "Основное расписание"
"09:00" - "12:00"
"13:30" - "18:00"
executor.workslot.duration = 55
Вызов метода для выбранных дней 20.10.2020, 22.10.2020 должен создать следующие рабочие слоты:
{
"data": {
"workScheduleId": "1",
"workDateList": [
"20.10.2020",
"22.10.2020"
]
}
}
20.10.2020 09:00-09:55
20.10.2020 09:55-10:50
20.10.2020 10:50-11:45
20.10.2020 13:30-14:25
20.10.2020 14:25-15:20
20.10.2020 15:20-16:15
20.10.2020 16:15-17:10
22.10.2020 09:00-09:55
22.10.2020 09:55-10:50
22.10.2020 10:50-11:45
22.10.2020 13:30-14:25
22.10.2020 14:25-15:20
22.10.2020 15:20-16:15
22.10.2020 16:15-17:10
log.warn("Успешно создано 14 слота. Время из рабочего расписания свободно: 11:45-12:00, 17:10-18:00")
response.message[0]: "Успешно создано 14 слота. Время из рабочего расписания свободно: 11:45-12:00, 17:10-18:00"
status = StatusType.WARNING
200 OK
Тест кейс 2:
Рабочее расписание:
id: 2
name: "Бронь номера"
"11:00" - "11:00"
executor.workslot.duration = 1440
Вызов метода для выбранных дней 20.10.2020, 21.10.2020, 22.10.2020 должен создать следующие рабочие слоты:
{
"data": {
"workScheduleId": "2",
"workDateList": [
"20.10.2020",
"21.10.2020",
"22.10.2020"
]
}
}
20.10.2020 11:00 - 21.10.2020 11:00
21.10.2020 11:00 - 22.10.2020 11:00
22.10.2020 11:00 - 23.10.2020 11:00
log.info("Успешно создано 3 слота")
response.message[0]: "Успешно создано 3 слота"
status = StatusType.SUCCESSFUL
200 OK
Тест кейс 3:
Рабочее расписание:
id: 3
name: "Вечерняя короткая смена"
"18:00:00" - "20:00:00"
executor.workslot.duration = 130
Вызов метода для выбранных дней 20.10.2020, 21.10.2020, 22.10.2020 должен вернуть ошибку:
log.error("Слоты не могут быть созданы")
response.message[0]: "Слоты не могут быть созданы"
status = StatusType.ERROR
400 Bad Request
Примеры рабочих расписаний:
- Исполнитель создает рабочее расписание Work Shedule - "Основное расписание"
- В нем создает рабочие периоды Work Periods: "09:00" - "12:00", "13:30" - "18:00"
- Исполнитель может создать несколько расписаний с периодами:
"Основное расписание": "09:00" - "12:00", "13:30" - "18:00"
"Субботнее расписание": "09:00:00" - "14:00:00"
"Расписание предпраздничного дня": "09:00:00" - "13:00:00", "14:00:00" - "17:00:00"
- Исполнитель может выбрать "Основное расписание" и в календаре определенные дни (10.08.20, 11.08.20, 13.08.20, 14.08.20) -
REST API
Request:
POST {{rest-api-url}}/workschedule/api/v1/workslot/workschedule
Request:
{
"data": {
"workScheduleId": "1",
"workDateList": [
"2020-08-24",
"2020-08-25",
"2020-08-27",
"2020-08-28"
]
}
}
Response:
В ответе нужно вернуть список созданных рабочих слотов. Формат как в методе получения списка рабочих слотов.