arm_sorting
Бизнес-шаг | API-метод | Service-слой (пример названия) |
---|---|---|
Начало сортировки | GET /sorting/search POST /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-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)
-
Старт сортировки
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. Тестирование & отладка