واجهة الملتقط
حركة الملتقط تذهب إلى واجهة الإدارة (http://localhost:5001) وليس الواجهة العامة.
دخول الموظف
| الطريقة | المسار | الجسم |
|---|---|---|
POST | /v1/auth/login | { email, password } |
GET | /v1/auth/me | المستخدم الحالي + roleKey |
POST | /v1/auth/refresh | { "refreshToken" } |
POST | /v1/auth/logout | رمز وصول Bearer |
POST /v1/auth/login
Content-Type: application/json
{ "email": "picker1@test.com", "password": "123" }عند النجاح يتضمن JSON user وaccessToken وrefreshToken وtokenType وexpiresIn (15 دقيقة). احفظ الزوج في SecureStore. أرسل Authorization: Bearer <accessToken> مع كل استدعاء تجهيز. عند 401 حدّث عبر { "refreshToken" }، خزّن الزوج الجديد، وأعد المحاولة مرة واحدة. وجّه الواجهة عندما results.user.roleKey === "picker".
بذور التطوير: picker1@test.com، picker2@test.com، كلمة المرور 123. يمنح الدور orders:read وorders:update.
إن وُجدت branchIds للمستخدم يُقيَّد الطابور بتلك الفروع.
سير العمل
confirmed --start--> picking --scan / unavailable / substitute--> readyاستطلع GET /v1/fulfillment/picker/orders (بلا WebSocket).
النقاط
كل المسارات على واجهة الإدارة. GET يتطلب orders:read. POST يتطلب orders:update.
| الطريقة | المسار | الجسم | الغرض |
|---|---|---|---|
GET | /v1/fulfillment/picker/orders | — | بطاقات الطابور |
GET | /v1/fulfillment/picker/orders/:orderId | — | الطلب الكامل + حالة الالتقاط |
POST | /v1/fulfillment/picker/orders/:orderId/start | — | الادعاء؛ الحالة → picking |
POST | /v1/fulfillment/picker/orders/:orderId/scan | { barcode } | مطابقة SKU أو key السطر |
POST | /v1/fulfillment/picker/orders/:orderId/unavailable | { lineKey } | الصنف غير على الرف |
POST | /v1/fulfillment/picker/orders/:orderId/substitute | { lineKey, productId, variantId? } | استبدال منتج |
POST | /v1/fulfillment/picker/orders/:orderId/ready | — | الإنهاء؛ يجب معالجة كل الأسطر |
بطاقة الطابور
يشمل results.data[] الحقول _id وorderNumber وstatus وfulfillmentMode وbranch وlineCount وexpress واختياري etaMinutes / deliverySlot والطوابع الزمنية.
مثال المسح
POST /v1/fulfillment/picker/orders/665f0c0c0c0c0c0c0c0c0c10/scan
Content-Type: application/json
Authorization: Bearer <accessToken>
{ "barcode": "6281000000001" }مطابقة الباركود تستخدم sku المتغير أو key سطر الطلب.
الجاهزية
يفشل POST .../ready حتى يُمسح كل سطر أو يُستبدل أو يُعلَّم غير متوفر. النجاح يطبّق تسويات المخزون ويضبط الحالة إلى ready.
تغلف استجابات الإجراءات عادة { message } مع statusMessage: "UPDATED". أعد جلب الطلب بعد كل POST.