## Порт приложения shop_job ## Используемые схемы данных: #### 1. job_data ``` { "_id": "6315990c0178dd8a83657b31", "id": "125_12165", "type": "ПОДТОВАРКА_ХАБ", "number": "125-S12165", "title": "Подтоварка из 125 в 111", "date": "2022-09-05T11:42:39.000Z", "from": "125", "to": "111", "store": "ТорговыйЗал", "comment": "Ежедневная подтоварка из 125 в 111 ", "user": { "id": "b3eb970a-06a6-11ed-a98f-fa163e191731", "title": "Линейцева В.В." }, "items": { "124610": { "id": "124610", "image": "https://media.saticogroup.com/media/marmalato/www/0/116242-0.jpg", "image2": "https://media.saticogroup.com/media/marmalato/www/1/101-045.jpg", "article": "101-045", "color": "ЧЕРНЫЙ-БЕЛЫЙ-СЕРЕБРО", "size": "XS/S", "title": "РЕМЕНЬ", "desc": "", "qty": 1, "codes": [ { "code": "124610", "limit": 1 } ] }, "132634": { "id": "132634", "image": "https://media.saticogroup.com/media/marmalato/www/0/128096-0.jpg", "image2": "https://media.saticogroup.com/media/marmalato/www/1/235-012.jpg", "article": "235-012", "color": "БЕЖЕВЫЙ", "size": "38", "title": "БОСОНОЖКИ", "desc": "", "qty": 1, "codes": [ { "code": "SGTN333", "limit": 1 }, { "code": "SGTN493", "limit": 1 }, { "code": "SGTN779", "limit": 1 }, { "code": "SGTN875", "limit": 1 } ] } } } ``` #### 2. job_state ```json { "job_id": "125_12165", "state": "НОВЫЙ", "current_pack_id": "125-S12165-1", "opened": "2022-09-05T02:36:59.000Z", "closed": null, "updated": "2025-05-23T09:26:37.773Z", "user": { "id": "b3eb970a-06a6-11ed-a98f-fa163e191731", "title": "Линейцева В.В." }, "version": 11, "auto_save": false, "packs": { "125-S12165-1": { "pack_id": "125-S12165-1", "items": { "124610": {}, "129439": { "129439": 1 }, "135213": { "135213": 1 }, ..., "135064,130194": { "135064": 1 }, "132859,135047": { "135047": 1 }, }, "state": "ЗАКРЫТА", "user": { "id": "b3eb970a-06a6-11ed-a98f-fa163e191731", "title": "Линейцева В.В." }, "opened": "2022-09-05T06:37:09.791Z", "item_updates": { "124610": "2022-09-05T14:32:35.594Z", "129439": "2022-09-05T14:33:20.922Z", "133480": "2022-09-05T06:45:07.390Z", "135193": "2022-09-05T06:41:27.346Z", ... "135202": "2022-09-05T06:42:00.226Z", "135213": "2022-09-05T06:42:28.544Z", "135064,130194": "2022-09-05T15:22:15.303Z", "132859,135047": "2022-09-05T15:22:59.674Z", "134396,132254": "2022-09-05T15:24:44.566Z", "134845,129456": "2022-09-05T15:25:27.555Z" }, "updated": "2022-09-05T15:34:35.856Z", "closed": "2022-09-05T15:34:35.856Z", "confirmed": "2022-09-05T02:49:43.000Z" }, "125-S12165-2": { "pack_id": "125-S12165-2", "items": {}, "state": "УДАЛЕНА", "user": { "id": "b3eb970a-06a6-11ed-a98f-fa163e191731", "title": "Линейцева В.В." }, "opened": "2022-09-05T15:28:40.345Z", "item_updates": { "124610": "2022-09-05T15:28:40.348Z" }, "updated": "2022-09-05T15:28:40.348Z" }, "125-S12165-3": { "pack_id": "125-S12165-3", "items": { "124610": { "124610": 1 }, "132029": { "132029": 1 }, "132435": { "SGFV243": 1 }, "132634": { "SGTN493": 1 } }, "state": "ОТКРЫТА", "user": { "id": "b3eb970a-06a6-11ed-a98f-fa163e191731", "title": "Линейцева В.В." }, "opened": "2025-05-23T05:46:57.990Z", "item_updates": { "124610": "2025-05-23T09:26:31.394Z", "132435": "2025-05-23T09:26:34.188Z", "132634": "2025-05-23T09:26:37.773Z" }, "updated": "2025-05-23T09:26:37.773Z" } }, "current_item_id": "124610" } ``` ## Текущие требования по ендпоинтам: ### getState > получение стейта #### GET /mshop/{dep}/shippicker/state **query-параметры:** ``` job_id: "job_id", ``` возврат: ```json { result: 1, job_id: integer, job_data: { ... }, job_state: { ... } } ``` ### saveState > Сохранение стейта целиком #### POST /mshop/{dep}/shippicker/state **query-параметры:** ``` job_id: "job_id", ``` тело: ```json { ...job_state } ``` ### saveItemCode > Сохранение выбранного кода для отгрузки #### POST /mshop/{dep}/shippicker/update_item, **query-параметры:** ``` job_id: "job_id", pack_id: "pack_id" ``` тело: ```json { id: item.id, code: code, qty: integer, date: date.now() } ``` > при удалении количество (qty) = 0 ### Частичные сохранения стейта #### saveCurrentPosition #### POST /mshop/{dep}/shippicker/state **query-параметры:** ``` job_id: "job_id", ``` тело: ```json { current_item_id: str current_pack_id: str } ``` #### toggleAutosave #### POST /mshop/{dep}/shippicker/state **query-параметры:** ``` job_id: "job_id", ``` тело: ```json { auto_save: bool } ``` #### savePackState ##### POST /mshop/{dep}/shippicker/pack_state **query-параметры:** ``` job_id: "job_id", pack_id: "pack_id" ``` тело: ```json { state: string (ОТКРЫТА, ЗАКРЫТА, УДАЛЕНА), date: now() } ``` ## Новые методы ### Список отгрузок (задач) #### GET /mshop/{dep}/shippicker/list **query-параметры** (опционально) ``` status=opened | closed (необязательный, default=opened) ``` возврат: ```json { result: true, message: "", tasks: [ { id: 'job_id', title: 'string', comment: 'коммент', closed: datetime, items_count: int, items_done: int, packs_count: int } ] } ``` ### Печать этикетки для коробки #### POST /mshop/{dep}/shippicker/print_label **query-params**: * job_id * pack_id **возврат**: ```json { result: true, message: "" } ``` ### Закрытие задания ##### POST /mshop/{dep}/shippicker/close_job **query-параметры:** ``` job_id: "job_id", ``` **возврат**: ```json { result: true, message: "" } ``` ### Открытие задания ##### POST /mshop/{dep}/shippicker/open_job **query-параметры:** ``` job_id: "job_id", ``` **возврат**: ```json { result: true, message: "" } ```