Перейти к основному содержимому

arm_sorting

Бизнес-шагAPI-методService-слой (пример названия)
Начало сортировкиGET /sorting/search
POST /sorting/{batch}/join
SortingSearchService + SortingDocService.start()
Выбор контейнеров через SORTERPOST /sorting/{batch}/enter-barcodeSorterBindingService.bindSorter()
Подтверждение временных контейнеровPOST /sorting/{batch}/confirm-temp-containers-preparedTempContainerService.confirmPrepared()
Скан OTB / SKU / серийного номераPOST /sorting/{batch}/enter-barcode
POST /sorting/{batch}/enter-serial-number
SortingWorkflow.processBarcode()
Ввод партии / количестваPOST /sorting/{batch}/enter-sku-batch
POST /sorting/{batch}/enter-quantity
SortingWorkflow.setBatch(), SortingWorkflow.setQty()
Назначить проверкуPOST /sorting/{batch}/item-not-available
POST /sorting/{batch}/upload-issue-photo
SortingIssueService.create()
Выход / отменаPOST /sorting/{batch}/leave
POST /sorting/{batch}/cancel
SortingWorkflow.leave(), SortingWorkflow.cancelItem()

Руководство разработчика

1. Создание документа сортировки

  • DocManager: по аналогии с PickingDocManager.
  • Entity & Repository: SortingDoc, SortingDocEntityService + JPA-репозиторий.
  • DTO/Template: SortingDocumentDto, SortingItemDto, SortingEditTemplate, SortingListTemplate.

2. Кеширование промежуточных данных

  • Внутри SortingWorkflow понадобится хранить текущие сканированные штрихкоды, выбор контейнера и т. д.
  • Создать класс UnsavedSortingDocFactItem (аналог UnsavedPickingDocFactItem).

3. Машина состояний (StateMachine)

  • Старт сортировки
    INITAWAITING_SORTER
    Событие ON_JOIN

  • Выбор контейнеров

    • Сценарий 1 (через SORTER):
      AWAITING_SORTERAWAITING_CONTAINER
      Событие ON_ENTER_SORTER

    • Сценарий 2 (временные контейнеры):
      AWAITING_SORTERAWAITING_CONTAINER
      Событие ON_CONFIRM_TEMP_CONTAINERS_PREPARED

  • Скан контейнера
    AWAITING_CONTAINERAWAITING_SKU
    Событие ON_ENTER_CONTAINER

  • Скан SKU
    AWAITING_SKUAWAITING_CONTAINER
    Событие ON_ENTER_SKU

  • Ввод партии
    AWAITING_SKU_BATCHAWAITING_CONTAINER
    Событие ON_ENTER_SKU_BATCH

  • Ввод количества
    AWAITING_QUANTITYAWAITING_CONTAINER
    Событие ON_ENTER_QUANTITY

  • Скан серийного номера
    AWAITING_SERIALAWAITING_CONTAINER
    Событие ON_ENTER_SERIAL_NUMBER

  • Просмотр неотсортированных
    AWAITING_CONTAINERREVIEW
    Событие ON_REQUEST_REVIEW
    обратно
    REVIEWAWAITING_CONTAINER
    Событие ON_BACK_TO_SORT

  • Назначение проверки
    AWAITING_CONTAINERAWAITING_ISSUE_REASON
    Событие ON_ITEM_NOT_AVAILABLE
    далее в REVIEW по событиям:

    • ON_ENTER_ISSUE_REASON

    • ON_UPLOAD_ISSUE_PHOTO

  • Выход / отмена
    Из любого активного состояния → [ * ]
    События ON_LEAVE или ON_CANCEL

  • Смотри @dev_sorting_state_guide.md

  • По аналогии с PickingPieceStateMachineConfig:

    • Состояния: INIT, AWAITING_SORTER, AWAITING_CONTAINER, AWAITING_SKU, AWAITING_BATCH, AWAITING_QTY, AWAITING_SERIAL, REVIEW, END.
    • События: JOIN, ENTER_SORTER, ENTER_CONTAINER, ENTER_SKU, ENTER_SKU_BATCH, ENTER_QUANTITY, ENTER_SERIAL_NUMBER, ITEM_NOT_AVAILABLE, LEAVE, CANCEL.
    • Action/Guard:
      • action.joinAction() при JOIN;
      • action.processBarcodeAction() при ENTER_BARCODE;
      • action.enterBatchAction() и т.д.;
      • Рекомендуется использовать уже готовые утилиты из StateMachineFacade.

4. Контроллер

  • SortingController с базовым префиксом /sorting.
  • Методы согласно таблице API.
  • Все методы аннотировать @RetryIfOptimisticLock, @RequireAnyPrivilege, @Operation.

5. Миграции

  • Создать таблицу sorting_doc, sorting_doc_item.
  • Поля: id, batch_id, status, created_at; в item: ссылка на sorting_doc, sku_id, container_id, quantity, state, created_at.

6. Тестирование & отладка