Skip to content

Пакетное создание 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:

В ответе нужно вернуть список созданных рабочих слотов. Формат как в методе получения списка рабочих слотов.

Edited by Cheremnov Dmitriy