arm_sorting
| Бизнес-шаг | API-метод | Service-слой (пример названия) |
|---|---|---|
| Начало сортировки | GET /sorting/searchPOST /sorting/{batch}/join | SortingSearchService + SortingDocService.start() |
| Выбор контейнеров через SORTER | POST /sorting/{batch}/enter-barcode | SorterBindingService.bindSorter() |
| Подтверждение временных контейнеров | POST /sorting/{batch}/confirm-temp-containers-prepared | TempContainerService.confirmPrepared() |
| Скан OTB / SKU / серийного номера | POST /sorting/{batch}/enter-barcodePOST /sorting/{batch}/enter-serial-number | SortingWorkflow.processBarcode() |
| Ввод партии / количества | POST /sorting/{batch}/enter-sku-batchPOST /sorting/{batch}/enter-quantity | SortingWorkflow.setBatch(), SortingWorkflow.setQty() |
| Назначить проверку | POST /sorting/{batch}/item-not-availablePOST /sorting/{batch}/upload-issue-photo | SortingIssueService.create() |
| Выход / отмена | POST /sorting/{batch}/leavePOST /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)
-
Старт сортировки
INIT→AWAITING_SORTER
Событие ON_JOIN -
Выбор контейнеров
-
Сценарий 1 (через SORTER):
AWAITING_SORTER→AWAITING_CONTAINER
Событие ON_ENTER_SORTER -
Сценарий 2 (временные контейнеры):
AWAITING_SORTER→AWAITING_CONTAINER
Событие ON_CONFIRM_TEMP_CONTAINERS_PREPARED
-
-
Скан контейнера
AWAITING_CONTAINER→AWAITING_SKU
Событие ON_ENTER_CONTAINER -
Скан SKU
AWAITING_SKU→AWAITING_CONTAINER
Событие ON_ENTER_SKU -
Ввод партии
AWAITING_SKU_BATCH→AWAITING_CONTAINER
Событие ON_ENTER_SKU_BATCH -
Ввод количества
AWAITING_QUANTITY→AWAITING_CONTAINER
Событие ON_ENTER_QUANTITY -
Скан серийного номера
AWAITING_SERIAL→AWAITING_CONTAINER
Событие ON_ENTER_SERIAL_NUMBER -
Просмотр неотсортированных
AWAITING_CONTAINER→REVIEW
Событие ON_REQUEST_REVIEW
обратно
REVIEW→AWAITING_CONTAINER
Событие ON_BACK_TO_SORT -
Назначение проверки
AWAITING_CONTAINER→AWAITING_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. Тестирование & отладка